Browse Source

排班接口,儿保订单

Swdz-WangHaiJun 4 years ago
parent
commit
3392040784

+ 21 - 2
app/Community/Controllers/NurseController.php

@@ -2,8 +2,11 @@
 
 
 namespace App\Community\Controllers;
 namespace App\Community\Controllers;
 
 
+use App\Models\Docter;
+use App\Models\DocterOrganization;
 use App\Models\Nurse;
 use App\Models\Nurse;
 use Encore\Admin\Controllers\AdminController;
 use Encore\Admin\Controllers\AdminController;
+use Encore\Admin\Facades\Admin;
 use Encore\Admin\Form;
 use Encore\Admin\Form;
 use Encore\Admin\Grid;
 use Encore\Admin\Grid;
 use Encore\Admin\Show;
 use Encore\Admin\Show;
@@ -28,13 +31,20 @@ class NurseController extends AdminController
         $grid->disableCreateButton(false);
         $grid->disableCreateButton(false);
         $grid->column('id', __('ID'));
         $grid->column('id', __('ID'));
         $grid->column('name', __('项目名称'))->editable();
         $grid->column('name', __('项目名称'))->editable();
-        $grid->column('stock','库存')->editable();
         $grid->column('used', __('已使用'))->display(function ($w){
         $grid->column('used', __('已使用'))->display(function ($w){
             return $w??0;
             return $w??0;
         });
         });
         $grid->column('today', __('今日预约'));
         $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', __('价格'))->editable();
         $grid->column('remark', __('备注'))->editable('textarea');
         $grid->column('remark', __('备注'))->editable('textarea');
+        $grid->actions(function ($actions){
+            $actions->disableView();
+        });
         return $grid;
         return $grid;
     }
     }
 
 
@@ -66,9 +76,18 @@ class NurseController extends AdminController
     protected function form()
     protected function form()
     {
     {
         $form = new Form(new Nurse());
         $form = new Form(new Nurse());
-
+        $user = Admin::user();
+        $org_id = $user->org_id;
         $form->text('name', __('项目名称'));
         $form->text('name', __('项目名称'));
         $form->text('price', __('价格'));
         $form->text('price', __('价格'));
+        $form->multipleSelect('docters','服务医生')->options(function () use ($org_id) {
+            if(empty($org_id)){
+                return  Docter::pluck('name','id');
+            }
+            $ids = DocterOrganization::where('organization_id',$org_id)->pluck('docter_id');
+            if(empty($ids)) return [];
+            return  Docter::whereIn('id',$ids)->pluck('name','id');
+        });
         $form->textarea('remark', __('备注'));
         $form->textarea('remark', __('备注'));
         $form->setWidth(6);
         $form->setWidth(6);
 
 

+ 6 - 4
app/Community/Controllers/OrderNurseController.php

@@ -5,6 +5,7 @@ namespace App\Community\Controllers;
 use App\Admin\Actions\Community\Nurse\DelNurse;
 use App\Admin\Actions\Community\Nurse\DelNurse;
 use App\Admin\Actions\Community\Nurse\Finished;
 use App\Admin\Actions\Community\Nurse\Finished;
 use App\Models\Docter;
 use App\Models\Docter;
+use App\Models\DocterOrganization;
 use App\Models\Order;
 use App\Models\Order;
 use App\Models\OrderNurse;
 use App\Models\OrderNurse;
 use App\User;
 use App\User;
@@ -33,18 +34,18 @@ class OrderNurseController extends AdminController
         $grid = new Grid(new OrderNurse());
         $grid = new Grid(new OrderNurse());
 
 
         $user = Admin::user();
         $user = Admin::user();
-        $is_admin = Admin::user()->inRoles(['administrator','devloper']);
+        $is_admin = Admin::user()->inRoles(['administrator','developer']);
 
 
         if(!$is_admin){
         if(!$is_admin){
             $org_id = $user->org_id;
             $org_id = $user->org_id;
             $docter_id = $user->docter_id;
             $docter_id = $user->docter_id;
 
 
-
             $grid->model()->whereHas('orders',function ($query) use ($org_id,$docter_id) {
             $grid->model()->whereHas('orders',function ($query) use ($org_id,$docter_id) {
-                $where['organization_id']=$org_id;
                 if($docter_id){
                 if($docter_id){
                     $where['docter_id'] = $docter_id;
                     $where['docter_id'] = $docter_id;
-                 }
+                 } else {
+                    $where['organization_id']=$org_id;
+                }
                 $query->where($where);
                 $query->where($where);
             });
             });
         }
         }
@@ -136,6 +137,7 @@ class OrderNurseController extends AdminController
         $form->display('nurse_name', __('项目名称'));
         $form->display('nurse_name', __('项目名称'));
         $form->text('nurse_price', __('订单价格'));
         $form->text('nurse_price', __('订单价格'));
         $form->textarea('nurse_remark', __('备注'))->rows(5);
         $form->textarea('nurse_remark', __('备注'))->rows(5);
+
         $form->setWidth(6);
         $form->setWidth(6);
 
 
         return $form;
         return $form;

+ 11 - 5
app/Community/Controllers/VaccineController.php

@@ -2,6 +2,7 @@
 
 
 namespace App\Community\Controllers;
 namespace App\Community\Controllers;
 
 
+use App\Models\Order;
 use App\Models\Vaccine;
 use App\Models\Vaccine;
 use Encore\Admin\Controllers\AdminController;
 use Encore\Admin\Controllers\AdminController;
 use Encore\Admin\Form;
 use Encore\Admin\Form;
@@ -26,12 +27,17 @@ class VaccineController extends AdminController
     {
     {
         $grid = new Grid(new Vaccine());
         $grid = new Grid(new Vaccine());
 
 
+        $grid->disableCreateButton(false);
         $grid->column('id', __('ID'));
         $grid->column('id', __('ID'));
         $grid->column('name', __('疫苗名称'));
         $grid->column('name', __('疫苗名称'));
         $grid->column('type', __('类别'))->editable('select',[1=>'一类',2=>'二类']);
         $grid->column('type', __('类别'))->editable('select',[1=>'一类',2=>'二类']);
-        $grid->column('num', __('剩余库存'));
-        $grid->column('num', __('已使用量'));
-        $grid->column('num', __('今日预约'));
+        $grid->column('stock', __('剩余库存'))->editable();
+        $grid->column('used_num', __('已使用量'))->display(function (){
+            Order::where(['product_type'=>4,'organization_id'=>$org_id])->wherehas('orderVaccine',function ($query){
+
+            });
+        });
+        $grid->column('today_num', __('今日预约'));
         $grid->column('price', __('价格'))->editable();
         $grid->column('price', __('价格'))->editable();
         $grid->column('remark', __('备注'))->editable('textarea');
         $grid->column('remark', __('备注'))->editable('textarea');
         $grid->column('supplier', __('厂家'));
         $grid->column('supplier', __('厂家'));
@@ -84,10 +90,10 @@ class VaccineController extends AdminController
         $form = new Form(new Vaccine());
         $form = new Form(new Vaccine());
 
 
         $form->select('type', __('类型'))->options([1=>'一类',2=>'二类']);
         $form->select('type', __('类型'))->options([1=>'一类',2=>'二类']);
-        $form->number('price', __('价格'));
         $form->text('name', __('疫苗名称'));
         $form->text('name', __('疫苗名称'));
-        $form->textarea('remark', __('备注'));
         $form->text('supplier', __('厂家'));
         $form->text('supplier', __('厂家'));
+        $form->number('price', __('价格'));
+        $form->textarea('remark', __('备注'));
 
 
         return $form;
         return $form;
     }
     }

+ 218 - 26
app/Http/Controllers/ScheDuleController.php

@@ -6,13 +6,19 @@ namespace App\Http\Controllers;
 
 
 
 
 use App\Models\CommunitySchedule;
 use App\Models\CommunitySchedule;
+use App\Models\Docter;
+use App\Models\DocterOrganization;
 use App\Models\Order;
 use App\Models\Order;
+use App\Models\Organization;
 use App\Models\Schedule;
 use App\Models\Schedule;
 use App\Models\SchedulePeriod;
 use App\Models\SchedulePeriod;
 use App\Models\SystemConfig;
 use App\Models\SystemConfig;
 use App\Models\TimePeriod;
 use App\Models\TimePeriod;
+use Carbon\Carbon;
 use Encore\Admin\Admin;
 use Encore\Admin\Admin;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Log;
+use mysql_xdevapi\Exception;
 use phpDocumentor\Reflection\DocBlock\Description;
 use phpDocumentor\Reflection\DocBlock\Description;
 
 
 class ScheDuleController  extends Controller
 class ScheDuleController  extends Controller
@@ -21,16 +27,15 @@ class ScheDuleController  extends Controller
     public function getComSchedule()
     public function getComSchedule()
     {
     {
 
 
-        $time  = TimePeriod::get(['id','start_time_period','end_time_period']);
-
         $set_time = request('Schedulingtime');//时间
         $set_time = request('Schedulingtime');//时间
         $org_id = request('mechanism');//机构
         $org_id = request('mechanism');//机构
         $docter_id = request('docter_id');//医生
         $docter_id = request('docter_id');//医生
 
 
 
 
         $set_time = '2020-11-30至2020-12-06';
         $set_time = '2020-11-30至2020-12-06';
-        $org_id = 2;
+        $org_id = 1;
         $docter_id = 47;
         $docter_id = 47;
+        $role = 1;
 
 
         if(empty($set_time) || empty($org_id) || empty($docter_id)){
         if(empty($set_time) || empty($org_id) || empty($docter_id)){
             return json_encode(['status'=>601,'msg'=>'缺少必要参数','data'=>'']);
             return json_encode(['status'=>601,'msg'=>'缺少必要参数','data'=>'']);
@@ -47,10 +52,10 @@ class ScheDuleController  extends Controller
         $start_time  = intval(str_replace('-','',$all_time[0]));
         $start_time  = intval(str_replace('-','',$all_time[0]));
         $end_time  = intval(str_replace('-','',$all_time[1]));
         $end_time  = intval(str_replace('-','',$all_time[1]));
 //        DB::enableQueryLog();
 //        DB::enableQueryLog();
-//        $sche_dule = Schedule::whereBetween('schedule_day',[$start_time,$end_time])
-//                                ->where(['docter_id'=>$docter_id])
-//                                ->pluck('id')
-//                                ->toArray();
+        $sche_dule = Schedule::whereBetween('schedule_day',[$start_time,$end_time])
+                                ->where(['docter_id'=>$docter_id])
+                                ->pluck('id')
+                                ->toArray();
 //        echo '<pre>';
 //        echo '<pre>';
 //        print_r(DB::getQueryLog());
 //        print_r(DB::getQueryLog());
 //        echo '</pre>';
 //        echo '</pre>';
@@ -100,27 +105,71 @@ class ScheDuleController  extends Controller
         if(empty($sche_dule)){
         if(empty($sche_dule)){
             return ['status'=>200,'msg'=>'ok','data'=>['schedule'=>$sche_dule_arr,'org_id'=>$org_id,'docter_id'=>$docter_id]];
             return ['status'=>200,'msg'=>'ok','data'=>['schedule'=>$sche_dule_arr,'org_id'=>$org_id,'docter_id'=>$docter_id]];
         }
         }
-        for ($i = $start_time; $i<=$end_time; $i++){
-             $j = 0;
-             $strtime = "$i";
-             $str_time = substr($strtime,0,4).'-'.substr($strtime,4,2).'-'.substr($strtime,6,2);
-             //检测上午
-            $is_mo_have = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$mo)->where('organization_id','!=',$org_id)->count();
-            if($is_mo_have){
-                 $sche_dule_arr[0][$week_arr[$j]] = 'other';
-             }
-             //检测下午
-            $is_af_have = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$af)->where('organization_id','!=',$org_id)->count();
-            if($is_af_have){
-                $sche_dule_arr[1][$week_arr[$j]] = 'other';
+
+        $role = 2;
+        if($role == 1){
+            $ids = DocterOrganization::where(['organization_id'=>$org_id])->pluck('docter_id');
+            $list = Docter::whereIn('id',$ids)->get(['id','name'])->toArray();
+            $user_id = $org_id;
+
+            for ($i = $start_time; $i<=$end_time; $i++){
+                $j = 0;
+                $strtime = "$i";
+                $str_time = substr($strtime,0,4).'-'.substr($strtime,4,2).'-'.substr($strtime,6,2);
+                //检测上午
+                $is_mo_have = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$mo)
+                    ->where('organization_id','!=',$org_id)->count();
+                if($is_mo_have){
+                    $sche_dule_arr[0][$week_arr[$j]] = 'other';
+                }
+                //检测下午
+                $is_af_have = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$af)
+                    ->where('organization_id','!=',$org_id)->count();
+                if($is_af_have){
+                    $sche_dule_arr[1][$week_arr[$j]] = 'other';
+                }
+
+                //检测晚上
+                $is_ev_have = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$ev)
+                    ->where('organization_id','!=',$org_id)->count();
+                if($is_ev_have){
+                    $sche_dule_arr[2][$week_arr[$j]] = 'other';
+                }
             }
             }
 
 
-            //检测晚上
-            $is_ev_have = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$ev)->where('organization_id','!=',$org_id)->count();
-            if($is_ev_have){
-                $sche_dule_arr[2][$week_arr[$j]] = 'other';
+
+        } else {
+            $ids = DocterOrganization::where(['docter_id'=>$docter_id])->pluck('organization_id');
+            $list = Organization::whereIn('id',$ids)->get(['id','name'])->toArray();
+            $user_id = $docter_id;
+
+            for ($i = $start_time; $i<=$end_time; $i++){
+                $j = 0;
+                $strtime = "$i";
+                $str_time = substr($strtime,0,4).'-'.substr($strtime,4,2).'-'.substr($strtime,6,2);
+                //检测上午
+                $is_mo_have = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$mo)
+                    ->where('organization_id','!=',$org_id)->where('docter_id','!=',$docter_id)->count();
+                if($is_mo_have){
+                    $sche_dule_arr[0][$week_arr[$j]] = 'other';
+                }
+                //检测下午
+                $is_af_have = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$af)
+                    ->where('organization_id','!=',$org_id)->where('docter_id','!=',$docter_id)->count();
+                if($is_af_have){
+                    $sche_dule_arr[1][$week_arr[$j]] = 'other';
+                }
+
+                //检测晚上
+                $is_ev_have = SchedulePeriod::whereIn('schedule_id',$sche_dule)->where('schedule_date',$str_time)->whereIn('time_period_id',$ev)
+                    ->where('organization_id','!=',$org_id)->where('docter_id','!=',$docter_id)->count();
+                if($is_ev_have){
+                    $sche_dule_arr[2][$week_arr[$j]] = 'other';
+                }
             }
             }
         }
         }
+
+
         //  "morning_start" => "09:00"
         //  "morning_start" => "09:00"
         //  "morning_end" => "12:00"
         //  "morning_end" => "12:00"
         //  "afternoon_start" => "13:00"
         //  "afternoon_start" => "13:00"
@@ -128,22 +177,165 @@ class ScheDuleController  extends Controller
         //  "evening_start" => "19:00"
         //  "evening_start" => "19:00"
         //  "evening_end" => "20:00"
         //  "evening_end" => "20:00"
 
 
+
         $data['docter'] = $sche_dule_arr;
         $data['docter'] = $sche_dule_arr;
-        $data['role'] = 1;
+        $data['list'] = array_column($list,'name','id');
+        $data['role'] = $role;
+        $data['user_id'] = $user_id;
         return  (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
         return  (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
     }
     }
 
 
 
 
     public function setDocChedule()
     public function setDocChedule()
     {
     {
+        $docter_id = request('docter_id');
+        $org_id = request('org_id');
+        $role = request('role');
+        $set_time = request('schdule_date');
+        $shcdule_id = request('schdule_id');
+        $set_time = '2020-11-30至2020-12-06';
+
+        $all_time = explode('至',$set_time);
+        if(count($all_time) <2) {
+            return json_encode(['status'=>601,'msg'=>'缺少必要参数','data'=>'']);
+        }
+        $start_time  = intval(str_replace('-','',$all_time[0]));
+        $end_time  = intval(str_replace('-','',$all_time[1]));
+        //周字段映射
+        $week_arr = ['mondy','tuesday','wednesday','thursday','friday','saturday','sunday'];
+
 
 
+        $data = [
+            [
+                'date'=>"上午",
+                'mondy'=>true,
+                'tuesday'=>true,
+                'wednesday'=>true,
+                'thursday'=>true,
+                'friday'=>true,
+                'saturday'=>true,
+                'sunday'=>true,
+            ],
+            [
+                'date'=>"下午",
+                'mondy'=>true,
+                'tuesday'=>true,
+                'wednesday'=>true,
+                'thursday'=>true,
+                'friday'=>true,
+                'saturday'=>true,
+                'sunday'=>true,
+            ],
+            [
+                'date'=>"晚上",
+                'mondy'=>true,
+                'tuesday'=>true,
+                'wednesday'=>true,
+                'thursday'=>true,
+                'friday'=>true,
+                'saturday'=>true,
+                'sunday'=>true,
+            ]
+        ];
+
+
+        //时段区间id
+        $schedule_config = SystemConfig::get('docter_config');
+        $mo = TimePeriod::where('start_time_period','>=',$schedule_config['morning_start'])
+                        ->where('end_time_period','<=',$schedule_config['morning_end'])
+                        ->pluck('id')->toArray();
+        $af = TimePeriod::where('start_time_period','>=',$schedule_config['afternoon_start'])
+                        ->where('end_time_period','<=',$schedule_config['afternoon_end'])
+                        ->pluck('id')->toArray();
+        $ev = TimePeriod::where('start_time_period','>=',$schedule_config['evening_start'])
+                        ->where('end_time_period','<=',$schedule_config['evening_end'])
+                        ->pluck('id')->toArray();
+
+
+        $mo_schedule = array_values($data[0]);
+        $af_schedule = array_values($data[1]);
+        $ev_schedule = array_values($data[2]);
+
+        $org_id = 1;
+        $docter_id = 47;
+
+        DB::beginTransaction();
+        try {
+            if(!$shcdule_id){
+                $schedule_insert = [
+                    'organization_id'=>$org_id,
+                    'docter_id'=>$docter_id,
+                    'schedule_date'=>$all_time[0],
+                    'schedule_day'=>$start_time,
+                    'created_at'=>Carbon::now(),
+                    'updated_at'=>Carbon::now(),
+                ];
+                $shcdule_id = Schedule::insertGetId($schedule_insert);
+            }
+
+            unset($schedule_insert['schedule_day']);
+
+            $schedule_insert['schedule_id'] =$shcdule_id;
+            for ($i = 0 ;$i<=2;$i++){
+                $mo_schedule = array_values($data[$i]);
+                foreach ($mo_schedule as $key=>$val){
+                    if($key==0) continue;
+                    $schedule_date = $start_time + $key;
+                    $strtime = "$schedule_date";
+                    $first_day = strtotime('this week');
+                    $time_insert = $schedule_insert;
+                    $time_insert['type'] = $i;
+                    $real_time = date('Y-m-d',($first_day + ($key-1)*86400));
+                    $time_insert['schedule_date'] = $real_time;
+                    $time_insert['me_sure'] = 1;
+                    foreach ($mo as $time_id){
+                        $is_have = SchedulePeriod::where(['time_period_id'=>$time_id,'type'=>1,'docter_id'=>$docter_id,'schedule_date'=>$real_time]);
+                        if(!$is_have){
+                            $time_insert['time_period_id'] = $time_id;
+                            $info[] = $time_insert;
+                            SchedulePeriod::insert($time_insert);
+                        }
+                    }
+                    if($val){
+                        $data['schedule_date'] = $start_time ;
+                    }
+                }
+            }
+            DB::commit();
+        } catch (Exception $e){
+            DB::rollBack();
+            Log::info($e->getMessage());
+        }
+        return json_encode(['status'=>200,'msg'=>'插入成功','data'=>count($info)]);
+    }
+
+    public function getScheduleInfo ()
+    {
+        $docter_id = request('docter_id');
+        $org_id = request('org_id');
+        $docter_id = 47;
+        $org_id = 1;
+        $role = 1;
+        if($role == 1){
+            $ids = DocterOrganization::where(['docter_id'=>$docter_id])->pluck('organization_id');
+            $list = Organization::whereIn('id',$ids)->get(['id','name'])->toArray();
+            $user_id = $org_id;
+        } else {
+            $ids = DocterOrganization::where(['docter_id'=>$docter_id])->pluck('organization_id');
+            $list = Organization::whereIn('id',$ids)->get(['id','name'])->toArray();
+            $user_id = $docter_id;
+
+        }
+        $data['user_id'] = $user_id;
+        $data['role'] = $role;
+        $data['list'] = $list;
+        return (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
     }
     }
 
 
     public function get_chat_order()
     public function get_chat_order()
     {
     {
         $org_id = 1;
         $org_id = 1;
         $docter_id = 1;
         $docter_id = 1;
-
         $list = Order::where(['organization_id'=>$org_id,'docter_id'=>$docter_id,'order_status'=>3])->with('orderUser')->distinct('user_id')->get('user_id');
         $list = Order::where(['organization_id'=>$org_id,'docter_id'=>$docter_id,'order_status'=>3])->with('orderUser')->distinct('user_id')->get('user_id');
         foreach ($list as $val){
         foreach ($list as $val){
             $user_list[] = [
             $user_list[] = [

+ 10 - 0
app/Models/Nurse.php

@@ -16,4 +16,14 @@ class Nurse extends BaseModel
     {
     {
         return OrderNurse::where(['nurse_id' => $this->id, 'created_at' => ['>', date('Y-m-d 00:00:00', time())]])->count();
         return OrderNurse::where(['nurse_id' => $this->id, 'created_at' => ['>', date('Y-m-d 00:00:00', time())]])->count();
     }
     }
+
+    public function getDoctersAttribute($value)
+    {
+        return explode(',',$value);
+    }
+
+    public function setDoctersAttribute($value)
+    {
+        $this->attributes['docters'] = implode(',', $value);
+    }
 }
 }

+ 1 - 0
routes/web.php

@@ -18,4 +18,5 @@ Route::get('/', function () {
 
 
 Route::get('/api/getComSchedule', 'ScheDuleController@getComSchedule');
 Route::get('/api/getComSchedule', 'ScheDuleController@getComSchedule');
 Route::get('/api/getChatOrder', 'ScheDuleController@get_chat_order');
 Route::get('/api/getChatOrder', 'ScheDuleController@get_chat_order');
+Route::get('/api/setDocChedule', 'ScheDuleController@setDocChedule');