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('操作失败'); } } }