فهرست منبع

天排班优化

Swdz-WangHaiJun 4 سال پیش
والد
کامیت
601ad7db29
2فایلهای تغییر یافته به همراه222 افزوده شده و 11 حذف شده
  1. 221 11
      app/Community/Controllers/ApiController.php
  2. 1 0
      app/Community/routes.php

+ 221 - 11
app/Community/Controllers/ApiController.php

xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd
@@ -338,7 +338,6 @@ class ApiController extends Controller
         }
 
 
-
         $time = [];
         if(!empty($docter_setting)){
             $time_period = object_array(json_decode($docter_setting->service_time));
@@ -601,6 +600,11 @@ class ApiController extends Controller
                 if($type == 1){
                     $today = SchedulePeriod::where(['docter_id'=>$docter_id,'schedule_date'=>$scheduleDate])->where('organization_id','!=',0)->distinct('organization_id')
                         ->distinct('type')->get(['organization_id','type'])->GroupBy('type')->toArray();
+                    $self = SelfSchedule::where(['schedule_date'=>$scheduleDate,'docter_id'=>$docter_id,])->where('organization_id','!=',0)->pluck('type','organization_id')->toArray();
+//                    //检查排班详情
+//                    self::checkDaySchedule($date,$type,$docter_id,$org_id);
+//                    //检查自己排班
+//                    self::checkSelfDaySchedule($date,$type,$docter_id,$org_id);
 
                     if(empty($today)){
                         $scheduleList[] = [
@@ -615,6 +619,11 @@ class ApiController extends Controller
                             $idSum = array_sum($orgids);
                             if($org_id == $idSum) $baseData[$type]['status'] = true;
                             if($org_id != $idSum) $baseData[$type]['status'] = 'other';
+                            if(in_array($type,$self))
+                                foreach($self as $key=>$org){
+                                    $baseData[$type]['status'] = true;
+                                    if($org != $org_id) $baseData[$type]['status'] = 'other';
+                                }
                         }
                         $scheduleList[] = [
                             'schedulelingList'=>$baseData,
@@ -623,8 +632,31 @@ class ApiController extends Controller
                             'day'=>$scheduleDate
                         ];
                     }
+                } else {
+                    $today = SchedulePeriod::where(['docter_id'=>$docter_id,'schedule_date'=>$scheduleDate])->where('organization_id','!=',0)->distinct('organization_id')
+                        ->distinct('type')->get(['organization_id','type'])->GroupBy('type')->toArray();
 
-
+                    if(empty($today)){
+                        $scheduleList[] = [
+                            'schedulelingList'=>$baseData,
+                            'date'=>$scheduleDate,
+                            'week'=>$week,
+                            'day'=>$scheduleDate
+                        ];
+                    } else {
+                        foreach ($today as $type => $orginfo){
+                            $orgids = array_column($orginfo,'organization_id');
+                            $idSum = array_sum($orgids);
+                            if($org_id == $idSum) $baseData[$type]['status'] = true;
+                            if($org_id != $idSum) $baseData[$type]['status'] = 'other';
+                        }
+                        $scheduleList[] = [
+                            'schedulelingList'=>$baseData,
+                            'date'=>$scheduleDate,
+                            'week'=>$week,
+                            'day'=>$scheduleDate
+                        ];
+                    }
                 }
             }
 ////            if(empty( $schedule_data[$scheduleDate])) continue;
@@ -759,9 +791,6 @@ class ApiController extends Controller
             $setting = OrganizationSettings::where(['org_id'=>$org_id])->first();
         }
 
-        if(empty($setting)){
-
-        }
         $self_config = object_array(json_decode($setting['service_time']));
         //改变时间段
         $changeTimer = [];
@@ -794,7 +823,6 @@ class ApiController extends Controller
         }
 
         //添加时间段
-
         $countArr = [
             1=>$configData['amNum'],
             2=>$configData['pmNum'],
@@ -806,7 +834,6 @@ class ApiController extends Controller
             2=>['count'=>$configData['pmNum'],'start_time'=>$configData['pmStartTime'],'end_time'=>$configData['pmEndTime']],
             3=>['count'=>$configData['nightNum'],'start_time'=>$configData['nightStartTime'],'end_time'=>$configData['nightEndTime']]
         ];
-        $changeTimer = [1,2,3];
         //todo 零时关闭排班功能,后续需要解除
         if($changeSeviceTime || !empty($changeTimer)){
 
@@ -894,10 +921,12 @@ class ApiController extends Controller
         } else {
             unset($setting['docter_id']);
             $setting['org_id'] = $org_id;
-            $is_have = OrganizationSettings::where(['id'=>$docter_id])->value('id');
+            $is_have = OrganizationSettings::where(['org_id'=>$org_id])->value('id');
             if($is_have){
+                echo '11111';
                 OrganizationSettings::where(['org_id'=>$org_id])->update($setting);
             } else {
+                echo 222;
                 OrganizationSettings::insert($setting);
             }
         }
@@ -910,6 +939,7 @@ class ApiController extends Controller
         $id = intval(request('id'));
         $isDocter = CdmsUsers::where('docter_id',$id)->first();
         $isOrg = CdmsUsers::where('org_id',$id)->first();
+
         $org_id = null;
         $role = 1;
 
@@ -961,7 +991,7 @@ class ApiController extends Controller
             if($docter->type == 1){
                 $data['list'] = $lists;
             } else {
-                $organization = Organization::where(['org_id'=>$org_id])->get(['id','name']);
+                $organization = Organization::where(['id'=>$org_id])->first();
                 $data['list'] = ['value'=>$organization->id,'label'=>$organization->name];
             }
         }
@@ -1101,9 +1131,8 @@ class ApiController extends Controller
         return true;
     }
 
-
     //自己排班
-    public function makeSelfScheeule($docterId,$orgId,$type,$timesPeriods,$selfSchedule){
+    public static function makeSelfScheeule($docterId,$orgId,$type,$timesPeriods,$selfSchedule){
         if($type == 1){
             $orgId = 0;
             SelfSchedule::where(['type'=>1,'docter_id'=>$docterId,'organization_id'=>0,'schedule_type'=>$type])->whereIn('time_period_id',$timesPeriods)->delete();
@@ -1125,4 +1154,185 @@ class ApiController extends Controller
             }
         }
     }
+
+
+    public function setDaySchedule()
+    {
+
+        //todo 上线取消默认值
+        $schdule_data = request('schedule_data');
+        $docter_id = intval(request('docter_id'));
+        $schedule_type = request('type');
+        $org_id = intval(request('org_id'));
+        $date = request('date');
+        //判断排班类型
+        $schedule_type == 1?$type=2:$type=1;
+
+        if(empty($schdule_data) || empty($docter_id) || !isset($org_id) || empty($type)){
+            return apiReturn(601,'缺少必要参数');
+        }
+        //获取医生排班配置
+        $schedule = object_array(json_decode($schdule_data));
+        //默认为门诊排班医生配置
+        $setting = DocterSetting::where(['docter_id'=>$docter_id])->first();
+        //获取社区排班设置
+        if($type == 1) $setting = OrganizationSettings::where(['org_id'=>$org_id])->first();
+
+        $schdule_data = [
+            ['status'=>true,'type'=>1,'start'=>"09:00",'end'=>'11:30','date'=>15,'week'=>1],
+            ['status'=>true,'type'=>2,'start'=>'13:30','end'=>'16:30','date'=>15,'week'=>1],
+            ['status'=>false,'type'=>3,'start'=>'19:30','end'=>'21:00','date'=>15,'week'=>1],
+        ];
+
+        DB::beginTransaction();
+        try {
+            foreach ($schdule_data as $t=>$v){
+
+                $today = date('Y-m-d',(strtotime($date) + (intval($v['date'])-1) *86400) );
+                $week = $schdule_data[0]['week'];
+                $num_date = intval(str_replace('-','',$today));
+
+                if($v['status'] == true){
+                    $sche_data = ['organization_id'=>$org_id,'schedule_date'=>$today,'schedule_day'=>$num_date];
+
+                    //判断是否有排班信息
+                    $s_id = Schedule::where($sche_data)->value('id');
+                    if(!$s_id){
+                        $s_id = Schedule::insertGetId($sche_data);
+                    }
+
+                    //获取时间段
+                    $timeperiods = TimePeriod::where(['docter_id'=>intval($docter_id),'org_id'=>intval($org_id),'type'=>intval($v['type'])])->pluck('id')->toArray();
+                    if($type == 2){
+                        $timeperiods = TimePeriod::where(['docter_id'=>intval($docter_id),'org_id'=>0,'type'=>intval($v['type'])])->pluck('id')->toArray();
+                    }
+
+                    if(empty($timeperiods)){
+                        self::setTimeperiod($type,$docter_id,$org_id);
+                    }
+                    foreach ($timeperiods as $id){
+                        $data = [
+                            'organization_id'=>$org_id,
+                            'time_period_id'=>$id,
+                            'week'=>$week,
+                            'type'=>$v['type'],
+                            'schedule_date'=>$today,
+                            'docter_id'=>$docter_id,
+                        ];
+
+                        //检查是否已经有数据
+                        $self_count = SelfSchedule::where($data)->value('id');
+                        if($self_count) continue;
+                        SelfSchedule::insert($data);
+                    }
+
+                } else if($v['status'] == false){
+                    $data = [
+                        'organization_id'=>$org_id,
+                        'week'=>$week,
+                        'type'=>$v['type'],
+                        'docter_id'=>$docter_id,
+                        'schedule_date'=>$today
+                    ];
+                    //判断是否有自己的排班
+                    $self_count = SelfSchedule::where($data)->count();
+                    if($self_count) SelfSchedule::where($data)->delete();
+
+                    //检查是否是有周排班
+                    $week_schedule = WeekSchedule::where(['week'=>$week,'docter_id'=>$docter_id,'type'=>intval($v['type']),'organization_id'=>$org_id])->count();
+                    if(!$week_schedule) continue;
+
+                    //获取排班id
+                    $s_id = Schedule::where(['schedule_date'=>$today,'docter_id'=>$org_id])->value('id');
+                    if(!$s_id) continue;
+
+                    //删除排班和详细排班数据
+                    Schedule::where(['id'=>$s_id])->delete();
+                    TimePeriod::where(['docter_id'=>$docter_id,'org_id'=>$org_id,'type'=>$t,'schedule_id'=>$s_id])->delete();
+                }
+            }
+            DB::commit();
+        } catch (\Exception $e){
+            dd($e->getMessage());
+            DB::rollBack();
+            return apiReturn(603,'操作失败');
+        }
+        return apiReturn(200,'操作成功');
+    }
+
+    public static function setTimeperiod($type,$docterId,$orgId)
+    {
+        $setting = self::getSetting($type,$docterId,$orgId);
+        if(empty($setting)) {
+            self::setDefultSetting($type,$docterId,$orgId);
+            $setting = self::getSetting($type,$docterId,$orgId);
+        }
+
+
+        $serviceConfig = object_array(json_decode($setting->service_time));
+
+        dd($type);
+        dd($serviceConfig);
+    }
+
+    public static  function setDefultSetting($type,$docterId,$orgId)
+    {
+
+        $configData = [
+            'amEndTime'=>"11:30",
+            'amNum'=>5,
+            'amStartTime'=>"09:00",
+            'nightEndTime'=>"20:30",
+            'nightStartTime'=>"19:00",
+            'nightNum'=>3,
+            'pmEndTime'=>"16:00",
+            'pmNum'=>5,
+            'pmStartTime'=>"13:30",
+            'showDayNumber'=>7,
+            'serviceNum'=>2,
+            'status'=>false,
+            'timeSpan'=>30,
+        ];
+
+
+
+        $setting = [
+            'type'=>$type,
+            'org_id'=>$orgId,
+            'status'=>$configData['status'],
+            'show_days'=>$configData['showDayNumber'],
+            'service_num'=>$configData['serviceNum'],
+            'service_times'=>$configData['timeSpan'],
+            'service_time'=>json_encode($configData)
+        ];
+
+
+        if(type == 1){
+            $is_have = DocterSetting::where(['docter_id'=>$docterId,'org_id'=>$orgId])->count();
+            if(!$is_have){
+                DocterSetting::insert($setting);
+            } else {
+                $setting['docter_id'] = $docterId;
+                DocterSetting::where(['docter_id'=>$docterId,'org_id'=>$orgId])->update($setting);
+            }
+            return true;
+        }
+
+        $is_have = OrganizationSettings::where(['org_id'=>$orgId])->count();
+        if(!$is_have){
+            OrganizationSettings::insert($setting);
+        } else {
+            $setting['docter_id'] = $docterId;
+            OrganizationSettings::where(['org_id'=>$orgId])->update($setting);
+        }
+        return true;
+    }
+
+    public static function getSetting($type,$docterId,$orgId){
+        //默认为门诊排班医生配置
+        $setting = DocterSetting::where(['docter_id'=>$docterId,'org_id'=>$orgId])->first();
+        //获取社区排班设置
+        if($type == 1) $setting = OrganizationSettings::where(['org_id'=>$orgId])->first();
+        return $setting;
+    }
 }

+ 1 - 0
app/Community/routes.php

xqd
@@ -48,6 +48,7 @@ Route::post('/api/update_order', 'ApiController@updateOrder');
 //新医生排班路由
 Route::get('/api/week_schedule', 'ApiController@getWeekSchedule');
 Route::get('/api/set_week_schedule', 'ApiController@setWeekSchedule');
+Route::get('/api/set_day_schedule', 'ApiController@setDaySchedule');
 Route::get('/api/get_week_chedule', 'ApiController@getWeekSchedule');
 Route::get('/api/set_month_schedule', 'ApiController@setmonthScheduel');
 Route::get('/api/get_month_schedule', 'ApiController@get_month_schedule');