Browse Source

Merge branch 'develop'

wanghaijun 4 years ago
parent
commit
ff2b36c57d

+ 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('操作失败!');
         }

+ 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('操作失败!');
         }

+ 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 '';

+ 9 - 29
app/Community/Controllers/OrderVaccinesController.php

xqd
@@ -46,49 +46,29 @@ class OrderVaccinesController extends AdminController
                 return $order_status_arr[intval($original)];
             } );
         });
-//        $grid->model()->orderByDesc('orders.id');
-        DB::enableQueryLog();
-
-        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');
-        } else {
 
-            $grid->model()->leftJoin('order_patients','order_patients.order_id','=','orders.id')->orderBy('order_patients.appoint_start_time');
-        }
-
-//        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,'orders.organization_id'=>$org_id];
-//            if($is_docter) {
-//                $where['docter_id'] = Docter::where(['id'=>$user->docter_id])->value('id');
-//            }
         }
-        $grid->model()->where($where)->leftJoin('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']);
+        $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('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('appoint_start_time', __('预约时间'))->display(function ($w){
-            // if(empty($this->orderPatient) || empty($this->orderPatient->appoint_start_time)) return '';
+             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);
         });
 

+ 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;
+    }
 }