Browse Source

预约,订单状态调整

gorden 7 months ago
parent
commit
3aa6b6d712

+ 227 - 6
app/admin/controller/order/WholeController.php

@@ -17,6 +17,8 @@ use app\model\Coupon;
 use app\model\Device;
 use app\model\Goods;
 use app\model\GoodsComponent;
+use app\model\GoodsRunning;
+use app\model\GoodsSku;
 use app\model\Member;
 use app\model\MemberAccount;
 use app\model\MemberBenefit;
@@ -498,11 +500,43 @@ class WholeController extends Curd
     {
         try{
             foreach ($params['goodsContentList'] as $sheet){
+                // 先还原库存
+                $orderSheet = OrderSheet::where('order_sheet_id',$sheet['order_sheet_id'])->first();
+                $goodsSku = GoodsSku::where('goods_sku_id',$orderSheet->join_sheet_goods_sku_id)->first();
+                $skuStorageJson = json_decode($goodsSku->goods_sku_storage_json,true);
+                $skuStorageJson['storage'] = $skuStorageJson['storage'] + $orderSheet->order_sheet_num;
+                $goodsSku->goods_sku_storage_json = json_encode($skuStorageJson);
+                $goodsSku->save();
+
+                $goodsRunning = GoodsRunning::where('join_running_goods_id',$orderSheet->join_sheet_goods_id)->first();
+                $goodsRunning->goods_running_storage = $goodsRunning->goods_running_storage + $orderSheet->order_sheet_num;
+                $goodsRunning->goods_running_sale = $goodsRunning->goods_running_sale - $orderSheet->order_sheet_num;
+                $goodsRunning->save();
+
                 $data=[
                     'order_sheet_num'=>$sheet['nbr'],
                     'join_sheet_goods_sku_id'=>$sheet['sku_id']
                 ];
                 OrderSheet::where('order_sheet_id',$sheet['order_sheet_id'])->update($data);
+
+                // 减库存
+                $goodsSku = GoodsSku::where('goods_sku_id',$sheet['sku_id'])->first();
+                $skuStorageJson = json_decode($goodsSku->goods_sku_storage_json,true);
+                $skuStorageJson['storage'] = $skuStorageJson['storage'] - $sheet['nbr'];
+                if ($skuStorageJson['storage'] < 0){
+                    throw new BusinessException('库存不足');
+                }
+                $goodsSku->goods_sku_storage_json = json_encode($skuStorageJson);
+                $goodsSku->save();
+
+                $goodsRunning = GoodsRunning::where('join_running_goods_id',$orderSheet->join_sheet_goods_id)->first();
+                $goodsRunning->goods_running_storage = $goodsRunning->goods_running_storage - $sheet['nbr'];
+                if ($goodsRunning->goods_running_storage < 0){
+                    throw new BusinessException('库存不足');
+                }
+                $goodsRunning->goods_running_sale = $goodsRunning->goods_running_sale + $sheet['nbr'];
+                $goodsRunning->save();
+
             }
 
         }catch(\Exception $e){
@@ -648,6 +682,71 @@ class WholeController extends Curd
                     $order->order_status_system = $systemStatus;
                     $order->order_status_payment = 'SUCCESS';
                 }
+                // 福利账户 300 、 700
+                if(in_array($params['goods_classify'],['SERVICE','CHNMED','CHNNCD','MEALS'])){
+                    $payDetails = PayDetail::where('join_pay_member_id',$params['join_order_member_id'])
+                        ->where('pay_status','SUCCESS')
+                        ->where('pay_prepayid',$params['join_order_member_id'].'-WELFARE')
+                        ->whereIn('pay_category',['SERVICE','CHNMED','CHNNCD','MEALS','DESHES'])
+                        ->get()
+                        ->toArray();
+
+                    $payDetailArray = array_column($payDetails,'pay_amount','join_pay_order_id');
+
+                    $refundPayDetails = PayDetail::where('join_pay_member_id',$params['join_order_member_id'])
+                        ->where('pay_status','SUCCESS')
+                        ->where('pay_prepayid',$params['join_order_member_id'].'-WELFARE')
+                        ->where('pay_category','REFUND')
+                        ->get()
+                        ->toArray();
+                    $refundPayDetailArray = array_column($refundPayDetails,'pay_amount','join_pay_order_id');
+                    $paySum = 0;
+                    foreach ($payDetailArray as $key => $item){
+                        if (isset($refundPayDetailArray[$key])){
+                            $paySum = $paySum + ($item - $refundPayDetailArray[$key]);
+                            continue;
+                        }
+
+                        $paySum = $paySum + $item;
+                    }
+
+                    if (700 - $paySum < $params['order_amount_pay']){
+                        Db::rollBack();
+                        return json_fail('超出福利限额'); 
+                    }
+                }else{
+                    $payDetails = PayDetail::where('join_pay_member_id',$params['join_order_member_id'])
+                        ->where('pay_status','SUCCESS')
+                        ->where('pay_prepayid',$params['join_order_member_id'].'-WELFARE')
+                        ->whereNotIn('pay_category',['SERVICE','CHNMED','CHNNCD','MEALS','DESHES','REFUND'])
+                        ->get()
+                        ->toArray();
+
+                    $payDetailArray = array_column($payDetails,'pay_amount','join_pay_order_id');
+
+                    $refundPayDetails = PayDetail::where('join_pay_member_id',$params['join_order_member_id'])
+                        ->where('pay_status','SUCCESS')
+                        ->where('pay_prepayid',$params['join_order_member_id'].'-WELFARE')
+                        ->where('pay_category','REFUND')
+                        ->get()
+                        ->toArray();
+                    $refundPayDetailArray = array_column($refundPayDetails,'pay_amount','join_pay_order_id');
+                    
+                    $paySum = 0;
+                    foreach ($payDetailArray as $key => $item){
+                        if (isset($refundPayDetailArray[$key])){
+                            $paySum = $paySum + ($item - $refundPayDetailArray[$key]);
+                            continue;
+                        }
+
+                        $paySum = $paySum + $item;
+                    }
+
+                    if (300 - $paySum < $params['order_amount_pay']){
+                        Db::rollBack();
+                        return json_fail('超出福利限额'); 
+                    }
+                }
                 $account->member_account_surplus = $account->member_account_surplus - $params['order_amount_pay'];
                 $account->member_account_expend = $account->member_account_expend + $params['order_amount_pay'];
                 $account->save();
@@ -1003,12 +1102,12 @@ class WholeController extends Curd
             // 立即结算
             if($params['settlement_now'] == 'Y'){
                 $params['order_is_complete'] = 'Y';
-                if(in_array($params['goods_classify'],['SERVICE','CHNMED','CHNNCD'])){
+                if(in_array($params['goods_classify'],['SERVICE','CHNMED','CHNNCD','MEALS'])){
                     $systemStatus = 'DONE';
                 }
             }
             
-            if ($params['settlement_now'] == 'Y'){
+            if ($params['settlement_now'] == 'Y' && $params['pay_category'] == 'OFFLINE'){
                 $params['order_status_system'] = $systemStatus;
                 $params['order_status_payment'] = 'SUCCESS';
             }else if ($params['settlement_now'] == 'Y' && $params['pay_category'] == 'CASH') {    // 余额支付
@@ -1064,6 +1163,70 @@ class WholeController extends Curd
                     $params['order_status_system'] = $systemStatus;
                     $params['order_status_payment'] = 'SUCCESS';
                 }
+                // 福利账户 300 、 700
+                if(in_array($params['goods_classify'],['SERVICE','CHNMED','CHNNCD','MEALS'])){
+                    $payDetails = PayDetail::where('join_pay_member_id',$params['join_order_member_id'])
+                        ->where('pay_status','SUCCESS')
+                        ->where('pay_prepayid',$params['join_order_member_id'].'-WELFARE')
+                        ->whereIn('pay_category',['SERVICE','CHNMED','CHNNCD','MEALS','DESHES'])
+                        ->get()
+                        ->toArray();
+
+                    $payDetailArray = array_column($payDetails,'pay_amount','join_pay_order_id');
+
+                    $refundPayDetails = PayDetail::where('join_pay_member_id',$params['join_order_member_id'])
+                        ->where('pay_status','SUCCESS')
+                        ->where('pay_prepayid',$params['join_order_member_id'].'-WELFARE')
+                        ->where('pay_category','REFUND')
+                        ->get()
+                        ->toArray();
+                    $refundPayDetailArray = array_column($refundPayDetails,'pay_amount','join_pay_order_id');
+                    $paySum = 0;
+                    foreach ($payDetailArray as $key => $item){
+                        if (isset($refundPayDetailArray[$key])){
+                            $paySum = $paySum + ($item - $refundPayDetailArray[$key]);
+                            continue;
+                        }
+
+                        $paySum = $paySum + $item;
+                    }
+
+                    if (700 - $paySum < $params['order_amount_pay']){
+                        Db::rollBack();
+                        return json_fail('超出福利限额'); 
+                    }
+                }else{
+                    $payDetails = PayDetail::where('join_pay_member_id',$params['join_order_member_id'])
+                        ->where('pay_status','SUCCESS')
+                        ->where('pay_prepayid',$params['join_order_member_id'].'-WELFARE')
+                        ->whereNotIn('pay_category',['SERVICE','CHNMED','CHNNCD','MEALS','DESHES','REFUND'])
+                        ->get()
+                        ->toArray();
+
+                    $payDetailArray = array_column($payDetails,'pay_amount','join_pay_order_id');
+
+                    $refundPayDetails = PayDetail::where('join_pay_member_id',$params['join_order_member_id'])
+                        ->where('pay_status','SUCCESS')
+                        ->where('pay_prepayid',$params['join_order_member_id'].'-WELFARE')
+                        ->where('pay_category','REFUND')
+                        ->get()
+                        ->toArray();
+                    $refundPayDetailArray = array_column($refundPayDetails,'pay_amount','join_pay_order_id');
+                    $paySum = 0;
+                    foreach ($payDetailArray as $key => $item){
+                        if (isset($refundPayDetailArray[$key])){
+                            $paySum = $paySum + ($item - $refundPayDetailArray[$key]);
+                            continue;
+                        }
+
+                        $paySum = $paySum + $item;
+                    }
+
+                    if (300 - $paySum < $params['order_amount_pay']){
+                        Db::rollBack();
+                        return json_fail('超出福利限额'); 
+                    }
+                }
 
                 $account->member_account_surplus = $account->member_account_surplus - $params['order_amount_pay'];
                 $account->member_account_expend = $account->member_account_expend + $params['order_amount_pay'];
@@ -1232,6 +1395,7 @@ class WholeController extends Curd
                 $params['order_express_city'] = $premises->dept_city;
                 $params['order_express_address'] = $premises->dept_address;
                 $params['order_express_telephone'] = $premises->dept_telephone;
+                $params['order_express_extend_json'] = json_encode(['pick_code'=>random_string(4,'number')]);
 
                 $this->saveExpress($params);
             } 
@@ -1301,6 +1465,29 @@ class WholeController extends Curd
             // }
 
             Db::commit();
+            // 打小票
+            // $sheet = OrderSheet::where('join_sheet_order_id',$params['order_id'])->first();
+            // if ($params['order_status_payment'] == 'SUCCESS' && !empty($sheet->order_sheet_extend_json)){
+            //     $sheetExtendJson = json_decode($sheet->order_sheet_extend_json,true);
+            //     if (isset($sheetExtendJson['premises'])){
+            //         $voteData = [
+            //             'func'=>'procActionToPrinter',
+            //             'sign'=>'',
+            //             'data'=>[
+            //                 'printer_premises'=>$sheetExtendJson['premises'],
+            //                 'printer_device'=>[
+            //                     "东泉度假村餐厅前台"
+            //                 ],
+            //                 'printer_action'=>'ExecPrintOrder',
+            //                 'printer_data'=>[
+            //                     'order_id'=>$params['order_id']
+            //                 ]
+            //             ]
+            //         ];
+            //         http_post_json(getenv('VOTE_MENU_URL'),$voteData);
+            //     }
+                
+            // }
 
             _syslog("订单","创建订单成功");
             return json_success('创建订单成功');
@@ -1396,8 +1583,28 @@ class WholeController extends Curd
                 ];
                 
                 OrderSheet::insertGetId($data); 
+
+                // 减库存,规格和总库存
+                $goodsSku = GoodsSku::where('goods_sku_id',$goods['sku_id'])->first();
+                $skuStorageJson = json_decode($goodsSku->goods_sku_storage_json,true);
+                $skuStorageJson['storage'] = $skuStorageJson['storage'] - $goods['nbr'];
+                if ($skuStorageJson['storage'] < 0){
+                    throw new BusinessException('库存不足');
+                }
+                $goodsSku->goods_sku_storage_json = json_encode($skuStorageJson);
+                $goodsSku->save();
+
+                $goodsRunning = GoodsRunning::where('join_running_goods_id',$goods['goods_id'])->first();
+                $goodsRunning->goods_running_storage = $goodsRunning->goods_running_storage - $goods['nbr'];
+                if ($goodsRunning->goods_running_storage < 0){
+                    throw new BusinessException('库存不足');
+                }
+                $goodsRunning->goods_running_sale = $goodsRunning->goods_running_sale + $goods['nbr'];
+                $goodsRunning->save();
             }
             return true;
+        }catch(\support\exception\BusinessException $e){
+            throw new BusinessException($e->getMessage());
         } catch (\Exception $e) {
             throw new BusinessException('订单创建失败');
         }
@@ -1590,7 +1797,22 @@ class WholeController extends Curd
 
         Db::beginTransaction();
         try {
+            $expressExtendJson = [];
             if ($params['express_type'] == '自提') {
+                $model = OrderExpress::where('join_express_order_id', $params['order_id'])->first();
+                if (!$model) {
+                    $model = new OrderExpress();
+                }
+                if (!empty($model->order_express_extend_json)){
+                    $expressExtendJson = json_decode($model->order_express_extend_json,true);
+                    // 如果有取件码
+                    if (isset($expressExtendJson['pick_code'])){
+                        if (empty($params['order_express_pick_code']) || $params['order_express_pick_code'] != $expressExtendJson['pick_code']){
+                            Db::rollBack();
+                            return json_fail("取件码错误");
+                        }
+                    }
+                }
                 $premises = SysDept::where('dept_name', $params['order_express_premises'])->first();
                 if (!$premises) {
                     return json_fail("门店不存在,请重新填写");
@@ -1612,10 +1834,6 @@ class WholeController extends Curd
 //                $redis->sadd($key, $params['order_id']);
 
 //                $model = new OrderExpress();
-                $model = OrderExpress::where('join_express_order_id', $params['order_id'])->first();
-                if (!$model) {
-                    $model = new OrderExpress();
-                }
             } else {
                 $orderData = [
                     'order_status_system' => 'RECVING',
@@ -1673,6 +1891,8 @@ class WholeController extends Curd
             }
             $model->order_express_remark = $params['order_express_remark'] ?? null;
             $model->order_express_addtimes = $params['order_express_addtimes'] ?? time();
+            $expressExtendJson['delivery_time'] = date('Y-m-d H:i:s');
+            $model->order_express_extend_json = json_encode($expressExtendJson);
             $model->save();
 
             // 事件通知
@@ -2006,6 +2226,7 @@ class WholeController extends Curd
             $express->order_express_telephone = $params['order_express_telephone'] ?? '';
             $express->order_express_person = $params['order_express_person'] ?? '';
             $express->order_express_company = $params['dept_premises_id'] ?? '';
+            $express->order_express_extend_json = $params['order_express_extend_json'] ?? '[]';
             $express->order_express_addtimes = time();
             $express->save();
         } catch (\Exception $e) {

+ 1 - 1
app/admin/service/order/AppointmentService.php

@@ -247,7 +247,7 @@ class AppointmentService
                 'pay_remark' => '预约单',
                 'pay_addtimes' => time(),
                 'pay_paytimes' => date('Y-m-d H:i:s'),
-                'pay_prepayid'=>0,
+                'pay_prepayid'=>$appointment->join_appointment_member_id.'-CASH',
                 'pay_category'=>$goods->goods_classify
             ];
             PayDetail::insert($pay);

+ 24 - 0
app/admin/service/order/OrderService.php

@@ -2,6 +2,8 @@
 
 namespace app\admin\service\order;
 
+use app\model\GoodsRunning;
+use app\model\GoodsSku;
 use app\model\Member;
 use app\model\Order;
 use app\model\OrderSheet;
@@ -106,6 +108,28 @@ class OrderService
                     'order_status_system' => 'CANCEL',
                     'order_status_payment' => 'CANCEL'
                 ]);
+                $sheets = OrderSheet::where('join_sheet_order_id', $order->order_id)->get();
+                foreach ($sheets as $sheet){
+                    // 还原库存
+                    $goodsSku = GoodsSku::where('goods_sku_id',$sheet->join_sheet_goods_sku_id)->first();
+                    if (!empty($goodsSku) && !empty($goodsSku->goods_sku_storage_json)){
+                        $skuStorageJson = json_decode($goodsSku->goods_sku_storage_json,true);
+                        if (isset($skuStorageJson['storage'])){
+                            $skuStorageJson['storage'] = $skuStorageJson['storage'] + $sheet->order_sheet_num;
+                            $goodsSku->goods_sku_storage_json = json_encode($skuStorageJson);
+                            $goodsSku->save();
+                        }
+                    }
+                    
+
+                    $goodsRunning = GoodsRunning::where('join_running_goods_id',$sheet->join_sheet_goods_id)->first();
+                    if(!empty($goodsRunning)){
+                        $goodsRunning->goods_running_storage = $goodsRunning->goods_running_storage + $sheet->order_sheet_num;
+                        $goodsRunning->goods_running_sale = $goodsRunning->goods_running_sale - $sheet->order_sheet_num;
+                        $goodsRunning->save();
+                    }
+                }
+
                 // 订单详情表
                 OrderSheet::where('join_sheet_order_id', $order->order_id)->update(['order_sheet_status' => 'CANCEL']);
                 // 支付表