فهرست منبع

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

zilong 4 سال پیش
والد
کامیت
32b1374dca

+ 1 - 2
app/Community/Actions/Clinc/OrderCancel.php

xqd xqd
@@ -27,7 +27,7 @@ class OrderCancel extends RowAction
         DB::beginTransaction();
         try {
             //退还余额
-            $res = Order::orderCancel($id,'社区取消');
+            $res = Order::appiontOrderCancel($id,'社区取消');
             $msg = [
                 $openid,$sn,'门诊预约',$price,$time,$pantient,$organization,'社区取消',$paystatus
             ];
@@ -38,7 +38,6 @@ class OrderCancel extends RowAction
             $ret = admin_send_wechat_message(1,$msg,$miniMsg);
             DB::commit();
         } catch ( \Exception $e){
-            dd($e->getMessage());
             DB::rollBack();
             return $this->response()->error('操作失败!');
         }

+ 28 - 0
app/Community/Actions/Docter/AddUser.php

xqd
@@ -0,0 +1,28 @@
+<?php
+
+namespace App\Community\Actions\Docter;
+
+use Encore\Admin\Admin;
+use Encore\Admin\Grid\Tools\AbstractTool;
+use Illuminate\Support\Facades\Request;
+
+class AddUser extends AbstractTool
+{
+    protected $url;
+    protected $icon;
+    protected $text;
+    function __construct($url,$icon,$text='')
+    {
+        $this->url = $url;
+        $this->icon = $icon;
+        $this->text = $text;
+    }
+
+    public function render()
+    {
+        $url = $this->url;
+        $icon = $this->icon;
+        $text = $this->text;
+        return view('cdms.button', compact('url','icon','text'));
+    }
+}

+ 1 - 2
app/Community/Actions/Nurse/OrderCance.php

xqd xqd
@@ -30,7 +30,7 @@ class OrderCance extends RowAction
         DB::beginTransaction();
         try {
             //退还余额
-            $res = Order::orderCancel($id,'社区取消');
+            $res = Order::appiontOrderCancel($id,'社区取消');
             if(empty($order->orderUser) || empty($order->orderUser->openid) ) {
                 DB::commit();
                 return $this->response()->success('操作成功!')->refresh();
@@ -46,7 +46,6 @@ class OrderCance extends RowAction
 //            $ret = admin_send_wechat_message(1,$msg,$miniMsg);
             DB::commit();
         } catch ( \Exception $e){
-            dump($e->getMessage());
             DB::rollBack();
             return $this->response()->error('操作失败!');
         }

+ 1 - 2
app/Community/Actions/Vaccine/OrderCance.php

xqd xqd
@@ -28,7 +28,7 @@ class OrderCance extends RowAction
         DB::beginTransaction();
         try {
             //退还余额
-            $res = Order::orderCancel($id,'社区取消');
+            $res = Order::appiontOrderCancel($id,'社区取消');
             $msg = [
                 $openid,$sn,'疫苗接种预约',$price,$time,$pantient,$organization,'社区取消',$paystatus
             ];
@@ -40,7 +40,6 @@ class OrderCance extends RowAction
 
             DB::commit();
         } catch ( \Exception $e){
-            dd($e->getMessage());
             DB::rollBack();
             return $this->response()->error('操作失败!');
         }

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

xqd
@@ -45,7 +45,7 @@ class DocterAccountController extends  AdminController
         $form->ignore(['password_confirmation']);
 
         $form->hidden('org_id')->value(request('org_id'));
-        $form->hidden('docter_id')->value(request('docter_id'));
+        $form->hidden('docter_id')->value(request('docter_id',0));
         if($form->isEditing()){
             $reoute = request()->route()->parameters();
             $id = intval($reoute['docter_account']);

+ 11 - 3
app/Community/Controllers/DocterOrgController.php

xqd xqd
@@ -2,8 +2,9 @@
 
 namespace App\Community\Controllers;
 
-use App\Admin\Actions\Community\Docter\AddAccount;
 use App\Admin\Actions\Community\Docter\EditAccount;
+use App\Community\Actions\Docter\AddUser;
+use App\Admin\Actions\Community\Docter\AddAccount;
 use App\Community\Actions\Docter\ChangeType;
 use App\Models\CdmsUsers;
 use App\Models\Docter;
@@ -33,13 +34,20 @@ class DocterOrgController extends AdminController
     protected function grid()
     {
         $grid = new Grid(new DocterOrganization());
-
-//        $grid->disableCreateButton(false);
         $is_manager = Admin::user()->isRole('manager');
         $grid->model()->orderByDesc('id');
         $grid->column('id', __('Id'));
         $grid->column('docter.name', __('成员名称'));
+        $org_id = Admin::user()->org_id;
+
+
         if($is_manager){
+            $grid->tools(function ($tools)use($org_id) {
+                $url = '/cdms/docter_account/create?org_id='.$org_id.'&docter_id=';
+                $icon = "fa-user";
+                $text = "创建账号";
+                $tools->append(new AddUser($url,$icon,$text));
+            });
             $grid->model()->where(['organization_id'=>Admin::user()->org_id]);
         } else {
             $grid->column('organization.name','所属机构')->display(function ($org_name){

+ 9 - 3
app/Community/Controllers/OrderController.php

xqd
@@ -44,13 +44,19 @@ class OrderController extends AdminController
 
         //检查是否是门诊医生
         $is_docter = $user->isRole('opc');
+        $org_id = $user->org_id;
+        $where = ['product_type'=>3];
         if(!$is_admin){
-            $org_id = $user->org_id;
-            $where = ['product_type'=>3,'organization_id'=>$org_id];
             if($is_docter) {
                 $where['docter_id'] = Docter::where(['id'=>$user->docter_id])->value('id');
             }
-            $grid->model()->where($where);
+            $where ['organization_id']=$org_id;
+        }
+        $grid->model()->where($where)->leftJoin('order_patients','order_patients.order_id','=','orders.id');
+        if(!empty($res['orderPatient']['appoint_start_time']['start']) || !empty($res['orderPatient']['appoint_start_time']['start']) ){
+            $grid->model()->orderBy('order_patients.appoint_start_time','asc');
+        } else {
+            $grid->model()->orderBy('order_patients.appoint_start_time','desc');
         }
         $grid->column('id', __('Id'));
         $grid->column('orderUser.nickname', __('预约用户'));

+ 7 - 9
app/Community/Controllers/OrderNurseController.php

xqd
@@ -49,16 +49,14 @@ class OrderNurseController extends AdminController
         $where = ['product_type'=>5];
         if(!$is_admin){
             $org_id = $user->org_id;
-            $docter_id = $user->docter_id;
-            $where['organization_id']=$org_id;
-//            if($docter_id){
-//                $where['docter_id'] = $docter_id;
-//            } else {
-//                $where['organization_id']=$org_id;
-//            }
+            $where['orders.organization_id']=$org_id;
+        }
+        $grid->model()->where($where)->leftJoin('order_patients','order_patients.order_id','=','orders.id');
+        if(!empty($res['orderPatient']['appoint_start_time']['start']) || !empty($res['orderPatient']['appoint_start_time']['start']) ){
+            $grid->model()->orderBy('order_patients.appoint_start_time','asc');
+        } else {
+            $grid->model()->orderBy('order_patients.appoint_start_time','desc');
         }
-        $grid->model()->where($where);
-
         $grid->column('id', __('ID'));
         $grid->column('orderUser.user_name', __('预约用户'))->display(function($w){
             if(empty($w)) return '';

+ 24 - 40
app/Community/Controllers/OrderVaccinesController.php

xqd xqd
@@ -46,58 +46,32 @@ class OrderVaccinesController extends AdminController
                 return $order_status_arr[intval($original)];
             } );
         });
-//        $grid->model()->orderByDesc('orders.id');
-
-//        if(!empty($res['orderPatient']['appoint_start_time']['start']) || !empty($res['orderPatient']['appoint_start_time']['start']) ){
-//
-//            $grid->model()->leftJoin('order_patients','order_patients.order_id','=','orders.id')->orderByDesc('order_patients.appoint_start_time');
-//
-//            $grid->model()->whereHas('orderPatient',function($query){
-//                $query->orderBy( OrderPatient::select('appoint_start_time')
-//                    ->whereColumn('order_id', 'orders.id')
-//                    ->orderBy('appoint_start_time', 'asc'));
-//            });
-//        } else {
-//            $grid->model()->whereHas('orderPatient',function($query){
-//                return $query->orderBy('appoint_start_time','desc')->groupBy('appoint_start_time');
-//            });
-//        }
-        DB::enableQueryLog();
-
-//        select bm_orders.*,bm_order_patients.appoint_end_time,bm_order_patients.appoint_start_time,bm_order_patients.name from `bm_orders`
-//left join `bm_order_patients` on `bm_order_patients`.`order_id` = `bm_orders`.`id` ORDER BY bm_order_patients.appoint_start_time asc;
 
-//
-//        $grid->model()->leftJoin('order_patients','order_patients.order_id','=','orders.id')
-//            ->orderByDesc('order_patients.appoint_start_time');
-//        $grid->model()->orderByDesc('orders.idaa');
+        DB::enableQueryLog();
 
 
         $user = Admin::user();
         $is_admin = Admin::user()->inRoles(['administrator','devloper']);
-
-
-        $is_docter = $user->docter_id;
         $where = ['product_type'=>4];
         if(!$is_admin){
             $org_id = $user->org_id;
-            $where = ['product_type'=>4,'organization_id'=>$org_id];
-//            if($is_docter) {
-//                $where['docter_id'] = Docter::where(['id'=>$user->docter_id])->value('id');
-//            }
+            $where = ['product_type'=>4,'orders.organization_id'=>$org_id];
+        }
+        $grid->model()->where($where)->leftJoin('order_patients','order_patients.order_id','=','orders.id');
+        if(!empty($res['orderPatient']['appoint_start_time']['start']) || !empty($res['orderPatient']['appoint_start_time']['start']) ){
+            $grid->model()->orderBy('order_patients.appoint_start_time','asc');
+        } else {
+            $grid->model()->orderBy('order_patients.appoint_start_time','desc');
         }
-        $grid->model()->where($where);
 
-        $grid->column('id', __('Id'));
+        $grid->column('order_id', __('Id'));
         $grid->column('user.nickname', __('预约用户'));
-//        $grid->column('yuyue', __('预约时间'))->display(function ($w){
-//            if(empty($this->orderPatient) || empty($this->orderPatient->appoint_start_time)) return '';
-//            return date('Y-m-d H:i',($this->orderPatient->appoint_start_time)) .'致' . date('H:i',($this->orderPatient->appoint_end_time));
-//        });
-        $grid->column('orderPatient.appoint_start_time', __('预约时间'))->display(function ($w){
-            if(empty($this->orderPatient) || empty($this->orderPatient->appoint_start_time)) return '';
-            return date('Y-m-d H:i',$w).'~'.date('H:i',$this->orderPatient->appoint_end_time);
+
+        $grid->column('appoint_start_time', __('预约时间'))->display(function ($w){
+             if(empty($this->orderPatient) || empty($this->orderPatient->appoint_start_time)) return '';
+            return date('Y-m-d H:i',$w).'~'.date('H:i',$this->appoint_end_time);
         });
+
         $grid->column('end_time', __('接种时间'))->display(function ($w){
             if(empty($w)) return '';
             return date('Y-m-d',$w);
@@ -215,4 +189,14 @@ class OrderVaccinesController extends AdminController
 
         return $form;
     }
+
+    public function info()
+    {
+
+        DB::enableQueryLog();
+        $list = Order::join('order_patients','order_patients.order_id','=','orders.id')->where('product_type',4)->orderBy('order_patients.appoint_start_time','desc')
+            ->select(['order_id','appoint_start_time'])->paginate(20)->toArray();
+        dump(DB::getQueryLog());
+        dd($list);
+    }
 }

+ 142 - 0
app/Community/Controllers/User/UserController.php

xqd
@@ -0,0 +1,142 @@
+<?php
+
+
+namespace App\Community\Controllers\User;
+
+
+use App\Models\CdmsUsers;
+use Encore\Admin\Controllers\AdminController;
+use Encore\Admin\Form;
+use Encore\Admin\Grid;
+use Encore\Admin\Show;
+use Encore\Admin\Facades\Admin;
+
+class UserController extends  AdminController
+{
+    protected $title = '管理账号';
+
+
+    /**
+     * Make a grid builder.
+     *
+     * @return Grid
+     */
+    protected function grid()
+    {
+        $userModel = config('admin.database.users_model');
+
+        $grid = new Grid(new $userModel());
+        $grid->disableCreateButton(false);
+        $org_id = Admin::user()->org_id;
+        $aid = Admin::user()->id;
+
+        if(!empty($org_id)){
+            $grid->model()->where('org_id',$org_id);
+        }
+        $grid->column('id', 'ID')->sortable();
+
+        $grid->column('username', trans('admin.username'));
+        $grid->column('name', trans('admin.name'));
+        $grid->column('roles', trans('admin.roles'))->pluck('name')->label();
+        $grid->column('created_at', trans('admin.created_at'));
+        $grid->column('updated_at', trans('admin.updated_at'));
+
+        $is_manager = Admin::user()->isRole('manager');
+        $grid->actions(function (Grid\Displayers\Actions $actions) use ($is_manager,$aid) {
+            $actions->disableDelete();
+        });
+
+        $grid->tools(function (Grid\Tools $tools) {
+            $tools->batch(function (Grid\Tools\BatchActions $actions) {
+                $actions->disableDelete();
+            });
+        });
+
+        return $grid;
+    }
+
+
+    /**
+     * Make a show builder.
+     *
+     * @param mixed $id
+     *
+     * @return Show
+     */
+    protected function detail($id)
+    {
+        $userModel = config('admin.database.users_model');
+
+        $show = new Show($userModel::findOrFail($id));
+
+        $show->field('id', 'ID');
+        $show->field('username', trans('admin.username'));
+        $show->field('name', trans('admin.name'));
+        $show->field('roles', trans('admin.roles'))->as(function ($roles) {
+            return $roles->pluck('name');
+        })->label();
+        $show->field('permissions', trans('admin.permissions'))->as(function ($permission) {
+            return $permission->pluck('name');
+        })->label();
+        $show->field('created_at', trans('admin.created_at'));
+        $show->field('updated_at', trans('admin.updated_at'));
+
+        return $show;
+    }
+
+
+    /**
+     * Make a form builder.
+     *
+     * @return Form
+     */
+    public function form()
+    {
+        $userModel = config('tenancy.database.users_model');
+        $roleModel = config('tenancy.database.roles_model');
+
+
+        $org_id = Admin::user()->org_id;
+
+        $form = new Form(new $userModel());
+
+        $userTable = config('tenancy.database.users_table');
+        $connection = config('tenancy.database.connection');
+        $form->display('id', 'ID');
+        $form->text('username', trans('tenancy.username'))
+            ->creationRules(['required', "unique:{$connection}.{$userTable}"])
+            ->updateRules(['required', "unique:{$connection}.{$userTable},username,{{id}}"]);
+
+        $form->text('name', trans('tenancy.name'))->rules('required');
+        $form->image('avatar', trans('tenancy.avatar'));
+        $form->password('password', trans('tenancy.password'))->rules('required|confirmed');
+        $form->password('password_confirmation', trans('tenancy.password_confirmation'))->rules('required')
+            ->default(function ($form) {
+                return $form->model()->password;
+            });
+
+        $form->ignore(['password_confirmation']);
+
+        $form->hidden('org_id')->value($org_id);
+        $ids = [0,$org_id];
+
+        if($form->isEditing()){
+            $form->multipleSelect('roles', trans('tenancy.roles'))->options($roleModel::whereIn('org_id',$ids)->where('id','>',2)->get()->pluck('name', 'id'));
+        } else {
+            $form->multipleSelect('roles', trans('tenancy.roles'))->options($roleModel::whereIn('org_id',$ids)->where('id','>',2)->get()->pluck('name', 'id'));
+        }
+
+
+        $form->display('created_at', trans('tenancy.created_at'));
+        $form->display('updated_at', trans('tenancy.updated_at'));
+
+        $form->saving(function (Form $form) {
+            if ($form->password && $form->model()->password != $form->password) {
+                $form->password = bcrypt($form->password);
+            }
+        });
+
+
+        return $form;
+    }
+}

+ 2 - 0
app/Community/routes.php

xqd
@@ -9,10 +9,12 @@ Route::resource('nurses', NurseController::class);
 //机构设置
 Route::resource('organization_setting', SettingController::class);
 
+Route::resource('users', User\UserController::class);
 Route::resource('nurse_users', NurseUserController::class);
 Route::resource('order_nurses', OrderNurseController::class);
 Route::resource('vaccines', VaccineController::class);
 Route::resource('order_vaccines', OrderVaccinesController::class);
+Route::get('orderVaccines', 'OrderVaccinesController@info');
 Route::resource('vaccine_users', VaccineUserController::class);
 //获取疫苗日期排班
 Route::get('/api/getDateVaccine', 'ApiController@getDateVaccine');

+ 67 - 0
app/Models/Order.php

xqd
@@ -414,4 +414,71 @@ class Order extends BaseModel
 
         return true;
     }
+
+    //后台预约订单取消
+    public static function appiontOrderCancel($order_id, $order_notes = '')
+    {
+        $order = Order::with(['orderPatient'])->where('id', $order_id)->first()->toArray();
+        //判断预约时间是否还剩1小时内
+        $can_refund = true;
+        if (in_array($order['product_type'], [3,4,5])) {
+            if ($order['order_patient']['appoint_start_time'] - 3600 < time()) {
+                $can_refund = false;
+            }
+        }
+        //改变订单状态
+        $updateOrder = ['order_status' => 5, 'order_notes' => $order_notes];
+        if ($order['payment_status'] > 1) {
+            //判断是余额支付还是服务包支付
+            if ($order['payment_type'] == 3) {
+                //退服务包的次数
+                $map = [1 => 'phone_minutes', 2 => 'chat_num', 3 => 'appoint_num', 4 => 'vaccine_limit_amount', 5 => 'nurses_limit_amount'];
+                OrderPack::where('id', $order['pay_order_pack_id'])->increment($map[$order['product_type']]);
+                $updateOrder['cancel_time'] = time();
+                $updateOrder['payment_status'] = 4;
+                if ($order['product_type'] == 3 && !$can_refund) {
+                    $updateOrder['payment_status'] = 2;
+                }
+            }
+            else {
+                //申请退款
+                $updateOrder['cancel_time'] = time();
+                //实际付款大于0元才发起退款
+                if ($can_refund && $order['payment_amount'] > 0) {
+                    $updateOrder['payment_status'] = 5;
+                    $arr = [
+                        'order_id' =>$order_id,
+                        'status' => 1,
+                        'refund_applicant' => \Admin::user()->id,
+                    ];
+                    RefundApplication::create($arr);
+                }
+
+                if ($order['product_type'] == 3 && !$can_refund) {
+                    $updateOrder['payment_status'] = 2;
+                }
+            }
+        }
+        Order::where('id', $order_id)->update($updateOrder);
+
+        //如果是门诊预约且距离预约时间还有1个小时以上,那么预约时间段的订单数减1
+        if ($order['product_type'] == 3 && $can_refund) {
+            $schedule_date = date('Y-m-d', $order['order_patient']['appoint_start_time']);
+            SchedulePeriod::where('docter_id', $order['docter_id'])->where('organization_id', $order['organization_id'])->where('time_period_id', $order['order_patient']['time_period_id'])->where('schedule_date', $schedule_date)->where('order_num', '>', 0)->decrement('order_num');
+        }
+
+        //如果是疫苗儿保预约且距离预约时间还有1个小时以上,那么预约时间段的订单数减1
+        if (in_array($order['product_type'], [4,5]) && $can_refund) {
+            $schedule_type_map = [4 => 2, 5 => 3];
+            $schedule_date = date('Y-m-d', $order['order_patient']['appoint_start_time']);
+            SchedulePeriod::where('organization_id', $order['organization_id'])->where('time_period_id', $order['order_patient']['time_period_id'])->where('schedule_date', $schedule_date)->where('schedule_type', $schedule_type_map[$order['product_type']])->where('order_num', '>', 0)->decrement('order_num');
+        }
+        //如果是疫苗预约那么取消订单就增加疫苗库存
+        if ($order['product_type'] == 4) {
+            $orderVaccine = OrderVaccine::where('order_id', $order_id)->first();
+            Vaccine::where('id', $orderVaccine['vaccine_id'])->increment('stock');
+        }
+
+        return true;
+    }
 }

+ 3 - 0
resources/views/cdms/button.blade.php

xqd
@@ -0,0 +1,3 @@
+<div class="btn">
+    <a class="btn btn-sm btn-success pull-right" href="{{$url}}" rel="external nofollow" ><i class="fa {{$icon}}"></i> {{$text}}</a>
+</div>