Ver código fonte

真的更新

jingyuzhi 4 anos atrás
pai
commit
e7aa13ac08
36 arquivos alterados com 987 adições e 63 exclusões
  1. 1 1
      app/Admin/Actions/backstage/Evaluate/Ignore.php
  2. 1 1
      app/Admin/Actions/backstage/Evaluate/Pass.php
  3. 5 0
      app/Admin/Controllers/CouponManagement/CouponManagementController.php
  4. 3 0
      app/Admin/Controllers/OrdersManagement/BookingOrderController.php
  5. 3 0
      app/Admin/Controllers/OrdersManagement/ConsultingOrdersController.php
  6. 7 0
      app/Admin/Controllers/OrdersManagement/RechargeOrderController.php
  7. 7 2
      app/Admin/Controllers/OrdersManagement/ServicePackOrderController.php
  8. 1 2
      app/Admin/Controllers/OrganizationController.php
  9. 92 0
      app/Admin/Controllers/PermissionController.php
  10. 92 0
      app/Admin/Controllers/ServiceManagement/ServiceController.php
  11. 20 14
      app/Admin/Controllers/UserManagement/BmUser/UserListController.php
  12. 6 0
      app/Admin/Controllers/UserManagement/DocterManagement/ApproveController.php
  13. 4 0
      app/Admin/Controllers/UserManagement/DocterManagement/DoctorManagementController.php
  14. 12 6
      app/Admin/Controllers/UserManagement/DocterManagement/UserEvaluatesController.php
  15. 12 0
      app/Admin/routes.php
  16. 358 2
      app/Community/Controllers/ApiController.php
  17. 1 1
      app/Community/Controllers/NurseServiceController.php
  18. 4 1
      app/Community/Controllers/OrderController.php
  19. 2 0
      app/Community/Controllers/OrderVaccinesController.php
  20. 1 1
      app/Community/Controllers/OrganizationController.php
  21. 8 1
      app/Community/routes.php
  22. 6 0
      app/Helpers/functions.php
  23. 52 17
      app/Http/Controllers/Api/V1/OrderController.php
  24. 5 1
      app/Http/Controllers/Api/V1/ServicePackController.php
  25. 1 1
      app/Models/Docter.php
  26. 4 0
      app/Models/DocterOrganization.php
  27. 10 0
      app/Models/DocterSetting.php
  28. 6 1
      app/Models/Order.php
  29. 82 5
      app/Models/OrderPack.php
  30. 10 0
      app/Models/SelfSchedule.php
  31. 0 4
      app/Models/ServicePack.php
  32. 8 0
      app/Models/Serviceapplys.php
  33. 10 0
      app/Models/WeekSchedule.php
  34. 3 1
      composer.json
  35. 119 1
      composer.lock
  36. 31 0
      config/tenancy.php

+ 1 - 1
app/Admin/Actions/backstage/Evaluate/Ignore.php

xqd
@@ -13,7 +13,7 @@ class Ignore extends RowAction
     public function handle(Model $model)
     {
         // $model ...
-        Evaluate::where('id',$model->id)->update(['status'=>3]);
+        Evaluate::where('id',$model->id)->update(['status'=>3,'audit_time'=>time()]);
         return $this->response()->success('忽略成功')->refresh();
     }
 

+ 1 - 1
app/Admin/Actions/backstage/Evaluate/Pass.php

xqd
@@ -13,7 +13,7 @@ class Pass extends RowAction
     public function handle(Model $model)
     {
         // $model ...
-        Evaluate::where('id',$model->id)->update(['status'=>2]);
+        Evaluate::where('id',$model->id)->update(['status'=>2,'audit_time'=>time()]);
         return $this->response()->success('审核通过.')->refresh();
     }
 

+ 5 - 0
app/Admin/Controllers/CouponManagement/CouponManagementController.php

xqd
@@ -36,6 +36,11 @@ class CouponManagementController extends AdminController
             $actions->disableView();
             $actions->add(new CouponDetails());
         });
+        $grid->filter(function($filter){
+            $filter->timestampBetween('start_time', "有效期开始时间")->datetime();
+            $filter->timestampBetween('end_time', "有效期结束时间")->datetime();
+        });
+
 
         $grid->column('id', __('Id'));
         $grid->column('name', __('劵名称'));

+ 3 - 0
app/Admin/Controllers/OrdersManagement/BookingOrderController.php

xqd xqd
@@ -41,10 +41,12 @@ class BookingOrderController extends AdminController
                 $filter->like('user.nickname','用户姓名');
                 $filter->like('docter.name','医生姓名');
                 $filter->like('orderPatient.name','患者姓名');
+                $filter->timestampBetween('payment_time', "支付时间")->datetime();
             });
             $filter->column(1/3, function ($filter) {
                 $filter->equal('user_id', '用户id');
                 $filter->equal('docter_id', '医生id');
+                $filter->timestampBetween('receiving_time', "接单时间")->datetime();
             });
             $filter->column(1/3,function ($filter) {
                 $filter->equal('product_type','预约类型')->radio(
@@ -65,6 +67,7 @@ class BookingOrderController extends AdminController
                         5=>'已取消'
                     ]
                 );
+                $filter->timestampBetween('end_time', "订单完成时间")->datetime();
             });
         });
 

+ 3 - 0
app/Admin/Controllers/OrdersManagement/ConsultingOrdersController.php

xqd xqd xqd
@@ -37,6 +37,7 @@ class ConsultingOrdersController extends AdminController
             $filter->column(1/3, function ($filter) {
                 $filter->like('user.nickname','用户姓名');
                 $filter->equal('user_id', '用户id');
+                $filter->timestampBetween('payment_time', "支付时间")->datetime();
             });
             $filter->column(1/3, function ($filter) {
                 $filter->like('docter.name','医生姓名');
@@ -48,6 +49,7 @@ class ConsultingOrdersController extends AdminController
                         2=>'图文咨询',
                     ]
                 );
+                $filter->timestampBetween('receiving_time', "接单时间")->datetime();
             });
             $filter->column(1/3, function ($filter) {
                 $filter->like('orderPatient.name','患者姓名');
@@ -61,6 +63,7 @@ class ConsultingOrdersController extends AdminController
                         5=>'已取消'
                     ]
                 );
+                $filter->timestampBetween('end_time', "订单完成时间")->datetime();
             });
         });
         //操作

+ 7 - 0
app/Admin/Controllers/OrdersManagement/RechargeOrderController.php

xqd xqd
@@ -34,6 +34,7 @@ class RechargeOrderController extends AdminController
 
         $grid->filter(function ($filter){
             $filter->disableIdFilter();
+            $filter->column(1/2, function ($filter) {
                 $filter->like('user.nickname','用户姓名');
                 $filter->equal('user_id', '用户id');
                 $filter->equal('order_status','订单状态')->radio(
@@ -47,6 +48,12 @@ class RechargeOrderController extends AdminController
                     ]
                 );
             });
+            $filter->column(1/2, function ($filter) {
+                $filter->timestampBetween('payment_time', "支付时间")->datetime();
+                $filter->timestampBetween('receiving_time', "接单时间")->datetime();
+                $filter->timestampBetween('end_time', "订单完成时间")->datetime();
+            });
+            });
 
         $grid->actions(function ($actions) {
             // 去掉删除

+ 7 - 2
app/Admin/Controllers/OrdersManagement/ServicePackOrderController.php

xqd xqd
@@ -34,12 +34,12 @@ class ServicePackOrderController extends AdminController
         //筛选
         $grid->filter(function ($filter){
             $filter->disableIdFilter();
-            $filter->column(1/2, function ($filter) {
+            $filter->column(1/3, function ($filter) {
                 $filter->like('user.nickname','用户姓名');
                 $filter->like('docter.name','医生姓名');
                 $filter->like('orderPatient.name','患者姓名');
             });
-            $filter->column(1/2, function ($filter) {
+            $filter->column(1/3, function ($filter) {
                 $filter->equal('user_id', '用户id');
                 $filter->equal('docter_id', '医生id');
                 $filter->equal('order_status','订单状态')->radio(
@@ -52,6 +52,11 @@ class ServicePackOrderController extends AdminController
                         5=>'已取消'
                     ]
                 );
+                $filter->column(1/3, function ($filter) {
+                    $filter->timestampBetween('payment_time', "支付时间")->datetime();
+                    $filter->timestampBetween('receiving_time', "接单时间")->datetime();
+                    $filter->timestampBetween('end_time', "订单完成时间")->datetime();
+                });
             });
         });
         //操作

+ 1 - 2
app/Admin/Controllers/OrganizationController.php

xqd
@@ -102,8 +102,7 @@ class OrganizationController extends AdminController
         })->load('area_id','/admin/api/getArea');;
         $form->select('area_id', __('地区'));
         $form->text('address', __('详细地址'));
-        $form->decimal('latitude', __('经度'));
-        $form->decimal('longitude', __('纬度'));
+        $form->latlong('latitude', 'longitude','经纬度');
 
         return $form;
     }

+ 92 - 0
app/Admin/Controllers/PermissionController.php

xqd
@@ -0,0 +1,92 @@
+<?php
+
+namespace App\Admin\Controllers;
+
+use App\Models\CdmsPermissions;
+use App\Models\CdmsRoles;
+use Encore\Admin\Controllers\AdminController;
+use Encore\Admin\Facades\Admin;
+use Encore\Admin\Form;
+use Encore\Admin\Grid;
+use Encore\Admin\Show;
+
+class PermissionController extends AdminController
+{
+    /**
+     * Title for current resource.
+     *
+     * @var string
+     */
+    protected $title = '权限列表';
+
+    /**
+     * Make a grid builder.
+     *
+     * @return Grid
+     */
+    protected function grid()
+    {
+        $grid = new Grid(new CdmsRoles());
+
+        $user = Admin::user();
+        $is_admin = Admin::user()->inRoles(['administrator','devloper']);
+        $grid->disableCreateButton(false);
+//        $is_manager = Admin::user()->isRole('manager');
+        if(!$is_admin){
+            $org_id = $user->org_id;
+            $grid->model()->where(['org_id'=>$org_id]);
+        }
+        $grid->column('organization.name', __('所属机构'))->display(function ($org_name){
+            return $org_name ?? '总后台';
+        });
+        $grid->column('name', __('名称'));
+        $grid->column('slug', __('标识'));
+        $grid->column('created_at', __('创建时间'));
+        $grid->column('updated_at', __('更新时间'));
+
+        return $grid;
+    }
+
+    /**
+     * Make a show builder.
+     *
+     * @param mixed $id
+     * @return Show
+     */
+    protected function detail($id)
+    {
+        $show = new Show(CdmsRoles::findOrFail($id));
+
+        $show->field('id', __('Id'));
+        $show->field('name', __('Name'));
+        $show->field('slug', __('Slug'));
+        $show->field('created_at', __('Created at'));
+        $show->field('updated_at', __('Updated at'));
+
+        return $show;
+    }
+
+    /**
+     * Make a form builder.
+     *
+     * @return Form
+     */
+    protected function form()
+    {
+        $form = new Form(new CdmsRoles());
+        $is_manager = Admin::user()->isRole('manager');
+
+        if($is_manager){
+            $org_id = Admin::user()->org_id;
+            $form->hidden('org_id')->value($org_id);
+        }
+
+        $form->text('slug', __('标识'))->rules('required',['required'=>'标识必须']);
+        $form->text('name', '名称')
+            ->creationRules(['required', "unique:cdms_roles"])
+            ->updateRules(['required', "unique:cdms_roles,name,{{id}}"]);
+        $form->listbox('permissions', trans('admin.permissions'))->options(CdmsPermissions::all()->pluck('name', 'id'));
+
+        return $form;
+    }
+}

+ 92 - 0
app/Admin/Controllers/ServiceManagement/ServiceController.php

xqd
@@ -0,0 +1,92 @@
+<?php
+
+namespace App\Admin\Controllers\ServiceManagement;
+
+use App\Admin\Actions\Service\ApplysAction;
+use App\Admin\Actions\Service\RefuseAction;
+use App\Models\Docter;
+use App\Models\DocterLabel;
+use App\Models\Order;
+use App\Models\Doctertimes;
+use App\Models\Organization;
+use App\Models\Serviceapplys;
+use Encore\Admin\Controllers\AdminController;
+use Encore\Admin\Form;
+use Encore\Admin\Grid;
+use Encore\Admin\Show;
+
+class ServiceController extends AdminController
+{
+    /**
+     * Title for current resource.
+     *
+     * @var string
+     */
+    protected $title = '服务审核';
+
+    /**
+     * Make a grid builder.
+     *
+     * @return Grid
+     */
+    protected function grid()
+    {
+        $grid = new Grid(new Serviceapplys());
+
+//        $status = request('status',2);
+
+        $grid->tools(function ($tools) {
+            $tools->batch(function ($batch) {
+                $batch->disableDelete();
+            });
+        });
+        $grid->column('id', __('Id'));
+        $grid->column('ondocter.avatar', __('头像'))->image('',50,50);
+        $grid->column('ondocter.id', __('医生ID'));
+        $grid->column('ondocter.name','医生名称');
+        $grid->column('ondocter.sex','性别')->using([1=>'男',2=>'女']);
+        $grid->column('docterorganization', __('所属机构'))->pluck('organization_id')->display(function ($organization){
+            $value = Organization::whereIn('id',$organization)->pluck('name');
+            return $value;
+        })->label('info');
+        $grid->column('ondocter.label', __('标签'))->display(function ($label){
+            if($label==null)
+            {
+                return '无';
+            }else{
+                $label_value = DocterLabel::whereIn('id',$label)->pluck('label_name');
+                return $label_value;
+            }
+        })->label('info');
+
+
+        $grid->column('status', __('状态'))->using([1=>'审核',2=>'已通过',3=>'已拒绝'])->label([
+            1 => 'warning',
+            2 => 'success',
+            3 => 'default'
+        ]);
+        $grid->column('created_at', __('创建时间'));
+        $grid->column('updated_at', __('更新时间'));
+
+        $grid->filter(function ($filter){
+            $filter->equal('service_type','服务类型')->select([1 => '图文', 2 => '电话', 3 => '问诊']);
+            $filter->equal('status','服务类型')->select([1=>'待审核',2 =>'已通过 ',3=>'已拒绝']);
+            $filter->where(function ($query) {
+                $query->whereHas('organization',function ($query){
+                    $query->where('name','like',"%{$this->input}%");
+                });
+            },'机构名');
+        });
+        $grid->actions(function ($actions) {
+            $actions->disableEdit();
+            $actions->disableView();
+            $actions->disableDelete();
+            if($actions->row->status == 1){
+                $actions->add(new ApplysAction());
+                $actions->add(new RefuseAction());
+            }
+        });
+        return $grid;
+    }
+
+}

+ 20 - 14
app/Admin/Controllers/UserManagement/BmUser/UserListController.php

xqd
@@ -46,20 +46,26 @@ class UserListController extends AdminController
     });
         //筛选
         $grid->filter(function ($filter){
-            $filter->disableIdFilter();
-            $filter->equal('phone','手机')->mobile()->placeholder("请输入手机");
-            $filter->like('patient.name','患者姓名')->placeholder("请输入患者姓名");
-            $filter->like('nickname','昵称');
-            $filter->equal('status','用户状态')->radio([
-                ''   => '不限',
-                0    => '黑名单',
-                1    => '正常',
-            ]);
-            $filter->equal('is_pack','用户状态')->radio([
-                ''   => '全部用户',
-                0    => '普通用户',
-                1    => '服务包用户',
-            ]);
+            $filter->column(1/2, function ($filter) {
+                $filter->disableIdFilter();
+                $filter->equal('phone','手机')->mobile()->placeholder("请输入手机");
+                $filter->like('patient.name','患者姓名')->placeholder("请输入患者姓名");
+                $filter->like('nickname','昵称');
+            });
+            $filter->column(1/2, function ($filter) {
+                $filter->equal('status','用户状态')->radio([
+                    ''   => '不限',
+                    0    => '黑名单',
+                    1    => '正常',
+                ]);
+                $filter->equal('is_pack','用户状态')->radio([
+                    ''   => '全部用户',
+                    0    => '普通用户',
+                    1    => '服务包用户',
+                ]);
+                $filter->between('created_at', '注册时间')->datetime();
+                $filter->timestampBetween('last_login_time', "最后登录时间")->datetime();
+            });
         });
             $grid ->model()->where('status','>=','0');
             $grid->column('id', __('用户id'))->sortable();

+ 6 - 0
app/Admin/Controllers/UserManagement/DocterManagement/ApproveController.php

xqd
@@ -29,7 +29,13 @@ class ApproveController extends AdminController
      */
     protected function grid()
     {
+
         $grid = new Grid(new DocterOrganization());
+        $grid->filter(function($filter){
+            $filter->between('authentication_time', '签约时间')->datetime();
+            $filter->between('authentication_end_time', '签约到期时间')->datetime();
+        });
+
         $grid ->model()->where('state','>',0);
         $grid->column('id', __('Id'));
         $grid->column('docter.id', __('医生ID'));

+ 4 - 0
app/Admin/Controllers/UserManagement/DocterManagement/DoctorManagementController.php

xqd
@@ -75,6 +75,10 @@ class DoctorManagementController extends AdminController
         $grid->column('organization', __('所属机构'))->pluck('name')->label('info');
         $grid->column('is_then', __('认证状态'))->using([0=>'未认证',1=>'已认证']);
         $grid->column('label', __('标签'))->display(function ($label){
+            if($label==null)
+            {
+                return '无';
+            }
                 $label_value = DocterLabel::whereIn('id',$label)->pluck('label_name');
                 return $label_value;
         })->label('info');

+ 12 - 6
app/Admin/Controllers/UserManagement/DocterManagement/UserEvaluatesController.php

xqd xqd xqd
@@ -4,6 +4,7 @@ namespace App\Admin\Controllers\UserManagement\DocterManagement;
 
 use App\Admin\Actions\backstage\Evaluate\Ignore;
 use App\Admin\Actions\backstage\Evaluate\Pass;
+use App\Admin\Filters\date;
 use App\Models\Evaluate;
 use Encore\Admin\Controllers\AdminController;
 use Encore\Admin\Form;
@@ -35,10 +36,15 @@ class UserEvaluatesController extends AdminController
             $actions->disableEdit();
             //去掉查看
             $actions->disableView();
-            //审核通过
-            $actions->add(new Pass());
-            //忽略
-            $actions->add(new Ignore());
+            //只有状态为待审核才可以显示通过和忽略
+            if ($actions->row->status ==1)
+            {
+                //审核通过
+                $actions->add(new Pass());
+                //忽略
+                $actions->add(new Ignore());
+            }
+
         });
 
         $grid->filter(function ($filter){
@@ -46,8 +52,8 @@ class UserEvaluatesController extends AdminController
             $filter->like('user.nickname','用户名字');
             $filter->like('docter.name','医生名字');
             $filter->like('content','评价内容');
-//            $filter->equal('id','订单id');
-                $filter->equal('status','审核状态')->select([
+            $filter->timestampBetween('audit_time', "审核时间")->datetime();
+            $filter->equal('status','审核状态')->select([
                 1   => '待审核',
                 2    => '审核通过',
                 3    => '忽略',

+ 12 - 0
app/Admin/routes.php

xqd
@@ -134,5 +134,17 @@ Route::group([
 
     //社区端通告
     $router->resource('community_notices', CommunityNotice\CommunityNotices::class);
+
+    /*
+     * 服务审核
+     * */
+
+    //服务审核
+    $router->resource('service_applys', ServiceManagement\ServiceController::class);
+
+    /*
+     * 权限管理
+     * */
+    $router->resource('cdms_roles', PermissionController::class);
 });
 

+ 358 - 2
app/Community/Controllers/ApiController.php

xqd xqd xqd xqd xqd xqd xqd xqd xqd
@@ -8,13 +8,17 @@ use App\Http\Controllers\Controller;
 use App\Models\CdmsUsers;
 use App\Models\Docter;
 use App\Models\DocterOrganization;
+use App\Models\DocterSetting;
+use App\Models\Doctertimes;
 use App\Models\Order;
 use App\Models\Organization;
 use App\Models\PatientRemark;
 use App\Models\Schedule;
 use App\Models\SchedulePeriod;
+use App\Models\SelfSchedule;
 use App\Models\SystemConfig;
 use App\Models\TimePeriod;
+use App\Models\WeekSchedule;
 use Carbon\Carbon;
 use EasyWeChat\Factory;
 use Encore\Admin\Facades\Admin;
@@ -23,10 +27,13 @@ use mysql_xdevapi\Exception;
 
 class ApiController extends Controller
 {
+    //获取订单
     public function getDocter()
     {
-        return Docter::get(['name as text','id'])->toArray();
+        return Docter::pluck(['name','id'])->toArray();
     }
+
+    //备注
     public function paitent_remark()
     {
         $data['patient_id']= request('patient_id');
@@ -43,6 +50,7 @@ class ApiController extends Controller
         return redirect('/cdms/nurse_users');
     }
 
+    //发送短信
     public function  sendmsg(){
 
         $config = [
@@ -105,7 +113,6 @@ class ApiController extends Controller
 
     }
 
-
     //获取排班页面
     public function getComSchedule()
     {
@@ -136,6 +143,7 @@ class ApiController extends Controller
             return json_encode(['code'=>601,'msg'=>'缺少必要参数','data'=>'']);
         }
 
+        return $this->getWeekSchedule();
         $start_time  = intval(str_replace('-','',$all_time[0]));
         $end_time  = intval(str_replace('-','',$all_time[1]));
         $first_day = strtotime($all_time[0]);
@@ -182,6 +190,7 @@ class ApiController extends Controller
                 'sunday'=>false,
             ]
         ];
+//        return $this->getWeekSchedule();
 
         //周字段映射
         $week_arr = ['monday','tuesday','wednesday','thursday','friday','saturday','sunday'];
@@ -402,6 +411,62 @@ class ApiController extends Controller
         return json_encode(['status'=>200,'msg'=>'插入成功','data'=>count($info)]);
     }
 
+    //设置自己排班
+    public function setSelfSchedule()
+    {
+        $docter_id = request('docter_id');
+        $org_id = request('org_id');
+        $date = request('date');
+        $type = request('type','1,2'); //1 上午,2 下午,3 晚上
+        $schedule_type = request('schedule_type');
+        $self_setting = DocterSetting::where(['docter_id'=>$docter_id])->first();
+        $times = [];
+        if(!empty($self_setting)){
+            $time_period = object_array(json_decode($self_setting->service_time));
+            $times[1] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[0]['startTime']),intval($time_period[0]['endTime'])])->pluck('id')->toArray();
+            $times[2] = TimePeriod::where(['docter_id'=>$docter_id])->whereBetween('end_time_period',[intval($time_period[1]['startTime']),intval($time_period[1]['endTime'])])->pluck('id')->toArray();
+            $times[3] = 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){
+            return apiReturn(602,'请设置真确的时间段');
+        }
+
+        if(empty($docter_id) || empty($org_id) || empty('date') || empty($type) || empty($schedule_type)){
+            return apiReturn(601,'缺少必要参数');
+        }
+
+        if(strtotime($date) < strtotime('tomorrow')){
+            return apiReturn(602,'只能排明天以後的');
+        }
+
+        $week = date("w",strtotime($date));
+        $types = explode(',',$type);
+        if(!empty($types)){
+            foreach ($types  as $t){
+                $self_schedule = [
+                    'schedule_date'=>$date,
+                    'week'=>intval($week),
+                    'schedule_type'=>$schedule_type,
+                    'organization_id'=>$org_id,
+                    'docter_id'=>$docter_id,
+                    'type'=>intval($t)
+                ];
+                foreach ($times[intval($t)] as $id){
+                    $self_schedule['time_period_id'] = $id;
+                    $is_have = SelfSchedule::where(['docter_id'=>$docter_id,'organization_id'=>$org_id,'schedule_date'=>$date,'type'=>intval($t),'week'=>$week,'time_period_id'=>$id])->value('id');
+                    if($is_have) continue;
+                    SelfSchedule::insert($self_schedule);
+                }
+            }
+
+            $cha = array_diff([1,2,3],$types);
+            foreach ($cha as $t){
+                SelfSchedule::where(['docter_id'=>$docter_id,'organization_id'=>$org_id,'schedule_date'=>$date,'type'=>intval($t)])->delete();
+            }
+        }
+        return apiReturn(200,'ok');
+    }
+
     //获取用户信息
     public function getScheduleInfo()
     {
@@ -467,6 +532,7 @@ class ApiController extends Controller
         return  (json_encode(['code'=>200,'msg'=>'ok','data'=>$data]));
     }
 
+    //跟新订单
     public function updateOrder(){
         $id = request('id');
         $status = request('status');
@@ -478,4 +544,294 @@ 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 getWeekSchedule()
+    {
+        $docter_id = request('docter_id',1);
+        $org_id = request('org_id',1);
+        $type = request('type',2);
+        $role = request('role',2);
+        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');
+        }
+
+        //周字段映射
+        $week_arr = ['monday','tuesday','wednesday','thursday','friday','saturday','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,
+                    ]
+                ];
+        if($role == 2){
+            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('organization_id','!=',$org_id)->whereIn('time_period_id',$times[$j])->count();
+                    if($is_self_have){
+                        $data[$j][$week_arr[$i]] = true;
+                    }
+                    if($is_other_have){
+                        $data[$j][$week_arr[$i]] = 'other';
+                    }
+                }
+            }
+        } 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();
+                    if($is_self_have){
+                        $data[$j][$week_arr[$i]] = true;
+                    }
+                    if($is_other_have){
+                        $data[$j][$week_arr[$i]] = 'other';
+                    }
+                }
+            }
+        }
+
+        $name = Docter::where('id',$docter_id)->value('name');
+
+        $shcedule_data['docter'] = $data;
+        $shcedule_data['name'] = $name;
+
+        $shcedule_data['role'] = $role;
+        $shcedule_data['user_id'] = $docter_id;
+
+        return apiReturn(200,'ok',$shcedule_data);
+    }
+
+    //设置周排班模板
+    public function setWeekSchedule()
+    {
+        $docter_id = request('docter_id',1);
+        $org_id = request('org_id',1);
+        $type = request('type',2);
+        if(empty($docter_id) || empty($org_id) || empty($type)){
+            return apiReturn(601,'缺少必要参数');
+        }
+        $docter_setting = DocterSetting::where(['docter_id'=>$docter_id])->first();
+        $data = [
+            [
+                'date'=>"上午",
+                'monday'=>false,
+                'tuesday'=>true,
+                'wednesday'=>false,
+                'thursday'=>false,
+                'friday'=>true,
+                'saturday'=>false,
+                'sunday'=>false,
+            ],
+            [
+                'date'=>"下午",
+                'monday'=>false,
+                'tuesday'=>false,
+                'wednesday'=>false,
+                'thursday'=>false,
+                'friday'=>false,
+                'saturday'=>true,
+                'sunday'=>false,
+            ],
+            [
+                'date'=>"晚上",
+                'monday'=>true,
+                'tuesday'=>true,
+                'wednesday'=>false,
+                'thursday'=>false,
+                'friday'=>false,
+                'saturday'=>false,
+                'sunday'=>false,
+            ]
+        ];
+        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();
+        }
+
+
+        $week_data = [
+            'schedule_type'=>$type,
+            'organization_id'=>$org_id,
+            'docter_id'=>$docter_id
+        ];
+        $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])));
+
+
+        $data[0] = array_values($data[0]);
+        $data[1] = array_values($data[1]);
+        $data[2] = array_values($data[2]);
+        try {
+            for($i=0;$i<=2;$i++){
+                $schedule_data = $data[$i];
+                foreach ($schedule_data as $key=>$schedule){
+                    if($key == 0) continue;
+                    $week_data ['type'] = $i+1;
+                    $week_data ['week'] = $key;
+                    if($schedule == true){
+//                        echo '时间列类型'.($i+1).'----'.$key.'星期数'.'<br>';
+                        foreach ($times[$i] as $id){
+                            $week_data['time_period_id'] = $id;
+                            $is_have = WeekSchedule::where(['docter_id'=>$docter_id,'organization_id'=>$org_id,'schedule_type'=>$type,'type'=>$i+1,'week'=>$key])->where('time_period_id',$id)->value('id');
+                            $is = $is_have?'有':'沒有';
+//                            echo '时间段id'.$id.'----'.$is.'</br>';
+                            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();
+                    }
+
+                }
+            }
+            DB::commit();
+        } catch (\Exception $e){
+            DB::rollBack();
+            return apiReturn(602,$e->getLine().'行'.$e->getMessage());
+        }
+        return apiReturn(200,'ok',$k);
+    }
+
+    public function setmonthScheduel()
+    {
+        $docter_id = request('docter_id',1);
+        $org_id = request('org_id',1);
+        $type = request('type',2);
+        $role = request('role',2);
+        $date = request('date');
+        if(empty($docter_id) || empty($type)){
+            return apiReturn(604,'缺少必要参数');
+        }
+        $start_time = date('Y-m-d', strtotime($date));
+        $end_time = date('Y-m-d',strtotime($date.'+1 month'));
+        $self_schedule = SelfSchedule::where(['docter_id'=>$docter_id,'organization_id'=>$org_id])->whereBetween('schedule_date',[$start_time,$end_time])->get()->GroupBy('week')->toArray();
+        $week_schedule = WeekSchedule::where(['docter_id'=>$docter_id,'organization_id'=>$org_id])->orderby('week')->distinct('type')->get(['type','week'])->GroupBy('week')->toArray();
+        dd($week_schedule);
+        $data = $this->getWeekSchedule();
+    }
 }

+ 1 - 1
app/Community/Controllers/NurseServiceController.php

xqd
@@ -42,7 +42,7 @@ class NurseServiceController extends AdminController
         });
         $grid->filter(function ($filter){
             $filter->disableIdFilter();
-            $filter->equal('id','机构')->select(Organization::pluck('name','id'));
+            $filter->equal('id','机构')->select(Organization::pluck('name','id')->toArray());
         });
 
         $grid->actions(function ($actions) {

+ 4 - 1
app/Community/Controllers/OrderController.php

xqd xqd
@@ -56,6 +56,8 @@ class OrderController extends AdminController
             return birthday_to_age($w);
         });;
         $grid->column('docter.name', __('预约医生'));
+        $grid->column('order_status', __('订单状态'))->using([1=>'未支付',2=>'待接单',3=>'进行中',4=>'已完成',5=>'已取消']);
+        $grid->column('payment_status', __('支付状态'))->using([1=>'待付款',2=>'已付款',3=>'退款中',4=>'已退款']);
 
         //查询
         $grid->quickSearch(function ($model, $query) {
@@ -67,11 +69,12 @@ class OrderController extends AdminController
         $grid->filter(function (Grid\Filter $filter){
             $filter->disableIdFilter();
             $filter->column(1/2, function ($filter) {
-                $filter->equal('docter_id','排班医生')->select('/cdms/api/getDocter');
+                $filter->equal('docter_id','排班医生')->select(Docter::pluck('name','id')->toArray());
                 $filter->equal('order_status','订单状态')->select(Order::$_order_status);
                 $filter->between('orderPatient.appoint_start_time','预约时间')->datetime();
             });
         });
+
         return $grid;
     }
 

+ 2 - 0
app/Community/Controllers/OrderVaccinesController.php

xqd
@@ -39,6 +39,8 @@ class OrderVaccinesController extends AdminController
         });
         $grid->column('vaccine_name', __('接种疫苗'));
         $grid->column('docters.name', __('排班医生'));
+        $grid->column('orders.order_status', __('订单状态'))->using([1=>'未支付',2=>'待接单',3=>'进行中',4=>'已完成',5=>'已取消']);
+        $grid->column('orders.payment_status', __('支付状态'))->using([1=>'待付款',2=>'已付款',3=>'退款中',4=>'已退款']);
 
         return $grid;
     }

+ 1 - 1
app/Community/Controllers/OrganizationController.php

xqd
@@ -46,7 +46,7 @@ class OrganizationController extends AdminController
         });
         $grid->filter(function ($filter){
             $filter->disableIdFilter();
-            $filter->equal('id','机构')->select(Organization::pluck('name','id'));
+            $filter->equal('id','机构')->select(Organization::pluck('name','id')->toArray());
         });
 
         $grid->actions(function ($actions) {

+ 8 - 1
app/Community/routes.php

xqd xqd
@@ -14,7 +14,7 @@ Route::resource('offices', OfficeController::class);
 Route::resource('orders', OrderController::class);
 Route::resource('docter_org', DocterOrgController::class);
 Route::resource('docter_verifies', DocterVerifyController::class);
-Route::resource('cdms_roles', PermissionController::class);
+//Route::resource('cdms_roles', PermissionController::class);
 Route::resource('docter_account', DocterAccountController::class);
 Route::resource('docter_chats', DocterChatController::class);
 
@@ -45,6 +45,13 @@ Route::put('/api/paitent_remark', 'ApiController@paitent_remark');
 Route::get('/api/sendmsg', 'ApiController@sendmsg');
 Route::post('/api/update_order', 'ApiController@updateOrder');
 
+//新医生排班路由
+Route::get('/api/week_schedule', 'ApiController@getWeekSchedule');
+Route::get('/api/set_week_schedule', 'ApiController@setWeekSchedule');
+Route::get('/api/set_month_schedule', 'ApiController@setmonthScheduel');
+Route::get('/api/docter_setting', 'ApiController@updateDocterSetting');
+Route::get('/api/self_schedule', 'ApiController@setSelfSchedule');
+
 Route::get('/getComSchedule', 'ApiController@getComSchedule');
 Route::get('/getChatOrder', 'ApiController@get_chat_order');
 Route::get('/setDocChedule', 'ApiController@setDocChedule');

+ 6 - 0
app/Helpers/functions.php

xqd
@@ -372,4 +372,10 @@ if (!function_exists('sechedule_timeperiod')) {
     }
 }
 
+if (!function_exists('apiReturn')) {
+    function apiReturn($code,$msg ='', $data ='') {
+        return json_encode(['code'=>$code,'msg'=>$msg,'data'=>$data]);
+    }
+}
+
 

+ 52 - 17
app/Http/Controllers/Api/V1/OrderController.php

xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd xqd
@@ -17,6 +17,7 @@ use App\Models\OrderVaccine;
 use App\Models\Patient;
 use App\Models\Payment;
 use App\Models\ServicePack;
+use App\Models\Team;
 use App\Models\TimePeriod;
 use App\Models\User;
 use App\Models\UserCoupon;
@@ -30,7 +31,7 @@ class OrderController extends AuthController
     {
         $req = request()->post();
         $this->validate(request(), [
-            'payment_type' => 'required|in:1,2',
+            'payment_type' => 'required|in:1,2,3',
             'product_type' => 'required|in:1,2',
             'docter_id' => 'required|integer',
             'patient_id' => 'required|integer',
@@ -40,6 +41,7 @@ class OrderController extends AuthController
             'phone_minutes' => 'required_if:product_type,1|integer',
             'symptoms' => 'required_if:product_type,2|max:2000',
             'medical_imgs' => 'required_if:product_type,2|json|max:3000',
+            'order_pack_id' => 'required_if:payment_type,3|integer',
             'pay_password|支付密码' => 'integer',
         ]);
         $user = $this->user;
@@ -61,7 +63,7 @@ class OrderController extends AuthController
         $payment_amount = $req['total_amount'] - $discount_amount;
         $payment_amount = $payment_amount < 0 ? 0 : $payment_amount;
 
-        if ($req['payment_type'] == 2 && $payment_amount > 0 && empty($req['pay_password'])) {
+        if (in_array($req['payment_type'], [2,3]) && $payment_amount > 0 && empty($req['pay_password'])) {
             return out(null, 10011, '请输入支付密码');
         }
 
@@ -71,9 +73,13 @@ class OrderController extends AuthController
             }
         }
 
+        if ($req['payment_type'] == 3) {
+            OrderPack::checkUserServicePack($req['order_pack_id'], $user['id'], $req['payment_type'], $payment_amount);
+        }
+
         $order_status = $payment_status = 1;
         $payment_time = 0;
-        if ($payment_amount == 0 || $req['payment_type'] == 2) {
+        if ($payment_amount == 0 || in_array($req['payment_type'], [2,3])) {
             $order_status = $payment_status = 2;
             $payment_time = time();
         }
@@ -82,7 +88,7 @@ class OrderController extends AuthController
         DB::beginTransaction();
         try {
             //保存订单数据
-            $order = Order::create([
+            $create = [
                 'user_id' => $user['id'],
                 'payment_type' => $req['payment_type'],
                 'product_type' => $req['product_type'],
@@ -94,7 +100,11 @@ class OrderController extends AuthController
                 'order_status' => $order_status,
                 'payment_status' => $payment_status,
                 'payment_time' => $payment_time,
-            ]);
+            ];
+            if ($req['payment_type'] == 3) {
+                $create['pay_order_pack_id'] = $req['order_pack_id'];
+            }
+            $order = Order::create($create);
             $order_sn = build_sn($order['id']);
             Order::where('id', $order['id'])->update(['order_sn' => $order_sn]);
             //保存订单患者信息
@@ -148,11 +158,13 @@ class OrderController extends AuthController
                     //改变用户余额
                     $change_amount = 0 - $payment_amount;
                     User::changeBalance($user['id'], $change_amount, 1, $order['id'], '咨询订单消费');
-
-                    Order::payCompletedHandle($order['id']);
                 }
             }
 
+            if ($payment_amount == 0 || in_array($req['payment_type'], [2, 3])) {
+                Order::payCompletedHandle($order['id']);
+            }
+
             DB::commit();
         } catch (\Exception $e) {
             DB::rollBack();
@@ -166,7 +178,7 @@ class OrderController extends AuthController
     {
         $req = request()->post();
         $this->validate(request(), [
-            'payment_type' => 'required|in:1,2',
+            'payment_type' => 'required|in:1,2,3',
             'product_type' => 'required|in:3,4,5',
             'patient_id' => 'required|integer',
             'organization_id' => 'required|integer',
@@ -177,6 +189,7 @@ class OrderController extends AuthController
             'docter_id' => 'required_if:product_type,3|integer',
             'vaccine_id' => 'required_if:product_type,4|integer',
             'nurse_ids' => 'required_if:product_type,5|json',
+            'order_pack_id' => 'required_if:payment_type,3|integer',
             'pay_password|支付密码' => 'integer',
         ]);
         $user = $this->user;
@@ -209,7 +222,7 @@ class OrderController extends AuthController
         $payment_amount = $req['total_amount'] - $discount_amount;
         $payment_amount = $payment_amount < 0 ? 0 : $payment_amount;
 
-        if ($req['payment_type'] == 2 && $payment_amount > 0 && empty($req['pay_password'])) {
+        if (in_array($req['payment_type'], [2,3]) && $payment_amount > 0 && empty($req['pay_password'])) {
             return out(null, 10011, '请输入支付密码');
         }
 
@@ -219,9 +232,13 @@ class OrderController extends AuthController
             }
         }
 
+        if ($req['payment_type'] == 3) {
+            OrderPack::checkUserServicePack($req['order_pack_id'], $user['id'], $req['payment_type'], $payment_amount);
+        }
+
         $order_status = $payment_status = 1;
         $payment_time = 0;
-        if ($payment_amount == 0 || $req['payment_type'] == 2) {
+        if ($payment_amount == 0 || in_array($req['payment_type'], [2,3])) {
             $order_status = 3;
             $payment_status = 2;
             $payment_time = time();
@@ -231,7 +248,7 @@ class OrderController extends AuthController
         DB::beginTransaction();
         try {
             //保存订单数据
-            $order = Order::create([
+            $create = [
                 'user_id' => $user['id'],
                 'docter_id' => $req['docter_id'] ?? 0,
                 'patient_id' => $req['patient_id'],
@@ -244,7 +261,11 @@ class OrderController extends AuthController
                 'payment_amount' => $payment_amount,
                 'discount_amount' => $discount_amount,
                 'payment_time' => $payment_time,
-            ]);
+            ];
+            if ($req['payment_type'] == 3) {
+                $create['pay_order_pack_id'] = $req['order_pack_id'];
+            }
+            $order = Order::create($create);
             $order_sn = build_sn($order['id']);
             Order::where('id', $order['id'])->update(['order_sn' => $order_sn]);
             //保存订单患者信息
@@ -312,11 +333,13 @@ class OrderController extends AuthController
                     //改变用户余额
                     $change_amount = 0 - $payment_amount;
                     User::changeBalance($user['id'], $change_amount, 1, $order['id'], '预约订单消费');
-
-                    Order::payCompletedHandle($order['id']);
                 }
             }
 
+            if ($payment_amount == 0 || in_array($req['payment_type'], [2, 3])) {
+                Order::payCompletedHandle($order['id']);
+            }
+
             DB::commit();
         } catch (\Exception $e) {
             DB::rollBack();
@@ -406,13 +429,19 @@ class OrderController extends AuthController
             $addPatient['patient_id'] = $req['patient_id'];
             OrderPatient::create($addPatient);
             //保存订单服务包表
-            $addPack = ServicePack::select(['id as service_pack_id', 'name as pack_name', 'intro as pack_intro', 'price as pack_price', 'insurance_policy', 'insurance_img_url', 'team_id', 'phone_minutes', 'chat_num', 'appoint_num', 'vaccine_limit_amount', 'nurses_limit_amount', 'effective_days'])->where('id', $req['service_pack_id'])->first()->getOriginal();
+            $addPack = ServicePack::select(['id as service_pack_id', 'name as pack_name', 'intro as pack_intro', 'price as pack_price', 'insurance_policy', 'insurance_img_url', 'team_id', 'phone_minutes', 'chat_num', 'appoint_num', 'vaccine_limit_amount', 'nurses_limit_amount', 'effective_days', 'label'])->where('id', $req['service_pack_id'])->first()->getOriginal();
+            $addPack['user_id'] = $user['id'];
             $addPack['order_id'] = $order['id'];
             $addPack['is_security'] = $req['is_security'];
             $addPack['guardian_name'] = $req['guardian_name'];
             $addPack['relationship_type'] = $req['relationship_type'];
             $addPack['start_time'] = time();
             $addPack['end_time'] = time() + $addPack['effective_days']*24*3600;
+            $addPack['total_phone_minutes'] = $addPack['phone_minutes'];
+            $addPack['total_chat_num'] = $addPack['chat_num'];
+            $addPack['total_appoint_num'] = $addPack['appoint_num'];
+            $addPack['total_vaccine_limit_amount'] = $addPack['vaccine_limit_amount'];
+            $addPack['total_nurses_limit_amount'] = $addPack['nurses_limit_amount'];
             OrderPack::create($addPack);
 
             //判断是微信支付
@@ -529,8 +558,14 @@ class OrderController extends AuthController
         ]);
         $user = $this->user;
 
-        $data = Order::with(['docter.office', 'docter.qualification', 'orderPatient', 'orderPack.team.docter', 'orderNurse', 'orderVaccine', 'organization.docter', 'suggest'])->where('id', $req['order_id'])->where('user_id', $user['id'])->first();
-
+        $data = Order::with(['docter.office', 'docter.qualification', 'orderPatient', 'orderPack', 'orderNurse', 'orderVaccine', 'organization.docter', 'suggest'])->where('id', $req['order_id'])->where('user_id', $user['id'])->first()->toArray();
+        if (!empty($data['order_pack'])) {
+            $data['order_pack']['team'] = [];
+            if (!empty($data['order_pack']['team_id'])) {
+                $data['order_pack']['team'] = Team::with(['docter.office', 'docter.qualification'])->whereIn('id', $data['order_pack']['team_id'])->get()->toArray();
+            }
+        }
+        
         return out($data);
     }
 

+ 5 - 1
app/Http/Controllers/Api/V1/ServicePackController.php

xqd xqd
@@ -9,6 +9,7 @@
 namespace App\Http\Controllers\Api\V1;
 
 use App\Models\ServicePack;
+use App\Models\Team;
 
 class ServicePackController extends AuthController
 {
@@ -26,7 +27,10 @@ class ServicePackController extends AuthController
             'service_pack_id' => 'required|integer'
         ]);
 
-        $data = ServicePack::with('team.docter.office', 'team.docter.qualification')->where('id', $req['service_pack_id'])->first();
+        $data = ServicePack::where('id', $req['service_pack_id'])->first()->toArray();
+        if (!empty($data['team_id'])) {
+            $data['team'] = Team::with(['docter.office', 'docter.qualification'])->whereIn('id', $data['team_id'])->get()->toArray();
+        }
 
         return out($data);
     }

+ 1 - 1
app/Models/Docter.php

xqd
@@ -68,7 +68,7 @@ class Docter extends BaseModel
     public function getLabelTextsAttribute()
     {
         $data = [];
-        if (!empty($this->label)) {
+        if (!empty($this->label) && is_array($this->label)) {
             $data = DocterLabel::select(['label_name'])->whereIn('id', $this->label)->where('status', 1)->get()->toArray();
         }
 

+ 4 - 0
app/Models/DocterOrganization.php

xqd
@@ -39,4 +39,8 @@ class DocterOrganization extends Model
         return $this->hasOne(TeamDocter::class,'docter_id','docter_id');
     }
 
+    public  function Serviceapplys()
+    {
+        return $this->belongsTo(Serviceapplys::class,'docter_id','docter_id');
+    }
 }

+ 10 - 0
app/Models/DocterSetting.php

xqd
@@ -0,0 +1,10 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class DocterSetting extends Model
+{
+    public $timestamps = false;
+}

+ 6 - 1
app/Models/Order.php

xqd xqd
@@ -72,7 +72,7 @@ class Order extends BaseModel
     //支付完成的处理方法
     public static function payCompletedHandle($order_id)
     {
-        $order = Order::select(['user_id', 'docter_id', 'product_type', 'total_amount', 'payment_type', 'payment_amount', 'order_sn'])->where('id', $order_id)->first();
+        $order = Order::select(['user_id', 'docter_id', 'product_type', 'total_amount', 'payment_type', 'payment_amount', 'order_sn', 'pay_order_pack_id'])->where('id', $order_id)->first();
         //发送下单消息
         if ($order['product_type'] < 6) {
             $product_type_text = config('config.product_type_map')[$order['product_type']];
@@ -96,6 +96,11 @@ class Order extends BaseModel
         //发送医生端消息
         DocterMessage::saveMessage($order['docter_id'], $order['user_id'], 1, $order_id, [$order['order_sn']]);
 
+        //如果是服务包支付的,就扣服务包的次数
+        if ($order['payment_type'] == 3) {
+            OrderPack::deductPackData($order['pay_order_pack_id'], $order['payment_type'], $order['payment_amount']);
+        }
+
         return true;
     }
 

+ 82 - 5
app/Models/OrderPack.php

xqd
@@ -10,15 +10,92 @@ namespace App\Models;
 
 class OrderPack extends BaseModel
 {
-    public function team()
-    {
-        return $this->belongsTo(Team::class);
-    }
+    protected $appends = ['label_texts'];
+    protected $casts = [
+        'label' => 'json',
+        'team_id' => 'json'
+    ];
+
     public function order()
     {
         return $this->belongsTo(Order::class);
     }
-    public function user(){
+
+    public function user()
+    {
         return $this->belongsTo(User::class);
     }
+
+    public function getLabelTextsAttribute()
+    {
+        $data = [];
+        if (!empty($this->label)) {
+            $map = config('config.pack_label_map');
+            foreach ($this->label as $k => $v) {
+                $data[$k]['name'] = $map[$v]??'';
+            }
+        }
+
+        return $data;
+    }
+
+    public static function checkUserServicePack($order_pack_id, $user_id, $product_type, $payment_amount)
+    {
+        $data = self::where('id', $order_pack_id)->where('user_id', $user_id)->first();
+        if (empty($data)) {
+            exit_out(null, 10001, '服务包不存在');
+        }
+        if ($data['end_time'] < time()) {
+            exit_out(null, 10002, '服务包已过期');
+        }
+
+        if ($product_type == 1) {
+            if ($data['phone_minutes'] < 10) {
+                exit_out(null, 10003, '服务包的电话咨询时间不足');
+            }
+        }
+        elseif ($product_type == 2) {
+            if ($data['chat_num'] <= 0) {
+                exit_out(null, 10004, '服务包的图文咨询次数不足');
+            }
+        }
+        elseif ($product_type == 3) {
+            if ($data['appoint_num'] <= 0) {
+                exit_out(null, 10005, '服务包的门诊预约次数不足');
+            }
+        }
+        elseif ($product_type == 4) {
+            if ($data['vaccine_limit_amount'] < $payment_amount) {
+                exit_out(null, 10006, '服务包疫苗金额不足');
+            }
+        }
+        elseif ($product_type == 5) {
+            if ($data['nurses_limit_amount'] < $payment_amount) {
+                exit_out(null, 10007, '服务包儿保金额不足');
+            }
+        }
+
+        return true;
+    }
+
+    public static function deductPackData($order_pack_id, $product_type, $payment_amount)
+    {
+        if ($product_type == 1) {
+            self::where('id', $order_pack_id)->decrement('phone_minutes', 10);
+        }
+        elseif ($product_type == 2) {
+            self::where('id', $order_pack_id)->decrement('chat_num');
+        }
+        elseif ($product_type == 3) {
+            self::where('id', $order_pack_id)->decrement('appoint_num');
+        }
+        elseif ($product_type == 4) {
+            self::where('id', $order_pack_id)->decrement('vaccine_limit_amount', $payment_amount);
+        }
+        elseif ($product_type == 5) {
+            self::where('id', $order_pack_id)->decrement('nurses_limit_amount', $payment_amount);
+        }
+
+        return true;
+    }
 }

+ 10 - 0
app/Models/SelfSchedule.php

xqd
@@ -0,0 +1,10 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class SelfSchedule extends Model
+{
+    protected $table = 'self_schedule';
+}

+ 0 - 4
app/Models/ServicePack.php

xqd
@@ -16,10 +16,6 @@ class ServicePack extends BaseModel
         'label' => 'json',
         'team_id' => 'json'
     ];
-    public function team()
-    {
-        return $this->belongsToMany(Team::class);
-    }
 
     public function getLabelTextsAttribute()
     {

+ 8 - 0
app/Models/Serviceapplys.php

xqd
@@ -17,6 +17,14 @@ class Serviceapplys extends Model
     {
         return $this->hasOne(Docter::class,'id','docter_id');
     }
+    public function docterorganization()
+    {
+        return $this->hasMany(DocterOrganization::class,'docter_id','docter_id');
+    }
+    public function organization()
+    {
+        return $this->belongsToMany('App\Models\Organization','docter_organization','docter_id','id');
+    }
 //    private static $_post_type =[
 //        1 => '图文',
 //        2 => '电话',

+ 10 - 0
app/Models/WeekSchedule.php

xqd
@@ -0,0 +1,10 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class WeekSchedule extends Model
+{
+    protected $table = 'week_schedule';
+}

+ 3 - 1
composer.json

xqd
@@ -12,12 +12,14 @@
         "encore/laravel-admin": "1.*",
         "fideloper/proxy": "^4.0",
         "jxlwqq/wang-editor2": "^1.0",
+        "laravel-admin-ext/latlong": "1.x",
         "laravel-admin-ext/multitenancy": "^2.1",
         "laravel/framework": "^6.0",
         "laravel/tinker": "^1.0",
         "maatwebsite/excel": "^3.1",
         "overtrue/wechat": "^4.0",
-        "sven/artisan-view": "^3.3"
+        "sven/artisan-view": "^3.3",
+        "wuwx/laravel-admin-timestamp-between": "^1.0"
     },
     "require-dev": {
         "filp/whoops": "^2.0",

+ 119 - 1
composer.lock

xqd xqd xqd
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "fc6e57f3eeb15c03a65075f447c88400",
+    "content-hash": "7409500d3fafcd889b08474a021a9d13",
     "packages": [
         {
             "name": "dnoegel/php-xdg-base-dir",
@@ -1159,6 +1159,62 @@
             },
             "time": "2018-12-04T04:15:44+00:00"
         },
+        {
+            "name": "laravel-admin-ext/latlong",
+            "version": "v1.2.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/laravel-admin-extensions/latlong.git",
+                "reference": "5d9b6c0b7af07cd51542c62d902f2402be98b3f8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel-admin-extensions/latlong/zipball/5d9b6c0b7af07cd51542c62d902f2402be98b3f8",
+                "reference": "5d9b6c0b7af07cd51542c62d902f2402be98b3f8",
+                "shasum": ""
+            },
+            "require": {
+                "encore/laravel-admin": "~1.6",
+                "php": ">=7.0.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~6.0"
+            },
+            "type": "library",
+            "extra": {
+                "laravel": {
+                    "providers": [
+                        "Encore\\Admin\\Latlong\\LatlongServiceProvider"
+                    ]
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Encore\\Admin\\Latlong\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "z-song",
+                    "email": "zosong@126.com"
+                }
+            ],
+            "description": "Latitude & Longitude selector",
+            "homepage": "https://github.com/laravel-admin-ext/latlong",
+            "keywords": [
+                "extension",
+                "laravel-admin"
+            ],
+            "support": {
+                "issues": "https://github.com/laravel-admin-extensions/latlong/issues",
+                "source": "https://github.com/laravel-admin-extensions/latlong/tree/v1.2.4"
+            },
+            "time": "2020-09-28T07:18:29+00:00"
+        },
         {
             "name": "laravel-admin-ext/multitenancy",
             "version": "v2.1.7",
@@ -5736,6 +5792,68 @@
                 "environment"
             ],
             "time": "2020-07-14T19:04:52+00:00"
+        },
+        {
+            "name": "wuwx/laravel-admin-timestamp-between",
+            "version": "v1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/wuwx/laravel-admin-timestamp-between.git",
+                "reference": "da05f70fbd7d9f8977b4b195328ece303dcdd4ea"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/wuwx/laravel-admin-timestamp-between/zipball/da05f70fbd7d9f8977b4b195328ece303dcdd4ea",
+                "reference": "da05f70fbd7d9f8977b4b195328ece303dcdd4ea",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "encore/laravel-admin": "*",
+                "php": ">=7.0.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~6.0"
+            },
+            "type": "library",
+            "extra": {
+                "laravel": {
+                    "providers": [
+                        "Wuwx\\LaravelAdminTimestampBetween\\LaravelAdminTimestampBetweenServiceProvider"
+                    ]
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "Wuwx\\LaravelAdminTimestampBetween\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "wuwx",
+                    "email": "wuweixin@gmail.com"
+                }
+            ],
+            "description": "Timestamp Between Filter",
+            "homepage": "https://github.com/wuwx/laravel-admin-timestamp-between",
+            "keywords": [
+                "extension",
+                "laravel-admin"
+            ],
+            "support": {
+                "issues": "https://github.com/wuwx/laravel-admin-timestamp-between/issues",
+                "source": "https://github.com/wuwx/laravel-admin-timestamp-between/tree/master"
+            },
+            "time": "2020-03-28T05:50:42+00:00"
         }
     ],
     "packages-dev": [

+ 31 - 0
config/tenancy.php

xqd
@@ -314,7 +314,38 @@ return [
     |
     */
     'extensions' => [
+        'latlong' => [
 
+            // Whether to enable this extension, defaults to true
+            'enable' => true,
+
+            // Specify the default provider
+            'default' => 'tencent',
+
+            // According to the selected provider above, fill in the corresponding api_key
+            'providers' => [
+
+                'google' => [
+                    'api_key' => '',
+                ],
+
+                'yadex' => [
+                    'api_key' => '',
+                ],
+
+                'baidu' => [
+                    'api_key' => 'xck5u2lga9n1bZkiaXIHtMufWXQnVhdx',
+                ],
+
+                'tencent' => [
+                    'api_key' => 'KCFBZ-UOC3I-CAKGB-5FHGL-4G46Z-XJBC4',
+                ],
+
+                'amap' => [
+                    'api_key' => '3693fe745aea0df8852739dac08a22fb',
+                ],
+            ]
+        ],
     ],
     // 使用`下拉菜单`形式
     'grid_action_class' => \Encore\Admin\Grid\Displayers\DropdownActions::class,