You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

248 lines
9.0 KiB
PHP

<?php
namespace App\Http\Controllers\API\Admin\YeWu;
use App\Http\Controllers\Controller;
use App\Services\TimeService;
use DateTime;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class PlanController extends Controller
{
//创建号源
public function CreatePlan()
{
$Info = request('CPlan');
$dateRange = request('dateRange');
$Info['dateRange'] = $dateRange;
$params = [
'model_id' => isset($Info['model_id']) ? $Info['model_id'] : null,
'dateRange' => isset($Info['dateRange']) ? $Info['dateRange'] : null,
'week' => isset($Info['week']) ? $Info['week'] : null,
'workday_create' => isset($Info['workday_create']) ? $Info['workday_create'] : null,
'holiday_create' => isset($Info['holiday_create']) ? $Info['holiday_create'] : null,
];
$requiredFields = ['model_id' => '模板id', 'dateRange' => '日期', 'week' => '星期', 'workday_create' => '工作日是否生成', 'holiday_create' => '节假日是否生成'];
// 判断是否为空
foreach ($requiredFields as $key => $field) {
if (!isset($params[$key]) || $params[$key] === null) {
return \Yz::echoError1('参数 ' . $field . ' 不能为空');
}
}
if (!isset($Info['dateRange']) or count($Info['dateRange']) <> 2) {
return \Yz::echoError1('起止时间格式错误');
}
$model = DB::table('plan_model as a')->where(['a.id' => $params['model_id'], 'a.is_del' => 0, 'a.status' => 1])->first();
if (!$model) return \Yz::echoError1('模板不可用');
// $planType = DB::table('plan_type as a')->where(['a.id' => $model->plan_type, 'a.is_del' => 0, 'a.status' => 1])->first();
// if (!$planType) return \Yz::echoError1('号源类型不可用');
//查询此时间段内是否有已经生成的号源
$cha = DB::table('plans')->whereBetween('date', $Info['dateRange'])->where(['is_del'=>0])->whereIn('status',[0,1])->get();
if (count($cha) > 0) {
return \Yz::return(false, '号源重复', ['list' => $cha]);
}
//获取模板的全部时间点
// $s=new TimeService();
// $timelist=$s->TimePointsArr($model->start_time,$model->end_time,$model->interval_time);
$timelist = DB::table('plan_model_time')->where(['model_id' => $params['model_id']])->get();
if (count($timelist) < 1) return \Yz::echoError1('模板时间点不能为空');
$startDate = new DateTime($Info['dateRange'][0]);
$endDate = new DateTime($Info['dateRange'][1]);
$currentDate = $startDate;
$success_count = 0;
while ($currentDate <= $endDate) {
//循环生成
$date_ymd = $currentDate->format('Y-m-d');
//查询这一天已经占用的号源
$usedPlans= DB::table('plans')->where(['date'=>$date_ymd,'status'=>2])->get();
//判断节假日是否生成
$s_day = DB::table('plan_holiday')->select('*', 'type as tp')->where(['date' => $date_ymd])->first();
if (!!$s_day) {
if ($s_day->tp == 1 and $params['workday_create'] === 0) {
$currentDate->modify('+1 day');
continue;
}
if ($s_day->tp == 2 and $params['holiday_create'] === 0) {
$currentDate->modify('+1 day');
continue;
}
}
//获取星期几 星期1=1 星期日=7
$dayOfWeek = $currentDate->format('N');
//如果星期匹配上了
if (in_array($dayOfWeek, $params['week'])) {
foreach ($timelist as $key => $time) {
$planType=null;
if(isset( $time->plan_type_id)){
$planType = DB::table('plan_type as a')->where(['a.id' => $time->plan_type_id, 'a.is_del' => 0, 'a.status' => 1])->first();
if (!$planType) return \Yz::echoError1('号源类型不可用');
}
$cleanTime = implode('', explode(':', $time->time)); // 去除冒号的时间字符串
$tiaoguo=false;
foreach ($usedPlans as $usekey => $usedPlan) { //如果有占用的号源则跳过
if($usedPlan->date==$date_ymd and $usedPlan->time==$time->time){
$tiaoguo=true;
break;
}
}
if($tiaoguo) continue;
$data = [
'model_id' => $model->id,
'date' => $date_ymd,
'week' => $dayOfWeek,
'time' => $time->time,
'type' => $time->type,
'plan_number' => substr($cleanTime, 0, 4),
'is_vip' => empty($planType)?null: $planType->is_vip,
'use_type' => empty($planType)?null:$planType->use_type,
'sex' => empty($planType)?null:$planType->sex,
'checkup_type_id' => empty($planType)?null:$planType->checkup_type_id,
'amount_limit1' =>empty($planType)?null: $planType->amount_limit1,
'amount_limit2' =>empty($planType)?null: $planType->amount_limit2,
'hospital_id' => $model->hospital_id,
'status' => 1,
'is_del' => 0
];
$i = DB::table('plans')->insert($data);
if ($i) {
$success_count++;
}
}
}
// 日期加一天
$currentDate->modify('+1 day');
}
if ($success_count > 0) {
return \Yz::Return(true, '', ['success_count' => $success_count]);
} else {
return \Yz::echoError1('没有计划被创建');
}
}
public function GetList()
{
$page = request('page');
$pageSize = request('pageSize');
$searchInfo = request('searchInfo');
$list = DB::table('plans as a')
// ->leftJoin('plan_type as b','a.plan_type','=','b.id')
// ->select('a.*','b.name as plan_type_name')
->where(['a.is_del' => 0]);
if (!isset($searchInfo['date'])) {
$searchInfo['date'] = date('Y-m-d');
}
$list = $list->where(['a.date' => $searchInfo['date']]);
$count = $list->count();
$list = $list->orderBy('a.id', 'asc')->get();
return \Yz::Return(true, '查询完成', ['list' => $list, 'count' => $count, 'date' => $searchInfo['date']]);
}
public function GetDetail()
{
$id = request('id');
$info = DB::table('plans')->where(['id' => $id,'is_del'=>0])->first();
if (!!$info) {
if(empty($info->checkup_type_id)){
$info->checkup_type_id='[]';
}
$info->checkup_type_id = json_decode($info->checkup_type_id, true);
return \Yz::Return(true, '查询完成', ['info' => $info]);
} else {
return \Yz::echoError1('查询失败');
}
}
//更新保存
public function Save()
{
$info = request('info');
if (isset($info['id'])) {
$info['checkup_type_id'] = isset($info['checkup_type_id']) ? json_encode($info['checkup_type_id']) : null;
$u = DB::table('plans')->where(['id' => $info['id']])->update([
'is_vip' => $info['is_vip'],
'use_type' => $info['use_type'],
'sex' => $info['sex'],
'checkup_type_id' => $info['checkup_type_id'],
'amount_limit1' => $info['amount_limit1'],
'amount_limit2' => $info['amount_limit2'],
'status' => $info['status'],
]);
if ($u) {
return \Yz::Return(true, '保存成功', []);
} else {
return \Yz::echoError1('操作失败');
}
}
}
//批量更新号源类型
public function BatchUpdatePlanType(){
$ids = request('ids');
$type = request('type');
$info = request('info');
$cha =DB::table('plans')->whereIn('id', $ids)->where(['status'=>2])->get();
if(count($cha) >0){
return \Yz::echoError1('有号源被占用,不能执行此操作');
}
if($type==0){
$data=[
'is_vip'=>null,
'use_type'=>null,
'sex'=>null,
'checkup_type_id'=>[],
'amount_limit1'=>null,
'amount_limit2'=>null,
'type'=>0,
];
}
if($type==1){
if(empty($info['checkup_type_id'])) return \Yz::echoError1('体检类型不能为空');
if(!isset($info['is_vip'])) return \Yz::echoError1('是否vip不能为空');
if(!isset($info['use_type'])) return \Yz::echoError1('团检/个检不能为空');
if(!isset($info['sex'])) return \Yz::echoError1('性别不能为空');
$data=[
'is_vip'=>$info['is_vip'],
'use_type'=>$info['use_type'],
'sex'=>$info['sex'],
'checkup_type_id'=>$info['checkup_type_id'],
'amount_limit1'=>isset($info['amount_limit1'])?$info['amount_limit1']:0,
'amount_limit2'=>isset($info['amount_limit2'])?$info['amount_limit2']:0,
'type'=>1,
];
}
$u=DB::table('plans')->whereIn('id', $ids)->update($data);
if ($u){
return \Yz::Return(true, '操作成功', []);
}else{
return \Yz::echoError1('操作失败');
}
}
public function Del()
{
$ids = request('ids');
$dates = request('dates');
if(empty($ids) and empty($dates)) return \Yz::echoError1("条件不完整");
$del=DB::table('plans');
if(!empty($ids)){
$del=$del ->whereIn('id', $ids);
}
if(isset($dates) and !empty($dates)){
$del=$del->whereIn('date',$dates);
}
$del=$del->whereIn('status',[0,1])->update(['is_del'=>1]);
if($del){
return \Yz::Return(true, '操作成功', []);
}else{
return \Yz::echoError1('操作失败');
}
}
}