Gorden há 5 meses atrás
pai
commit
09d18d2310

+ 37 - 0
app/admin/controller/order/GoodsController.php

@@ -1537,6 +1537,7 @@ class GoodsController extends Curd
             if (sprintf("%.2f", $params['order_amount_pay']) != sprintf("%.2f", $constituteAmount)) {
                 throw new BusinessException('组合支付金额与应付金额不一致');
             }
+            $params['pay_detail_item'] = [];
             if (!empty($params['pay_category_constitute']) && in_array('OFFLINE', $params['pay_category_constitute'])) {  //线下付款
                 $order->order_status_system = $systemStatus;
                 $order->order_status_payment = 'SUCCESS';
@@ -1547,6 +1548,8 @@ class GoodsController extends Curd
                     $params['order_amount_pay'] = $constituteList['OFFLINE'];
                     // 生成支付记录
                     OrderService::createPayConstituteDetail($params, $payDetail);
+                    $params['order_status_payment'] = 'SUCCESS';
+                    $params['pay_detail_item'][] = $params;
                 }
                 $params['order_amount_pay'] = $orderAmountPay;
             }
@@ -1560,6 +1563,8 @@ class GoodsController extends Curd
                     $params['order_amount_pay'] = $constituteList['MONEY'];
                     // 生成支付记录
                     OrderService::createPayConstituteDetail($params, $payDetail);
+                    $params['order_status_payment'] = 'SUCCESS';
+                    $params['pay_detail_item'][] = $params;
                 }
                 $params['order_amount_pay'] = $orderAmountPay;
             }
@@ -1594,6 +1599,8 @@ class GoodsController extends Curd
                 $account->save();
                 // 生成支付记录
                 OrderService::createPayConstituteDetail($params, $payDetail);
+                $params['order_status_payment'] = 'SUCCESS';
+                $params['pay_detail_item'][] = $params;
                 $params['order_amount_pay'] = $orderAmountPay;
                 $order->order_status_system = $systemStatus;
                 $order->order_status_payment = 'SUCCESS';
@@ -1635,6 +1642,8 @@ class GoodsController extends Curd
                 $account->save();
                 // 生成支付记录
                 OrderService::createPayConstituteDetail($params, $payDetail);
+                $params['order_status_payment'] = 'SUCCESS';
+                $params['pay_detail_item'][] = $params;
                 $params['order_amount_pay'] = $orderAmountPay;
                 $order->order_status_system = $systemStatus;
                 $order->order_status_payment = 'SUCCESS';
@@ -1816,6 +1825,9 @@ class GoodsController extends Curd
                 if (empty($discountJson)) {
                     $this->changeOrderCouponStatus($couponUseJson, 'WAITING');
                 }
+                // 清除支付记录,恢复账户金额
+                $this->restoreAccount($params['pay_detail_item']);
+
                 return json_throw(2001, '支付异常', ['order_id' => $params['orderId']]);
             }
             _syslog("订单", "订单支付成功");
@@ -1828,6 +1840,31 @@ class GoodsController extends Curd
         }
     }
 
+    public function restoreAccount($payDetailItem)
+    {
+        foreach ($payDetailItem as $item) {
+            $prepayId = '';
+            if ($item['order_status_payment'] == 'SUCCESS') {
+                if (in_array($item['pay_category'], ['MONEY', 'OFFLINE', 'OFFLINE_ALIPAY', 'OFFLINE_WXPAY'])) {
+                    $prepayId = $item['pay_category'];
+                }
+                if (strpos($item['pay_category'],'CASH') !== false || strpos($item['pay_category'],'CARD') !== false || strpos($item['pay_category'],'WELFARE') !== false || strpos($item['pay_category'],'VIP') !== false){
+                    $prepayId = $item['pay_category'];
+                    $account = MemberAccount::where('member_account_nbr', $prepayId)->first();
+                    $account->member_account_expend = $account->member_account_expend - $item['order_amount_pay'];
+                    $account->member_account_surplus = $account->member_account_surplus + $item['order_amount_pay'];
+                    $account->save();
+                }
+            }
+            if (!empty($prepayId)) {
+                PayDetail::where('pay_prepayid', $prepayId)
+                    ->where('join_pay_order_id', $item['orderGroupId'])
+                    ->whereJsonContains('join_pay_object_json->order_id',$item['orderId'])
+                    ->update(['pay_status' => 'WAITING']);
+            }
+        }
+    }
+
     /**
      * @Desc
      * @Author Gorden

+ 37 - 5
app/admin/controller/order/PackagesController.php

@@ -1670,6 +1670,7 @@ class PackagesController extends Curd
             if (sprintf("%.2f", $params['order_amount_pay']) != sprintf("%.2f", $constituteAmount)) {
                 throw new BusinessException('组合支付金额与应付金额不一致');
             }
+            $params['pay_detail_item'] = [];
             if (!empty($params['pay_category_constitute']) && in_array('OFFLINE', $params['pay_category_constitute'])) {  //线下付款
                 $order->order_status_system = $systemStatus;
                 $order->order_status_payment = 'SUCCESS';
@@ -1680,6 +1681,8 @@ class PackagesController extends Curd
                     $params['order_amount_pay'] = $constituteList['OFFLINE'];
                     // 生成支付记录
                     OrderService::createPayConstituteDetail($params, $payDetail);
+                    $params['order_status_payment'] = 'SUCCESS';
+                    $params['pay_detail_item'][] = $params;
                 }
                 $params['order_amount_pay'] = $orderAmountPay;
             }
@@ -1693,6 +1696,8 @@ class PackagesController extends Curd
                     $params['order_amount_pay'] = $constituteList['MONEY'];
                     // 生成支付记录
                     OrderService::createPayConstituteDetail($params, $payDetail);
+                    $params['order_status_payment'] = 'SUCCESS';
+                    $params['pay_detail_item'][] = $params;
                 }
                 $params['order_amount_pay'] = $orderAmountPay;
             }
@@ -1727,6 +1732,8 @@ class PackagesController extends Curd
                 $account->save();
                 // 生成支付记录
                 OrderService::createPayConstituteDetail($params, $payDetail);
+                $params['order_status_payment'] = 'SUCCESS';
+                $params['pay_detail_item'][] = $params;
                 $params['order_amount_pay'] = $orderAmountPay;
                 $order->order_status_system = $systemStatus;
                 $order->order_status_payment = 'SUCCESS';
@@ -1768,6 +1775,8 @@ class PackagesController extends Curd
                 $account->save();
                 // 生成支付记录
                 OrderService::createPayConstituteDetail($params, $payDetail);
+                $params['order_status_payment'] = 'SUCCESS';
+                $params['pay_detail_item'][] = $params;
                 $params['order_amount_pay'] = $orderAmountPay;
                 $order->order_status_system = $systemStatus;
                 $order->order_status_payment = 'SUCCESS';
@@ -1912,11 +1921,6 @@ class PackagesController extends Curd
                     }
                 }
             }
-            // 2.4W 康养城
-            if ($params['goods_classify'] == 'VIP' && $order->order_status_payment == 'SUCCESS') {
-                $params['member_id'] = $params['join_order_member_id'];
-                Event::dispatch('order.kangyangCityVIP.grant', $params);
-            }
 
             Db::commit();
             // 会员升级
@@ -1955,6 +1959,9 @@ class PackagesController extends Curd
                 if (empty($discountJson)) {
                     $this->changeOrderCouponStatus($couponUseJson, 'WAITING');
                 }
+                // 清除支付记录,恢复账户金额
+                $this->restoreAccount($params['pay_detail_item']);
+
                 return json_throw(2001, '支付异常', ['order_id' => $params['orderId']]);
             }
             _syslog("订单", "订单支付成功");
@@ -1967,6 +1974,31 @@ class PackagesController extends Curd
         }
     }
 
+    public function restoreAccount($payDetailItem)
+    {
+        foreach ($payDetailItem as $item) {
+            $prepayId = '';
+            if ($item['order_status_payment'] == 'SUCCESS') {
+                if (in_array($item['pay_category'], ['MONEY', 'OFFLINE', 'OFFLINE_ALIPAY', 'OFFLINE_WXPAY'])) {
+                    $prepayId = $item['pay_category'];
+                }
+                if (strpos($item['pay_category'],'CASH') !== false || strpos($item['pay_category'],'CARD') !== false || strpos($item['pay_category'],'WELFARE') !== false || strpos($item['pay_category'],'VIP') !== false){
+                    $prepayId = $item['pay_category'];
+                    $account = MemberAccount::where('member_account_nbr', $prepayId)->first();
+                    $account->member_account_expend = $account->member_account_expend - $item['order_amount_pay'];
+                    $account->member_account_surplus = $account->member_account_surplus + $item['order_amount_pay'];
+                    $account->save();
+                }
+            }
+            if (!empty($prepayId)) {
+                PayDetail::where('pay_prepayid', $prepayId)
+                    ->where('join_pay_order_id', $item['orderGroupId'])
+                    ->whereJsonContains('join_pay_object_json->order_id',$item['orderId'])
+                    ->update(['pay_status' => 'WAITING']);
+            }
+        }
+    }
+
     /**
      * @Desc
      * @Author Gorden

+ 31 - 12
app/admin/controller/order/ServicesController.php

@@ -571,7 +571,6 @@ class ServicesController extends Curd
     public function insertConstitute(Request $request): Response
     {
         $params = $request->post();
-        // 判断餐品是否连带着服务或实体
         $goodsClassifys = array_unique(array_column($params['goodsContentList'], 'goods_classify'));
         $premises = [];
         if (!empty($params['dept_premises_id'])) {
@@ -913,9 +912,6 @@ class ServicesController extends Curd
                 }
                 $this->changeOrderCouponStatus($couponUseJson, 'WAITING');
 
-                // 清除支付记录,恢复账户金额
-//                $this->restoreAccount($params['pay_detail_item']);
-
                 return json_throw(2001, '支付异常', ['order_id' => $params['orderId']]);
             }
             _syslog("订单", "创建订单成功");
@@ -937,9 +933,25 @@ class ServicesController extends Curd
 
     public function restoreAccount($payDetailItem)
     {
-        foreach ($payDetailItem as $item){
-            if ($item['order_status_payment'] == 'SUCCESS'){
-//                if ($item[''])
+        foreach ($payDetailItem as $item) {
+            $prepayId = '';
+            if ($item['order_status_payment'] == 'SUCCESS') {
+                if (in_array($item['pay_category'], ['MONEY', 'OFFLINE', 'OFFLINE_ALIPAY', 'OFFLINE_WXPAY'])) {
+                    $prepayId = $item['pay_category'];
+                }
+                if (strpos($item['pay_category'],'CASH') !== false || strpos($item['pay_category'],'CARD') !== false || strpos($item['pay_category'],'WELFARE') !== false || strpos($item['pay_category'],'VIP') !== false){
+                    $prepayId = $item['pay_category'];
+                    $account = MemberAccount::where('member_account_nbr', $prepayId)->first();
+                    $account->member_account_expend = $account->member_account_expend - $item['order_amount_pay'];
+                    $account->member_account_surplus = $account->member_account_surplus + $item['order_amount_pay'];
+                    $account->save();
+                }
+            }
+            if (!empty($prepayId)) {
+                PayDetail::where('pay_prepayid', $prepayId)
+                    ->where('join_pay_order_id', $item['orderGroupId'])
+                    ->whereJsonContains('join_pay_object_json->order_id',$item['orderId'])
+                    ->update(['pay_status' => 'WAITING']);
             }
         }
     }
@@ -1577,6 +1589,7 @@ class ServicesController extends Curd
             if (sprintf("%.2f", $params['order_amount_pay']) != sprintf("%.2f", $constituteAmount)) {
                 throw new BusinessException('组合支付金额与应付金额不一致');
             }
+            $params['pay_detail_item'] = [];
             if (!empty($params['pay_category_constitute']) && in_array('OFFLINE', $params['pay_category_constitute'])) {  //线下付款
                 $order->order_status_system = $systemStatus;
                 $order->order_status_payment = 'SUCCESS';
@@ -1587,6 +1600,8 @@ class ServicesController extends Curd
                     $params['order_amount_pay'] = $constituteList['OFFLINE'];
                     // 生成支付记录
                     OrderService::createPayConstituteDetail($params, $payDetail);
+                    $params['order_status_payment'] = 'SUCCESS';
+                    $params['pay_detail_item'][] = $params;
                 }
                 $params['order_amount_pay'] = $orderAmountPay;
             }
@@ -1600,6 +1615,8 @@ class ServicesController extends Curd
                     $params['order_amount_pay'] = $constituteList['MONEY'];
                     // 生成支付记录
                     OrderService::createPayConstituteDetail($params, $payDetail);
+                    $params['order_status_payment'] = 'SUCCESS';
+                    $params['pay_detail_item'][] = $params;
                 }
                 $params['order_amount_pay'] = $orderAmountPay;
             }
@@ -1634,6 +1651,8 @@ class ServicesController extends Curd
                 $account->save();
                 // 生成支付记录
                 OrderService::createPayConstituteDetail($params, $payDetail);
+                $params['order_status_payment'] = 'SUCCESS';
+                $params['pay_detail_item'][] = $params;
                 $params['order_amount_pay'] = $orderAmountPay;
                 $order->order_status_system = $systemStatus;
                 $order->order_status_payment = 'SUCCESS';
@@ -1675,6 +1694,8 @@ class ServicesController extends Curd
                 $account->save();
                 // 生成支付记录
                 OrderService::createPayConstituteDetail($params, $payDetail);
+                $params['order_status_payment'] = 'SUCCESS';
+                $params['pay_detail_item'][] = $params;
                 $params['order_amount_pay'] = $orderAmountPay;
                 $order->order_status_system = $systemStatus;
                 $order->order_status_payment = 'SUCCESS';
@@ -1819,11 +1840,6 @@ class ServicesController extends Curd
                     }
                 }
             }
-            // 2.4W 康养城
-            if ($params['goods_classify'] == 'VIP' && $order->order_status_payment == 'SUCCESS') {
-                $params['member_id'] = $params['join_order_member_id'];
-                Event::dispatch('order.kangyangCityVIP.grant', $params);
-            }
 
             Db::commit();
             // 会员升级
@@ -1862,6 +1878,9 @@ class ServicesController extends Curd
                 if (empty($discountJson)) {
                     $this->changeOrderCouponStatus($couponUseJson, 'WAITING');
                 }
+                // 清除支付记录,恢复账户金额
+                $this->restoreAccount($params['pay_detail_item']);
+
                 return json_throw(2001, '支付异常', ['order_id' => $params['orderId']]);
             }
             _syslog("订单", "订单支付成功");

+ 35 - 0
app/admin/controller/order/WholeController.php

@@ -4696,6 +4696,7 @@ class WholeController extends Curd
         }
 
         if ($order->order_status_payment == 'SUCCESS') {
+            $this->deductAccount($order->order_id, $order->order_groupby, 'WXPAY');
             return json_success('success');
         }
 
@@ -4725,6 +4726,8 @@ class WholeController extends Curd
                     OrderSheet::where('join_sheet_order_id', $orderId)->where('order_sheet_status', 'PAYING')->update(['order_sheet_status' => 'DONE']);
                     // 支付记录
                     PayDetail::where('join_pay_order_id', $order->order_groupby)->where('pay_prepayid', 'WXPAY')->update(['pay_status' => 'SUCCESS']);
+                    // 其他支付方式 扣
+                    $this->deductAccount($order->order_groupby, 'WXPAY');
                     // 优惠券标记使用
                     $this->changeOrderCouponStatus($discountJson, 'USED');
 
@@ -4754,6 +4757,8 @@ class WholeController extends Curd
                     OrderSheet::where('join_sheet_order_id', $orderId)->where('order_sheet_status', 'PAYING')->update(['order_sheet_status' => 'DONE']);
                     // 支付记录
                     PayDetail::where('join_pay_order_id', $order->order_groupby)->where('pay_prepayid', 'ALIPAY')->update(['pay_status' => 'SUCCESS']);
+                    // 其他支付方式 扣
+                    $this->deductAccount($order->order_groupby, 'ALIPAY');
                     // 优惠券标记使用
                     $this->changeOrderCouponStatus($discountJson, 'USED');
                     Db::commit();
@@ -4768,6 +4773,36 @@ class WholeController extends Curd
         }
     }
 
+    public function deductAccount($orderId, $orderGroup, $payWay)
+    {
+        $payDetails = PayDetail::where('join_pay_order_id', $orderGroup)
+            ->where('pay_prepayid', '<>', $payWay)
+            ->whereJsonContains('join_pay_object_json->order_id', $orderId)
+            ->get()
+            ->toArray();
+        $pays = [];
+        foreach ($payDetails as $payDetail) {
+            if (isset($pays[$payDetail['pay_prepayid']])) {
+                $pays[$payDetail['pay_prepayid']] += $payDetail['pay_amount'];
+            } else {
+                $pays[$payDetail['pay_prepayid']] = $payDetail['pay_amount'];
+            }
+        }
+
+        foreach ($pays as $key => $amount) {
+            if (strpos($key, 'CASH') !== false || strpos($key, 'CARD') !== false || strpos($key, 'WELFARE') !== false || strpos($key, 'VIP') !== false) {
+                $account = MemberAccount::where('member_account_nbr', $key)->first();
+                $account->member_account_expend = $account->member_account_expend + $amount;
+                $account->member_account_surplus = $account->member_account_surplus - $amount;
+                $account->save();
+            }
+        }
+        PayDetail::where('join_pay_order_id', $orderGroup)
+            ->where('pay_prepayid', '<>', $payWay)
+            ->whereJsonContains('join_pay_object_json->order_id', $orderId)
+            ->update(['pay_status' => 'SUCCESS']);
+    }
+
     /**
      * @Desc 修改订单状态-挂账
      * @Author Gorden