Pārlūkot izejas kodu

排班,社区端后台优化

Swdz-WangHaiJun 4 gadi atpakaļ
vecāks
revīzija
7d5375138d

+ 22 - 6
app/Community/Controllers/NurseController.php

xqd xqd xqd
@@ -39,13 +39,18 @@ class NurseController extends AdminController
         $grid->column('used', __('已使用'))->display(function ($w){
             return $w??0;
         });
+        $grid->column('type','类型')->display(function ($t){
+           return Nurse::getNursetype()[$t];
+        });
         $grid->column('today', __('今日预约'));
         $grid->column('docters','服务医生')->display(function ($ids){
            $docters = Docter::whereIn('id',$ids)->pluck('name')->toArray();
            if(count($docters) > 3) return $docters[0].','.$docters[1].','.$docters[2].'...';
            return implode(',',$docters);
         });
-        $grid->column('price', __('价格'))->editable();
+        $grid->column('price', __('价格'))->display(function ($v){
+            return round($v/100,4).'元';
+        })->editable();
         $grid->column('remark', __('备注'))->editable('textarea');
         $grid->actions(function ($actions){
             $actions->disableView();
@@ -83,13 +88,17 @@ class NurseController extends AdminController
         $form = new Form(new Nurse());
         $user = Admin::user();
         $org_id = $user->org_id;
+        $form->editing(function ($f){
+            $f->model()->price /= 100;
+        });
         $form->text('name', __('项目名称'));
-        $form->text('price', __('价格'));
+        $form->select('type','类型')->options(Nurse::getNursetype())->when(1,function (Form $form){
+            $form->hidden('price', __('价格'))->default(0);
+        })->when(2,function (Form $form){
+            $form->text('price', __('价格'))->help('单位元');
+        });
         $form->hidden('org_id')->value($org_id);
-//        if($org_id){
-//        } else {
-//            $form->select('org_id','机构')->options(Organization::pluck('name','id'));
-//        }
+
         $form->multipleSelect('docters','服务医生')->options(function () use ($org_id) {
             if(empty($org_id)){
                 return  Docter::pluck('name','id');
@@ -99,6 +108,13 @@ class NurseController extends AdminController
             return  Docter::whereIn('id',$ids)->pluck('name','id');
         });
         $form->textarea('remark', __('备注'));
+        $form->saving(function ($form){
+            if($form->type == 1){
+                $form->price = 0;
+            } else {
+                $form->price = $form->price*100;
+            }
+        });
         $form->setWidth(6);
 
         return $form;

+ 128 - 51
app/Http/Controllers/ScheDuleController.php

xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd
@@ -544,8 +544,9 @@ class ScheDuleController  extends Controller
     //设置自己排班
     public function setSelfSchedule()
     {
-        $docter_id = request('docter_id');
-        $org_id = request('org_id');
+        //todo 记得把默认值取消
+        $docter_id = request('docter_id',0);
+        $org_id = request('org_id',0);
         $date = request('date');
         $type = request('type','1,2'); //1 上午,2 下午,3 晚上
         $schedule_type = request('schedule_type',1);
@@ -617,22 +618,22 @@ class ScheDuleController  extends Controller
             return apiReturn(604,'参数错误');
         }
 
-//        $configData = object_array(json_decode($configData));
-        $configData = [
-            'amEndTime'=>"11:30",
-            'amNum'=>5,
-            'amStartTime'=>"09:00",
-            'nightEndTime'=>"20:30",
-            'nightStartTime'=>"19:00",
-            'nightNum'=>3,
-            'pmEndTime'=>"16:00",
-            'pmNum'=>5,
-            'pmStartTime'=>"13:30",
-            'showDayNumber'=>7,
-            'serviceNum'=>2,
-            'status'=>false,
-            'timeSpan'=>30,
-        ];
+        $configData = object_array(json_decode($configData));
+//        $configData = [
+//            'amEndTime'=>"11:30",
+//            'amNum'=>5,
+//            'amStartTime'=>"09:00",
+//            'nightEndTime'=>"20:30",
+//            'nightStartTime'=>"19:00",
+//            'nightNum'=>3,
+//            'pmEndTime'=>"16:00",
+//            'pmNum'=>5,
+//            'pmStartTime'=>"13:30",
+//            'showDayNumber'=>7,
+//            'serviceNum'=>2,
+//            'status'=>false,
+//            'timeSpan'=>30,
+//        ];
 
 //        configData: {
 //                amEndTime: "11:30",    //上午结束时间  string
@@ -694,16 +695,19 @@ class ScheDuleController  extends Controller
         //        timeSpan: "15",   // 就诊时长  string
 //      },
         //添加时间段
-        $is_new = [2,3];
+        $is_new = [1,2,3];
+
         $amCount = $configData['amNum'];
         $pmCount = $configData['pmNum'];
         $evCount = $configData['nightNum'];
+
         $c_r = [
-            ['count'=>$configData['amNum'],'start_time'=>$configData['amStartTime'],'end_time'=>$configData['amEndTime']],
-            ['count'=>$configData['pmNum'],'start_time'=>$configData['pmStartTime'],'end_time'=>$configData['pmEndTime']],
-            ['count'=>$configData['nightNum'],'start_time'=>$configData['nightStartTime'],'end_time'=>$configData['nightEndTime']]
+            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']]
         ];
-        if($is_change){
+        //todo 零时关闭排班功能,后续需要解除
+        if($is_change && 1!=1){
 
             if(in_array(1,$is_new)) {
                 DB::beginTransaction();
@@ -896,19 +900,22 @@ class ScheDuleController  extends Controller
             }
 
         } else {
+            if(1!=1){
                 foreach ($is_new as $c){
-                    for($i=1;$i<=$c_r[$c];$i++){
+                    for($i=1;$i<=$c_r[$c]['count'];$i++){
                         $evdata = [
+                            'org_id'=>$org_id,
                             'docter_id'=>$docter_id,
-                            'start_time_period'=> date('H:i',strtotime($configData['nightStartTime']) + ($i-1)*$configData['timeSpan']*60),
-                            'end_time_period'=> date('H:i',strtotime($configData['nightStartTime']) + $i*$configData['timeSpan']*60),
+                            'type'=>$c,
+                            'start_time_period'=> date('H:i',strtotime($c_r[$c]['start_time']) + ($i-1)*$configData['timeSpan']*60),
+                            'end_time_period'=> date('H:i',strtotime($c_r[$c]['start_time']) + $i*$configData['timeSpan']*60),
                         ];
-                        $is_have = TimePeriod::where($evdata);
+                        $is_have = TimePeriod::where($evdata)->count();
                         if($is_have) continue;
                         TimePeriod::insert($evdata);
                     }
                 }
-
+            }
         }
 //        {"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 = [
@@ -1059,45 +1066,114 @@ class ScheDuleController  extends Controller
               $now_date = date('Y-m-d',$now_time);
               $week = date('N',$now_time);
               $arr = [
-                  ['status'=>false,'type'=>1],
-                  ['status'=>true,'type'=>2],
-                  ['status'=>false,'type'=>3],
+                  ['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],
-                      ['status'=>true,'type'=>2],
-                      ['status'=>true,'type'=>3],
+                      ['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],
-                    ['status'=>'other','type'=>2],
-                    ['status'=>false,'type'=>3],
+                    ['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%3 == 0){
+            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'=>'other','type'=>1],
-                    ['status'=>true,'type'=>2],
-                    ['status'=>false,'type'=>3],
+                    ['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',$all_time);
     }
 
+    public function set_day_schedule()
+    {
+
+        //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));
+        $date = request('date');
+        $schedule_type == 1?$type=2:$type=1;
+
+        if(empty($schdule_data) || empty($docter_id) || empty($org_id)){
+            return apiReturn(601,'缺少必要参数');
+        }
+        $schedule = object_array(json_decode($schdule_data));
+        $setting = DocterSetting::where(['docter_id'=>$docter_id])->first();
+
+        $schdule_data = [
+            ['status'=>false,'type'=>1,'start'=>"09:00",'end'=>'11:30','date'=>15,'week'=>1],
+            ['status'=>true,'type'=>2,'start'=>'13:30','end'=>'16:30','date'=>15,'week'=>1],
+            ['status'=>false,'type'=>3,'start'=>'19:30','end'=>'21:00','date'=>15,'week'=>1],
+        ];
+
+        DB::beginTransaction();
+        try {
+            foreach ($schdule_data as $t=>$v){
+
+                $today = date('Y-m-d',(strtotime($date) + (intval($v['date'])-1) *86400) );
+                $num_date = intval(str_replace('-','',$today));
+
+                if($v['status'] == true){
+                    SchedulePeriod::where(['docter_id'=>$docter_id,'schedule_date'=>$today])->delete();
+                    $sche_data = ['organization_id'=>$org_id,'schedule_date'=>$today,'schedule_day'=>$num_date];
+                    $sid = Schedule::insertGetId($sche_data);
+                    echo '医生'.$docter_id.' 机构'.$org_id.' type '.$t;
+                    $timeperiods = TimePeriod::where(['docter_id'=>intval($docter_id),'org_id'=>intval($org_id),'type'=>intval($t)])->pluck('id')->toArray();
+                    foreach ($timeperiods as $id){
+                        $data = [
+                            'schedule_id'=>$sid,
+                            'organization_id'=>$org_id,
+                            'time_period_id'=>$id,
+                            'type'=>$v['type'],
+                            'docter_id'=>$docter_id,
+                        ];
+                        TimePeriod::insert($data);
+                    }
 
+                } else if($v['status'] == false){
+                    $s_id = Schedule::where(['schedule_id'=>$today,'docter_id'=>$org_id,])->value('id');
+                    dd($s_id);
+                    Schedule::where(['id'=>$s_id])->delete();
+                    TimePeriod::where(['docter_id'=>$docter_id,'org_id'=>$org_id,'type'=>$t,'schedule_id'=>$s_id])->delete();
+                }
+            }
+        } catch (\Exception $e){
+            dd($e->getLine().'行 '.$e->getMessage());
+            DB::rollBack();
+            return apiReturn(603,'操作失败');
+        }
+        return apiReturn(200,'ok');
+    }
     //获取周排班模板
     public function getWeekSchedule()
     {
         $docter_id = request('docter_id',1);
         $org_id = request('org_id',1);
-        $type = request('type',2);
+        $type = request('type',1);
         $role = request('role',2);
         if(empty($docter_id) || empty($type)){
             return apiReturn(604,'缺少必要参数');
@@ -1107,7 +1183,7 @@ class ScheDuleController  extends Controller
         $docter_setting = DocterSetting::where(['docter_id'=>$docter_id,'type'=>$type])->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'=>"上午",
@@ -1141,10 +1217,11 @@ class ScheDuleController  extends Controller
             ]
         ];
         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])->count();
-                    $is_other_have = WeekSchedule::where(['docter_id'=>$docter_id,'schedule_type'=>$type,'week'=>$i+1])->where('organization_id','!=',$org_id)->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;
                     }
@@ -1184,7 +1261,7 @@ class ScheDuleController  extends Controller
     {
         $docter_id = request('docter_id',1);
         $org_id = request('org_id',1);
-        $type = request('type',1);
+        $type = request('type',1); //排班类型 1门诊 2 儿保 3计免
         if(empty($docter_id) || empty($org_id) || empty($type)){
             return apiReturn(601,'缺少必要参数');
         }
@@ -1223,12 +1300,11 @@ class ScheDuleController  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();
         }
 
-
         $week_data = [
             'schedule_type'=>$type,
             'organization_id'=>$org_id,
@@ -1273,6 +1349,7 @@ class ScheDuleController  extends Controller
             DB::commit();
         } catch (\Exception $e){
             DB::rollBack();
+            dd($e->getLine().'行'.$e->getMessage());
             return apiReturn(602,$e->getLine().'行'.$e->getMessage());
         }
         return apiReturn(200,'ok',$k);

+ 10 - 0
app/Models/Nurse.php

xqd
@@ -12,6 +12,16 @@ class Nurse extends BaseModel
 {
     protected $appends = ['today'];
 
+    const NURSEFREE = 1,NURSEFEE = 2;
+    public static $_type = [
+        self::NURSEFREE=>'免费',
+        self::NURSEFEE=>'自费'
+    ];
+    public static function getNursetype ()
+    {
+        return self::$_type;
+    }
+
     public function getTodayAttribute()
     {
         return OrderNurse::where(['nurse_id' => $this->id, 'created_at' => ['>', date('Y-m-d 00:00:00', time())]])->count();

+ 1 - 0
routes/web.php

xqd
@@ -25,6 +25,7 @@ Route::get('/setDocChedule', 'ScheDuleController@setDocChedule');
 
 
 Route::get('/api/get_month_schedule', 'ScheDuleController@get_month_schedule');
+Route::get('/api/set_day_schedule', 'ScheDuleController@set_day_schedule');
 Route::get('/api/update_docter_setting', 'ScheDuleController@updateDocterSetting');
 Route::get('/api/get_docter_setting', 'ScheDuleController@getDocterSetting');
 Route::get('/api/set_week_schedule', 'ScheDuleController@setWeekSchedule');