Browse Source

排班页面

Swdz-WangHaiJun 4 years ago
parent
commit
d1a4675339
35 changed files with 1092 additions and 371 deletions
  1. 750 171
      app/Community/Controllers/ApiController.php
  2. 4 4
      app/Community/Controllers/ScheduleController.php
  3. 6 2
      app/Community/routes.php
  4. 330 192
      app/Http/Controllers/ScheDuleController.php
  5. 0 1
      public/cdms/static/css/app.999c8fb4.css
  6. 1 0
      public/cdms/static/css/app.b0dfcc84.css
  7. 0 0
      public/cdms/static/js/app.215f8c27.js
  8. 0 0
      public/cdms/static/js/app.215f8c27.js.map
  9. 0 0
      public/cdms/static/js/app.306dc37f.js
  10. 0 0
      public/cdms/static/js/app.306dc37f.js.map
  11. 0 0
      public/cdms/static/js/app.426d1eed.js
  12. 0 0
      public/cdms/static/js/app.426d1eed.js.map
  13. 0 0
      public/cdms/static/js/app.545de3dc.js
  14. 0 0
      public/cdms/static/js/app.545de3dc.js.map
  15. 0 0
      public/cdms/static/js/app.76f2e405.js
  16. 0 0
      public/cdms/static/js/app.76f2e405.js.map
  17. 0 0
      public/cdms/static/js/app.81757419.js
  18. 0 0
      public/cdms/static/js/app.81757419.js.map
  19. 0 0
      public/cdms/static/js/app.8628ae9c.js
  20. 0 0
      public/cdms/static/js/app.8628ae9c.js.map
  21. 0 0
      public/cdms/static/js/app.c37981e4.js
  22. 0 0
      public/cdms/static/js/app.c37981e4.js.map
  23. 0 0
      public/cdms/static/js/app.e305e70b.js
  24. 0 0
      public/cdms/static/js/app.e305e70b.js.map
  25. 0 0
      public/cdms/static/js/app.e96ab16e.js
  26. 0 0
      public/cdms/static/js/app.e96ab16e.js.map
  27. 0 0
      public/cdms/static/js/app.f1ec90df.js
  28. 0 0
      public/cdms/static/js/app.f1ec90df.js.map
  29. 0 0
      public/cdms/static/js/chunk-vendors.6c9b2a24.js
  30. 0 0
      public/cdms/static/js/chunk-vendors.6c9b2a24.js.map
  31. 0 0
      public/cdms/static/js/chunk-vendors.e71f87b8.js
  32. 0 0
      public/cdms/static/js/chunk-vendors.e71f87b8.js.map
  33. 0 0
      public/cdms/static/js/chunk-vendors.feab90c7.js
  34. 0 0
      public/cdms/static/js/chunk-vendors.feab90c7.js.map
  35. 1 1
      resources/views/cdms/schedule.blade.php

+ 750 - 171
app/Community/Controllers/ApiController.php

xqd xqd xqd xqd xqd xqd
@@ -12,6 +12,7 @@ use App\Models\DocterSetting;
 use App\Models\Doctertimes;
 use App\Models\Order;
 use App\Models\Organization;
+use App\Models\OrganizationSettings;
 use App\Models\PatientRemark;
 use App\Models\Schedule;
 use App\Models\SchedulePeriod;
@@ -467,45 +468,45 @@ class ApiController extends Controller
     }
 
     //获取用户信息
-    public function getScheduleInfo()
-    {
-
-        $user = Admin::user();
-        $org_id = $user->org_id;
-        $docter_id = $user->docter_id;
-
-        $is_docter = CdmsUsers::where('docter_id',$docter_id)->where('docter_id','!=','')->first();
-        if(empty($org_id) && empty($docter_id)){
-            return json_encode(['code'=>601,'msg'=>'缺少必要参数','data'=>'']);
-        }
-        $role = 1;
-        if($is_docter){
-            $role = 2;
-        }
-        $lists =[];
-        if($role == 1){
-            $ids = DocterOrganization::where(['organization_id'=>$org_id])->pluck('docter_id')->toArray();
-            $list = Docter::whereIn('id',$ids)->where('is_then',1)->get(['id','name']);
-            foreach ($list as $val){
-                $lists[] = ['value'=>$val->id,'label'=>$val->name];
-            }
-            $name = Organization::where('id',$org_id)->value('name');
-            $user_id = $org_id;
-        } else {
-            $ids = DocterOrganization::where(['docter_id'=>$docter_id])->pluck('organization_id');
-            $list = Organization::whereIn('id',$ids)->get(['id','name']);
-            foreach ($list as $val){
-                $lists[] = ['value'=>$val->id,'label'=>$val->name];
-            }
-            $name = Docter::where('id',$docter_id)->value('name');
-            $user_id = $docter_id;
-        }
-        $data['user_id'] = $user_id;
-        $data['name'] = $name;
-        $data['role'] = $role;
-        $data['list'] = $lists;
-        return (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
-    }
+//    public function getScheduleInfo()
+//    {
+//
+//        $user = Admin::user();
+//        $org_id = $user->org_id;
+//        $docter_id = $user->docter_id;
+//
+//        $is_docter = CdmsUsers::where('docter_id',$docter_id)->where('docter_id','!=','')->first();
+//        if(empty($org_id) && empty($docter_id)){
+//            return json_encode(['code'=>601,'msg'=>'缺少必要参数','data'=>'']);
+//        }
+//        $role = 1;
+//        if($is_docter){
+//            $role = 2;
+//        }
+//        $lists =[];
+//        if($role == 1){
+//            $ids = DocterOrganization::where(['organization_id'=>$org_id])->pluck('docter_id')->toArray();
+//            $list = Docter::whereIn('id',$ids)->where('is_then',1)->get(['id','name']);
+//            foreach ($list as $val){
+//                $lists[] = ['value'=>$val->id,'label'=>$val->name];
+//            }
+//            $name = Organization::where('id',$org_id)->value('name');
+//            $user_id = $org_id;
+//        } else {
+//            $ids = DocterOrganization::where(['docter_id'=>$docter_id])->pluck('organization_id');
+//            $list = Organization::whereIn('id',$ids)->get(['id','name']);
+//            foreach ($list as $val){
+//                $lists[] = ['value'=>$val->id,'label'=>$val->name];
+//            }
+//            $name = Docter::where('id',$docter_id)->value('name');
+//            $user_id = $docter_id;
+//        }
+//        $data['user_id'] = $user_id;
+//        $data['name'] = $name;
+//        $data['role'] = $role;
+//        $data['list'] = $lists;
+//        return (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
+//    }
 
     //获取图文订单
     public function get_chat_order()
@@ -543,147 +544,141 @@ class ApiController extends Controller
 
     }
 
-    //更新用戶設置
-    public function updateDocterSetting()
-    {
-        $docter_id = request('docter_id',1);
-        if(empty($docter_id)){
-            return apiReturn(604,'参数错误');
-        }
-
-        //添加时间段
-        if(2 == 3){
-            $data = ['docter_id'=>$docter_id,'am_start'=>'8:30','am_end'=>'11:30','pm_start'=>'12:00','pm_end'=>'15:00','ev_start'=>'19:00','ev_end'=>'22:00','service_time'=>15];
-            $amtimes[] = explode(':',$data['am_start']);
-            $amtimes[] = explode(':',$data['am_end']);
-//            $amcha = ($amtimes[1][0] - $amtimes[0][0])*60 +($amtimes[1][1] - $amtimes[0][1]);
-//            $amCount = $amcha/$data['service_time'];
-            $amCount = intval(floor((strtotime($data['am_end']) - strtotime($data['am_start'])) / (60*$data['service_time'])));
-
-            $pmtimes[] = explode(':',$data['pm_start']);
-            $pmtimes[] = explode(':',$data['pm_end']);
-            $pmCount =intval(floor((strtotime($data['pm_end']) - strtotime($data['pm_start'])) / (60*$data['service_time'])));
-
-
-            $evtimes[] = explode(':',$data['ev_start']);
-            $evtimes[] = explode(':',$data['ev_end']);
-            $evcha = ($evtimes[1][0] - $evtimes[0][0])*60 +($evtimes[1][1] - $evtimes[0][1]);
-            $evCount = $evcha/$data['service_time'];
-
-
-            for($i=1;$i<=$amCount;$i++){
-                $amdata = [
-                    'docter_id'=>$docter_id,
-                    'start_time_period'=> date('H:i',strtotime($data['am_start']) + ($i-1)*$data['service_time']*60),
-                    'end_time_period'=> date('H:i',strtotime($data['am_start']) + $i*$data['service_time']*60),
-                ];
-                TimePeriod::insert($amdata);
-            }
-
-            for($i=1;$i<=$pmCount;$i++){
-                $pmdata = [
-                    'docter_id'=>$docter_id,
-                    'start_time_period'=> date('H:i',strtotime($data['pm_start']) + ($i-1)*$data['service_time']*60),
-                    'end_time_period'=> date('H:i',strtotime($data['pm_start']) + $i*$data['service_time']*60),
-                ];
-                TimePeriod::insert($pmdata);
-            }
-
-            for($i=1;$i<=$evCount;$i++){
-                $evdata = [
-                    'docter_id'=>$docter_id,
-                    'start_time_period'=> date('H:i',strtotime($data['ev_start']) + ($i-1)*$data['service_time']*60),
-                    'end_time_period'=> date('H:i',strtotime($data['ev_start']) + $i*$data['service_time']*60),
-                ];
-                TimePeriod::insert($evdata);
-            }
-        }
-
-        $config = [['startTime'=>"08:30","endTime"=>"11:30"],["startTime"=>"13:30","endTime"=>"16:00"],["startTime"=>"18:30","endTime"=>"19:30"]];
-        $setting = [
-            'docter_id'=>$docter_id,
-            'type'=>2,
-            'status'=>2,
-            'show_days'=>7,
-            'service_num'=>7,
-            'service_time'=>json_encode($config)
-        ];
-
-
-
-        $is_have = DocterSetting::where(['docter_id'=>$docter_id])->value('id');
-        if($is_have){
-            DocterSetting::where(['docter_id'=>$docter_id])->update($setting);
-        } else {
-            DocterSetting::insert($setting);
-        }
-        return  apiReturn(200,'ok');
-    }
+//    //更新用戶設置
+//    public function updateDocterSetting()
+//    {
+//        $docter_id = request('docter_id',1);
+//        if(empty($docter_id)){
+//            return apiReturn(604,'参数错误');
+//        }
+//
+//        //添加时间段
+//        if(2 == 3){
+//            $data = ['docter_id'=>$docter_id,'am_start'=>'8:30','am_end'=>'11:30','pm_start'=>'12:00','pm_end'=>'15:00','ev_start'=>'19:00','ev_end'=>'22:00','service_time'=>15];
+//            $amtimes[] = explode(':',$data['am_start']);
+//            $amtimes[] = explode(':',$data['am_end']);
+////            $amcha = ($amtimes[1][0] - $amtimes[0][0])*60 +($amtimes[1][1] - $amtimes[0][1]);
+////            $amCount = $amcha/$data['service_time'];
+//            $amCount = intval(floor((strtotime($data['am_end']) - strtotime($data['am_start'])) / (60*$data['service_time'])));
+//
+//            $pmtimes[] = explode(':',$data['pm_start']);
+//            $pmtimes[] = explode(':',$data['pm_end']);
+//            $pmCount =intval(floor((strtotime($data['pm_end']) - strtotime($data['pm_start'])) / (60*$data['service_time'])));
+//
+//
+//            $evtimes[] = explode(':',$data['ev_start']);
+//            $evtimes[] = explode(':',$data['ev_end']);
+//            $evcha = ($evtimes[1][0] - $evtimes[0][0])*60 +($evtimes[1][1] - $evtimes[0][1]);
+//            $evCount = $evcha/$data['service_time'];
+//
+//
+//            for($i=1;$i<=$amCount;$i++){
+//                $amdata = [
+//                    'docter_id'=>$docter_id,
+//                    'start_time_period'=> date('H:i',strtotime($data['am_start']) + ($i-1)*$data['service_time']*60),
+//                    'end_time_period'=> date('H:i',strtotime($data['am_start']) + $i*$data['service_time']*60),
+//                ];
+//                TimePeriod::insert($amdata);
+//            }
+//
+//            for($i=1;$i<=$pmCount;$i++){
+//                $pmdata = [
+//                    'docter_id'=>$docter_id,
+//                    'start_time_period'=> date('H:i',strtotime($data['pm_start']) + ($i-1)*$data['service_time']*60),
+//                    'end_time_period'=> date('H:i',strtotime($data['pm_start']) + $i*$data['service_time']*60),
+//                ];
+//                TimePeriod::insert($pmdata);
+//            }
+//
+//            for($i=1;$i<=$evCount;$i++){
+//                $evdata = [
+//                    'docter_id'=>$docter_id,
+//                    'start_time_period'=> date('H:i',strtotime($data['ev_start']) + ($i-1)*$data['service_time']*60),
+//                    'end_time_period'=> date('H:i',strtotime($data['ev_start']) + $i*$data['service_time']*60),
+//                ];
+//                TimePeriod::insert($evdata);
+//            }
+//        }
+//
+//        $config = [['startTime'=>"08:30","endTime"=>"11:30"],["startTime"=>"13:30","endTime"=>"16:00"],["startTime"=>"18:30","endTime"=>"19:30"]];
+//        $setting = [
+//            'docter_id'=>$docter_id,
+//            'type'=>2,
+//            'status'=>2,
+//            'show_days'=>7,
+//            'service_num'=>7,
+//            'service_time'=>json_encode($config)
+//        ];
+//
+//
+//
+//        $is_have = DocterSetting::where(['docter_id'=>$docter_id])->value('id');
+//        if($is_have){
+//            DocterSetting::where(['docter_id'=>$docter_id])->update($setting);
+//        } else {
+//            DocterSetting::insert($setting);
+//        }
+//        return  apiReturn(200,'ok');
+//    }
 
     //获取周排班模板
     public function getWeekSchedule()
     {
-        $docter_id = request('docter_id',1);
-        $org_id = request('org_id',1);
-        $type = request('type',2);
-        $role = request('role',2);
+        $docter_id = intval(request('docter_id'));
+        $org_id = intval(request('org_id'));
+        $type = intval(request('type'));
         if(empty($docter_id) || empty($type)){
             return apiReturn(604,'缺少必要参数');
         }
 
-        $docter_id = 1;
-        $docter_setting = DocterSetting::where(['docter_id'=>$docter_id,'type'=>$type])->first();
-        $times = [];
-        if(!empty($docter_setting)){
-            $time_period = object_array(json_decode($docter_setting->service_time));
-            $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[0]['startTime']),intval($time_period[0]['endTime'])])->pluck('id')->toArray();
-            $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[1]['startTime']),intval($time_period[1]['endTime'])])->pluck('id')->toArray();
-            $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[2]['startTime']),intval($time_period[2]['endTime'])])->pluck('id')->toArray();
-        }
-
-        if(count($times) < 3){
-            dd('no have times');
+        if($type == 1){
+            $role = 2;
+            $setting = DocterSetting::where(['docter_id'=>$docter_id,'type'=>$type])->first();
+        } else {
+            $role = 1;
+            $setting = OrganizationSettings::where(['org_id'=>$docter_id])->first();
         }
 
         //周字段映射
-        $week_arr = ['monday','tuesday','wednesday','thursday','friday','saturday','sunday'];
+        $week_arr = [1=>'monday',2=>'tuesday',3=>'wednesday',4=>'thursday',5=>'friday',6=>'saturday',7=>'sunday'];
         $data = [
-                    [
-                        'date'=>"上午",
-                        'monday'=>false,
-                        'tuesday'=>false,
-                        'wednesday'=>false,
-                        'thursday'=>false,
-                        'friday'=>false,
-                        'saturday'=>false,
-                        'sunday'=>false,
-                    ],
-                    [
-                        'date'=>"下午",
-                        'monday'=>false,
-                        'tuesday'=>false,
-                        'wednesday'=>false,
-                        'thursday'=>false,
-                        'friday'=>false,
-                        'saturday'=>false,
-                        'sunday'=>false,
-                    ],
-                    [
-                        'date'=>"晚上",
-                        'monday'=>false,
-                        'tuesday'=>false,
-                        'wednesday'=>false,
-                        'thursday'=>false,
-                        'friday'=>false,
-                        'saturday'=>false,
-                        'sunday'=>false,
-                    ]
-                ];
+            [
+                'date'=>"上午",
+                'monday'=>false,
+                'tuesday'=>false,
+                'wednesday'=>false,
+                'thursday'=>false,
+                'friday'=>false,
+                'saturday'=>false,
+                'sunday'=>false,
+            ],
+            [
+                'date'=>"下午",
+                'monday'=>false,
+                'tuesday'=>false,
+                'wednesday'=>false,
+                'thursday'=>false,
+                'friday'=>false,
+                'saturday'=>false,
+                'sunday'=>false,
+            ],
+            [
+                'date'=>"晚上",
+                'monday'=>false,
+                'tuesday'=>false,
+                'wednesday'=>false,
+                'thursday'=>false,
+                'friday'=>false,
+                'saturday'=>false,
+                'sunday'=>false,
+            ]
+        ];
         if($role == 2){
-            for ($i=0;$i<6;$i++){
+            for ($i=0;$i<=7;$i++){
+                if($i == 0) continue;
                 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])->whereIn('time_period_id',$times[$j])->count();
-                    $is_other_have = WeekSchedule::where(['docter_id'=>$docter_id,'schedule_type'=>$type,'week'=>$i+1])->where('organization_id','!=',$org_id)->whereIn('time_period_id',$times[$j])->count();
+                    $is_self_have = WeekSchedule::where(['docter_id'=>$docter_id,'schedule_type'=>$type,'organization_id'=>$org_id,'week'=>$i,'type'=>$j+1])->count();
+                    $is_other_have = WeekSchedule::where(['docter_id'=>$docter_id,'schedule_type'=>$type,'week'=>$i,'type'=>$j+1])->where('organization_id','!=',$org_id)->count();
                     if($is_self_have){
                         $data[$j][$week_arr[$i]] = true;
                     }
@@ -695,8 +690,8 @@ class ApiController extends Controller
         } else {
             for ($i=0;$i<6;$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])->whereIn('time_period_id',$times[$j])->count();
-                    $is_other_have = WeekSchedule::where(['docter_id'=>$docter_id,'schedule_type'=>$type,'week'=>$i+1])->where('docter_id','!=',$docter_id)->whereIn('time_period_id',$times[$j])->count();
+                    $is_self_have = WeekSchedule::where(['docter_id'=>$docter_id,'schedule_type'=>$type,'organization_id'=>$org_id,'week'=>$i+1])->count();
+                    $is_other_have = WeekSchedule::where(['docter_id'=>$docter_id,'schedule_type'=>$type,'week'=>$i+1])->where('docter_id','!=',$docter_id)->count();
                     if($is_self_have){
                         $data[$j][$week_arr[$i]] = true;
                     }
@@ -762,9 +757,9 @@ class ApiController extends Controller
         ];
         if(!empty($docter_setting)){
             $time_period = object_array(json_decode($docter_setting->service_time));
-            $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[0]['startTime']),intval($time_period[0]['endTime'])])->pluck('id')->toArray();
-            $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[1]['startTime']),intval($time_period[1]['endTime'])])->pluck('id')->toArray();
-            $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[2]['startTime']),intval($time_period[2]['endTime'])])->pluck('id')->toArray();
+            $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();
         }
 
 
@@ -899,4 +894,588 @@ class ApiController extends Controller
         dd($week_schedule);
 
     }
+
+    //获取月排班
+    public function get_month_schedule()
+    {
+        $date  = request('date');
+        $org_id = intval(request('org_id'));
+        $docter_id = intval(request('docter_id'));
+        $type = intval(request('type'));
+        $role = intval(request('role'));
+        $start_time = strtotime($date);
+        $month_day = date("t",$start_time);
+        $end_time = ($start_time + $month_day * 86400);
+        $start_date = date('Y-m-d',$start_time);
+        $end_date = date('Y-m-d',$end_time);
+        $types = [1=>1,2=>2,3=>3];
+
+
+        if($type == 1){
+            $schedule_data = Schedule::where(['docter_id'=>$docter_id,'organization_id'=>0])
+                ->whereBetween('schedule_date',[$start_date,$end_date])->pluck('schedule_date','id')->toArray();
+            $settingConfig = DocterSetting::where(['docter_id'=>$docter_id])->first();
+            $serviceConfig = object_array(json_decode($settingConfig['service_time']));
+        } else {
+            $schedule_data = Schedule::where(['docter_id'=>0,'organization_id'=>$org_id])->
+            whereBetween('schedule_date',[$start_date,$end_date])->pluck('schedule_date','id')->toArray();
+            $settingConfig = OrganizationSettings::where(['org_id'=>$org_id])->first();
+            $serviceConfig = object_array(json_decode($settingConfig['service_time']));
+        }
+
+        if(!empty($settingConfig)){
+            $baseData =  [
+                ['status'=>false,'type'=>1,'start'=>$serviceConfig[1]['amStartTime'],'end'=>$serviceConfig[1]['amEndTime']],
+                ['status'=>false,'type'=>2,'start'=>$serviceConfig[2]['pmStartTime'],'end'=>$serviceConfig[2]['pmEndTime']],
+                ['status'=>false,'type'=>3,'start'=>$serviceConfig[3]['nightStartTime'],'end'=>$serviceConfig[3]['nightEndTime']],
+            ];
+
+        } else{
+            $serviceConfig = '';
+            $baseData =  [
+                ['status'=>false,'type'=>1,'start'=>$serviceConfig[1]['amStartTime'],'end'=>$serviceConfig[1]['amEndTime']],
+                ['status'=>false,'type'=>2,'start'=>$serviceConfig[2]['pmStartTime'],'end'=>$serviceConfig[2]['pmEndTime']],
+                ['status'=>false,'type'=>3,'start'=>$serviceConfig[3]['nightStartTime'],'end'=>$serviceConfig[3]['nightEndTime']],
+            ];
+
+            self::baseMonthSchedule($month_day,$baseData);
+            return [];
+        }
+
+        for($i=1;$i<=$month_day; $i++){
+            //$startKey = date('d',time());
+            $week = date('N',$start_time + ($i-1) * 86400);
+            $scheduleDate = date('Y-m-d',$start_time + ($i-1) * 86400);
+
+            if(empty($schedule_data)){
+                $scheduleList[] = [
+                    'schedulelingList'=>$baseData,
+                    'date'=>$scheduleDate,
+                    'week'=>$week,
+                    'day'=>$scheduleDate
+                ];
+            } else {
+                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();
+
+                    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;
+////            $schedule_id = $schedule_data[$schedule_data];
+//            if($type == 1){
+//                $today = SchedulePeriod::where(['docter_id'=>$docter_id,'schedule_date'=>$scheduleDate])->get(['organization_id','type'])->GroupBy('type');
+//
+//                dd($today);
+//            }
+////            date'=>($i+1),'day'=>$now_date,'schedulelingList'=>$arr,'week'=>$week
+////            dd($scheduleList);
+//
+//        }
+//
+//        $status = [1=>true,2=>'other',3=>false];
+//
+//        for($i=0;$i<$month_day;$i++){
+//              $now_time = $start_time + $i*86400;
+//              $now_date = date('Y-m-d',$now_time);
+//              $week = date('N',$now_time);
+//              $arr = [
+//                  ['status'=>false,'type'=>1,'start'=>"09:00",'end'=>'11:30'],
+//                  ['status'=>true,'type'=>2,'start'=>'13:30','end'=>'16:30'],
+//                  ['status'=>false,'type'=>3,'start'=>'19:30','end'=>'21:00'],
+//              ];
+//              if($i%2 == 0){
+//                  $arr = [
+//                      ['status'=>false,'type'=>1,'start'=>"09:00",'end'=>'11:30'],
+//                      ['status'=>true,'type'=>2,'start'=>'13:30','end'=>'16:30'],
+//                      ['status'=>false,'type'=>3,'start'=>'19:30','end'=>'21:00'],
+//                  ];
+//              }
+//
+//            if($i%3 == 0){
+//                $arr = [
+//                    ['status'=>true,'type'=>1,'start'=>"09:00",'end'=>'11:30'],
+//                    ['status'=>'other','type'=>2,'start'=>'13:30','end'=>'16:30'],
+//                    ['status'=>true,'type'=>3,'start'=>'19:30','end'=>'21:00'],
+//                ];
+//            }
+//
+//            if($i%4 == 0){
+//                $arr = [
+//                    ['status'=>'other','type'=>1,'start'=>"09:00",'end'=>'11:30'],
+//                    ['status'=>false,'type'=>2,'start'=>'13:30','end'=>'16:30'],
+//                    ['status'=>false,'type'=>3,'start'=>'19:30','end'=>'21:00'],
+//                ];
+//            }
+//
+//            if($i == 14){
+//                $arr = [
+//                    ['status'=>false,'type'=>1,'start'=>"09:00",'end'=>'11:30'],
+//                    ['status'=>false,'type'=>2,'start'=>'13:30','end'=>'16:30'],
+//                    ['status'=>false,'type'=>3,'start'=>'19:30','end'=>'21:00'],
+//                ];
+//            }
+//
+//            $all_time[] = ['date'=>($i+1),'day'=>$now_date,'schedulelingList'=>$arr,'week'=>$week];
+        }
+        return apiReturn(200,'ok',$scheduleList);
+    }
+
+
+    public function getDocterSetting()
+    {
+        $docter_id = intval(request('docter_id'));
+        $org_id = intval(request('org_id'));
+        $type = intval(request('type'));
+
+        $setting = DocterSetting::where(['docter_id'=>$docter_id])->first();
+        if($type  == 1){
+            $setting = OrganizationSettings::where(['org_id'=>$org_id])->first();
+        }
+        $docterConfig = SystemConfig::get('docter_config');
+        if(!empty($setting)){
+            $setting = $setting->toArray();
+        } else {
+            $configData = [
+                'amStartTime'=>$docterConfig['morning_start'],
+                'amEndTime'=>$docterConfig['morning_end'],
+                'amNum'=>0,
+                'pmStartTime'=>$docterConfig['afternoon_start'],
+                'pmEndTime'=>$docterConfig['afternoon_start'],
+                'pmNum'=>0,
+                'nightStartTime'=>$docterConfig['evening_start'],
+                'nightEndTime'=>$docterConfig['evening_end'],
+                'nightNum'=>0,
+                'serviceNum'=>1,
+                'showDayNumber'=>7,
+                'status'=>false,
+                'timeSpan'=>30,
+            ];
+            return apiReturn(200,'ok',$configData);
+        }
+        $config = object_array(json_decode($setting['service_time']));
+
+        $status = $setting['status'] ? true: false;
+        $configData = [
+            'amEndTime'=>$config[1]['amEndTime'],
+            'amNum'=>$config[1]['amPerson'],
+            'amStartTime'=>$config[1]['amStartTime'],
+            'nightEndTime'=>$config[3]['nightEndTime'],
+            'nightNum'=>$config[3]['nightPerson'],
+            'nightStartTime'=>$config[3]['nightStartTime'],
+            'pmEndTime'=>$config[2]['pmEndTime'],
+            'pmNum'=>$config[2]['pmPerson'],
+            'pmStartTime'=>$config[2]['pmStartTime'],
+            'serviceNum'=>$setting['service_num'],
+            'showDayNumber'=>$setting['show_days'],
+            'status'=>$status,
+            'timeSpan'=>$setting['service_times'],
+        ];
+
+        return apiReturn(200,'ok',$configData);
+
+    }
+    //更新用戶設置
+    public function updateDocterSetting()
+    {
+        $docter_id = intval(request('docter_id'));
+        $configData = request('configData');
+        $type = intval(request('type'));//医生类型 1 机构 2 医生
+        $org_id = intval(request('org_id'));
+        $configData = object_array(json_decode($configData));
+        if(empty($docter_id) || empty($configData)){
+            return apiReturn(604,'参数错误');
+        }
+
+        $setting  = DocterSetting::where(['docter_id'=>$docter_id])->first();
+        if($type != 1){
+            $setting = OrganizationSettings::where(['org_id'=>$org_id])->first();
+        }
+
+        if(empty($setting)){
+
+        }
+        $self_config = object_array(json_decode($setting['service_time']));
+        //改变时间段
+        $changeTimer = [];
+        //是否改变了服务时长
+        $changeSeviceTime = false;
+
+        //同时服务人数
+        $serviceNum = intval($configData['serviceNum']);
+
+        //服务时长
+        $serviceTime = intval($configData['timeSpan']);
+
+        if(empty($setting) || $serviceTime != intval($setting['service_times'])){
+            $changeSeviceTime = true;
+            $changeTimer = [1,2,3];
+        } else {
+
+            if($configData['amStartTime'] !== $self_config[1]['amStartTime'] ||  $configData['amEndTime'] !== $self_config[1]['amEndTime']){
+                $changeTimer[] = 1;
+
+            }
+
+            if($configData['pmStartTime'] !== $self_config[2]['pmStartTime'] ||  $configData['pmEndTime'] !== $self_config[2]['pmEndTime']){
+                $changeTimer[] = 2;
+            }
+
+            if($configData['nightStartTime'] !== $self_config[3]['nightStartTime'] ||  $configData['nightEndTime'] !== $self_config[3]['nightEndTime']){
+                $changeTimer[] = 3;
+            }
+        }
+
+        //添加时间段
+
+        $countArr = [
+            1=>$configData['amNum'],
+            2=>$configData['pmNum'],
+            3=>$configData['nightNum'],
+        ];
+
+        $c_r = [
+            1=>['count'=>$configData['amNum'],'start_time'=>$configData['amStartTime'],'end_time'=>$configData['amEndTime']],
+            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)){
+
+            foreach ($changeTimer as $tType){
+                DB::beginTransaction();
+                try {
+                    //1.删除旧时间段,并删除排班数据
+                    $type == 1 ? $id = $docter_id : $id = $org_id;
+
+                    //todo 暂时未删除周排班
+                    self::delteScheduleInfo($id,$type);
+                    $count = intval($countArr[$tType] / $serviceNum);
+                    //2.创建新时间段
+                    self::makeTimePeriod($type,$docter_id,$org_id,$tType,$c_r[$tType],$count,$serviceTime);
+                    if($type == 1){
+                        $time_periods = TimePeriod::where(['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')
+                            ->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])
+                            ->distinct('type')
+                            ->orderBy('week')
+                            ->get(['week','organization_id'])
+                            ->GroupBy('week')
+                            ->toArray();
+                    }
+
+                    if($type !=1 ){
+                        $time_periods = TimePeriod::where(['org_id' => $org_id, 'docter_id' => 0, 'type' => $tType])->pluck('id')->toArray();
+                        $schedule = Schedule::where(['docter_id' => 0, 'organization_id'=>$org_id])->pluck('schedule_date', 'id')->toArray();
+                        $self_schedule = SelfSchedule::where(['docter_id' => 0, 'schedule_type' => $type,'organization_id'=>$org_id,'type' =>$tType])->distinct('type')
+                            ->orderBy('schedule_date')->get(['schedule_date', 'type', 'week'])->toArray();
+                        $week_schedule = WeekSchedule::where(['organization_id' =>$org_id, 'type' => $tType,'schedule_type'=>$type])
+                            ->distinct('type')
+                            ->orderBy('week')
+                            ->pluck('type')
+                            ->GroupBy('week')
+                            ->toArray();
+                    }
+                    if (empty($week_schedule)) {
+//                        Schedule::where(['docter_id' => $docter_id])->delete();
+//                        SelfSchedule::where(['docter_id' => $docter_id])->delete();
+                    } else {
+                        //3.以周模板添加2个月的数据
+                        self::makeSchedule($docter_id,$org_id,$type,$schedule,$week_schedule,$time_periods);
+
+                        //4.回复自己设置的排班
+                        self::makeSelfScheeule($docter_id,$org_id,$type,$time_periods,$self_schedule);
+                    }
+                    DB::commit();
+                } catch (\Exception $e) {
+                    dd($e->getMessage());
+                    DB::rollBack();
+                }
+            }
+
+        }
+
+//        {"1":{"amStartTime":"08:00","amEndTime":"12:00","amPerson":3},"2":{"pmStartTime":"14:00","pmEndTime":"18:00","pmPerson":5},"3":{"nightStartTime":"18:00","nightEndTime":"23:00","nightPerson":4}}
+        $config = [
+            1=>['amStartTime'=>$configData['amStartTime'],"amEndTime"=>$configData['amEndTime'],'amPerson'=>$configData['amNum']],
+            2=>["pmStartTime"=>$configData['pmStartTime'],"pmEndTime"=>$configData['pmEndTime'],'pmPerson'=>$configData['pmNum']],
+            3=>["nightStartTime"=>$configData['nightStartTime'],"nightEndTime"=>$configData['nightEndTime'],'nightPerson'=>$configData['nightNum']]
+        ];
+        $setting = [
+            'docter_id'=>$docter_id,
+            'type'=>$type,
+            'status'=>$configData['status'],
+            'show_days'=>$configData['showDayNumber'],
+            'service_num'=>$configData['serviceNum'],
+            'service_times'=>$configData['timeSpan'],
+            'service_time'=>json_encode($config)
+        ];
+
+
+
+        //更新配置
+        if($type == 1){
+            $is_have = DocterSetting::where(['docter_id'=>$docter_id])->value('id');
+            if($is_have){
+                DocterSetting::where(['docter_id'=>$docter_id])->update($setting);
+            } else {
+                DocterSetting::insert($setting);
+            }
+        } else {
+            unset($setting['docter_id']);
+            $setting['org_id'] = $org_id;
+            $is_have = OrganizationSettings::where(['id'=>$docter_id])->value('id');
+            if($is_have){
+                OrganizationSettings::where(['org_id'=>$org_id])->update($setting);
+            } else {
+                OrganizationSettings::insert($setting);
+            }
+        }
+        return  apiReturn(200,'ok');
+    }
+
+    //获取用户信息
+    public function getScheduleInfo()
+    {
+        $id = intval(request('id'));
+        $isDocter = CdmsUsers::where('docter_id',$id)->first();
+        $isOrg = CdmsUsers::where('org_id',$id)->first();
+        $org_id = null;
+        $role = 1;
+
+        if(empty($id)){
+            return json_encode(['status'=>601,'msg'=>'缺少必要参数','data'=>'']);
+        }
+
+        if($isDocter){
+            $org_id = $isDocter->org_id;
+            $docter = Docter::where(['id'=>$id])->first();
+            $role = 2;
+        } else {
+            if(!empty($isOrg->org_id)){
+                $org_id = $isOrg->org_id;
+            } else {
+                $role = 0;
+            }
+        }
+
+        $lists =[];
+        if($role == 1){
+            $ids = DocterOrganization::where(['organization_id'=>$org_id])->pluck('docter_id')->toArray();
+            $list = Docter::whereIn('id',$ids)->distinct('id')->get(['id','name']);
+            foreach ($list as $val){
+                $lists[] = ['value'=>$val->id,'label'=>$val->name];
+            }
+            $name = Organization::where('id',$org_id)->value('name');
+        } else if($role == 2){
+            $ids = DocterOrganization::where(['docter_id'=>$id])->distinct('docter_id')->pluck('organization_id')->toArray();
+            $list = Organization::whereIn('id',$ids)->get(['id','name']);
+            foreach ($list as $val){
+                $lists[] = ['value'=>$val->id,'label'=>$val->name];
+            }
+            $name = Docter::where('id',$id)->value('name');
+        } else {
+            $name = '';
+        }
+
+
+        $type = 1;
+        $data['user_id'] = $id;
+        $data['name'] = $name;
+        $data['org_id'] = $org_id;
+        $data['docter_type'] = 0;
+        $data['list'] = [];
+
+        if(!empty($docter)){
+            $data['docter_type'] = $docter->type;
+            if($docter->type == 1){
+                $data['list'] = $lists;
+            }
+        }
+        $data['role'] = $role;
+        return (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
+    }
+
+    /*
+     * @param
+     * $id int 医生或社区id
+     * $type int 排班类型
+     * @descript 删除排班数据
+     */
+    public static function delteScheduleInfo($id,$type){
+        if($type == 1){
+            TimePeriod::where(['docter_id'=>$id,'type'=>$type])->where('org_id','=',0)->delete();
+            SchedulePeriod::where(['docter_id'=>$id,'type'=>$type])->where('organization_id','=',0)->delete();
+        } else {
+            TimePeriod::where(['org_id'=>$id,'type'=>$type])->where('docter_id','=',0)->delete();
+            SchedulePeriod::where(['organization_id'=>$id,'type'=>$type])->where('docter_id','=',0)->delete();
+        }
+        return true;
+    }
+
+    //插入时间段
+    public static function makeTimePeriod($scheduleType,$docterId,$orgId,$timeType,$timeConfig,$timerCount,$serviceTime)
+    {
+        for($i=1;$i<=$timerCount;$i++){
+            $timePreiod = [
+                'org_id'=>$orgId,
+                'docter_id'=>$docterId,
+                'type'=>$timeType,
+                'start_time_period'=> date('H:i',strtotime($timeConfig['start_time']) + ($i-1)*$serviceTime*60),
+                'end_time_period'=> date('H:i',strtotime($timeConfig['start_time']) + $i*$serviceTime*60),
+            ];
+            if($scheduleType == 1){
+                $timePreiod['org_id'] = 0;
+                $timePreiod['docter_id'] = $docterId;
+            }  else {
+                $timePreiod['docter_id'] = 0;
+                $timePreiod['org_id'] = $orgId;
+            }
+            $isHave = TimePeriod::where($timePreiod)->count();
+            if($isHave) continue;
+            TimePeriod::insert($timePreiod);
+        }
+        return true;
+    }
+
+    //以周模板进行排班
+    public static function makeSchedule ($docterId,$orgId,$type,$schedule,$weekSchedule,$timePeriods){
+
+        if(empty($schedule) || count($schedule) < 58){
+            $start = strtotime(date('Y-m-1',time()));
+            $today = date('j',time());
+            $allDay = date('t',time());
+
+            //门诊排班
+            if($type == 1){
+                $scheduleData['docter_id']=$docterId;
+                $scheduleData['organization_id']= 0;
+            } else {
+                $scheduleData['docter_id']=0;
+                $scheduleData['organization_id']= $orgId;
+            }
+
+            //第一个月
+            for ($i=$today;$i<=$allDay;$i++){
+                $todayTimer = $start + (($i - 1) *86400);
+                $week = date('N',$todayTimer);
+
+                $date = date('Y-m-d',$todayTimer);
+                $numDate = date('Ymd',$todayTimer);
+                $scheduleData['schedule_date'] = $date;
+                $scheduleData['schedule_day'] = $numDate;
+
+                $scheduleIsHave = Schedule::where($scheduleData)->count();
+                if ($scheduleIsHave) continue;
+                Schedule::insertGetId($scheduleData);
+            }
+            $nextStart = strtotime(date('Y-m-1',strtotime('next month')));
+            $nextAllDay = date('t',strtotime('nex month'));
+
+
+            //第二个月
+            for($j=1;$j<=$nextAllDay;$j++){
+                $todayTimer = $nextStart + (($j-1)*86400);
+                $week = date('N',$todayTimer);
+                $date = date('Y-m-d',$todayTimer);
+                $numDate = date('Ymd',$todayTimer);
+                $scheduleData['schedule_date'] = $date;
+                $scheduleData['schedule_day'] = $numDate;
+                $scheduleIsHave = Schedule::where($scheduleData)->count();
+                if ($scheduleIsHave) continue;
+                Schedule::insertGetId($scheduleData);
+            }
+            $schedule = Schedule::where(['docter_id'=>$docterId,'organization_id'=>0])->where('schedule_date','>',date('Y-m-d',time()))
+                ->distinct('schedule_date')->pluck('schedule_date','id')->toArray();
+            if($type == 2){
+                $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();
+            }
+        }
+
+        foreach ($schedule as $id => $date) {
+            $week = intval(date('N', strtotime($date)));
+            foreach ($weekSchedule as $w) {
+
+                //门诊和儿保,计免排班分开
+                if($type == 1){
+                    $realWeek = $w[0]['week'];
+                    $oId = $w = $w[0]['organization_id'];
+                } else {
+                    $realWeek = $w;
+                    $oId = $orgId;
+                }
+
+                if ($week == $realWeek) {
+                    foreach ($timePeriods as $idt) {
+                        $s_t = [
+                            'organization_id' => $oId,
+                            'docter_id' => $docterId,
+                            'type' => $type,
+                            'schedule_date' => $date,
+                            'schedule_id' => $id,
+                            'time_period_id' => $idt
+                        ];
+                        $scheduleIsHave = SchedulePeriod::where($s_t)->count();
+                        if ($scheduleIsHave) continue;
+                        $s_t['created_at'] = Carbon::now();
+                        $s_t['updated_at'] = Carbon::now();
+                        SchedulePeriod::insert($s_t);
+                    }
+                }
+            }
+        }
+        return true;
+    }
+
+
+    //自己排班
+    public 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();
+        } else {
+            SelfSchedule::where(['type'=>1,'docter_id'=>0,'organization_id'=>$orgId,'schedule_type'=>$type])->whereIn('time_period_id',$timesPeriods)->delete();
+            $docterId = 0;
+        }
+        foreach ($selfSchedule as $val) {
+            $self_data = $val;
+            $self_data['organization_id'] = $orgId;
+            $self_data['docter_id'] = $docterId;
+            foreach ($timesPeriods as $idt) {
+                $self_data['time_period_id'] = $idt;
+                $is_self_have = SelfSchedule::where($self_data)->count();
+                if ($is_self_have) continue;
+                $self_data['created_at'] = Carbon::now();
+                $self_data['updated_at'] = Carbon::now();
+                SelfSchedule::insert($self_data);
+            }
+        }
+    }
 }

+ 4 - 4
app/Community/Controllers/ScheduleController.php

xqd
@@ -20,12 +20,12 @@ class ScheduleController extends AdminController
         $user = Admin::user();
         $org_id = $user->org_id;
         $docter_id = $user->docter_id;
-        $id = $org_id;
-        if(empty($docter_id)){
+        if(!empty($docter_id)){
             $id = $docter_id;
+        } else {
+            $id = $org_id;
         }
-        $url = '/cdms/chat_view?id='.$docter_id;
-        $content->body('<iframe src="/cdms/schedule_view?id='.$id.'" style="width:100%;height:800px;border: none"></iframe>');
+        $content->body('<iframe src="/cdms/schedule_view?id='.$id.'" style="width:100%;height:1300px;border: none"></iframe>');
         return $content;
     }
 

+ 6 - 2
app/Community/routes.php

xqd xqd
@@ -18,7 +18,7 @@ Route::resource('docter_verifies', DocterVerifyController::class);
 Route::resource('docter_account', DocterAccountController::class);
 Route::resource('docter_chats', DocterChatController::class);
 
-Route::resource('organization_vaccines', Vaccine\OrganizationVaccineController::class);
+Route::resource('organization_vaccines', Vaccine\OrganizationVacschedulecineController::class);
 //服务管理
 Route::resource('services', ServiceController::class);
 Route::resource('orgservice', OrganizationController::class);
@@ -48,14 +48,18 @@ 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/get_week_chedule', 'ApiController@getWeekSchedule');
 Route::get('/api/set_month_schedule', 'ApiController@setmonthScheduel');
+Route::get('/api/get_month_schedule', 'ApiController@get_month_schedule');
+Route::get('/api/get_docter_setting', 'ApiController@getDocterSetting');
+Route::get('/api/update_docter_setting', 'ApiController@updateDocterSetting');
 Route::get('/api/docter_setting', 'ApiController@updateDocterSetting');
 Route::get('/api/self_schedule', 'ApiController@setSelfSchedule');
+Route::get('/api/getScheduleInfo', 'ApiController@getScheduleInfo');
 
 Route::get('/getComSchedule', 'ApiController@getComSchedule');
 Route::get('/getChatOrder', 'ApiController@get_chat_order');
 Route::get('/setDocChedule', 'ApiController@setDocChedule');
-Route::get('/getScheduleInfo', 'ApiController@getScheduleInfo');
 
 
 

+ 330 - 192
app/Http/Controllers/ScheDuleController.php

xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd
@@ -13,6 +13,7 @@ use App\Models\DocterSetting;
 use App\Models\Order;
 use App\Models\Organization;
 use App\Models\OrganizationSettings;
+use App\Models\Payment;
 use App\Models\Schedule;
 use App\Models\SchedulePeriod;
 use App\Models\SelfSchedule;
@@ -25,6 +26,7 @@ use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Log;
 use mysql_xdevapi\Exception;
 use phpDocumentor\Reflection\DocBlock\Description;
+use PhpParser\Comment\Doc;
 
 class ScheDuleController  extends Controller
 {
@@ -619,9 +621,13 @@ class ScheDuleController  extends Controller
             return apiReturn(604,'参数错误');
         }
 
-        $setting  = DocterSetting::where(['docter_id'=>$docter_id])->first()->toArray();
+        $setting  = DocterSetting::where(['docter_id'=>$docter_id])->first();
         if($type != 1){
-            $setting = OrganizationSettings::where(['org_id'=>$org_id])->first()->toArray();
+            $setting = OrganizationSettings::where(['org_id'=>$org_id])->first();
+        }
+
+        if(empty($setting)){
+
         }
         $self_config = object_array(json_decode($setting['service_time']));
         //改变时间段
@@ -656,21 +662,22 @@ class ScheDuleController  extends Controller
 
         //添加时间段
 
-        $amCount = $configData['amNum'];
-        $pmCount = $configData['pmNum'];
-        $evCount = $configData['nightNum'];
+        $countArr = [
+            1=>$configData['amNum'],
+            2=>$configData['pmNum'],
+            3=>$configData['nightNum'],
+        ];
 
         $c_r = [
             1=>['count'=>$configData['amNum'],'start_time'=>$configData['amStartTime'],'end_time'=>$configData['amEndTime']],
             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];
+        $changeTimer = [1,2,3];
         //todo 零时关闭排班功能,后续需要解除
         if($changeSeviceTime || !empty($changeTimer)){
 
-            foreach ($changeTimer as $tType)
-            if(in_array($tType,$changeTimer)) {
+            foreach ($changeTimer as $tType){
                 DB::beginTransaction();
                 try {
                     //1.删除旧时间段,并删除排班数据
@@ -678,7 +685,7 @@ class ScheDuleController  extends Controller
 
                     //todo 暂时未删除周排班
                     self::delteScheduleInfo($id,$type);
-                    $count = intval($amCount / $serviceNum);
+                    $count = intval($countArr[$tType] / $serviceNum);
                     //2.创建新时间段
                     self::makeTimePeriod($type,$docter_id,$org_id,$tType,$c_r[$tType],$count,$serviceTime);
                     if($type == 1){
@@ -706,19 +713,15 @@ class ScheDuleController  extends Controller
                             ->GroupBy('week')
                             ->toArray();
                     }
-
-
                     if (empty($week_schedule)) {
-                        Schedule::where(['docter_id' => $docter_id])->delete();
-                        SelfSchedule::where(['docter_id' => $docter_id])->delete();
+//                        Schedule::where(['docter_id' => $docter_id])->delete();
+//                        SelfSchedule::where(['docter_id' => $docter_id])->delete();
                     } else {
-
                         //3.以周模板添加2个月的数据
                         self::makeSchedule($docter_id,$org_id,$type,$schedule,$week_schedule,$time_periods);
 
                         //4.回复自己设置的排班
                         self::makeSelfScheeule($docter_id,$org_id,$type,$time_periods,$self_schedule);
-
                     }
                     DB::commit();
                 } catch (\Exception $e) {
@@ -726,6 +729,7 @@ class ScheDuleController  extends Controller
                     DB::rollBack();
                 }
             }
+
         }
 
 //        {"1":{"amStartTime":"08:00","amEndTime":"12:00","amPerson":3},"2":{"pmStartTime":"14:00","pmEndTime":"18:00","pmPerson":5},"3":{"nightStartTime":"18:00","nightEndTime":"23:00","nightPerson":4}}
@@ -773,9 +777,30 @@ class ScheDuleController  extends Controller
         $org_id = intval(request('org_id'));
         $type = intval(request('type'));
 
-        $setting = DocterSetting::where(['docter_id'=>$docter_id])->first()->toArray();
+        $setting = DocterSetting::where(['docter_id'=>$docter_id])->first();
         if($type  == 1){
-            $setting = OrganizationSettings::where(['org_id'=>$org_id])->first()->toArray();
+            $setting = OrganizationSettings::where(['org_id'=>$org_id])->first();
+        }
+        $docterConfig = SystemConfig::get('docter_config');
+        if(!empty($setting)){
+            $setting = $setting->toArray();
+        } else {
+            $configData = [
+                'amStartTime'=>$docterConfig['morning_start'],
+                'amEndTime'=>$docterConfig['morning_end'],
+                'amNum'=>0,
+                'pmStartTime'=>$docterConfig['afternoon_start'],
+                'pmEndTime'=>$docterConfig['afternoon_start'],
+                'pmNum'=>0,
+                'nightStartTime'=>$docterConfig['evening_start'],
+                'nightEndTime'=>$docterConfig['evening_end'],
+                'nightNum'=>0,
+                'serviceNum'=>1,
+                'showDayNumber'=>7,
+                'status'=>false,
+                'timeSpan'=>30,
+            ];
+            return apiReturn(200,'ok',$configData);
         }
         $config = object_array(json_decode($setting['service_time']));
 
@@ -796,30 +821,13 @@ class ScheDuleController  extends Controller
             'timeSpan'=>$setting['service_times'],
         ];
 
-
-//        configData: {
-//                amEndTime: "11:30",    //上午结束时间  string
-//        amNum: 20,  //上午号源 Num
-//        amStartTime: "09:00",   //上午开始时间  string
-//        nightEndTime: "19:30",    //晚上结束时间   string
-//        nightNum: 8,  //晚上号源  num
-//        nightStartTime: "18:30",   //晚上开始时间 staring
-//        pmEndTime: "16:00",   //下午结束时间   string
-//        pmNum: 20,   //下午号源   num
-//        pmStartTime: "13:30",   //下午开始时间  string
-//        serviceNum: 2,    //同时服务人数   Num
-//        showDayNumber: 7,   //可预约服务天数  Num
-//        status: false,   //  是否开启  true false
-//        timeSpan: "15",   // 就诊时长  string
-//      },
-
         return apiReturn(200,'ok',$configData);
 
     }
     //获取用户信息
     public function getScheduleInfo()
     {
-        $id = request('id');
+        $id = intval(request('id'));
         $isDocter = CdmsUsers::where('docter_id',$id)->first();
         $isOrg = CdmsUsers::where('org_id',$id)->first();
         $org_id = null;
@@ -844,13 +852,13 @@ class ScheDuleController  extends Controller
         $lists =[];
         if($role == 1){
             $ids = DocterOrganization::where(['organization_id'=>$org_id])->pluck('docter_id')->toArray();
-            $list = Docter::whereIn('id',$ids)->get(['id','name']);
+            $list = Docter::whereIn('id',$ids)->distinct('id')->get(['id','name']);
             foreach ($list as $val){
                 $lists[] = ['value'=>$val->id,'label'=>$val->name];
             }
             $name = Organization::where('id',$org_id)->value('name');
         } else if($role == 2){
-            $ids = DocterOrganization::where(['docter_id'=>intval($id)])->distinct('organization_id')->pluck('organization_id')->toArray();
+            $ids = DocterOrganization::where(['docter_id'=>$id])->distinct('docter_id')->pluck('organization_id')->toArray();
             $list = Organization::whereIn('id',$ids)->get(['id','name']);
             foreach ($list as $val){
                 $lists[] = ['value'=>$val->id,'label'=>$val->name];
@@ -905,11 +913,103 @@ class ScheDuleController  extends Controller
     public function get_month_schedule()
     {
         $date  = request('date');
+        $org_id = intval(request('org_id'));
+        $docter_id = intval(request('docter_id'));
+        $type = intval(request('type'));
+        $role = intval(request('role'));
         $start_time = strtotime($date);
-        //$start_time = strtotime(date('Y-m',time()));
         $month_day = date("t",$start_time);
+        $end_time = ($start_time + $month_day * 86400);
+        $start_date = date('Y-m-d',$start_time);
+        $end_date = date('Y-m-d',$end_time);
         $types = [1=>1,2=>2,3=>3];
 
+
+//        if($type == 1){
+//            $schedule_data = Schedule::where(['docter_id'=>$docter_id,'organization_id'=>0])
+//                ->whereBetween('schedule_date',[$start_date,$end_date])->pluck('schedule_date','id')->toArray();
+//            $settingConfig = DocterSetting::where(['docter_id'=>$docter_id])->first();
+//            $serviceConfig = object_array(json_decode($settingConfig['service_time']));
+//        } else {
+//            $schedule_data = Schedule::where(['docter_id'=>0,'organization_id'=>$org_id])->
+//            whereBetween('schedule_date',[$start_date,$end_date])->pluck('schedule_date','id')->toArray();
+//            $settingConfig = OrganizationSettings::where(['org_id'=>$org_id])->first();
+//            $serviceConfig = object_array(json_decode($settingConfig['service_time']));
+//        }
+//
+//        if(!empty($settingConfig)){
+//            $baseData =  [
+//                ['status'=>false,'type'=>1,'start'=>$serviceConfig[1]['amStartTime'],'end'=>$serviceConfig[1]['amEndTime']],
+//                ['status'=>false,'type'=>2,'start'=>$serviceConfig[2]['pmStartTime'],'end'=>$serviceConfig[2]['pmEndTime']],
+//                ['status'=>false,'type'=>3,'start'=>$serviceConfig[3]['nightStartTime'],'end'=>$serviceConfig[3]['nightEndTime']],
+//            ];
+//
+//        } else{
+//            $serviceConfig = '';
+//            $baseData =  [
+//                ['status'=>false,'type'=>1,'start'=>$serviceConfig[1]['amStartTime'],'end'=>$serviceConfig[1]['amEndTime']],
+//                ['status'=>false,'type'=>2,'start'=>$serviceConfig[2]['pmStartTime'],'end'=>$serviceConfig[2]['pmEndTime']],
+//                ['status'=>false,'type'=>3,'start'=>$serviceConfig[3]['nightStartTime'],'end'=>$serviceConfig[3]['nightEndTime']],
+//            ];
+//
+//            self::baseMonthSchedule($month_day,$baseData);
+//            return [];
+//        }
+//
+//        for($i=1;$i<$month_day; $i++){
+//            //$startKey = date('d',time());
+//            $week = date('N',$start_time + ($i-1) * 86400);
+//            $scheduleDate = date('Y-m-d',$start_time + ($i-1) * 86400);
+//
+//            if(empty($schedule_data)){
+//                $scheduleList[$i] = [
+//                    'schedulelingList'=>$baseData,
+//                    'date'=>$scheduleDate,
+//                    'week'=>$week,
+//                    'day'=>$scheduleDate
+//                ];
+//            } else {
+//            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();
+//
+//                if(empty($today)){
+//                    $scheduleList[$i] = [
+//                        '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;
+////            $schedule_id = $schedule_data[$schedule_data];
+//            if($type == 1){
+//                $today = SchedulePeriod::where(['docter_id'=>$docter_id,'schedule_date'=>$scheduleDate])->get(['organization_id','type'])->GroupBy('type');
+//
+//                dd($today);
+//            }
+////            date'=>($i+1),'day'=>$now_date,'schedulelingList'=>$arr,'week'=>$week
+////            dd($scheduleList);
+//
+//        }
+//
         $status = [1=>true,2=>'other',3=>false];
 
         for($i=0;$i<$month_day;$i++){
@@ -962,15 +1062,15 @@ class ScheDuleController  extends Controller
     {
 
         //todo 上线取消默认值
-        $schdule_data = request('schedule_data',1);
-        $docter_id = intval(request('docter_id',1));
-        $schedule_type = request('schedule_type',1);
-        $org_id = intval(request('org_id',1));
+        $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)){
+        if(empty($schdule_data) || empty($docter_id) || !isset($org_id) || empty($type)){
             return apiReturn(601,'缺少必要参数');
         }
         //获取医生排班配置
@@ -978,7 +1078,7 @@ class ScheDuleController  extends Controller
         //默认为门诊排班医生配置
         $setting = DocterSetting::where(['docter_id'=>$docter_id])->first();
         //获取社区排班设置
-//        if($type == 1) $setting = DocterSetting::where(['org_id'=>$org_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],
@@ -1159,12 +1259,15 @@ class ScheDuleController  extends Controller
         if(empty($docter_id) || empty($org_id) || empty($type) || empty($data)){
             return apiReturn(601,'缺少必要参数');
         }
+        $docter_setting = [];
         if($type == 1){
             $docter_setting = DocterSetting::where(['docter_id'=>$docter_id])->first();
         } else {
             $docter_setting = OrganizationSettings::where(['org_id'=>$org_id])->first();
         }
 
+
+
         $time = [];
         if(!empty($docter_setting)){
             $time_period = object_array(json_decode($docter_setting->service_time));
@@ -1173,18 +1276,74 @@ class ScheDuleController  extends Controller
             $times[] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[3]['nightStartTime']),intval($time_period[3]['nightEndTime'])])->pluck('id')->toArray();
         }
 
-        $week_data = [
-            'schedule_type'=>$type,
-            'organization_id'=>$org_id,
-            'docter_id'=>$docter_id
-        ];
+        //沒有配置就新建
+        if(empty($docter_setting) || $times){
+            $docter_config = SystemConfig::get('docter_config');
+            $amCount = intval(((strtotime($docter_config['morning_end'])) - (strtotime($docter_config['morning_start']))) / ($docter_config['service_time']*60));
+            $pmCount = intval(((strtotime($docter_config['afternoon_end'])) - (strtotime($docter_config['afternoon_start']))) / ($docter_config['service_time']*60));
+            $evCount = intval(((strtotime($docter_config['evening_end'])) - (strtotime($docter_config['evening_start']))) / ($docter_config['service_time']*60));
+            $c_r = [
+                1=>['count'=>$amCount,'start_time'=>$docter_config['morning_start'],'end_time'=>$docter_config['morning_end']],
+                2=>['count'=>$pmCount,'start_time'=>$docter_config['afternoon_start'],'end_time'=>$docter_config['afternoon_end']],
+                3=>['count'=>$evCount,'start_time'=>$docter_config['evening_start'],'end_time'=>$docter_config['evening_end']]
+            ];
+
+            if($type == 1){
+                $setingData = [
+                    'docter_id'=>$docter_id,
+                    'type'=>$type,
+                    'status'=>false,
+                    'show_days'=>7,
+                    'service_time'=>json_encode($c_r),
+                    'service_times'=>30,
+                ];
+                $isHave = DocterSetting::where($setingData)->count();
+                if(!$isHave) {
+                    $setingData [ 'created_at']=Carbon::now();
+                    $setingData [ 'updated_at']=Carbon::now();
+                    DocterSetting::insert($setingData);
+                }
+            } else {
+                $setingData = [
+                    'org_id'=>$docter_id,
+                    'type'=>$type,
+                    'status'=>false,
+                    'show_days'=>7,
+                    'service_time'=>json_encode($c_r),
+                    'service_times'=>30,
+                ];
+                $isHave = OrganizationSettings::where($setingData)->count();
+                if(!$isHave) {
+                    $setingData [ 'created_at']=Carbon::now();
+                    $setingData [ 'update_at']=Carbon::now();
+                    OrganizationSettings::insert($data);
+                }
+            }
+            foreach ($c_r as $key => $val){
+                self::makeTimePeriod($type,$docter_id,$org_id,$key,$val,$val['count'],$docter_config['service_time']);
+            }
+
+
+        }
+
+        if($type == 1){
+            $week_data = [
+                'organization_id'=>$org_id,
+                'docter_id'=>$docter_id
+            ];
+        } else {
+            $week_data = [
+                'organization_id'=>$org_id,
+                'docter_id'=>0
+            ];
+        }
+        $week_data  ['schedule_type']=$type;
 
         $k = 0;
         DB::beginTransaction();
         $data[0] = array_values(object_array(json_decode($data[0])));
         $data[1] = array_values(object_array(json_decode($data[1])));
         $data[2] = array_values(object_array(json_decode($data[2])));
-
         try {
             for($i=0;$i<=2;$i++){
                 $schedule_data = $data[$i];
@@ -1196,14 +1355,23 @@ class ScheDuleController  extends Controller
 //                        echo '时间列类型'.($i+1).'----'.$key.'星期数'.'<br>';
                         foreach ($times[$i] as $id){
                             $week_data['time_period_id'] = $id;
-                            $is_have = WeekSchedule::where(['docter_id'=>$docter_id,'schedule_type'=>$type,'type'=>$i+1,'week'=>$key])->where('time_period_id',$id)->value('id');
+                            if($type == 1){
+                                $is_have = WeekSchedule::where(['docter_id'=>$docter_id,'schedule_type'=>$type,'type'=>$i+1,'week'=>$key])->where('time_period_id',$id)->value('id');
+                            } else {
+                                $is_have = WeekSchedule::where(['docter_id'=>0,'schedule_type'=>$type,'type'=>$i+1,'week'=>$key])->where('time_period_id',$id)->value('id');
+                            }
                             if($is_have) continue;
                             $k++;
                             WeekSchedule::insert($week_data);
                         }
                     } else {
-                        $is_have = WeekSchedule::where(['docter_id' => $docter_id, 'organization_id' => $org_id, 'schedule_type' => $type,'type'=>$i+1,'week'=>$key])->whereIn('time_period_id', $times[$i])->value('id');
-                        if($is_have) WeekSchedule::where(['docter_id' => $docter_id, 'organization_id' => $org_id, 'schedule_type' => $type,'type'=>$i+1,'week'=>$key])->whereIn('time_period_id', $times[$i])->delete();
+                        if($type == 1){
+                            $is_have = WeekSchedule::where(['docter_id' => $docter_id, 'organization_id' => $org_id, 'schedule_type' => $type,'type'=>$i+1,'week'=>$key])->whereIn('time_period_id', $times[$i])->value('id');
+                            if($is_have) WeekSchedule::where(['docter_id' => $docter_id, 'organization_id' => $org_id, 'schedule_type' => $type,'type'=>$i+1,'week'=>$key])->whereIn('time_period_id', $times[$i])->delete();
+                        } else {
+                            $is_have = WeekSchedule::where(['docter_id' => 0, 'organization_id' => $org_id, 'schedule_type' => $type,'type'=>$i+1,'week'=>$key])->whereIn('time_period_id', $times[$i])->value('id');
+                            if($is_have) WeekSchedule::where(['docter_id' => 0, 'organization_id' => $org_id, 'schedule_type' => $type,'type'=>$i+1,'week'=>$key])->whereIn('time_period_id', $times[$i])->delete();
+                        }
                     }
                 }
             }
@@ -1341,11 +1509,11 @@ class ScheDuleController  extends Controller
      */
     public static function delteScheduleInfo($id,$type){
         if($type == 1){
-            TimePeriod::where(['docter_id'=>$id])->where('org_id','=',0)->delete();
-            SchedulePeriod::where(['docter_id'=>$id])->where('organization_id','!=',0)->delete();
+            TimePeriod::where(['docter_id'=>$id,'type'=>$type])->where('org_id','=',0)->delete();
+            SchedulePeriod::where(['docter_id'=>$id,'type'=>$type])->where('organization_id','=',0)->delete();
         } else {
-            TimePeriod::where(['org_id'=>$id])->where('docter_id','=',0)->delete();
-            SchedulePeriod::where(['organization_id'=>$id])->where('docter_id','!=',null)->delete();
+            TimePeriod::where(['org_id'=>$id,'type'=>$type])->where('docter_id','=',0)->delete();
+            SchedulePeriod::where(['organization_id'=>$id,'type'=>$type])->where('docter_id','=',0)->delete();
         }
         return true;
     }
@@ -1364,8 +1532,10 @@ class ScheDuleController  extends Controller
             ];
             if($scheduleType == 1){
                 $timePreiod['org_id'] = 0;
+                $timePreiod['docter_id'] = $docterId;
             }  else {
                 $timePreiod['docter_id'] = 0;
+                $timePreiod['org_id'] = $orgId;
             }
             $isHave = TimePeriod::where($timePreiod)->count();
             if($isHave) continue;
@@ -1374,139 +1544,99 @@ class ScheDuleController  extends Controller
         return true;
     }
 
-    public function oldorg(){
-        if(in_array(2,$is_new)){
-
-            DB::beginTransaction();
-            try {
-                $time_periods = TimePeriod::where(['org_id' => $org_id, 'docter_id' => $docter_id, 'type' => 2])->pluck('id')->toArray();
-                $week_schedule = WeekSchedule::where(['docter_id' => $docter_id, 'type' => 2])->distinct('type')->orderBy('week')->pluck('week')->toArray();
-                $self_schedule = SelfSchedule::where(['docter_id' => $docter_id, 'schedule_type' => $type, 'type' => 2])->distinct('type')
-                    ->orderBy('schedule_date')->get(['schedule_date', 'type', 'week'])->toArray();
-                SchedulePeriod::where(['docter_id' => $docter_id])->where('schedule_date', '>', date('Y-m-d', time()))->delete();
-                if (empty($week_schedule)) {
-                    Schedule::where(['docter_id' => $docter_id])->delete();
-                    SelfSchedule::where(['docter_id' => $docter_id])->delete();
+
+    //以周模板进行排班
+    public static function makeSchedule ($docterId,$orgId,$type,$schedule,$weekSchedule,$timePeriods){
+
+        if(empty($schedule) || count($schedule) < 58){
+                $start = strtotime(date('Y-m-1',time()));
+                $today = date('j',time());
+                $allDay = date('t',time());
+
+                //门诊排班
+                if($type == 1){
+                    $scheduleData['docter_id']=$docterId;
+                    $scheduleData['organization_id']= 0;
                 } else {
-                    $schedule = Schedule::where(['docter_id'=>$docter_id,'organization_id'=>$org_id])
-                        ->where('schedule_date','>',date('Y-m-d',time()))->pluck('schedule_date','id')->toArray();
-                    $schedule = Schedule::where(['docter_id' => $docter_id, 'organization_id' => $org_id])->pluck('schedule_date', 'id')->toArray();
-                    foreach ($schedule as $id => $date) {
-                        $week = intval(date('N', strtotime($date)));
-                        foreach ($week_schedule as $w) {
-                            if ($week == $w) {
-                                foreach ($time_periods as $idt) {
-                                    $s_t = [
-                                        'organization_id' => $org_id,
-                                        'docter_id' => $docter_id,
-                                        'type' => $type,
-                                        'schedule_date' => $date,
-                                        'schedule_id' => $id,
-                                        'time_period_id' => $idt
-                                    ];
-                                    $schedule_is_have = SchedulePeriod::where($s_t)->count();
-                                    if ($schedule_is_have) continue;
-                                    $s_t['created_at'] = Carbon::now();
-                                    $s_t['updated_at'] = Carbon::now();
-                                    SchedulePeriod::insert($s_t);
-                                }
-                            }
-                        }
-                    }
-                    SelfSchedule::where(['type'=>2,'docter_id'=>$docter_id,'organization_id'=>$org_id])->whereIn('time_period_id',$time_periods)->delete();
-                    foreach ($self_schedule as $val) {
-                        $self_data = $val;
-                        $self_data['organization_id'] = $org_id;
-                        $self_data['docter_id'] = $docter_id;
-                        foreach ($time_periods as $idt) {
-                            $self_data['time_period_id'] = $idt;
-                            $is_self_have = SelfSchedule::where($self_data)->count();
-                            if ($is_self_have) continue;
-                            $self_data['created_at'] = Carbon::now();
-                            $self_data['updated_at'] = Carbon::now();
-                            SelfSchedule::insert($self_data);
-                        }
-                    }
+                    $scheduleData['docter_id']=0;
+                    $scheduleData['organization_id']= $orgId;
+                }
+
+                //第一个月
+                for ($i=$today;$i<=$allDay;$i++){
+                    $todayTimer = $start + (($i - 1) *86400);
+                    $week = date('N',$todayTimer);
+
+                    $date = date('Y-m-d',$todayTimer);
+                    $numDate = date('Ymd',$todayTimer);
+                    $scheduleData['schedule_date'] = $date;
+                    $scheduleData['schedule_day'] = $numDate;
+
+                     $scheduleIsHave = Schedule::where($scheduleData)->count();
+                     if ($scheduleIsHave) continue;
+                     Schedule::insertGetId($scheduleData);
+                }
+                $nextStart = strtotime(date('Y-m-1',strtotime('next month')));
+                $nextAllDay = date('t',strtotime('nex month'));
+
+
+                //第二个月
+                for($j=1;$j<=$nextAllDay;$j++){
+                    $todayTimer = $nextStart + (($j-1)*86400);
+                    $week = date('N',$todayTimer);
+                    $date = date('Y-m-d',$todayTimer);
+                    $numDate = date('Ymd',$todayTimer);
+                    $scheduleData['schedule_date'] = $date;
+                    $scheduleData['schedule_day'] = $numDate;
+                    $scheduleIsHave = Schedule::where($scheduleData)->count();
+                    if ($scheduleIsHave) continue;
+                    Schedule::insertGetId($scheduleData);
+                }
+                $schedule = Schedule::where(['docter_id'=>$docterId,'organization_id'=>0])->where('schedule_date','>',date('Y-m-d',time()))
+                ->distinct('schedule_date')->pluck('schedule_date','id')->toArray();
+            if($type == 2){
+                $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();
                 }
-                DB::commit();
-            } catch (\Exception $e) {
-                dd($e->getMessage());
-                DB::rollBack();
-            }
-            for($i=1;$i<=$pmCount;$i++){
-                $pmdata = [
-                    'docter_id'=>$docter_id,
-                    'start_time_period'=> date('H:i',strtotime($configData['pmStartTime']) + ($i-1)*$configData['timeSpan']*60),
-                    'end_time_period'=> date('H:i',strtotime($configData['pmStartTime']) + $i*$configData['timeSpan']*60),
-                ];
-                TimePeriod::insert($pmdata);
             }
-        }
 
-        if(in_array(3,$is_new)){
-
-            DB::beginTransaction();
-            try {
-                $time_periods = TimePeriod::where(['org_id' => $org_id, 'docter_id' => $docter_id, 'type' => 3])->pluck('id')->toArray();
-                $week_schedule = WeekSchedule::where(['docter_id' => $docter_id, 'type' => 3])->distinct('type')->orderBy('week')->pluck('week')->toArray();
-                $self_schedule = SelfSchedule::where(['docter_id' => $docter_id, 'schedule_type' => $schedule_type, 'type' => 3])->distinct('type')
-                    ->orderBy('schedule_date')->get(['schedule_date', 'type', 'week'])->toArray();
-                SchedulePeriod::where(['docter_id' => $docter_id])->where('schedule_date', '>', date('Y-m-d', time()))->delete();
-                if (empty($week_schedule)) {
-                    Schedule::where(['docter_id' => $docter_id])->delete();
-                    SelfSchedule::where(['docter_id' => $docter_id])->delete();
-                } else {
-                    $schedule = Schedule::where(['docter_id'=>$docter_id,'organization_id'=>$org_id])
-                        ->where('schedule_date','>',date('Y-m-d',time()))->pluck('schedule_date','id')->toArray();
-//                        $schedule = Schedule::where(['docter_id' => $docter_id, 'organization_id' => $org_id])->pluck('schedule_date', 'id')->toArray();
-                    foreach ($schedule as $id => $date) {
-                        $week = intval(date('N', strtotime($date)));
-                        foreach ($week_schedule as $w) {
-                            if ($week == $w) {
-                                foreach ($time_periods as $idt) {
-                                    $s_t = [
-                                        'organization_id' => $org_id,
-                                        'docter_id' => $docter_id,
-                                        'type' => $type,
-                                        'schedule_date' => $date,
-                                        'schedule_id' => $id,
-                                        'time_period_id' => $idt
-                                    ];
-                                    $schedule_is_have = SchedulePeriod::where($s_t)->count();
-                                    if ($schedule_is_have) continue;
-                                    $s_t['created_at'] = Carbon::now();
-                                    $s_t['updated_at'] = Carbon::now();
-                                    if ($self_schedule == 1) $s_t['me_sure'] = 1;
-                                    SchedulePeriod::insert($s_t);
-                                }
-                            }
-                        }
+            foreach ($schedule as $id => $date) {
+                $week = intval(date('N', strtotime($date)));
+                foreach ($weekSchedule as $w) {
+
+                    //门诊和儿保,计免排班分开
+                    if($type == 1){
+                        $realWeek = $w[0]['week'];
+                        $oId = $w = $w[0]['organization_id'];
+                    } else {
+                        $realWeek = $w;
+                        $oId = $orgId;
                     }
-                    SelfSchedule::where(['type'=>3,'docter_id'=>$docter_id,'organization_id'=>$org_id])->whereIn('time_period_id',$time_periods)->delete();
-                    foreach ($self_schedule as $val) {
-                        $self_data = $val;
-                        $self_data['organization_id'] = $org_id;
-                        $self_data['docter_id'] = $docter_id;
-                        foreach ($time_periods as $idt) {
-                            $self_data['time_period_id'] = $idt;
-                            $is_self_have = SelfSchedule::where($self_data)->count();
-                            if ($is_self_have) continue;
-                            $self_data['created_at'] = Carbon::now();
-                            $self_data['updated_at'] = Carbon::now();
-                            SelfSchedule::insert($self_data);
+
+                    if ($week == $realWeek) {
+                        foreach ($timePeriods as $idt) {
+                            $s_t = [
+                                'organization_id' => $oId,
+                                'docter_id' => $docterId,
+                                'type' => $type,
+                                'schedule_date' => $date,
+                                'schedule_id' => $id,
+                                'time_period_id' => $idt
+                            ];
+                            $scheduleIsHave = SchedulePeriod::where($s_t)->count();
+                            if ($scheduleIsHave) continue;
+                            $s_t['created_at'] = Carbon::now();
+                            $s_t['updated_at'] = Carbon::now();
+                            SchedulePeriod::insert($s_t);
                         }
                     }
                 }
-                DB::commit();
-            } catch (\Exception $e) {
-                dd($e->getMessage());
-                DB::rollBack();
             }
-        }
+        return true;
     }
-    public static function makeSchedule ($docterId,$orgId,$type,$schedule,$weekSchedule,$timePeriods){
+
+    public static function makeOrgainzationSchedule ($docterId,$orgId,$type,$schedule,$weekSchedule,$timePeriods){
         //门诊排班
-        if($type == 1){
             if(empty($schedule) || count($schedule) < 58){
                 $start = strtotime(date('Y-m-1',time()));
                 $today = date('j',time());
@@ -1518,16 +1648,16 @@ class ScheDuleController  extends Controller
 
                     $date = date('Y-m-d',$todayTimer);
                     $numDate = date('Ymd',$todayTimer);
-                     $scheduleData = [
-                         'schedule_date'=>$date,
-                         'schedule_day'=>$numDate,
-                         'week'=>$week,
-                         'docter_id'=>$docterId,
-                         'organization_id'=>0
-                     ];
-                     $scheduleIsHave = Schedule::where($scheduleData)->count();
-                     if ($scheduleIsHave) continue;
-                     Schedule::insertGetId($scheduleData);
+                    $scheduleData = [
+                        'schedule_date'=>$date,
+                        'schedule_day'=>$numDate,
+                        'week'=>$week,
+                        'docter_id'=>0,
+                        'organization_id'=>$orgId
+                    ];
+                    $scheduleIsHave = Schedule::where($scheduleData)->count();
+                    if ($scheduleIsHave) continue;
+                    Schedule::insertGetId($scheduleData);
                 }
                 $nextStart = strtotime(date('Y-m-1',strtotime('next month')));
                 $nextAllDay = date('t',strtotime('nex month'));
@@ -1560,8 +1690,8 @@ class ScheDuleController  extends Controller
                     if ($week == $w[0]['week']) {
                         foreach ($timePeriods as $idt) {
                             $s_t = [
-                                'organization_id' => $w[0]['organization_id'],
-                                'docter_id' => $docterId,
+                                'organization_id' => $orgId,
+                                'docter_id' => 0,
                                 'type' => $type,
                                 'schedule_date' => $date,
                                 'schedule_id' => $id,
@@ -1578,10 +1708,10 @@ class ScheDuleController  extends Controller
                     }
                 }
             }
-        }
         return true;
     }
 
+    //自己排班
     public function makeSelfScheeule($docterId,$orgId,$type,$timesPeriods,$selfSchedule){
         if($type == 1){
             $orgId = 0;
@@ -1604,4 +1734,12 @@ class ScheDuleController  extends Controller
             }
         }
     }
+    public static function   baseMonthSchedule($monthDay, $baseData){
+        $start_time = strtotime(date('Y-m-1',time()));
+        for($i = 1 ; $i<=$monthDay; $i++){
+            $week = date('N',$start_time + ($i-1) * 86400);
+            $scheduleDate = date('Y-m-d',$start_time + ($i-1) * 86400);
+        }
+
+    }
 }

+ 0 - 1
public/cdms/static/css/app.999c8fb4.css

xqd
@@ -1 +0,0 @@
-#app{width:1200px;margin:30px auto}

+ 1 - 0
public/cdms/static/css/app.b0dfcc84.css

xqd
@@ -0,0 +1 @@
+.titlestyle{font-size:12px;color:grey}.text{font-size:14px}.item{margin-bottom:18px}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}.box-card{margin-bottom:30px}.elcheckbox_style{display:flex;flex-direction:column}.mtC20{margin-top:-20px;margin-bottom:20px}.color_gold{color:#e6a23c}.block{width:100%;margin-bottom:20px;margin-top:10px;text-align:center}.table-container-wrapper{width:100%;height:calc(100% - 120px);min-height:300px;padding-top:10px;box-sizing:border-box;overflow:hidden}.table-container-style{min-width:660px;height:100%;overflow:auto;border:1px solid #eee;border-right:none}.table-header-style{height:50px;background-color:#1d88ff;color:#fff}.header-col-style{font-size:14px;border-right:1px solid #eee;height:100%;vertical-align:middle;display:flex;justify-content:center;align-items:center}.table-content-style{height:calc(100% - 50px)}.content-title-style{height:100%}.title-col-style{height:50%;min-height:160px;display:flex;justify-content:center;align-items:center;border-right:1px solid #eee;border-bottom:1px solid #eee}.col-list-style{text-align:center;color:#a9a9a9;font-size:14px;width:140px;max-height:150px;overflow-x:hidden;overflow-y:auto}.showDay{position:absolute;top:-3px;right:5px;font-size:14px;color:#999;text-align:left;text-indent:13px}.col-list-background{width:100%;height:40px;line-height:40px;background-color:#ccc;color:#fff;cursor:pointer;margin:5px 0}.amClass{background-color:#469ad0;color:#fff}.pmClass{background-color:#f29d39;color:#fff}.nightClass{background-color:#5eaf9d;color:#fff}.el-col-3{width:14.28%!important}

File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.215f8c27.js


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.215f8c27.js.map


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.306dc37f.js


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.306dc37f.js.map


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.426d1eed.js


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.426d1eed.js.map


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.545de3dc.js


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.545de3dc.js.map


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.76f2e405.js


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.76f2e405.js.map


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.81757419.js


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.81757419.js.map


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.8628ae9c.js


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.8628ae9c.js.map


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.c37981e4.js


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.c37981e4.js.map


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.e305e70b.js


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.e305e70b.js.map


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.e96ab16e.js


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.e96ab16e.js.map


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.f1ec90df.js


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/app.f1ec90df.js.map


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/chunk-vendors.6c9b2a24.js


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/chunk-vendors.6c9b2a24.js.map


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/chunk-vendors.e71f87b8.js


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/chunk-vendors.e71f87b8.js.map


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/chunk-vendors.feab90c7.js


File diff suppressed because it is too large
+ 0 - 0
public/cdms/static/js/chunk-vendors.feab90c7.js.map


+ 1 - 1
resources/views/cdms/schedule.blade.php

xqd
@@ -1 +1 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>scheduling</title><link href="static/css/app.999c8fb4.css" rel="preload" as="style"><link href="static/css/chunk-vendors.767f701c.css" rel="preload" as="style"><link href="static/js/app.306dc37f.js" rel="preload" as="script"><link href="static/js/chunk-vendors.e71f87b8.js" rel="preload" as="script"><link href="static/css/chunk-vendors.767f701c.css" rel="stylesheet"><link href="static/css/app.999c8fb4.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but scheduling doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="static/js/chunk-vendors.e71f87b8.js"></script><script src="static/js/app.306dc37f.js"></script></body></html>
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>scheduling</title><link href="static/css/app.b0dfcc84.css" rel="preload" as="style"><link href="static/css/chunk-vendors.767f701c.css" rel="preload" as="style"><link href="static/js/app.545de3dc.js" rel="preload" as="script"><link href="static/js/chunk-vendors.feab90c7.js" rel="preload" as="script"><link href="static/css/chunk-vendors.767f701c.css" rel="stylesheet"><link href="static/css/app.b0dfcc84.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but scheduling doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="static/js/chunk-vendors.feab90c7.js"></script><script src="static/js/app.545de3dc.js"></script></body></html>

Some files were not shown because too many files changed in this diff