Explorar o código

周排班逻辑优化

Swdz-WangHaiJun %!s(int64=4) %!d(string=hai) anos
pai
achega
cda09af650
Modificáronse 1 ficheiros con 23 adicións e 16 borrados
  1. 23 16
      app/Community/Controllers/ApiController.php

+ 23 - 16
app/Community/Controllers/ApiController.php

xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd
@@ -305,7 +305,7 @@ class ApiController extends Controller
             }
         } else {
             $docter_id = 0;
-            for ($i=0;$i<6;$i++){
+            for ($i=1;$i<=7;$i++){
                 for($j=0;$j<=2;$j++){
                     $is_self_have = WeekSchedule::where(['docter_id'=>$docter_id,'schedule_type'=>$type,'organization_id'=>$org_id,'week'=>$i+1])->count();
                     if($is_self_have){
@@ -340,18 +340,19 @@ class ApiController extends Controller
             $docter_setting = DocterSetting::where(['docter_id'=>$docter_id,'org_id'=>$org_id])->first();
         } else {
             $docter_setting = OrganizationSettings::where(['org_id'=>$org_id])->first();
+            $docter_id = 0;
         }
         $serviceNum = $docter_setting->service_num;
 
-
         $times = [];
         if(!empty($docter_setting)){
+            echo $docter_id;
             $time_period = object_array(json_decode($docter_setting->service_time));
-            $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[1]['amStartTime']),intval($time_period[1]['amEndTime'])])->pluck('id')->toArray();
-            $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[2]['pmStartTime']),intval($time_period[2]['pmEndTime'])])->pluck('id')->toArray();
-            $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[3]['nightStartTime']),intval($time_period[3]['nightEndTime'])])->pluck('id')->toArray();
+            $times[] = TimePeriod::where(['docter_id'=>$docter_id,'org_id'=>$org_id])->whereBetween('end_time_period',[intval($time_period[1]['amStartTime']),intval($time_period[1]['amEndTime'])])->pluck('id')->toArray();
+            $times[] = TimePeriod::where(['docter_id'=>$docter_id,'org_id'=>$org_id])->whereBetween('end_time_period',[intval($time_period[2]['pmStartTime']),intval($time_period[2]['pmEndTime'])])->pluck('id')->toArray();
+            $times[] = TimePeriod::where(['docter_id'=>$docter_id,'org_id'=>$org_id])->whereBetween('end_time_period',[intval($time_period[3]['nightStartTime']),intval($time_period[3]['nightEndTime'])])->pluck('id')->toArray();
         }
-
+        echo '時間段'.'<br>';
         if(count($times) < 3){
             return apiReturn('603','请配置时间段');
         }
@@ -445,20 +446,20 @@ class ApiController extends Controller
             if (!$scheduleIsHave)  Schedule::insert($scheduleData);
         }
 
+        echo '医生id '.$docterId.' 机构id '.$orgId . 'times ';
         $schedule = Schedule::where(['docter_id'=>$docterId,'organization_id'=>$orgId])->where('schedule_date','>=',date('Y-m-d',time()))
             ->distinct('schedule_date')->pluck('schedule_date','id')->toArray();
         if($docterId == 0){
             $schedule = Schedule::where(['docter_id'=>0,'organization_id'=>$orgId])->where('schedule_date','>=',date('Y-m-d',time()))
                 ->distinct('schedule_date')->pluck('schedule_date','id')->toArray();
         }
-
         for($tType = 1; $tType<=3 ; $tType++){
             foreach ($schedule as $id => $date) {
                 $week = intval(date('N', strtotime($date)));
                 $real_id = WeekSchedule::where(['docter_id'=>$docterId,'organization_id'=>$orgId,'week'=>$week,'type'=>$tType])->first();
-
                 if (!empty($real_id)) {
                     foreach ($timePeriods[$tType-1] as $idt) {
+                        dump($timePeriods[$tType-1]);
                         if($docterId != 0){//门诊
                             $s_t = [
                                 'docter_id' => $docterId,
@@ -475,18 +476,18 @@ class ApiController extends Controller
 
                         } else {
                             $s_t = [
-                                'docter_id' => 0,
+                                'docter_id' =>0,
                                 'organization_id' => $orgId,
                                 'type' => $tType,
                                 'schedule_date' => $date,
                                 'schedule_id' => $id,
                                 'time_period_id' => $idt
                             ];
-
                             $scheduleIsHave = SchedulePeriod::where($s_t)->count();
                             $s_t['order_num'] = $serviceNum;
                             if (!$scheduleIsHave) SchedulePeriod::insert($s_t);
                         }
+
                     }
                 }
             }
@@ -518,7 +519,8 @@ class ApiController extends Controller
                 ->whereBetween('schedule_date',[$start_date,$end_date])->pluck('schedule_date','id')->toArray();
             $serviceConfig = object_array(json_decode($settingConfig['service_time']));
         } else {
-            $schedule_data = Schedule::where(['docter_id'=>0,'organization_id'=>$org_id])->
+            $docter_id = 0;
+            $schedule_data = Schedule::where(['docter_id'=>$docter_id,'organization_id'=>$org_id])->
             whereBetween('schedule_date',[$start_date,$end_date])->pluck('schedule_date','id')->toArray();
             $serviceConfig = object_array(json_decode($settingConfig['service_time']));
         }
@@ -598,9 +600,8 @@ class ApiController extends Controller
                     'day'=>$scheduleDate
                 ];
             } else {
-                $today = SchedulePeriod::where(['docter_id'=>$docter_id,'schedule_date'=>$scheduleDate])->where('organization_id','!=',0)->distinct('organization_id')
+                $today = SchedulePeriod::where(['docter_id'=>$docter_id,'schedule_date'=>$scheduleDate])->where('organization_id',$org_id)->distinct('organization_id')
                     ->distinct('type')->get(['organization_id','type'])->GroupBy('type')->toArray();
-
                 if(empty($today)){
                     $scheduleList[$i-1] = [
                         'schedulelingList'=>$baseData,
@@ -609,16 +610,18 @@ class ApiController extends Controller
                         'day'=>$scheduleDate
                     ];
                 } else {
+
                     foreach ($today as $type => $orginfo){
                         $orgids = array_column($orginfo,'organization_id');
                         $idSum = array_sum($orgids);
-                        if($org_id == $idSum) $newBase[$type]['status'] = true;
-                        if($org_id != $idSum) $newBase[$type]['status'] = 'other';
+                        if($org_id == $idSum) $newBase[$type-1]['status'] = true;
+                        if($org_id != $idSum) $newBase[$type-1]['status'] = 'other';
                     }
                 }
                 //覆盖自定义排班
                 $self = SelfSchedule::where(['docter_id'=>$docter_id,'schedule_date'=>$scheduleDate,'organization_id'=>$org_id])->get(['type'])->GroupBy('type')->toArray();
                 if(!empty($self)){
+
                     foreach($self as $k=>$sf){
                         $newBase[$k-1]['status'] = true;
                     }
@@ -832,7 +835,7 @@ class ApiController extends Controller
 
                 if($type == 1){
                     $time_periods = TimePeriod::where(['org_id' => $org_id, 'docter_id' => $docter_id, 'type' => $tType])->pluck('id')->toArray();
-                    $self_schedule = SelfSchedule::where(['docter_id' => $docter_id, 'schedule_type' => $type, 'organization_id'=>0,'type' =>1])->distinct('type')
+                    $self_schedule = SelfSchedule::where(['docter_id' => $docter_id, 'schedule_type' => $type, 'organization_id'=>$org_id,'type' =>$tType])->distinct('type')
                         ->orderBy('schedule_date')->get(['schedule_date', 'type', 'week'])->toArray();
                     $schedule = Schedule::where(['docter_id' => $docter_id, 'organization_id'=>0])->pluck('schedule_date', 'id')->toArray();
                     $week_schedule = WeekSchedule::where(['docter_id' => $docter_id, 'type' => $tType,'schedule_type'=>$type])
@@ -966,6 +969,8 @@ class ApiController extends Controller
         $data['name'] = $name;
         $data['org_id'] = $org_id;
         $data['list'] = $list;
+        $data['docter_type'] = 2;
+
 //
 //        if(!empty($docter)){
 //            if($docter->type == 1){
@@ -1113,6 +1118,8 @@ class ApiController extends Controller
     public static function makeSelfScheeule($docterId,$orgId,$scheduleType,$timeType,$timesPeriods,$selfSchedule){
 
         $date = date('Y-m-d',time());
+//        dump($selfSchedule);
+//        dump($timesPeriods);
         //删除自己排班数据
         SelfSchedule::where(['type'=>$timeType,'docter_id'=>$docterId,'organization_id'=>$orgId,'schedule_type'=>$scheduleType])->where('schedule_date','>',$date)->delete();
         foreach ($selfSchedule as $val) {