Просмотр исходного кода

Merge branch 'develop' of http://git.9026.com/swdz-WangHaijun/BaoMa into develop

刘远航 4 лет назад
Родитель
Сommit
331b893c64
30 измененных файлов с 642 добавлено и 188 удалено
  1. 44 0
      app/Admin/Actions/backstage/Coupon/UpdateCouponType.php
  2. 1 1
      app/Admin/Controllers/ArticleManagement/ArticleController.php
  3. 1 1
      app/Admin/Controllers/CouponManagement/CouponDistributionUserList.php
  4. 37 19
      app/Admin/Controllers/CouponManagement/CouponManagementController.php
  5. 7 5
      app/Admin/Controllers/OrganizationController.php
  6. 1 9
      app/Admin/Controllers/UserManagement/BmUser/UserListController.php
  7. 21 3
      app/Admin/Controllers/UserManagement/DocterManagement/ApproveController.php
  8. 15 14
      app/Admin/Controllers/VaccinesManagement/VaccinesController.php
  9. 29 0
      app/Community/Controllers/ApiController.php
  10. 3 0
      app/Community/Controllers/DocterChatController.php
  11. 5 1
      app/Community/Controllers/NurseUserController.php
  12. 2 2
      app/Community/Controllers/OrderNurseController.php
  13. 1 1
      app/Community/Controllers/OrganizationController.php
  14. 42 0
      app/Community/Controllers/ScheduleStatController.php
  15. 151 0
      app/Community/Controllers/SettingController.php
  16. 59 21
      app/Community/Controllers/Vaccine/OrganizationVaccineController.php
  17. 46 30
      app/Community/Controllers/VaccineController.php
  18. 5 1
      app/Community/Controllers/VaccineUserController.php
  19. 9 1
      app/Community/routes.php
  20. 14 0
      app/Http/Controllers/Api/V1/CommonController.php
  21. 1 1
      app/Http/Controllers/Api/V1/CouponController.php
  22. 13 57
      app/Http/Controllers/Api/V1/DocterController.php
  23. 27 10
      app/Http/Controllers/Api/V1/OrderController.php
  24. 4 7
      app/Http/Controllers/Api/V1/VaccineController.php
  25. 0 1
      app/Models/Article.php
  26. 11 0
      app/Models/OrganizationVaccine.php
  27. 2 1
      app/Models/UserCoupon.php
  28. 42 1
      config/tenancy.php
  29. 1 1
      resources/views/cdms/schedule.blade.php
  30. 48 0
      resources/views/cdms/totalSchedule.blade.php

+ 44 - 0
app/Admin/Actions/backstage/Coupon/UpdateCouponType.php

xqd
@@ -0,0 +1,44 @@
+<?php
+
+namespace App\Admin\Actions\backstage\Coupon;
+
+use App\Models\CouponType;
+use Encore\Admin\Actions\RowAction;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Http\Request;
+
+class UpdateCouponType extends RowAction
+{
+    public $name = '修改可用类型';
+
+    public function handle(Model $model,Request $request)
+    {
+        $type = request('type');
+        //先删除原来的数据,再添加新的数据
+        CouponType::where('coupon_id',$this->row->id)->where('user_coupon_id',0)->delete();
+        $arr = [
+            'coupon_id' =>  $this->row->id,
+            'user_coupon_id' =>  0,
+            'product_type' =>  0,
+        ];
+        foreach ($type as $value)
+        {
+            $arr['product_type'] = $value;
+            CouponType::create($arr);
+        }
+        return $this->response()->success('修改可用产品成功')->refresh();
+    }
+    public function form(){
+        $value = CouponType::where('coupon_id',$this->row->id)->where('user_coupon_id',0)->pluck('product_type')->toArray();
+        $this->multipleSelect('type','可用类型')->options([
+            1=>'电话咨询',
+            2=>'图文咨询',
+            3=>'门诊咨询',
+            4=>'疫苗接种',
+            5=>'儿保预约',
+            6=>'服务包',
+            7=>'充值',
+        ])->value($value);
+    }
+
+}

+ 1 - 1
app/Admin/Controllers/ArticleManagement/ArticleController.php

xqd
@@ -27,7 +27,7 @@ class ArticleController extends AdminController
         $grid = new Grid(new Article());
         $grid->model()->orderBy('id','desc');
         $grid->column('id', __('Id'));
-        $grid->column('type', __('分类'))->using([1=>'健康科普',2=>'疫苗科普',3=>'常见问题']);
+        $grid->column('type', __('分类'))->using([1=>'健康科普',2=>'疫苗科普']);
         $grid->column('title', __('标题'))->limit(10,'...')->width(100);
         $grid->column('content', __('内容'))->limit(20,'...')->width(200);
         $grid->column('banner_url', __('图片'))->lightbox(['width' =>'', 'height' => 30]);

+ 1 - 1
app/Admin/Controllers/CouponManagement/CouponDistributionUserList.php

xqd
@@ -48,7 +48,7 @@ class CouponDistributionUserList extends AdminController
             $batch->add(new AllCouponBatchGrant());
         });
         $grid->disableActions();
-        $grid ->model()->where('status','>=','0');
+        $grid ->model()->where('status','>=','0')->where('is_docter',0);
         $grid->column('id', __('用户id'))->sortable();
         $grid->column('nickname', __('用户名'));
         $grid->column('sex', __('性别'))->using([0=>'未知',1=>'男',2=>'女']);

+ 37 - 19
app/Admin/Controllers/CouponManagement/CouponManagementController.php

xqd xqd xqd xqd xqd
@@ -5,7 +5,9 @@ namespace App\Admin\Controllers\CouponManagement;
 use App\Admin\Actions\backstage\Coupon\CouponDetails;
 use App\Admin\Actions\backstage\Coupon\CouponDistribution;
 use App\Admin\Actions\backstage\Coupon\CouponDistributions;
+use App\Admin\Actions\backstage\Coupon\UpdateCouponType;
 use App\Models\Coupon;
+use App\Models\CouponType;
 use Encore\Admin\Controllers\AdminController;
 use Encore\Admin\Form;
 use Encore\Admin\Grid;
@@ -35,6 +37,10 @@ class CouponManagementController extends AdminController
         $grid->actions(function ($actions) {
             $actions->disableView();
             $actions->add(new CouponDetails());
+            if ($actions->row->usable_type == 2)
+            {
+                $actions->add(new UpdateCouponType());
+            }
         });
         $grid->filter(function($filter){
             $filter->timestampBetween('start_time', "有效期开始时间")->datetime();
@@ -138,11 +144,12 @@ class CouponManagementController extends AdminController
     protected function form()
     {
         $form = new Form(new Coupon());
-
+        $form->hidden('id', __('id'));
         $form->text('name', __('优惠券名称'));
         $form->text('title', __('券标题'));
         $form->text('desc', __('使用说明'));
         $form->text('rules', __('使用规则'));
+//        dd($form->toArray());
         $form->image('icon', __('券图标'))->help('图标大小48px * 48px');
         $form->select('type', '类型')
             ->options([
@@ -157,23 +164,34 @@ class CouponManagementController extends AdminController
             });
         $form->select('position_type',__('发放平台'))->options([1=>'领券中心',2=>'后台发放']);
         $form->number('num', __('数量'));
-        $form->select('usable_type',__('可用类型'))
-            ->options([
-                1=>'全部产品通用',
-                2=>'部分产品可用'
-            ])->when(2,function (Form $form){
-                $form->hasMany('CouponType','可用类型',function (Form\NestedForm $form){
-                    $form->select('product_type','可用类型')->options([
-                        1=>'电话咨询',
-                        2=>'图文咨询',
-                        3=>'门诊咨询',
-                        4=>'疫苗接种',
-                        5=>'儿保预约',
-                        6=>'服务包',
-                        7=>'充值',
-                    ]);
+        if ($form->isCreating())
+        {
+            $form->select('usable_type',__('可用类型'))
+                ->options([
+                    1=>'全部产品通用',
+                    2=>'部分产品可用'
+                ])->when(2,function (Form $form){
+                    $form->hasMany('CouponType','可用类型',function (Form\NestedForm $form){
+                        $form->select('product_type','可用类型')->options([
+                            1=>'电话咨询',
+                            2=>'图文咨询',
+                            3=>'门诊咨询',
+                            4=>'疫苗接种',
+                            5=>'儿保预约',
+                            6=>'服务包',
+                            7=>'充值',
+                        ]);
+                    });
                 });
-            });
+        }else
+        {
+            $form->select('usable_type',__('可用类型'))
+                ->options([
+                    1=>'全部产品通用',
+                    2=>'部分产品可用'
+                ]);
+        }
+
         $form->select('expire_type', '过期类型')
             ->options([
                 1 => '领取N天过期',
@@ -186,9 +204,9 @@ class CouponManagementController extends AdminController
                 $form->saving(function ($form){
                     $form->start_time = strtotime($form->start_time);
                     $form->end_time = strtotime($form->end_time);
+                    $form->money = $form->money*100;
+                    $form->max_reduce_amount = $form->max_reduce_amount*100;
                 });
-
-
             });
         return $form;
     }

+ 7 - 5
app/Admin/Controllers/OrganizationController.php

xqd
@@ -128,12 +128,14 @@ class OrganizationController extends AdminController
             return Area::where('level',1)->pluck('name','id');
         })->load('city_id','/admin/api/getCity')->required();
         $form->select('city_id', __('城市'))->options(function (){
-            return Area::where('level',2)->pluck('name','id');
-        })->load('area_id','/admin/api/getArea')->required();;
-        $form->select('area_id', __('地区'))->required();
+            return Area::where(['level'=>2,'parent_id'=>$this->province_id])->pluck('name','id');
+        })->load('area_id','/admin/api/getArea')->required();
+        $form->select('area_id', __('地区'))->options(function (){
+            return Area::where(['level'=>3,'parent_id'=>$this->city_id])->pluck('name','id');
+        })->required();
         $form->text('address', __('详细地址'))->required();
-        $form->textarea('nurse_notice','门诊通告');
-        $form->textarea('vaccine_notice','计免通告');
+        $form->editor('nurse_notice','门诊通告');
+        $form->editor('vaccine_notice','计免通告');
         $form->latlong('latitude', 'longitude','经纬度');
 
         return $form;

+ 1 - 9
app/Admin/Controllers/UserManagement/BmUser/UserListController.php

xqd xqd
@@ -62,22 +62,16 @@ class UserListController extends AdminController
                     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')->orderBy('id','desc');
+            $grid ->model()->where('status','>=','0')->where('is_docter',0)->orderBy('id','desc');
             $grid->column('id', __('用户id'))->sortable();
             $grid->column('avatar', __('头像'))->lightbox(['width' =>'', 'height' => 30]);
             $grid->column('nickname', __('用户名'));
             $grid->column('phone', __('手机号码'));
             $grid->column('status', __('状态'))->using([0=>'黑名单',1=>'正常',]);
-//            $grid->column('is_pack', __('用户身份'))->using([0=>'普通用户',1=>'付费用户']);
             $grid->column('balance', __('当前余额'))->display(function ($price){
                 return $price/100;
             });
@@ -85,8 +79,6 @@ class UserListController extends AdminController
             $grid->column('last_login_time', __('最后登录时间'))->display(function ($time){
                 return date("Y-m-d H:i",$time);
             });
-//            $grid->column('patient', __('患者姓名'))->pluck('name')->map('ucwords')->implode(',');
-//            $grid->column('patient', __('患者姓名'))->pluck('name')->label('default');
         return $grid;
     }
 

+ 21 - 3
app/Admin/Controllers/UserManagement/DocterManagement/ApproveController.php

xqd
@@ -48,17 +48,35 @@ class ApproveController extends AdminController
         $grid->column('remarks', __('备注'));
         $grid->column('docter.practice','医生照片和执业证书')->display(function ($img) {
             $arr = explode(',',$img);
-            return $arr;
+            $new_arr = [];
+            foreach ($arr as $value)
+            {
+                $value = str_replace('upload/','',$value);
+                array_push($new_arr,$value);
+            }
+            return  $new_arr;
         })->lightbox(['width' =>'', 'height' => 30]);
 
         $grid->column('docter.card_photo','	身份证正反面')->display(function ($img) {
             $arr = explode(',',$img);
-            return $arr;
+            $new_arr = [];
+            foreach ($arr as $value)
+            {
+                $value = str_replace('upload/','',$value);
+                array_push($new_arr,$value);
+            }
+            return  $new_arr;
         })->lightbox(['width' =>'', 'height' => 30]);
 
         $grid->column('docter.is_quail','照片和资格证书')->display(function ($img) {
             $arr = explode(',',$img);
-            return $arr;
+            $new_arr = [];
+            foreach ($arr as $value)
+            {
+                $value = str_replace('upload/','',$value);
+                array_push($new_arr,$value);
+            }
+            return  $new_arr;
         })->lightbox(['width' =>'', 'height' => 30]);
 
         $grid->column('state', __('认证状态'))->using([1=>'已认证',2=>'审核驳回',3=>'待审核'])->label('info');

+ 15 - 14
app/Admin/Controllers/VaccinesManagement/VaccinesController.php

xqd xqd xqd
@@ -30,26 +30,27 @@ class VaccinesController extends AdminController
         $grid = new Grid(new Vaccines());
         $grid->model()->orderBy('id','desc');
         $grid->column('id', __('Id'));
-        $grid->column('type', '类型')->using([1=>'Ⅰ类疫苗',2=>'Ⅱ类疫苗']);
+//        $grid->column('type', '类型')->using([1=>'Ⅰ类疫苗',2=>'Ⅱ类疫苗']);
         $grid->column('name', __('名称'));
         $states = [
             'on'  => ['value' => 1, 'text' => '启用', 'color' => 'success'],
             'off' => ['value' => 0, 'text' => '禁用', 'color' => 'danger'],
         ];
 
-        $grid->column('organizations', '机构')->display(function (){
+        $grid->column('organizations', '机构库存')->display(function (){
             return '点击查看';
         })->modal('机构库存', function ($model) {
             $org = $model->organizationvaccines()->get()->map(function ($comment) {
-                return $comment->only(['org_id', 'stock']);
+                return $comment->only(['org_id','vaccine_id','stock']);
             });
             $org = $org->toArray();
             for($i=0;$i<count($org);$i++)
             {
                 $id = $org[$i]['org_id'];
+                $org[$i]['vaccine_id'] = $this->name;
                 $org[$i]['org_name'] = Organization::where('id',$id)->value('name');
             }
-            return new Table(['ID', '库存' ,'机构名称'], $org);
+            return new Table(['ID','疫苗','库存','机构名称'], $org);
         });
 
         $grid->column('kc','库存');
@@ -109,12 +110,12 @@ class VaccinesController extends AdminController
         $show = new Show(Vaccines::findOrFail($id));
 
         $show->field('id', __('Id'));
-        $show->field('type', __('分类'))->using([1=>'Ⅰ类疫苗',2=>'Ⅱ类疫苗']);
-        $show->field('introduction','简介');
-        $show->field('price', __('价钱'));
+//        $show->field('type', __('分类'))->using([1=>'Ⅰ类疫苗',2=>'Ⅱ类疫苗']);
+//        $show->field('introduction','简介');
+//        $show->field('price', __('价钱'));
         $show->field('name', __('名称'));
-        $show->field('remark', __('备注'));
-        $show->field('supplier', __('厂家'));
+//        $show->field('remark', __('备注'));
+//        $show->field('supplier', __('厂家'));
         $show->field('created_at', __('创建时间'));
         $show->field('updated_at', __('更新时间'));
 
@@ -134,16 +135,16 @@ class VaccinesController extends AdminController
             $f->model()->price /= 100;
         });
 
-        $form->select('type', __('分类'))->options(Vaccines::$_post_type)->default('1');
+//        $form->select('type', __('分类'))->options(Vaccines::$_post_type)->default('1');
         $form->text('name', __('名称'))->rules('required|min:3|max:255',['required'=>'请填写名称','min'=>'名称不能少于3个字符!','max'=>'名称长度过长!']);
-        $form->text('price', __('价格'));
-        $form->text('remark', __('备注'));
-        $form->text('supplier', __('厂家'))->rules('required',['required'=>'请填写厂家!']);
+//        $form->text('price', __('价格'));
+//        $form->text('remark', __('备注'));
+//        $form->text('supplier', __('厂家'))->rules('required',['required'=>'请填写厂家!']);
         $states = [
             'off' => ['value' => 0, 'text' => '禁用', 'color' => 'danger'],
             'on'  => ['value' => 1, 'text' => '启用', 'color' => 'success'],
         ];
-        $form->switch('states','状态')->states($states);
+        $form->switch('states','状态')->states($states)->default(1);
         $form->saving(function ($f){
             $f->price *=100;
         });

+ 29 - 0
app/Community/Controllers/ApiController.php

xqd xqd
@@ -5,6 +5,7 @@ namespace App\Community\Controllers;
 
 
 use App\Http\Controllers\Controller;
+use App\Models\Area;
 use App\Models\Docter;
 use App\Models\DocterOrganization;
 use App\Models\DocterSetting;
@@ -50,6 +51,34 @@ class ApiController extends Controller
         return Docter::where($where)->get(['name as text', 'id'])->toArray();
     }
 
+    /**
+     * 后台上传图片
+     * @return string
+     */
+
+    public function upload()
+    {
+        $url = "error|服务器端错误";
+
+        foreach (request()->file() as $file) {
+            $url = "upload/images/".uniqid().rand(9000,100000).'.'.$file->getClientOriginalExtension();
+            file_put_contents($url,file_get_contents($file->getRealPath()));
+        }
+        return env('APP_URL').'/'.$url;
+    }
+
+    public function getCity()
+    {
+        $id  = request('q');
+        return Area::where(['level'=>2,'parent_id'=>intval($id)])->get(['name as text','id']);
+    }
+
+    public function getArea()
+    {
+        $id  = request('q');
+        return Area::where(['level'=>3,'parent_id'=>intval($id)])->get(['name as text','id']);
+    }
+
     //备注
     public function paitent_remark()
     {

+ 3 - 0
app/Community/Controllers/DocterChatController.php

xqd xqd
@@ -36,6 +36,8 @@ class DocterChatController extends AdminController
         $user = Admin::user();
         $org_id = $user->org_id;
         $docter_id = $user->docter_id;
+        $grid->model()->orderByDesc('id');
+
         $is_admin = Admin::user()->inRoles(['administrator','devloper']);
         $grid->batchActions(function ($batch) {
             $batch->add(new sendNotice());
@@ -52,6 +54,7 @@ class DocterChatController extends AdminController
         }
 
         $grid->column('order_sn', __('订单号'));
+        $grid->column('docter.name', __('医生'));
         $grid->column('orderUser.nickname', __('咨询用户'));
         $grid->column('orderPatient.name', __('咨询患者'));
         $grid->column('orderPatient.birthday', __('患者年龄'))->display(function ($w){

+ 5 - 1
app/Community/Controllers/NurseUserController.php

xqd xqd
@@ -4,6 +4,7 @@ namespace App\Community\Controllers;
 
 use App\Models\Order;
 use App\Models\OrderNurse;
+use App\Models\Patient;
 use App\Models\PatientRemark;
 use App\Models\Serviceapplys;
 use EasyWeChat\Factory;
@@ -36,7 +37,10 @@ class NurseUserController extends AdminController
         $grid->model()->GroupBy('patient_id');
         $grid->column('orderPatient.name', __('姓名'));
         $grid->column('orderUser.nickname', __('监护人'));
-        $grid->column('orderPatient.phone', __('监护人手机号'));
+        $grid->column('orderPatient.phone', __('监护人手机号'))->display(function ($w){
+            if(empty($w)) return Patient::where('id',$this->patient_id)->value('phone');
+            return $w;
+        });;
         $grid->column('orderPatient.birthday', __('出生日期'));
 
         if(!$is_amdin){

+ 2 - 2
app/Community/Controllers/OrderNurseController.php

xqd
@@ -96,12 +96,12 @@ class OrderNurseController extends AdminController
         });
 
         $grid->actions(function ($actions) {
-            if(!empty($actions->row->orders) && $actions->row->orders->order_status< 2){
-                $actions->add(new Finished());
+            if(!empty($actions->row->orders) && $actions->row->orders->order_status < 2){
                 $actions->add(new Reserved());
             }
             if(!empty($actions->row->orders) && $actions->row->orders->order_status<= 3){
                 $actions->add(new OrderCance());
+                $actions->add(new Finished());
             }
 
             $actions->add(new DelNurse());

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

xqd
@@ -12,7 +12,7 @@ use Encore\Admin\Form;
 use Encore\Admin\Grid;
 use Encore\Admin\Show;
 
-class OrganizationController extends AdminController
+class  OrganizationController extends AdminController
 {
     /**
      * Title for current resource.

+ 42 - 0
app/Community/Controllers/ScheduleStatController.php

xqd
@@ -0,0 +1,42 @@
+<?php
+
+
+namespace App\Community\Controllers;
+
+
+use App\Models\Organization;
+use App\Models\SchedulePeriod;
+use Encore\Admin\Facades\Admin;
+use Encore\Admin\Layout\Content;
+
+class ScheduleStatController extends Admin
+{
+    public function schedule()
+    {
+        $org_id = Admin::user()->org_id;
+        if(empty($org_id)){
+            $org_id = 0;
+        }
+        $scheduleType = request('t',1);
+
+        $weekStartTime = strtotime('this week');
+        for ($i=1;$i<=7;$i++){
+            $time = $weekStartTime + ($i-1)*86400;
+            $date = date('Y-m-d',$time);
+            $amCount = SchedulePeriod::where(['organization_id'=>$org_id,'schedule_date'=>$date,'type'=>1,'schedule_type'=>$scheduleType])->count();
+            $pmCount = SchedulePeriod::where(['organization_id'=>$org_id,'schedule_date'=>$date,'type'=>2,'schedule_type'=>$scheduleType])->count();
+            $evCount = SchedulePeriod::where(['organization_id'=>$org_id,'schedule_date'=>$date,'type'=>3,'schedule_type'=>$scheduleType])->count();
+            $week[$i] = [$amCount,$pmCount,$evCount];
+        }
+
+        $data['week'] = $week;
+        $data['name'] = Organization::where(['id'=>$org_id])->value('name');
+        $content = new Content();
+        $content->title('医生排班统计');
+        $content->description('填写页面描述小标题');
+        $content->view('cdms.totalSchedule',['data'=>$data]);
+
+        return $content;
+    }
+
+}

+ 151 - 0
app/Community/Controllers/SettingController.php

xqd
@@ -0,0 +1,151 @@
+<?php
+
+namespace App\Community\Controllers;
+
+use App\Admin\Actions\Cdmuser;
+use App\Admin\Actions\UpdateCdms;
+use App\Models\Area;
+use App\Models\Organization;
+use Encore\Admin\Admin;
+use Encore\Admin\Controllers\AdminController;
+use Encore\Admin\Form;
+use Encore\Admin\Grid;
+use Encore\Admin\Show;
+
+class SettingController extends AdminController
+{
+    /**
+     * Title for current resource.
+     *
+     * @var string
+     */
+    protected $title = '机构';
+
+    /**
+     * Make a grid builder.
+     *
+     * @return Grid
+     */
+    protected function grid()
+    {
+        $grid = new Grid(new Organization());
+        $org_id = \Admin::user()->org_id;
+        if($org_id){
+            $grid->model()->where(['id'=>$org_id]);
+        }
+
+        $grid->filter(function ($filter){
+            $filter->disableIdFilter();
+            $filter->column(1/2, function ($filter) {
+                $filter->equal('type','机构类型')->select([
+                    1=>'公立医院',
+                    2=>'私立医院'
+                ]);
+                $filter->equal('level','机构级别')->select([
+                    0=>'未定级',
+                    1=>'一级',
+                    2=>'二级',
+                    3=>'三级'
+                ]);
+            });
+            $filter->column(1/2, function ($filter) {
+                $filter->equal('province_id','省份')->select(Area::where('level',1)->pluck('name','id'));
+                $filter->equal('city_id','城市')->select(Area::where('level',2)->pluck('name','id'));
+                $filter->equal('area_id','地区')->select(Area::where('level',3)->pluck('name','id'));
+            });
+        });
+        $grid->model()->orderBy('id','desc');
+        $grid->column('id', __('Id'));
+        $grid->column('type', __('机构类型'))->using([1=>'公立医院',2=>'私立医院']);
+        $grid->column('level', __('机构级别'))->using([0=>'未定级',1=>'一级',2=>'二级',3=>'三级']);
+        $grid->column('name', __('名称'));
+        $grid->column('province_id', __('省份'))->display(function ($id){
+            return Area::where('id',$id)->value('name');
+        });
+        $grid->column('city_id', __('城市'))->display(function ($id){
+            return Area::where('id',$id)->value('name');
+        });
+        $grid->column('area_id', __('地区'))->display(function ($id){
+            return Area::where('id',$id)->value('name');
+        });
+        $grid->column('address', __('详细地址'));
+        $grid->column('latitude', __('经度'));
+        $grid->column('longitude', __('纬度'));
+        $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(Organization::findOrFail($id));
+
+        $show->field('id', __('Id'));
+        $show->field('cdms_id', __('Cdms id'));
+        $show->field('type', __('Type'));
+        $show->field('level', __('Level'));
+        $show->field('name', __('Name'));
+        $show->field('province_id', __('Province id'));
+        $show->field('city_id', __('City id'));
+        $show->field('area_id', __('Area id'));
+        $show->field('address', __('Address'));
+        $show->field('nurse_notice', __('Nurse notice'));
+        $show->field('vaccine_notice', __('Vaccine notice'));
+        $show->field('intro', __('Intro'));
+        $show->field('latitude', __('Latitude'));
+        $show->field('longitude', __('Longitude'));
+        $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 Organization());
+        $form->select('type', __('机构类型'))->options([
+            1=>'公立医院',
+            2=>'私立医院'
+        ])->required();
+        $form->select('level', __('机构级别'))->options([
+            0=>'未定级',
+            1=>'一级',
+            2=>'二级',
+            3=>'三级',
+        ])->required();
+        $form->text('name', __('名称'))->required();
+        $form->select('province_id', __('省份'))->options(function (){
+            return Area::where('level',1)->pluck('name','id');
+        })->load('city_id','/cdms/api/getCity')->required();
+        $form->select('city_id', __('城市'))->options(function (){
+            return Area::where(['level'=>2,'parent_id'=>$this->province_id])->pluck('name','id');
+        })->load('area_id','/cdms/api/getArea')->required();
+        $form->select('area_id', __('地区'))->options(function (){
+            return Area::where(['level'=>3,'parent_id'=>$this->city_id])->pluck('name','id');
+        })->required();
+        $form->text('address', __('详细地址'))->required();
+        Admin::script("
+        function clearstyle(){
+            $('.wangEditor-txt').css('height','300px')
+        };
+        setTimeout(clearstyle,500);
+        ");
+        $form->editor('nurse_notice','门诊通告');
+        $form->editor('vaccine_notice','计免通告');
+        $form->latlong('latitude', 'longitude','经纬度');
+
+        return $form;
+    }
+}

+ 59 - 21
app/Community/Controllers/Vaccine/OrganizationVaccineController.php

xqd xqd xqd xqd
@@ -18,7 +18,7 @@ class OrganizationVaccineController extends AdminController
      *
      * @var string
      */
-    protected $title = '机构疫苗';
+    protected $title = '疫苗库存';
 
     /**
      * Make a grid builder.
@@ -30,23 +30,39 @@ class OrganizationVaccineController extends AdminController
         $grid = new Grid(new OrganizationVaccine());
 
         $org_id = Admin::user()->org_id;
+
         if($org_id){
             $grid->model()->where(['org_id'=>$org_id]);
         }
         $grid->disableCreateButton(false);
 
-
-        $grid->filter(function ($fliter){
-//            $fliter->equal('organization.name','机构')->select(Organization::pluck('name','id'));
-//            $fliter->equal('organization.name','机构')->select(Organization::pluck('name','id'));
-            $fliter->equal('vaccine.name','疫苗')->select(Vaccine::pluck('name','id'));
+        $is_admin = Admin::user()->isAdministrator();
+        $grid->filter(function ($fliter) use ($is_admin,$org_id) {
+            if($is_admin){
+                $fliter->equal('organization.name','机构')->select(Organization::pluck('name','id'));
+            }
+            $fliter->like('vaccine.name','疫苗')->select(Vaccine::where(['org_id'=>$org_id])->pluck('name','id'));
         });
 
 
         $grid->column('id', __('Id'));
         $grid->column('organization.name', __('机构'));
-        $grid->column('vaccine.name', __('疫苗'));
-        $grid->column('stock', __('库存'))->editable();
+        $grid->column('vaccine.name', __('疫苗名称'));
+        $grid->column('type', __('疫苗类型'))->using(OrganizationVaccine::getType())->label('info');
+        $grid->column('price', __('价格'))->display(function ($p){
+            $t = $this->type;
+            if($t == 1)return '免费';
+            return ($p / 100).'元';
+        });
+        $grid->actions(function ($actions){
+//            $actions->disableEdit();
+//            $actions->disableView();
+            $actions->disableDelete();
+        });
+
+        $grid->column('stock', __('库存'));
+        $grid->column('supplier', __('厂家'));
+        $grid->column('remark', __('备注'));
         $grid->column('created_at', __('创建时间'));
         $grid->column('updated_at', __('更新时间'));
 
@@ -64,11 +80,15 @@ class OrganizationVaccineController extends AdminController
         $show = new Show(OrganizationVaccine::findOrFail($id));
 
         $show->field('id', __('Id'));
-        $show->field('org_id', __('Org id'));
-        $show->field('vaccine_id', __('Vaccine id'));
-        $show->field('stock', __('Stock'));
-        $show->field('created_at', __('Created at'));
-        $show->field('updated_at', __('Updated at'));
+        $show->field('organization.name', __('机构'));
+        $show->field('vaccine.name', __('疫苗'));
+        $show->field('type', __('疫苗类型'))->using(OrganizationVaccine::getType());
+        $show->field('vaccine.name', __('疫苗'));
+        $show->field('price', __('价格'));
+        $show->field('supplier', __('厂家'));
+        $show->field('reamrk', __('备注'));
+        $show->field('created_at', __('创建时间'));
+        $show->field('updated_at', __('更新时间'));
 
         return $show;
     }
@@ -83,24 +103,42 @@ class OrganizationVaccineController extends AdminController
         $form = new Form(new OrganizationVaccine());
         $is_admin = Admin::user()->inRoles(['administrator','manager']);
         $org_id = Admin::user()->org_id;
+        $form->editing(function ($f){
+            $f->model()->price /=100;
+        });
         $where = [];
         if(!empty($org_id)){
-            $where = ['id'=>$org_id];
+            $where = ['org_id'=>$org_id];
         }
         if($is_admin){
             if($form->isEditing()){
-                $form->select('org_id','机构')->options(Organization::where($where)->pluck('name','id'))->readOnly();
-                $form->select('vaccine_id', __('疫苗'))->options(Vaccine::pluck('name','id'))->readOnly();
+                $form->select('org_id','机构')->options(Organization::where(['id'=>$org_id])->pluck('name','id'))->readOnly();
+                $form->select('vaccine_id', __('疫苗'))->options(Vaccine::where($where)->pluck('name','id'))->readOnly();
+                $form->select('type', __('疫苗类型'))->options(OrganizationVaccine::getType())->when(1,function () use($form){
+                    $form->hidden('price','价格')->value(0);
+                })->when(2,function () use($form){
+                    $form->text('price','价格');
+                });
             } else {
-                $form->select('org_id','机构')->options(Organization::where($where)->pluck('name','id'));
-                $form->select('vaccine_id', __('疫苗'))->options(Vaccine::pluck('name','id'));
+                $form->select('org_id','机构')->options(Organization::where(['id'=>$org_id])->pluck('name','id'));
+                $form->select('vaccine_id', __('疫苗'))->options(Vaccine::where($where)->pluck('name','id'));
+                $form->select('type', __('疫苗类型'))->options(OrganizationVaccine::getType())->when(1,function () use($form){
+                    $form->hidden('price','价格')->value(0);
+                })->when(2,function () use($form){
+                    $form->text('price','价格');
+                });
             }
         } else {
             $form->hidden('org_id')->value(Admin::user()->org_id);
         }
-        $form->text('stock', __('库存'))->rules('required',['required'=>'请输入库存']);
-        $form->datetime('updated_at', __('更新时间'));
-        $form->datetime('created_at', __('创建时间'));
+
+        $form->saving(function ($f){
+           $f->price *=100;
+        });
+
+        $form->number('stock', __('库存'))->rules('required',['required'=>'请输入库存']);
+        $form->text('supplier', __('厂家'))->rules('required',['required'=>'请输入厂家']);
+        $form->textarea('remark', __('备注'));
 
         return $form;
     }

+ 46 - 30
app/Community/Controllers/VaccineController.php

xqd xqd xqd xqd xqd xqd
@@ -12,6 +12,7 @@ use Encore\Admin\Facades\Admin;
 use Encore\Admin\Form;
 use Encore\Admin\Grid;
 use Encore\Admin\Show;
+use Encore\Admin\Widgets\Table;
 
 class VaccineController extends AdminController
 {
@@ -31,11 +32,29 @@ class VaccineController extends AdminController
     {
         $grid = new Grid(new Vaccine());
         $grid->model()->orderByDesc('id');
+        $org_id = Admin::user()->org_id;
+        if(!empty($org_id)){
+            $grid->model()->where(['org_id'=>$org_id]);
+        }
 
         $grid->disableCreateButton(false);
         $grid->column('id', __('ID'));
         $grid->column('name', __('疫苗名称'));
-        $grid->column('type', __('类别'))->editable('select',[1=>'一类',2=>'二类']);
+//        $grid->column('organizations', '机构库存')->display(function (){
+//            return '点击查看';
+//        })->modal('机构库存', function ($model) {
+//            $org = $model->organizationvaccines()->get()->map(function ($comment) {
+//                return $comment->only(['org_id','vaccine_id','stock']);
+//            });
+//            $org = $org->toArray();
+//            for($i=0;$i<count($org);$i++)
+//            {
+//                $id = $org[$i]['org_id'];
+//                $org[$i]['vaccine_id'] = $this->name;
+//                $org[$i]['org_name'] = Organization::where('id',$id)->value('name');
+//            }
+//            return new Table(['ID','疫苗','库存','机构名称'], $org);
+//        });
         $grid->column('stocks', __('剩余库存'))->display(function (){
             return OrganizationVaccine::where(['vaccine_id'=>$this->id])->sum('stock');
         });
@@ -49,15 +68,8 @@ class VaccineController extends AdminController
                 $query->where('vaccine_id',$this->id);
             })->count();
         });;
-        $grid->column('price', __('价格'))->display(function ($v){
-            return round($v/100,4).'元';
-        })->editable();
-        $grid->column('remark', __('备注'))->editable('textarea');
-        $grid->column('supplier', __('厂家'));
-//        $grid->column('created_at', __('Created at'));
-//        $grid->column('updated_at', __('Updated at'));
         $grid->filter(function ($fliter){
-            $fliter->equal('type','类别')->select([1=>'一类',2=>'二类']);
+//            $fliter->equal('type','类别')->select(OrganizationVaccine::getType());
             $fliter->like('name','疫苗');
         });
         $grid->actions(function ($actions) {
@@ -67,6 +79,8 @@ class VaccineController extends AdminController
 
             // prepend一个操作
             $actions->prepend('<a href="http://www.baidu.com" target="_blank"><i class="fa fa-cab"></i></a>');
+
+            $actions->disableDelete();
         });
         return $grid;
     }
@@ -82,13 +96,9 @@ class VaccineController extends AdminController
         $show = new Show(Vaccine::findOrFail($id));
 
         $show->field('id', __('Id'));
-        $show->field('type', __('Type'));
-        $show->field('price', __('Price'));
-        $show->field('name', __('Name'));
-        $show->field('remark', __('Remark'));
-        $show->field('supplier', __('Supplier'));
-        $show->field('created_at', __('Created at'));
-        $show->field('updated_at', __('Updated at'));
+        $show->field('name', __('疫苗名称'));
+        $show->field('created_at', __('创建时间'));
+        $show->field('updated_at', __('更新时间'));
 
         return $show;
     }
@@ -104,22 +114,28 @@ class VaccineController extends AdminController
 
         $orglist = Organization::pluck('name','id');
         $org_id = Admin::user()->org_id;
-        if($org_id){
-            $orglist = Organization::where(['id'=>$org_id])->pluck('name','id');
-        }
-        $form->editing(function ($f){
-            $f->model()->price /= 100;
-        });
-        $form->select('type', __('类型'))->options([1=>'一类',2=>'二类'])->default(1);
+//        if($org_id){
+//            $orglist = Organization::where(['id'=>$org_id])->pluck('name','id');
+//        }
+//        $form->editing(function ($f){
+//            $f->model()->price /= 100;
+//        });
+        $form->hidden('org_id', __('类型'))->value($org_id);
+//        $form->select('type', __('类型'))->options([1=>'一类',2=>'二类'])->default(1);
 //        $form->select('org_id','机构')->options($orglist)->rules('required',['requried'=>'请选择机构']);
-        $form->text('name', __('疫苗名称'))->rules('required',['requried'=>'请填写疫苗名称']);
-        $form->text('supplier', __('厂家'))->rules('required',['requried'=>'请填写厂家信息']);
-        $form->text('price', __('价格'))->rules('required',['requried'=>'请填写价格']);
+        $form->text('name', __('疫苗名称'))->rules('required',['required'=>'请输入疫苗']);
+//        $form->text('name', __('疫苗名称'))->creationRules(['required', "unique:vaccines"])
+//            ->updateRules(['required', "unique:vaccines,name,{{id}}"]);
+        $states = [
+            'off' => ['value' => 0, 'text' => '禁用', 'color' => 'danger'],
+            'on'  => ['value' => 1, 'text' => '启用', 'color' => 'success'],
+        ];
+        $form->switch('states','状态')->states($states)->default(1);
 //        $form->text('stock', __('库存'))->rules('required',['requried'=>'请填写库存']);
-        $form->textarea('remark', __('备注'));
-        $form->saving(function ($form){
-           $form->price = $form->price*100;
-        });
+//        $form->textarea('remark', __('备注'));
+//        $form->saving(function ($form){
+//           $form->price = $form->price*100;
+//        });
 
         return $form;
     }

+ 5 - 1
app/Community/Controllers/VaccineUserController.php

xqd xqd
@@ -3,6 +3,7 @@
 namespace App\Community\Controllers;
 
 use App\Models\Order;
+use App\Models\Patient;
 use App\Models\PatientRemark;
 use Encore\Admin\Controllers\AdminController;
 use Encore\Admin\Facades\Admin;
@@ -38,7 +39,10 @@ class VaccineUserController extends AdminController
         $grid->model()->GroupBy('patient_id');
         $grid->column('orderPatient.name', __('姓名'));
         $grid->column('orderUser.nickname', __('监护人'));
-        $grid->column('orderPatient.phone', __('监护人手机号'));
+        $grid->column('orderPatient.phone', __('监护人手机号'))->display(function ($w){
+            if(empty($w)) return Patient::where('id',$this->patient_id)->value('phone');
+            return $w;
+        });
         $grid->column('orderPatient.birthday', __('出生日期'));
         $grid->column('patient_id', __('备注'))->display(function ($w) use($user) {
             return PatientRemark::where(['org_id'=>intval($user->org_id),'patient_id'=>$w,'type'=>2])->value('remark');

+ 9 - 1
app/Community/routes.php

xqd xqd
@@ -3,8 +3,12 @@
 Route::get('/', 'HomeController@home');
 Route::get('/home', 'HomeController@home');
 
-Route::get('/total_schedule', 'HomeController@schedule');
+//Route::get('/total_schedule', 'HomeController@schedule');
+Route::get('/total_schedule', 'ScheduleStatController@schedule');
 Route::resource('nurses', NurseController::class);
+//机构设置
+Route::resource('organization_setting', SettingController::class);
+
 Route::resource('nurse_users', NurseUserController::class);
 Route::resource('order_nurses', OrderNurseController::class);
 Route::resource('vaccines', VaccineController::class);
@@ -61,6 +65,10 @@ Route::get('/api/update_docter_setting', 'ApiController@updateDocterSetting');
 Route::get('/api/docter_setting', 'ApiController@updateDocterSetting');
 Route::get('/api/self_schedule', 'ApiController@setSelfSchedule');
 Route::get('/api/getScheduleInfo', 'ApiController@getScheduleInfo');
+Route::any('/img_upload', 'ApiController@upload');
+
+Route::get('/api/getCity', 'ApiController@getCity');
+Route::get('/api/getArea', 'ApiController@getArea');
 
 Route::get('/getChatOrder', 'ApiController@get_chat_order');
 

+ 14 - 0
app/Http/Controllers/Api/V1/CommonController.php

xqd
@@ -339,4 +339,18 @@ class CommonController extends Controller
 
         return out(['token' => $token]);
     }
+
+    public function delServerFile()
+    {
+        $req = request()->post();
+        $this->validate(request(), [
+            'url' => 'required|url'
+        ]);
+
+        $tem = parse_url($req['url']);
+        $allPath = public_path().$tem['path'];
+        unlink($allPath);
+
+        return out();
+    }
 }

+ 1 - 1
app/Http/Controllers/Api/V1/CouponController.php

xqd
@@ -48,7 +48,7 @@ class CouponController extends AuthController
     {
         $user = $this->user;
 
-        $data = UserCoupon::where('user_id', $user['id'])->where('status', 1)->where('expire_time', '>', time())->orderBy('id', 'desc')->paginate();
+        $data = UserCoupon::with('couponType')->where('user_id', $user['id'])->where('status', 1)->where('expire_time', '>', time())->orderBy('id', 'desc')->paginate();
 
         return out($data);
     }

+ 13 - 57
app/Http/Controllers/Api/V1/DocterController.php

xqd xqd xqd
@@ -186,12 +186,11 @@ class DocterController extends AuthController
             'longitude' => 'numeric',
         ]);
         $user = $this->user;
-        $builder = Schedule::with(['schedulePeriod.timePeriod', 'schedulePeriod.organization'])->where('docter_id', $req['docter_id'])->where('schedule_type', 1)->where('schedule_day', '>=', date('Ymd'))->orderBy('schedule_day');
+        $builder = Schedule::with(['schedulePeriod.timePeriod', 'schedulePeriod.organization'])->where('docter_id', $req['docter_id'])->where('schedule_type', 1)->where('schedule_day', '>=', date('Ymd'))->orderBy('schedule_day', 'asc');
         if (!empty($req['organization_id'])) {
             $builder->where('organization_id', $req['organization_id']);
         }
         $data = $builder->paginate($req['per_page']??15)->toArray();
-        \Log::info($data);
         if (!empty($data)) {
             foreach ($data['data'] as $k => &$v) {
                 foreach ($v['schedule_period'] as $k1 => &$v1) {
@@ -206,68 +205,19 @@ class DocterController extends AuthController
                         $can_appoint_num = $docterSettings['service_num'] - $v1['order_num'];
                         $v1['can_appoint_num'] = $can_appoint_num < 0 ? 0 : $can_appoint_num;
                     }
+                    //预约时间已经过了,就不展示了
+                    $schedule_time = strtotime($v1['schedule_date'].' '.$v1['time_period']['end_time_period'].':00');
+                    if ($schedule_time < time()) {
+                        unset($v['schedule_period'][$k1]);
+                    }
                 }
+                $v['schedule_period'] = array_values($v['schedule_period']);
             }
         }
 
         return out($data);
     }
 
-//    public function schedulePeriodList()
-//    {
-//        $req = request()->post();
-//        $this->validate(request(), [
-//            'docter_id' => 'required|integer',
-//            'organization_id' => 'integer',
-//            'per_page' => 'integer',
-//            'latitude' => 'numeric',
-//            'longitude' => 'numeric',
-//        ]);
-//        $user = $this->user;
-//        $builder = schedulePeriod::with(['timePeriod', 'organization'])->where('docter_id', $req['docter_id'])->where('schedule_date', '>=', date('Y-m-d'));
-//        if (!empty($req['organization_id'])) {
-//            $builder->where('organization_id', $req['organization_id']);
-//        }
-//        $data = $builder->paginate($req['per_page']??15)->toArray();
-//        //日期有重复,不同机构排班
-//        $newdata = array();
-//        if (!empty($data)) {
-////            foreach ($data['data'] as $k => &$v) {
-//                foreach ($data as $k1 => $v1) {
-//                    if (!empty($v1['organization'])) {
-//                        $v1['organization']['distance'] = get_user_distance($user, $v1['organization']['latitude'], $v1['organization']['longitude']);
-//                    }
-//                    $docterSettings = DocterSetting::select(['service_num'])->where('docter_id', $req['docter_id'])->where('type', 1)->where('org_id', $v1['organization_id'])->first();
-//                    if (empty($docterSettings)) {
-//                        $v1['can_appoint_num'] = 0;
-//                    }
-//                    else {
-//                        $can_appoint_num = $docterSettings['service_num'] - $v1['order_num'];
-//                        $v1['can_appoint_num'] = $can_appoint_num < 0 ? 0 : $can_appoint_num;
-//                    }
-//
-//                    if(empty($newdata[$v1['time_period']])){
-//                        $newdata[$v1['schedule_date']] = $v1;
-//                    }else{
-//                        $newd = $newdata[$v1['schedule_date']];
-//                        foreach ($newd['time_period'] as $k2 => $v2) {
-//                            array_push($v1['time_period'],$v2);
-//                        }
-//                        $newdata[$v['schedule_date']] = $v1;
-//
-//                    }
-//                }
-//
-////            }
-//        }
-//        $res = array();
-//        foreach ($newdata as $v) {
-//            if (!empty($v['time_period']))$res[] = $v;
-//        }
-//
-//        return out($res);
-//    }
-
     public function timePeriodList()
     {
         $req = request()->post();
@@ -302,7 +252,13 @@ class DocterController extends AuthController
                         $can_appoint_num = $docterSettings['service_num'] - $v1['order_num'];
                         $v1['can_appoint_num'] = $can_appoint_num < 0 ? 0 : $can_appoint_num;
                     }
+                    //预约时间已经过了,就不展示了
+                    $schedule_time = strtotime($v1['schedule_date'].' '.$v1['time_period']['end_time_period'].':00');
+                    if ($schedule_time < time()) {
+                        unset($v['schedule_period'][$k1]);
+                    }
                 }
+                $v['schedule_period'] = array_values($v['schedule_period']);
             }
         }
 

+ 27 - 10
app/Http/Controllers/Api/V1/OrderController.php

xqd xqd xqd xqd xqd
@@ -8,6 +8,7 @@
 
 namespace App\Http\Controllers\Api\V1;
 
+use App\Models\DocterSetting;
 use App\Models\Nurse;
 use App\Models\Order;
 use App\Models\OrderNurse;
@@ -17,6 +18,7 @@ use App\Models\OrderVaccine;
 use App\Models\OrganizationVaccine;
 use App\Models\Patient;
 use App\Models\Payment;
+use App\Models\SchedulePeriod;
 use App\Models\ServicePack;
 use App\Models\Team;
 use App\Models\TeamDocter;
@@ -218,15 +220,6 @@ class OrderController extends AuthController
 
         $product_type = $req['product_type'];
 
-        if ($req['product_type'] == 4) {
-            $vaccine = Vaccine::select(['type'])->where('id', $req['vaccine_id'])->first();
-            if ($vaccine['type'] == 2) {
-                if (empty($req['total_amount'])) {
-                    return out(null, 10001, '总价不能为0');
-                }
-            }
-        }
-
         $discount_amount = 0;
         if (!empty($req['user_coupon_id'])) {
             //计算优惠金额
@@ -239,6 +232,29 @@ class OrderController extends AuthController
             return out(null, 10011, '请输入支付密码');
         }
 
+        //检查号源
+        if ($product_type == 3) {
+            $schedulePeriod = SchedulePeriod::where('docter_id', $req['docter_id'])->where('time_period_id', $req['time_period_id'])->where('schedule_date', $req['schedule_date'])->where('schedule_type', 1)->first();
+            if (empty($schedulePeriod)) {
+                return out(null, 10012, '医生无该时间段的排班');
+            }
+            $docterSettings = DocterSetting::select(['service_num'])->where('docter_id', $req['docter_id'])->where('type', 1)->first();
+            if ($docterSettings['service_num'] <= $schedulePeriod['order_sn']) {
+                return out(null, 10014, '医生该时间段已经预约满了');
+            }
+        }
+        elseif (in_array($product_type, [4,5])) {
+            $schedule_type_map = [4 => 2, 5 => 3];
+            $schedulePeriod = SchedulePeriod::where('time_period_id', $req['time_period_id'])->where('schedule_date', $req['schedule_date'])->where('organization_id', $req['organization_id'])->where('schedule_type', $schedule_type_map[$product_type])->first();
+            if (empty($schedulePeriod)) {
+                return out(null, 10013, '机构无该时间段的排班');
+            }
+            $docterSettings = DocterSetting::select(['service_num'])->where('org_id', $req['organization_id'])->where('type', $schedule_type_map[$product_type])->first();
+            if ($docterSettings['service_num'] <= $schedulePeriod['order_sn']) {
+                return out(null, 10015, '机构该时间段已经预约满了');
+            }
+        }
+
         if ($req['payment_type'] == 2) {
             if ($user['balance'] < $payment_amount) {
                 return out(null, 601, '余额不足');
@@ -301,9 +317,10 @@ class OrderController extends AuthController
             $orderPatient = OrderPatient::create($addPatient);
             //保存订单疫苗信息
             if ($req['product_type'] == 4) {
-                $addVaccine = Vaccine::select(['id as vaccine_id', 'type as vaccine_type', 'price as vaccine_price', 'name as vaccine_name', 'remark as vaccine_remark', 'supplier as vaccine_supplier'])->where('id', $req['vaccine_id'])->first()->getOriginal();
+                $addVaccine = Vaccine::join('organization_vaccines', 'organization_vaccines.vaccine_id', '=', 'vaccines.id')->select(['vaccines.id as vaccine_id', 'organization_vaccines.type as vaccine_type', 'organization_vaccines.price as vaccine_price', 'vaccines.name as vaccine_name', 'organization_vaccines.remark as vaccine_remark', 'organization_vaccines.supplier as vaccine_supplier'])->where('organization_vaccines.org_id', $req['organization_id'])->where('organization_vaccines.vaccine_id', $req['vaccine_id'])->first()->getOriginal();
                 $addVaccine['order_id'] = $order['id'];
                 $addVaccine['order_patient_id'] = $orderPatient['id'];
+                $addVaccine = array_filter($addVaccine);
                 OrderVaccine::create($addVaccine);
             }
             //保存儿保订单信息

+ 4 - 7
app/Http/Controllers/Api/V1/VaccineController.php

xqd
@@ -22,22 +22,19 @@ class VaccineController extends AuthController
             'sort_type' => 'in:0,1,2',
         ]);
 
-        $builder = Vaccine::join('organization_vaccines', 'organization_vaccines.vaccine_id', '=', 'vaccines.id')->select(['vaccines.id', 'vaccines.type', 'vaccines.price', 'vaccines.name', 'vaccines.remark', 'vaccines.supplier', 'organization_vaccines.stock'])->where('organization_vaccines.stock', '>', 0);
+        $builder = Vaccine::join('organization_vaccines', 'organization_vaccines.vaccine_id', '=', 'vaccines.id')->select(['vaccines.id', 'organization_vaccines.id as organization_vaccine_id', 'organization_vaccines.type', 'organization_vaccines.price', 'vaccines.name', 'organization_vaccines.remark', 'organization_vaccines.supplier', 'organization_vaccines.stock'])->where('organization_vaccines.stock', '>', 0)->where('organization_vaccines.org_id', $req['organization_id']);
         if (!empty($req['type'])) {
-            $builder->where('vacciness.type', $req['type']);
+            $builder->where('organization_vaccines.type', $req['type']);
         }
         if (!empty($req['name'])) {
             $builder->where('vacciness.name', 'like', '%'.$req['name'].'%');
         }
-        if (!empty($req['organization_id'])) {
-            $builder->where('organization_vaccines.org_id', $req['organization_id']);
-        }
         if (!empty($req['sort_type'])) {
             if ($req['sort_type'] == 1) {
-                $builder->orderBy('vaccines.price', 'asc');
+                $builder->orderBy('organization_vaccines.price', 'asc');
             }
             elseif ($req['sort_type'] == 2) {
-                $builder->orderBy('vaccines.price', 'desc');
+                $builder->orderBy('organization_vaccines.price', 'desc');
             }
         }
 

+ 0 - 1
app/Models/Article.php

xqd
@@ -15,7 +15,6 @@ class Article extends BaseModel
     public static $_post_type = [
         1=>'健康科普',
         2=>'疫苗科普',
-        3=>'常见问题'
     ];
     public function getIsCollectAttribute()
     {

+ 11 - 0
app/Models/OrganizationVaccine.php

xqd
@@ -6,6 +6,17 @@ use Illuminate\Database\Eloquent\Model;
 
 class OrganizationVaccine extends Model
 {
+
+    const FREETYPE = 1, NOFREETYPE =2;
+
+    protected static $_type = [
+        self::FREETYPE => 'Ⅰ类',
+        self::NOFREETYPE => 'Ⅱ类',
+    ];
+
+    public static function getType(){
+        return self::$_type;
+    }
     public function organization()
     {
         return $this->hasOne(Organization::class,'id','org_id');

+ 2 - 1
app/Models/UserCoupon.php

xqd
@@ -48,7 +48,8 @@ class UserCoupon extends BaseModel
         return $discountAmount;
     }
 
-    public function couponType (){
+    public function couponType()
+    {
         return $this->hasMany(CouponType::class);
     }
 }

+ 42 - 1
config/tenancy.php

xqd xqd
@@ -88,7 +88,6 @@ return [
 
     'https' => env('ADMIN_HTTPS', true),
 
-
     /*
     |--------------------------------------------------------------------------
     | Laravel-admin auth setting
@@ -346,6 +345,48 @@ return [
                 ],
             ]
         ],
+        'wang-editor2' => [
+            // 如果要关掉这个扩展,设置为false
+            'enable' => true,
+            // 编辑器的配置
+            'config' => [
+                'uploadImgFileName' => 'up_image', //这个应该wangEditor的上传方法名字,不要乱改
+                'uploadImgUrl' => '/cdms/img_upload', //注意这里是上传的路由地址
+                'menus' => [
+                    'source',
+                    '|',
+                    'bold',
+                    'underline',
+                    'italic',
+                    'strikethrough',
+                    'eraser',
+                    'forecolor',
+                    'bgcolor',
+                    '|',
+                    'quote',
+                    'fontfamily',
+                    'fontsize',
+                    'head',
+                    'unorderlist',
+                    'orderlist',
+                    'alignleft',
+                    'aligncenter',
+                    'alignright',
+                    '|',
+                    'link',
+                    'unlink',
+                    'table',
+                    '|',
+                    'img',
+                    'video',
+                    'insertcode',
+                    '|',
+                    'undo',
+                    'redo',
+                    'fullscreen'
+                ],
+            ]
+        ]
     ],
     // 使用`下拉菜单`形式
     'grid_action_class' => \Encore\Admin\Grid\Displayers\DropdownActions::class,

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

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

+ 48 - 0
resources/views/cdms/totalSchedule.blade.php

xqd
@@ -0,0 +1,48 @@
+<div class="box">
+    <div class="box-header">
+        <h3 class="box-title">机构{{$data['name']}}排班页面</h3>
+    </div>
+    <!-- /.box-header -->
+    <div class="box-body">
+        <div id="example2_wrapper" class="dataTables_wrapper form-inline dt-bootstrap"><div class="row"><div class="col-sm-6"></div><div class="col-sm-6"></div></div><div class="row"><div class="col-sm-12"><table id="example2" class="table table-bordered table-hover dataTable" role="grid" aria-describedby="example2_info">
+                        <thead>
+                        <tr role="row">
+                            <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Rendering engine: activate to sort column ascending">Rendering engine</th>
+                            <th class="sorting_desc" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending" aria-sort="descending">Browser</th>
+                            <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Platform(s): activate to sort column ascending">Platform(s)</th>
+                            <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Engine version: activate to sort column ascending">Engine version</th>
+                            <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="CSS grade: activate to sort column ascending">CSS grade</th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        <tr role="row" class="odd">
+                            <td class="">Presto</td>
+                            <td class="sorting_1">Opera 9.0</td>
+                            <td>Win 95+ / OSX.3+</td>
+                            <td>-</td>
+                            <td>A</td>
+                        </tr>
+                        <tr role="row" class="even">
+                            <td class="">Presto</td>
+                            <td class="sorting_1">Opera 8.5</td>
+                            <td>Win 95+ / OSX.2+</td>
+                            <td>-</td>
+                            <td>A</td>
+                        </tr><tr role="row" class="odd">
+                            <td class="">Presto</td>
+                            <td class="sorting_1">Opera 8.0</td>
+                            <td>Win 95+ / OSX.2+</td>
+                            <td>-</td>
+                            <td>A</td>
+                        </tr><tr role="row" class="even">
+                            <td class="">Presto</td>
+                            <td class="sorting_1">Opera 7.5</td>
+                            <td>Win 95+ / OSX.2+</td>
+                            <td>-</td>
+                            <td>A</td>
+                        </tr>
+                        <tfoot>
+                        <tr><th rowspan="1" colspan="1">Rendering engine</th><th rowspan="1" colspan="1">Browser</th><th rowspan="1" colspan="1">Platform(s)</th><th rowspan="1" colspan="1">Engine version</th><th rowspan="1" colspan="1">CSS grade</th></tr>
+                        </tfoot>
+                    </table>
+</div>