Browse Source

预约/订单调整

gorden 7 months ago
parent
commit
66daa6828b

+ 11 - 3
app/admin/controller/member/MemberController.php

@@ -26,18 +26,26 @@ class MemberController
 
         $res = Db::table('member')
             ->leftjoin('member_cert', 'member.member_id', '=', 'member_cert.join_cert_member_id')
-            ->select('member.member_id', 'member.member_mobile', 'member_cert.member_cert_name')
+            ->leftjoin('member_info', 'member.member_id', '=', 'member_info.join_info_member_id')
+            ->select('member.member_id', 'member.member_mobile', 'member_cert.member_cert_name','member_info.member_info_nickname')
             ->where('member.member_is_owner', $isOwner)
             ->where(function ($query) use ($keywords) {
                 $query->where('member.member_mobile', 'like', '%' . $keywords . '%')
                     ->orWhere("member.member_id", 'like', '%' . $keywords . '%')
-                    ->orWhere("member_cert.member_cert_name", 'like', '%' . $keywords . '%');
+                    ->orWhere("member_cert.member_cert_name", 'like', '%' . $keywords . '%')
+                    ->orWhere("member_info.member_info_nickname", 'like', '%' . $keywords . '%');
             })->get();
         $data = [];
         foreach ($res as $item) {
+            $name = '';
+            if(!empty($item->member_cert_name)){
+                $name = $item->member_cert_name;
+            }else if(!empty($item->member_info_nickname)){
+                $name = $item->member_info_nickname;
+            }
             $data[] = [
                 'key' => $item->member_id,
-                'value' => !empty($item->member_cert_name) ? $item->member_cert_name . '-' . $item->member_mobile : $item->member_mobile,
+                'value' => !empty($name) ? $name . '-' . $item->member_mobile : $item->member_mobile,
             ];
         }
 

+ 13 - 0
app/admin/controller/order/AppointmentController.php

@@ -31,6 +31,14 @@ class AppointmentController
         return AppointmentService::confirm($id);
     }
 
+    /**
+     * 到店
+     */
+    public function arrival(Request $request)
+    {
+        return AppointmentService::arrival($request);
+    }
+
     public function add(Request $request)
     {
         return AppointmentService::add($request);
@@ -40,6 +48,11 @@ class AppointmentController
     {
         return AppointmentService::update($request);
     }
+    
+    public function cancelApply(Request $request)
+    {
+        return AppointmentService::cancelApply($request);
+    }
 
     public function getTimes(Request $request)
     {

+ 311 - 60
app/admin/controller/order/WholeController.php

@@ -459,6 +459,235 @@ class WholeController extends Curd
         }
     }
 
+    public function pay(Request $request)
+    {
+        $params = $request->post();
+        $order = Order::where('order_id',$params['order_id'])->first();
+        if (!$order){
+            return json_fail('订单异常');
+        }
+        $params['orderId'] = $params['order_id'];
+
+        $goods = Goods::where('goods_id', $params['join_sheet_goods_id'])
+        ->select('goods_id', 'goods_name', 'goods_classify')
+        ->first();
+        if (!$goods) {
+            Db::rollBack();
+            return json_fail('产品数据异常');
+        }
+        $goods = $goods->toArray();
+        $params['goods_classify'] = $goods['goods_classify'];
+
+        $systemStatus = 'SENDING';  // 待发货
+        // 立即结算
+        if(in_array($params['goods_classify'],['SERVICE','CHNMED','CHNNCD'])){
+            $systemStatus = 'DONE';
+        }
+        Db::beginTransaction();
+        try{
+            // 余额支付
+            if ($params['pay_category'] == 'CASH') {
+                $account = MemberAccount::where('join_account_member_id', $params['join_order_member_id'])
+                    ->where('member_account_classify', 'CASH')
+                    ->where('member_account_status', 'ACTIVED')
+                    ->first();
+                if (!$account) {
+                    Db::rollBack();
+                    return json_fail('账户异常');
+                }
+                $amount = $account->member_account_surplus + $account->member_account_added;
+                if (!$account || $params['order_sheet_pay'] > $amount) {
+                    Db::rollBack();
+                    return json_fail('账户余额不足');
+                }
+                if ($params['order_sheet_pay'] > $account->member_account_surplus) {
+                    $cut = $account->member_account_added - ($params['order_sheet_pay'] - $account->member_account_surplus);
+                    $account->member_account_surplus = 0;
+                    $account->member_account_added = $cut;
+                } else {
+                    $account->member_account_surplus = $account->member_account_surplus - $params['order_sheet_pay'];
+                }
+                $account->member_account_expend = $account->member_account_expend + $params['order_sheet_pay'];
+                $account->save();
+                $order->order_status_system = $systemStatus;
+                $order->order_status_payment = 'SUCCESS';
+            } else if ($params['pay_category'] == 'WELFARE') {  // 福利账户
+                $account = MemberAccount::where('join_account_member_id', $params['join_order_member_id'])
+                    ->where('member_account_classify', 'WELFARE')
+                    ->where('member_account_status', 'ACTIVED')
+                    ->first();
+                if (!$account) {
+                    Db::rollBack();
+                    return json_fail('账户异常');
+                }
+                $account->member_account_surplus = floatval($account->member_account_surplus);
+                if ($params['order_sheet_pay'] > $account->member_account_surplus) {
+                    Db::rollBack();
+                    return json_fail('账户余额不足');
+                }
+
+                $account->member_account_surplus = $account->member_account_surplus - $params['order_sheet_pay'];
+                $account->member_account_expend = $account->member_account_expend + $params['order_sheet_pay'];
+                $account->save();
+
+                $order->order_status_system = $systemStatus;
+                $order->order_status_payment = 'SUCCESS';
+            } else if ($params['pay_category'] == 'CARD') {  // 储值卡账户
+                $cardNbr = $params['card_nbr'];
+                if (!$cardNbr){
+                    Db::rollBack();
+                    return json_fail('账户异常'); 
+                }
+                $account = MemberAccount::where('join_account_member_id', $params['join_order_member_id'])
+                    ->where('member_account_nbr', $cardNbr)
+                    ->where('member_account_status', 'ACTIVED')
+                    ->first();
+                if (!$account) {
+                    Db::rollBack();
+                    return json_fail('账户异常');
+                }
+                $amount = $account->member_account_surplus + $account->member_account_added;
+                if (!$account || $params['order_sheet_pay'] > $amount) {
+                    Db::rollBack();
+                    return json_fail('账户余额不足');
+                }
+                if ($params['order_sheet_pay'] > $account->member_account_surplus) {
+                    $cut = $account->member_account_added - ($params['order_sheet_pay'] - $account->member_account_surplus);
+                    $account->member_account_surplus = 0;
+                    $account->member_account_added = $cut;
+                } else {
+                    $account->member_account_surplus = $account->member_account_surplus - $params['order_sheet_pay'];
+                }
+                $account->member_account_expend = $account->member_account_expend + $params['order_sheet_pay'];
+                $account->save();
+                
+                $order->order_status_system = $systemStatus;
+                $order->order_status_payment = 'SUCCESS';
+            }else if($params['pay_category'] == 'QRCODE' && !empty($params['qrcode_nbr'])){     // 付款码
+                $result = OrderService::qrcodePay($params);
+                $result = json_encode($result);
+                $params['pay_json_response'] = $result;
+                $result = json_decode($result,true);
+
+                $prefix = substr($params['qrcode_nbr'],0,2);
+                if(in_array($prefix,[10,11,12,13,14,15])){
+                    $params['pay_category'] = 'WXPAY';
+                    if($result['return_code'] != 'SUCCESS' || $result['result_code'] != 'SUCCESS'){
+                        Db::rollBack();
+                        return json_fail('支付失败');
+                    }
+                }else if(in_array($prefix,[25,26,27,28,29,30])){
+                    $params['pay_category'] = 'ALIPAY';
+                    if($result['code'] != '10000' || $result['msg'] != 'Success'){
+                        Db::rollBack();
+                        return json_fail('支付失败');
+                    }
+                }
+                
+                $order->order_status_system = $systemStatus;
+                $order->order_status_payment = 'SUCCESS';
+            }
+            $orderConfigJson = [];
+            if (!empty($order->order_config_json)){
+                $orderConfigJson = json_decode($order->order_config_json,true);
+            }
+            $orderConfigJson['preferential'] = $params['preferential'] ?? '';
+            $order->order_config_json = json_encode($orderConfigJson);
+            $order->order_amount_pay = $params['order_sheet_pay'];
+            // 主订单
+            $order->save();
+
+            // sheet
+            if ($order->order_status_payment == 'SUCCESS'){
+                OrderSheet::where('join_sheet_order_id',$params['order_id'])->update([
+                    'order_sheet_status'=>$systemStatus,
+                    'order_sheet_pay'=>$params['order_sheet_pay']
+                ]);
+            }
+            // payDetail
+            $payData = [
+                'pay_amount'=>$params['order_sheet_pay']
+            ];
+            if ($order->order_status_payment == 'SUCCESS'){
+                $payData['pay_paytimes'] = date('Y-m-d H:i:s');
+                $payData['pay_status'] = 'SUCCESS';
+            }
+            if(in_array($params['pay_category'],['WXPAY','ALIPAY'])){
+                $payData['pay_prepayid'] = $params['pay_category'];
+                $payData['pay_json_response'] = $params['pay_json_response'];
+            }else if ($params['pay_category'] == 'CASH'){
+                $payData['pay_prepayid'] = $params['join_order_member_id'].'-CASH';
+            }else if ($params['pay_category'] == 'WELFARE'){
+                $payData['pay_prepayid'] = $params['join_order_member_id'].'-WELFARE';
+            }else if ($params['pay_category'] == 'CARD'){
+                $payData['pay_prepayid'] = $params['card_nbr'];
+            }
+
+            PayDetail::where('join_pay_order_id',$order->order_groupby)->update($payData);
+            $writeOffDate = [];
+            $applyData = [];
+            // 服务已完成,生成核销数据
+            if ($order->order_status_payment == 'SUCCESS' && in_array($goods['goods_classify'], ['SERVICE','CHNMED','CHNNCD', 'PACKAGE'])) {
+                $writeOffDate = OrderService::generateWriteOffData($params);
+                $applyData = OrderService::generateAppointmentApplyData($params);
+            }
+            // 有预约单,状态已完成
+            $appointment = Appointment::where('join_appointment_order_id',$params['order_id'])->first();
+            if($appointment){
+                $appointment->appointment_status = 'DONE';
+                $appointment->appointment_done_datetime = date('Y-m-d H:i:s');
+                $appointment->appointment_done_json = json_encode($writeOffDate);
+                if (empty($appointment->appointment_apply_datetime)){
+                    $appointment->appointment_apply_datetime = date('Y-m-d H:i:s');
+                }
+                if (empty($appointment->appointment_apply_json)){
+                    $appointment->appointment_apply_json = json_encode($applyData);
+                }
+                if (empty($appointment->appointment_datetime)){
+                    $appointment->appointment_datetime = date('Y-m-d');
+                }
+                
+                $appointment->save();
+            }
+
+            // // 买的单个服务
+            // $writeOffDate = [];
+            // // 服务已完成,生成核销数据
+            // if ($order->order_status_payment == 'SUCCESS' && in_array($goods['goods_classify'], ['SERVICE','CHNMED','CHNNCD', 'PACKAGE'])) {
+            //     $writeOffDate = OrderService::generateWriteOffData($params);
+            // }
+            // if (in_array($goods['goods_classify'],['SERVICE','CHNMED','CHNNCD'])) {
+            //     // 订单状态已完成
+            //     Order::where('order_id',$params['orderId'])->update([
+            //         'order_status_system'=>'DONE'
+            //     ]);
+            //     // 权益用完
+            //     $benefits = MemberBenefit::where('join_benefit_order_id',$params['orderId'])->get();
+            //     foreach($benefits as $benefit){
+            //         MemberBenefit::where('member_benefit_id',$benefit->member_benefit_id)->update([
+            //             'member_benefit_used_count'=>$benefit->member_benefit_limit_count,
+            //             'member_benefit_status'=>'DONE'
+            //         ]);
+            //         dump($writeOffDate);
+            //         // 核销记录
+            //         Appointment::where('join_appointment_member_benefit_id',$benefit->member_benefit_id)->update([
+            //             'appointment_status'=>'DONE',
+            //             'appointment_done_datetime'=>date('Y-m-d H:i:s'),
+            //             'appointment_done_json' => json_encode($writeOffDate)
+            //         ]);
+            //     }
+            // }
+
+
+            Db::commit();
+
+            return json_success('支付成功');
+        }catch(\Exception $e){
+            Db::rollBack();
+            return json_fail('支付失败');
+        }
+    }
+
     public function delete(Request $request): Response
     {
         $params = $request->post();
@@ -535,8 +764,27 @@ class WholeController extends Curd
                 // 创建会员
                 MemberService::createMember($params);
             }
+            
+
+            $goods = Goods::where('goods_id', $params['join_sheet_goods_id'])
+                ->select('goods_id', 'goods_name', 'goods_classify')
+                ->first();
+            if (!$goods) {
+                Db::rollBack();
+                return json_fail('产品数据异常');
+            }
+            $goods = $goods->toArray();
+            $params['goods_classify'] = $goods['goods_classify'];
+
+            $systemStatus = 'SENDING';  // 待发货
+            // 立即结算
+            if($params['settlement_now'] == 'Y'){
+                if(in_array($params['goods_classify'],['SERVICE','CHNMED','CHNNCD'])){
+                    $systemStatus = 'DONE';
+                }
+            }
             // 余额支付
-            if ($params['pay_category'] == 'CASH' && $params['order_status_payment'] == 'SUCCESS') {
+            if ($params['settlement_now'] == 'Y' && $params['pay_category'] == 'CASH') {
                 $account = MemberAccount::where('join_account_member_id', $params['join_order_member_id'])
                     ->where('member_account_classify', 'CASH')
                     ->where('member_account_status', 'ACTIVED')
@@ -558,7 +806,9 @@ class WholeController extends Curd
                 }
                 $account->member_account_expend = $account->member_account_expend + $params['order_sheet_pay'];
                 $account->save();
-            } else if ($params['pay_category'] == 'WELFARE' && $params['order_status_payment'] == 'SUCCESS') {  // 福利账户
+                $params['order_status_system'] = $systemStatus;
+                $params['order_status_payment'] = 'SUCCESS';
+            } else if ($params['settlement_now'] == 'Y' && $params['pay_category'] == 'WELFARE') {  // 福利账户
                 $account = MemberAccount::where('join_account_member_id', $params['join_order_member_id'])
                     ->where('member_account_classify', 'WELFARE')
                     ->where('member_account_status', 'ACTIVED')
@@ -576,7 +826,10 @@ class WholeController extends Curd
                 $account->member_account_surplus = $account->member_account_surplus - $params['order_sheet_pay'];
                 $account->member_account_expend = $account->member_account_expend + $params['order_sheet_pay'];
                 $account->save();
-            } else if ($params['pay_category'] == 'CARD' && $params['order_status_payment'] == 'SUCCESS') {  // 储值卡账户
+
+                $params['order_status_system'] = $systemStatus;
+                $params['order_status_payment'] = 'SUCCESS';
+            } else if ($params['settlement_now'] == 'Y' && $params['pay_category'] == 'CARD') {  // 储值卡账户
                 $cardNbr = $params['card_nbr'];
                 if (!$cardNbr){
                     Db::rollBack();
@@ -586,8 +839,6 @@ class WholeController extends Curd
                     ->where('member_account_nbr', $cardNbr)
                     ->where('member_account_status', 'ACTIVED')
                     ->first();
-
-                    dump($cardNbr);
                 if (!$account) {
                     Db::rollBack();
                     return json_fail('账户异常');
@@ -606,22 +857,32 @@ class WholeController extends Curd
                 }
                 $account->member_account_expend = $account->member_account_expend + $params['order_sheet_pay'];
                 $account->save();
-            }
-
-            $goods = Goods::where('goods_id', $params['join_sheet_goods_id'])
-                ->select('goods_id', 'goods_name', 'goods_classify')
-                ->first();
-            if (!$goods) {
-                Db::rollBack();
-                return json_fail('产品数据异常');
-            }
-            $goods = $goods->toArray();
-            $params['goods_classify'] = $goods['goods_classify'];
+                
+                $params['order_status_system'] = $systemStatus;
+                $params['order_status_payment'] = 'SUCCESS';
+            }else if($params['settlement_now'] == 'Y' && $params['pay_category'] == 'QRCODE' && !empty($params['qrcode_nbr'])){     // 付款码
+                $result = OrderService::qrcodePay($params);
+                $result = json_encode($result);
+                $params['pay_json_response'] = $result;
+                $result = json_decode($result,true);
 
-            $writeOffDate = [];
-            // 服务已完成,生成核销数据
-            if ($params['order_status_system'] == 'DONE' && in_array($goods['goods_classify'], ['SERVICE', 'PACKAGE'])) {
-                $writeOffDate = OrderService::generateWriteOffData($params);
+                $prefix = substr($params['qrcode_nbr'],0,2);
+                if(in_array($prefix,[10,11,12,13,14,15])){
+                    $params['pay_category'] = 'WXPAY';
+                    if($result['return_code'] != 'SUCCESS' || $result['result_code'] != 'SUCCESS'){
+                        Db::rollBack();
+                        return json_fail('支付失败');
+                    }
+                }else if(in_array($prefix,[25,26,27,28,29,30])){
+                    $params['pay_category'] = 'ALIPAY';
+                    if($result['code'] != '10000' || $result['msg'] != 'Success'){
+                        Db::rollBack();
+                        return json_fail('支付失败');
+                    }
+                }
+                
+                $params['order_status_system'] = $systemStatus;
+                $params['order_status_payment'] = 'SUCCESS';
             }
 
             $params['orderId'] = 'OD' . date('YmdHis') . random_string(6, 'up');
@@ -635,7 +896,7 @@ class WholeController extends Curd
             }
 
             // 配送方式
-            if ($params['delivery'] == 'PICKUP' || $params['delivery'] == 'ARRIVAL') { // 自提/到店
+            if ($params['delivery'] == 'PICKUP') { // 自提
                 $orderConfigJson['premises'] = $params['dept_premises_id'];
             } else if ($params['delivery'] == 'LOGISTICS') {
                 // $params['order_express_json'] = json_encode([
@@ -643,30 +904,7 @@ class WholeController extends Curd
                 // ]);
             }
             $params['order_config_json'] = json_encode($orderConfigJson);
-
-            // 如果是扫码支付
-            if($params['pay_category'] == 'QRCODE' && !empty($params['qrcode_nbr']) && $params['order_status_payment'] == 'SUCCESS'){
-                $result = OrderService::qrcodePay($params);
-                $result = json_encode($result);
-                $params['pay_json_response'] = $result;
-                $result = json_decode($result,true);
-
-                $prefix = substr($params['qrcode_nbr'],0,2);
-                if(in_array($prefix,[10,11,12,13,14,15])){
-                    $params['pay_category'] = 'WXPAY';
-                    if($result['return_code'] != 'SUCCESS' || $result['result_code'] != 'SUCCESS'){
-                        Db::rollBack();
-                        return json_fail('支付失败');
-                    }
-                }else if(in_array($prefix,[25,26,27,28,29,30])){
-                    $params['pay_category'] = 'ALIPAY';
-                    if($result['code'] != '10000' || $result['msg'] != 'Success'){
-                        Db::rollBack();
-                        return json_fail('支付失败');
-                    }
-                }
-                dump($result);
-            }
+            
             // 写入主订单
             $this->insertMain($params);
             // 订单详情
@@ -691,26 +929,35 @@ class WholeController extends Curd
                 $params['order_express_telephone'] = $premises->dept_telephone;
 
                 $this->saveExpress($params);
-            } else if ($params['delivery'] == 'ARRIVAL') {
-                $premises = SysDept::where('dept_name', $params['dept_premises_id'])->first();
-                $params['order_express_type'] = '到店';
-                if (!$premises) {
-                    throw new BusinessException('门店不存在');
-                }
+            } 
+            // else if ($params['delivery'] == 'ARRIVAL') {
+            //     $premises = SysDept::where('dept_name', $params['dept_premises_id'])->first();
+            //     $params['order_express_type'] = '到店';
+            //     if (!$premises) {
+            //         throw new BusinessException('门店不存在');
+            //     }
 
-                $params['order_express_city'] = $premises->dept_city;
-                $params['order_express_address'] = $premises->dept_address;
-                $params['order_express_telephone'] = $premises->dept_telephone;
+            //     $params['order_express_city'] = $premises->dept_city;
+            //     $params['order_express_address'] = $premises->dept_address;
+            //     $params['order_express_telephone'] = $premises->dept_telephone;
+
+            //     $this->saveExpress($params);
+            // }
 
-                $this->saveExpress($params);
-            }
             // 买的单个服务
+            $writeOffDate = [];
+            $applyData = [];
+            // 服务已完成,生成核销数据
+            if ($params['order_status_payment'] == 'SUCCESS' && in_array($goods['goods_classify'], ['SERVICE','CHNMED','CHNNCD', 'PACKAGE'])) {
+                $writeOffDate = OrderService::generateWriteOffData($params);
+                $applyData = OrderService::generateAppointmentApplyData($params);
+            }
             if (in_array($goods['goods_classify'],['SERVICE','CHNMED','CHNNCD'])) {
                 // 预约表
                 for ($i = 0; $i < intval($params['order_sheet_num']); $i++) {
                     $params['appointmentId'] = 'AP' . date('YmdHis') . random_string(6, 'up');
                     // 入预约记录
-                    $this->insertAppointment($params, $writeOffDate);
+                    $this->insertAppointment($params, $writeOffDate,$applyData);
                 }
                 $goods['skuId'] = $params['join_sheet_goods_sku_id'];
                 $goods['category'] = $goods['goods_classify'];
@@ -754,12 +1001,12 @@ class WholeController extends Curd
             return json_success('创建订单成功');
         }catch(BusinessException $e){
             Db::rollBack();
-            dump($e->getMessage());
+            dump($e->getTrace());
             _syslog("订单",$e->getMessage());
             return json_fail($e->getMessage());
         } catch (\Exception $e) {
             Db::rollBack();
-            dump($e->getMessage());
+            dump($e->getTrace());
             _syslog("订单","创建订单失败");
             return json_fail('创建订单失败');
         }
@@ -882,7 +1129,7 @@ class WholeController extends Curd
      * @return void
      * @throws BusinessException
      */
-    public function insertAppointment($params, $writeOffDate)
+    public function insertAppointment($params, $writeOffDate,$applyData=[])
     {
         try {
             $data = [
@@ -895,7 +1142,11 @@ class WholeController extends Curd
                 'appointment_classify' => $params['goods_classify'],
                 'appointment_status' => $params['order_status_system'] == 'DONE' ? 'DONE' : 'INIT',
                 'appointment_category' => 'NORMAL',
+                'appointment_platform' => 'SYSTEM',
                 'appointment_addtimes' => time(),
+                'appointment_datetime' => $params['order_status_system'] == 'DONE' ? date('Y-m-d') : '',
+                'appointment_apply_datetime' => $params['order_status_system'] == 'DONE' ? date('Y-m-d H:i:s') : '',
+                'appointment_apply_json' => $params['order_status_system'] == 'DONE' && $applyData ? json_encode($applyData) : '[]',
                 'appointment_done_datetime' => $params['order_status_system'] == 'DONE' ? date('Y-m-d H:i:s') : '',
                 'appointment_remark' => $params['order_remark'] ?? '',
                 'appointment_done_json' => $params['order_status_system'] == 'DONE' && $writeOffDate ? json_encode($writeOffDate) : '[]'

+ 109 - 0
app/admin/service/order/AppointmentService.php

@@ -143,6 +143,87 @@ class AppointmentService
         }
     }
 
+    /**
+     * 到店-生成未支付订单
+     */
+    public static function arrival(Request $request)
+    {
+        $appointmentId = $request->post('id','');
+        if (!$appointmentId){
+            return json_fail("参数异常");
+        }
+
+        $appointment = Appointment::where('appointment_id',$appointmentId)->first();
+        
+        try{
+            $applyJson = json_decode($appointment->appointment_apply_json,true);
+            $goods = Goods::where('goods_id',$appointment->join_appointment_goods_id)->first();
+            $sku = GoodsSku::where('goods_sku_id',$appointment->join_appointment_goods_sku_id)->first();
+            $orderId = 'OD' . date('YmdHis') . random_string(6, 'up');
+            $groupBy = 'OD' . date('YmdHis') . random_string(6, 'up');
+            $order = [
+                'order_id' => $orderId,
+                'order_groupby' => $groupBy,
+                'join_order_member_id' => $appointment->join_appointment_member_id,
+                'order_name' => "预约-" . $goods->goods_name,
+                'order_amount_total' => $sku->goods_sku_sales_price * $applyJson['person'],
+                'order_amount_pay' => $sku->goods_sku_sales_price * $applyJson['person'],
+                'order_is_complete' => 'N',
+                'order_category' => $goods->goods_classify,
+                'order_status_system' => 'PAYING',
+                'order_status_payment' => 'PENDING',
+                'order_status_storage' => 'PENDING',
+                'order_platform' => 'SYSTEM',
+                'order_addtimes' => time()
+            ];
+            Order::insert($order);
+            // 订单号更新到预约
+            Appointment::where('appointment_id', $appointmentId)->update(['join_appointment_order_id' => $orderId]);
+            // 订单详情
+            $sheet = [
+                'join_sheet_member_id' => $appointment->join_appointment_member_id,
+                'join_sheet_order_id' => $orderId,
+                'join_sheet_goods_id' => $appointment->join_appointment_goods_id,
+                'join_sheet_goods_sku_id' => $appointment->join_appointment_goods_sku_id,
+                'order_sheet_status' => 'PAYING',
+                'order_sheet_category' => 'APPOINTMENT',
+                // 'order_sheet_unit' => '套',
+                'order_sheet_num' => $applyJson['person'],
+                'order_sheet_price' => $sku->goods_sku_sales_price,
+                'order_sheet_amount' => $sku->goods_sku_sales_price * $applyJson['person'],
+                'order_sheet_pay' => $sku->goods_sku_sales_price * $applyJson['person'],
+                'order_sheet_task_status' => 'NONE',
+                'order_sheet_addtimes' => time()
+            ];
+            OrderSheet::insert($sheet);
+
+            // 支付数据
+            $pay = [
+                'join_pay_member_id' => $appointment->join_appointment_member_id,
+                'join_pay_order_id' => $groupBy,
+                'pay_status'=>'WAITING',
+                'pay_amount' => $sheet['order_sheet_pay'],
+                'pay_remark' => '预约单',
+                'pay_addtimes' => time(),
+                'pay_paytimes' => date('Y-m-d H:i:s'),
+                'pay_prepayid'=>0,
+                'pay_category'=>$goods->goods_classify
+            ];
+            PayDetail::insert($pay);
+
+            $appointment->appointment_status = 'DOING';
+            $appointment->save();
+            Db::commit();
+
+            return json_success('操作成功');
+        }catch(\Exception $e){
+            dump($e->getMessage());
+            Db::rollBack();
+            return json_fail('到店状态修改失败');
+        }
+
+    }
+
     public static function add(Request $request)
     {
         $params = $request->post();
@@ -666,6 +747,34 @@ class AppointmentService
         }
     }
 
+    /**
+     * 取消预约
+     */
+    public static function cancelApply(Request $request)
+    {
+
+        $appointmentId = $request->post('id','');
+        if (!$appointmentId){
+            return json_fail("参数异常");
+        }
+
+        $appointment = Appointment::where('appointment_id',$appointmentId)->first();
+        if(!$appointment){
+            return json_fail("参数异常");
+        }
+
+        try{
+            $appointment->appointment_status = 'CANCEL';
+            $appointment->appointment_cancel_datetime = date('Y-m-d H:i:s');
+            $appointment->save();
+
+            return json_success('取消成功');
+        }catch(\Exception $e){
+            return json_fail('取消失败');
+        }
+        
+    }
+
     public static function getTimes(Request $request)
     {
         $goodsId = $request->get('goods_id', '');

+ 28 - 1
app/admin/service/order/OrderService.php

@@ -2,8 +2,10 @@
 
 namespace app\admin\service\order;
 
+use app\model\Member;
 use app\model\Order;
 use app\model\OrderSheet;
+use app\model\PayDetail;
 use app\model\SysDept;
 use support\Db;
 use support\exception\BusinessException;
@@ -94,10 +96,10 @@ class OrderService
             $timeUnix = strtotime("-30 minutes");
             $orders = Order::where('order_status_system', 'PAYING')
                 ->where('order_category','<>','DISHES')
+                ->where('order_platform','<>','SYSTEM')     // 后台产生的订单不自动取消
                 ->where('order_addtimes', '<', $timeUnix)
                 ->get();
             foreach ($orders as $order) {
-                
                 // 订单主表
                 Order::where('order_id', $order->order_id)->update([
                     'order_is_complete' => 'Y',
@@ -106,6 +108,10 @@ class OrderService
                 ]);
                 // 订单详情表
                 OrderSheet::where('join_sheet_order_id', $order->order_id)->update(['order_sheet_status' => 'CANCEL']);
+                // 支付表
+                PayDetail::where('pay_id', $order->order_groupby)->update([
+                    'pay_status' => 'CANCEL',
+                ]);
             }
 
             Db::commit();
@@ -127,6 +133,27 @@ class OrderService
         ];
     }
 
+    public static function generateAppointmentApplyData($params)
+    {
+        $member = Member::with('cert','info')
+            ->where('member_id',$params['join_order_member_id'])
+            ->first();
+        $name = '';
+        if (!empty($member) && !empty($member->cert) && !empty($member->cert->member_cert_name)){
+            $name = $member->cert->member_cert_name;
+        }else if (!empty($member) && !empty($member->info) && !empty($member->info->member_info_nickname)){
+            $name = $member->info->member_info_nickname;
+        }
+
+        return [
+            'name' => $name,
+            'times' => '',
+            'mobile' => !empty($member) ? $member->member_mobile : '',
+            'person' => $params['order_sheet_num'] ?? '',
+            'premises' => $params['dept_premises_id'] ?? ''
+        ];
+    }
+
     /**
      * 微信支付宝扫码支付
      */

+ 1 - 1
process/Task.php

@@ -24,7 +24,7 @@ class Task
             // 未支付30分钟取消
             OrderService::checkPayingOrder();
             // 支付记录:未支付30分钟取消
-            PayDetailService::checkPaying();
+            // PayDetailService::checkPaying();
 
             // 会员消息 30分钟未读,发送站内信
             MessageService::unreadChatMessage();

+ 3 - 0
route/admin.php

@@ -823,6 +823,7 @@ Route::group('/admin', function () {
             Route::get('/benefitList', [\app\admin\controller\order\WholeController::class, 'benefitList']);
             Route::get('/chooseBenefitList', [\app\admin\controller\order\WholeController::class, 'chooseBenefitList']);
             Route::post('/writeOffBenefit', [\app\admin\controller\order\WholeController::class, 'writeOffBenefit']);
+            Route::post('/pay', [\app\admin\controller\order\WholeController::class, 'pay']);
         })->middleware([
             \app\middleware\AdminAuthCheck::class
         ]);
@@ -855,6 +856,8 @@ Route::group('/admin', function () {
             Route::post('/confirm/{id:[0-9a-zA-Z]+}', [\app\admin\controller\order\AppointmentController::class, 'confirm']);
             Route::get('/getTimes', [\app\admin\controller\order\AppointmentController::class, 'getTimes']);
             Route::get('/my', [\app\admin\controller\order\AppointmentController::class, 'myAppointments']);
+            Route::post('/arrival',[\app\admin\controller\order\AppointmentController::class, 'arrival']);
+            Route::post('/cancelApply',[\app\admin\controller\order\AppointmentController::class, 'cancelApply']);
 
         })->middleware([
             \app\middleware\AdminAuthCheck::class