Browse Source

收支明细表

gorden 5 months ago
parent
commit
7fca4ec6f4

+ 7 - 1
app/admin/controller/notify/RechargeController.php

@@ -155,11 +155,17 @@ class RechargeController
                     // 没有提成过
                     if (!MemberAccountList::whereJsonContains('member_account_list_json->order_id', $payObjectJson['order_id'])->exists()) {
                         // 上级提成
-                        Event::dispatch('commission.order', ['orderId' => $payObjectJson['order_id'],'member_account_list_category'=>'充值']);
+                        Event::dispatch('commission.order', ['orderId' => $payObjectJson['order_id'], 'member_account_list_category' => '充值']);
                     }
+
+                    // 入收支明细表
+                    $params['orderId'] = $payObjectJson['order_id'];
+                    $params['inout_category'] = '会员充值订单收入';
+                    Event::dispatch('statistics.inout.in', $params);
                 }
             }
 
+
             Db::commit();
 
             return json_success('success');

+ 17 - 5
app/admin/controller/order/GoodsController.php

@@ -48,7 +48,6 @@ class GoodsController extends Curd
     public function select(Request $request): Response
     {
         [$where, $format, $limit, $field, $order] = $this->selectInput($request);
-
         $where['order_classify'] = 'GOODS';
         if (!empty($where['order_addtimes'])) {
             $where['order_addtimes'][0] = strtotime($where['order_addtimes'][0]);
@@ -557,13 +556,16 @@ class GoodsController extends Curd
 
             Db::commit();
 
-            // 会员升级
+            // 触发事件
             if (!empty($params['order_is_complete']) && $params['order_is_complete'] == 'Y' && $params['order_status_payment'] == 'SUCCESS') {
                 Event::dispatch('order.complete', $params);
             }
+            // 触发事件
             if ($params['order_status_payment'] == 'SUCCESS') {
                 // 上级提成
                 OrderService::splitOrderCommission($params);
+                // 入收支明细表
+                OrderService::splitOrderStatisticsInOut($params);
             }
 
             if ($params['settlement_now'] == 'Y' && $params['order_status_payment'] != 'SUCCESS') {
@@ -888,13 +890,16 @@ class GoodsController extends Curd
 
             Db::commit();
 
-            // 完成订单
+            // 触发事件
             if (!empty($params['order_is_complete']) && $params['order_is_complete'] == 'Y' && $params['order_status_payment'] == 'SUCCESS') {
                 Event::dispatch('order.complete', $params);
             }
+            // 触发事件
             if ($params['order_status_payment'] == 'SUCCESS') {
                 // 上级提成
                 OrderService::splitOrderCommission($params);
+                // 入收支明细表
+                OrderService::splitOrderStatisticsInOut($params);
             }
 
             if ($params['settlement_now'] == 'Y' && $params['order_status_payment'] != 'SUCCESS') {
@@ -949,6 +954,7 @@ class GoodsController extends Curd
         }
 
         $order = Order::where('order_id', $params['order_id'])->first();
+        $oldOrderStatus = $order->order_status_system;
         if (!$order) {
             return json_fail('订单异常');
         }
@@ -1234,7 +1240,7 @@ class GoodsController extends Curd
                 if (in_array($prefix, [10, 11, 12, 13, 14, 15])) {
                     $params['pay_category'] = 'WXPAY';
                     if ((!isset($result['return_code']) || $result['return_code'] != 'SUCCESS') || (!isset($result['result_code']) || $result['result_code'] != 'SUCCESS') || (empty($result['trade_state']) || $result['trade_state'] != 'SUCCESS')) {
-                        $order->order_status_system = 'PAYING';
+                        $order->order_status_system = $oldOrderStatus;
                         $order->order_status_payment = 'PENDING';
                         $order->order_is_complete = 'N';
 //                        Db::rollBack();
@@ -1246,7 +1252,7 @@ class GoodsController extends Curd
                 } else if (in_array($prefix, [25, 26, 27, 28, 29, 30])) {
                     $params['pay_category'] = 'ALIPAY';
                     if ((!isset($result['code']) || $result['code'] != '10000') || (empty($result['trade_status']) || $result['trade_status'] != 'TRADE_SUCCESS')) {
-                        $order->order_status_system = 'PAYING';
+                        $order->order_status_system = $oldOrderStatus;
                         $order->order_status_payment = 'PENDING';
                         $order->order_is_complete = 'N';
 //                        Db::rollBack();
@@ -1335,6 +1341,9 @@ class GoodsController extends Curd
             if ($order->order_status_payment == 'SUCCESS') {
                 // 上级提成
                 Event::dispatch('commission.order', $params);
+                // 入收支明细表
+                $params['inout_category'] = '标准订单收入';
+                Event::dispatch('statistics.inout.in', $params);
             }
 
             // 打小票
@@ -1695,6 +1704,9 @@ class GoodsController extends Curd
             if ($order->order_status_payment == 'SUCCESS') {
                 // 上级提成
                 Event::dispatch('commission.order', $params);
+                // 入收支明细表
+                $params['inout_category'] = '标准订单收入';
+                Event::dispatch('statistics.inout.in', $params);
             }
 
             // 打小票

+ 13 - 1
app/admin/controller/order/KangyangCityController.php

@@ -366,6 +366,12 @@ class KangyangCityController extends Curd
                 $params['member_id'] = $params['join_order_member_id'];
                 Event::dispatch('order.kangyangCityVIP.grant', $params);
             }
+            // 触发事件
+            if (!empty($params['order_is_complete']) && $params['order_is_complete'] == 'Y' && $params['order_status_payment'] == 'SUCCESS') {
+                // 入收支明细表
+                $params['inout_category'] = '购买康养城VIP套餐包收入';
+                Event::dispatch('statistics.inout.in', $params);
+            }
 
             Db::commit();
             if ($params['settlement_now'] == 'Y' && $params['order_status_payment'] != 'SUCCESS') {
@@ -564,8 +570,9 @@ class KangyangCityController extends Curd
 //            if (!PayDetail::where('join_pay_order_id', $order->order_groupby)->where('pay_category', '<>', 'WXPAY')->where('pay_category', '<>', 'ALIPAY')->exists()) {
             $payData['join_pay_member_id'] = $params['join_order_member_id'];
             $payData['join_pay_order_id'] = $order->order_groupby;
-            $payData['pay_status'] = $payData['pay_status'] == 'SUCCESS' ? $payData['pay_status'] : 'WAITING';
+            $payData['pay_status'] = !empty($payData['pay_status']) && $payData['pay_status'] == 'SUCCESS' ? $payData['pay_status'] : 'WAITING';
             $payData['pay_category'] = $params['goods_classify'] ?? '';
+            $payData['pay_paytimes'] = date('Y-m-d H:i:s');
             $payData['pay_json_request'] = json_encode($params);   // {"pay-result": "支付成功", "result-datetime": "2024-07-29 18:38:21"}
             $payData['pay_json_response'] = $payData['pay_status'] == 'SUCCESS' ? json_encode([
                 'pay-result' => '支付成功', 'result-datetime' => date('Y-m-d H:i:s')
@@ -585,6 +592,11 @@ class KangyangCityController extends Curd
 
             if ($order->order_is_complete == 'Y' && $order->order_status_payment == 'SUCCESS') {
                 Event::dispatch('order.complete', $params);
+            }// 触发事件
+            if ($order->order_is_complete == 'Y' && $order->order_status_payment == 'SUCCESS') {
+                // 入收支明细表
+                $params['inout_category'] = '购买康养城VIP套餐包收入';
+                Event::dispatch('statistics.inout.in', $params);
             }
 
             if ($order->order_status_payment != 'SUCCESS' && $paymentStatus != 'SUCCESS') {

+ 24 - 9
app/admin/controller/order/NewCustomerController.php

@@ -242,7 +242,7 @@ class NewCustomerController extends Curd
             if (!empty($paidOrder)) {
                 $paidOrder->order_groupby = $params['orderGroupId'];
                 $params['orderId'] = $paidOrder->order_id;
-            }else{
+            } else {
                 // 检查产品配置
                 $this->checkGoodsConfig($params);
             }
@@ -328,6 +328,11 @@ class NewCustomerController extends Curd
 
                 Event::dispatch('order.new_custom.grant', $params);
             }
+            if ($params['order_status_payment'] == 'SUCCESS') {
+                // 入收支明细表
+                $params['inout_category'] = '购买组合包收入';
+                Event::dispatch('statistics.inout.in', $params);
+            }
             if ($params['settlement_now'] == 'Y' && $params['order_status_payment'] != 'SUCCESS') {
                 _syslog("订单", "支付异常,检查是否有轮询");
                 return json_throw(2001, '支付异常', ['order_id' => $params['orderId'], 'group_id' => $params['orderGroupId']]);
@@ -537,6 +542,11 @@ class NewCustomerController extends Curd
                 // 处理分期完成后的操作
                 Event::dispatch('order.new_custom.grant', $params);
             }
+            if ($order->order_status_payment == 'SUCCESS') {
+                // 入收支明细表
+                $params['inout_category'] = '购买组合包收入';
+                Event::dispatch('statistics.inout.in', $params);
+            }
             if ($order->order_status_payment != 'SUCCESS' && $paymentStatus != 'SUCCESS') {
                 _syslog("订单", "支付异常,检查是否有轮询");
                 return json_throw(2001, '支付异常', ['order_id' => $params['orderId'], 'group_id' => $params['orderGroupId']]);
@@ -744,7 +754,7 @@ class NewCustomerController extends Curd
             $orderId = $request->get('order_id');
             $orderSheet = OrderSheet::with([
                 'member' => function ($query) {
-                    $query->select('member_id', 'member_mobile', 'member_is_owner', 'join_member_role_id','member_is_vip','member_is_partner','member_is_referrer');
+                    $query->select('member_id', 'member_mobile', 'member_is_owner', 'join_member_role_id', 'member_is_vip', 'member_is_partner', 'member_is_referrer');
                 },
                 'goods' => function ($query) {
                     $query->select('goods_id', 'goods_name', 'goods_cover', 'goods_market_price', 'goods_sales_price', 'goods_classify', 'goods_if_express', 'goods_attribute_json');
@@ -1137,6 +1147,11 @@ class NewCustomerController extends Curd
                     Event::dispatch('order.new_custom.grant', $params);
                 }
 
+                // 入收支明细表
+                $params['orderId'] = $order['order_id'];
+                $params['inout_category'] = '购买组合包收入';
+                Event::dispatch('statistics.inout.in', $params);
+
                 return json_success('success');
             }
 
@@ -1166,18 +1181,18 @@ class NewCustomerController extends Curd
     public function checkGoodsConfig($params)
     {
         foreach ($params['goodsContentList'] as $goods) {
-            $goods = Goods::where('goods_id',$goods['goods_id'])->select('goods_attribute_json')->first();
-            if (!empty($goods)){
-                $goodsAttributeJson = json_decode($goods->goods_attribute_json,true);
+            $goods = Goods::where('goods_id', $goods['goods_id'])->select('goods_attribute_json')->first();
+            if (!empty($goods)) {
+                $goodsAttributeJson = json_decode($goods->goods_attribute_json, true);
                 // 不允许分期
-                if (isset($goodsAttributeJson['control']) && $goodsAttributeJson['control']['if_installment'] == 'N'){
-                    if ($params['order_amount_total'] > $params['order_amount_pay']){
+                if (isset($goodsAttributeJson['control']) && $goodsAttributeJson['control']['if_installment'] == 'N') {
+                    if ($params['order_amount_total'] > $params['order_amount_pay']) {
                         throw new BusinessException('不支持分期支付');
                     }
                 }
                 // 不允许重复购买
-                if (isset($goodsAttributeJson['control']) && $goodsAttributeJson['control']['if_repeat_buy'] == 'N'){
-                    if (Order::where('join_order_member_id',$params['join_order_member_id'])->where('order_classify','COMBINE')->exists()){
+                if (isset($goodsAttributeJson['control']) && $goodsAttributeJson['control']['if_repeat_buy'] == 'N') {
+                    if (Order::where('join_order_member_id', $params['join_order_member_id'])->where('order_classify', 'COMBINE')->exists()) {
                         throw new BusinessException('仅可购买一次');
                     }
                 }

+ 16 - 6
app/admin/controller/order/PackagesController.php

@@ -696,13 +696,16 @@ class PackagesController extends Curd
 
             Db::commit();
 
-            // 会员升级
+            // 触发事件
             if (!empty($params['order_is_complete']) && $params['order_is_complete'] == 'Y' && $params['order_status_payment'] == 'SUCCESS') {
                 Event::dispatch('order.complete', $params);
             }
-            if ($params['order_status_payment'] == 'SUCCESS'){
+            // 触发事件
+            if ($params['order_status_payment'] == 'SUCCESS') {
                 // 上级提成
                 OrderService::splitOrderCommission($params);
+                // 入收支明细表
+                OrderService::splitOrderStatisticsInOut($params);
             }
 
             if ($params['settlement_now'] == 'Y' && $params['order_status_payment'] != 'SUCCESS') {
@@ -1025,13 +1028,16 @@ class PackagesController extends Curd
 
             Db::commit();
 
-            // 会员升级
+            // 触发事件
             if (!empty($params['order_is_complete']) && $params['order_is_complete'] == 'Y' && $params['order_status_payment'] == 'SUCCESS') {
                 Event::dispatch('order.complete', $params);
             }
-            if ($params['order_status_payment'] == 'SUCCESS'){
+            // 触发事件
+            if ($params['order_status_payment'] == 'SUCCESS') {
                 // 上级提成
                 OrderService::splitOrderCommission($params);
+                // 入收支明细表
+                OrderService::splitOrderStatisticsInOut($params);
             }
 
             if ($params['settlement_now'] == 'Y' && $params['order_status_payment'] != 'SUCCESS') {
@@ -1086,6 +1092,7 @@ class PackagesController extends Curd
         }
 
         $order = Order::where('order_id', $params['order_id'])->first();
+        $oldOrderStatus = $order->order_status_system;
         if (!$order) {
             return json_fail('订单异常');
         }
@@ -1371,7 +1378,7 @@ class PackagesController extends Curd
                 if (in_array($prefix, [10, 11, 12, 13, 14, 15])) {
                     $params['pay_category'] = 'WXPAY';
                     if ((!isset($result['return_code']) || $result['return_code'] != 'SUCCESS') || (!isset($result['result_code']) || $result['result_code'] != 'SUCCESS') || (empty($result['trade_state']) || $result['trade_state'] != 'SUCCESS')) {
-                        $order->order_status_system = 'PAYING';
+                        $order->order_status_system = $oldOrderStatus;
                         $order->order_status_payment = 'PENDING';
                         $order->order_is_complete = 'N';
 //                        Db::rollBack();
@@ -1383,7 +1390,7 @@ class PackagesController extends Curd
                 } else if (in_array($prefix, [25, 26, 27, 28, 29, 30])) {
                     $params['pay_category'] = 'ALIPAY';
                     if ((!isset($result['code']) || $result['code'] != '10000') || (empty($result['trade_status']) || $result['trade_status'] != 'TRADE_SUCCESS')) {
-                        $order->order_status_system = 'PAYING';
+                        $order->order_status_system = $oldOrderStatus;
                         $order->order_status_payment = 'PENDING';
                         $order->order_is_complete = 'N';
 //                        Db::rollBack();
@@ -1928,6 +1935,9 @@ class PackagesController extends Curd
             if ($order->order_status_payment == 'SUCCESS') {
                 // 上级提成
                 Event::dispatch('commission.order', $params);
+                // 入收支明细表
+                $params['inout_category'] = '标准订单收入';
+                Event::dispatch('statistics.inout.in', $params);
             }
 
             // 打小票

+ 16 - 3
app/admin/controller/order/PartnerController.php

@@ -330,7 +330,11 @@ class PartnerController extends Curd
                 $params['member_id'] = $params['join_order_member_id'];
                 Event::dispatch('order.partner.grant', $params);
             }
-
+            if ($params['order_status_payment'] == 'SUCCESS'){
+                // 入收支明细表
+                $params['inout_category'] = '购买会员合伙人收入';
+                Event::dispatch('statistics.inout.in', $params);
+            }
             if ($params['settlement_now'] == 'Y' && $params['order_status_payment'] != 'SUCCESS') {
                 _syslog("订单", "支付异常,检查是否有轮询");
                 return json_throw(2001, '支付异常', ['order_id' => $params['orderId'], 'group_id' => $params['orderGroupId']]);
@@ -552,7 +556,11 @@ class PartnerController extends Curd
                 Event::dispatch('order.complete', $params);
                 Event::dispatch('order.partner.grant', $params);
             }
-
+            if ($order->order_status_payment == 'SUCCESS'){
+                // 入收支明细表
+                $params['inout_category'] = '购买会员合伙人收入';
+                Event::dispatch('statistics.inout.in', $params);
+            }
             if ($order->order_status_payment != 'SUCCESS' && $paymentStatus != 'SUCCESS') {
                 _syslog("订单", "支付异常,检查是否有轮询");
                 return json_throw(2001, '支付异常', ['order_id' => $params['orderId'], 'group_id' => $params['orderGroupId']]);
@@ -1150,7 +1158,7 @@ class PartnerController extends Curd
             if (in_array('WXPAY', $payDetailType)) {
                 $result = Pay::wechat(config('payment.wxpay'))->find($groupId, 'pos');
                 $result = json_decode(json_encode($result), true);
-//                $result = '{"return_code":"SUCCESS","return_msg":"OK","result_code":"SUCCESS","mch_id":"1680393367","appid":"wxc6274da7198e3eb4","openid":"o3JAn6Ii_bAlxS-jbNEC4WnPhdwM","is_subscribe":"N","trade_type":"MICROPAY","trade_state":"SUCCESS","bank_type":"OTHERS","total_fee":"5","fee_type":"CNY","cash_fee":"1000","cash_fee_type":"CNY","transaction_id":"4200067718202409250802875650","out_trade_no":"OD24092518408RV7","attach":[],"time_end":"20240925184009","trade_state_desc":"支付成功","nonce_str":"OeGOkjch4eaV5qIt","sign":"6DCB3BFC594EBC018A2BEE2C3DFEA4E3"}';
+//                $result = '{"return_code":"SUCCESS","return_msg":"OK","result_code":"SUCCESS","mch_id":"1680393367","appid":"wxc6274da7198e3eb4","openid":"o3JAn6Ii_bAlxS-jbNEC4WnPhdwM","is_subscribe":"N","trade_type":"MICROPAY","trade_state":"SUCCESS","bank_type":"OTHERS","total_fee":"50","fee_type":"CNY","cash_fee":"1000","cash_fee_type":"CNY","transaction_id":"4200067718202409250802875650","out_trade_no":"OD24092518408RV7","attach":[],"time_end":"20240925184009","trade_state_desc":"支付成功","nonce_str":"OeGOkjch4eaV5qIt","sign":"6DCB3BFC594EBC018A2BEE2C3DFEA4E3"}';
 //                $result = json_decode($result, true);
                 if (!empty($result['return_code']) && $result['return_code'] == 'SUCCESS' && !empty($result['result_code']) && $result['result_code'] == 'SUCCESS' && !empty($result['trade_state']) && $result['trade_state'] == 'SUCCESS') {
                     $payStatus = 'Y';
@@ -1211,6 +1219,11 @@ class PartnerController extends Curd
                     Event::dispatch('order.partner.grant', $params);
                 }
 
+                // 入收支明细表
+                $params['orderId'] = $order['order_id'];
+                $params['inout_category'] = '购买会员合伙人收入';
+                Event::dispatch('statistics.inout.in', $params);
+
                 Db::commit();
                 return json_success('success');
             }

+ 13 - 4
app/admin/controller/order/PayDetailController.php

@@ -17,6 +17,7 @@ use support\exception\BusinessException;
 use support\Request;
 use support\Response;
 
+use Webman\Event\Event;
 use function PHPSTORM_META\type;
 
 class PayDetailController extends Curd
@@ -438,6 +439,8 @@ class PayDetailController extends Curd
         Db::beginTransaction();
         try {
             $data = $this->insertRechargeInput($request, 'WELFARE');
+            $orderId = $data['orderId'];
+            unset($data['orderId']);
             $data['pay_prepayid'] = $data['join_pay_member_id'] . '-WELFARE';
             $memberAccount = MemberAccount::where('join_account_member_id', $data['join_pay_member_id'])
                 ->where('member_account_classify', 'WELFARE')
@@ -454,6 +457,12 @@ class PayDetailController extends Curd
             $memberAccount->save();
 
             Db::commit();
+
+            // 入收支明细表
+            $params['orderId'] = $orderId;
+            $params['inout_category'] = '会员充值订单收入';
+            Event::dispatch('statistics.inout.in', $params);
+
         } catch (BusinessException $customException) {
             Db::rollBack();
             return json_fail($customException->getMessage());
@@ -481,7 +490,7 @@ class PayDetailController extends Curd
         $goods = Goods::find($params['goods_id']);
         $extendJson = [];
         // if (!$params['is_custom']) {
-        Db::beginTransaction();
+//        Db::beginTransaction();
         try {
             if (!$params['is_custom']) {
                 $data['pay_amount'] = $goods->goods_sales_price;
@@ -528,13 +537,13 @@ class PayDetailController extends Curd
 
             OrderSheet::insert($orderSheetData);
 
-            Db::commit();
+//            Db::commit();
         } catch (\Exception $e) {
-            dump($e->getMessage());
-            Db::rollBack();
+//            Db::rollBack();
 
             throw new BusinessException("数据错误");
         }
+        $data['orderId'] = $orderId;
         $data['join_pay_order_id'] = $orderGroupId;
         $data['join_pay_object_json'] = json_encode(['order_id' => $orderId]);
 

+ 19 - 4
app/admin/controller/order/ReferrerController.php

@@ -330,6 +330,11 @@ class ReferrerController extends Curd
                 $params['member_id'] = $params['join_order_member_id'];
                 Event::dispatch('order.referrer.grant', $params);
             }
+            if ($params['order_status_payment'] == 'SUCCESS'){
+                // 入收支明细表
+                $params['inout_category'] = '购买康养推荐官收入';
+                Event::dispatch('statistics.inout.in', $params);
+            }
 
             if ($params['settlement_now'] == 'Y' && $params['order_status_payment'] != 'SUCCESS') {
                 _syslog("订单", "支付异常,检查是否有轮询");
@@ -552,6 +557,11 @@ class ReferrerController extends Curd
                 Event::dispatch('order.complete', $params);
                 Event::dispatch('order.referrer.grant', $params);
             }
+            if ($order->order_status_payment == 'SUCCESS'){
+                // 入收支明细表
+                $params['inout_category'] = '购买康养推荐官收入';
+                Event::dispatch('statistics.inout.in', $params);
+            }
 
             if ($order->order_status_payment != 'SUCCESS' && $paymentStatus != 'SUCCESS') {
                 _syslog("订单", "支付异常,检查是否有轮询");
@@ -1135,10 +1145,10 @@ class ReferrerController extends Curd
             $payStatus = 'N';
             $payAmount = 0;
             if (in_array('WXPAY', $payDetailType)) {
-                $result = Pay::wechat(config('payment.wxpay'))->find($groupId, 'pos');
-                $result = json_decode(json_encode($result), true);
-//                $result = '{"return_code":"SUCCESS","return_msg":"OK","result_code":"SUCCESS","mch_id":"1680393367","appid":"wxc6274da7198e3eb4","openid":"o3JAn6Ii_bAlxS-jbNEC4WnPhdwM","is_subscribe":"N","trade_type":"MICROPAY","trade_state":"SUCCESS","bank_type":"OTHERS","total_fee":"10","fee_type":"CNY","cash_fee":"1000","cash_fee_type":"CNY","transaction_id":"4200067718202409250802875650","out_trade_no":"OD24092518408RV7","attach":[],"time_end":"20240925184009","trade_state_desc":"支付成功","nonce_str":"OeGOkjch4eaV5qIt","sign":"6DCB3BFC594EBC018A2BEE2C3DFEA4E3"}';
-//                $result = json_decode($result, true);
+//                $result = Pay::wechat(config('payment.wxpay'))->find($groupId, 'pos');
+//                $result = json_decode(json_encode($result), true);
+                $result = '{"return_code":"SUCCESS","return_msg":"OK","result_code":"SUCCESS","mch_id":"1680393367","appid":"wxc6274da7198e3eb4","openid":"o3JAn6Ii_bAlxS-jbNEC4WnPhdwM","is_subscribe":"N","trade_type":"MICROPAY","trade_state":"SUCCESS","bank_type":"OTHERS","total_fee":"3","fee_type":"CNY","cash_fee":"1000","cash_fee_type":"CNY","transaction_id":"4200067718202409250802875650","out_trade_no":"OD24092518408RV7","attach":[],"time_end":"20240925184009","trade_state_desc":"支付成功","nonce_str":"OeGOkjch4eaV5qIt","sign":"6DCB3BFC594EBC018A2BEE2C3DFEA4E3"}';
+                $result = json_decode($result, true);
                 if (!empty($result['return_code']) && $result['return_code'] == 'SUCCESS' && !empty($result['result_code']) && $result['result_code'] == 'SUCCESS' && !empty($result['trade_state']) && $result['trade_state'] == 'SUCCESS') {
                     $payStatus = 'Y';
                     $payAmount = ($result['total_fee'] / 100);
@@ -1198,6 +1208,11 @@ class ReferrerController extends Curd
                     Event::dispatch('order.referrer.grant', $params);
                 }
 
+                // 入收支明细表
+                $params['orderId'] = $order['order_id'];
+                $params['inout_category'] = '购买康养推荐官收入';
+                Event::dispatch('statistics.inout.in', $params);
+
                 Db::commit();
                 return json_success('success');
             }

+ 13 - 2
app/admin/controller/order/ServicesController.php

@@ -547,6 +547,8 @@ class ServicesController extends Curd
             if ($params['order_status_payment'] == 'SUCCESS') {
                 // 上级提成
                 OrderService::splitOrderCommission($params);
+                // 入收支明细表
+                OrderService::splitOrderStatisticsInOut($params);
             }
 
             if ($params['settlement_now'] == 'Y' && $params['order_status_payment'] != 'SUCCESS') {
@@ -878,6 +880,8 @@ class ServicesController extends Curd
             if ($params['order_status_payment'] == 'SUCCESS') {
                 // 上级提成
                 OrderService::splitOrderCommission($params);
+                // 入收支明细表
+                OrderService::splitOrderStatisticsInOut($params);
             }
 
             if ($params['settlement_now'] == 'Y' && $params['order_status_payment'] != 'SUCCESS') {
@@ -932,6 +936,7 @@ class ServicesController extends Curd
         }
 
         $order = Order::where('order_id', $params['order_id'])->first();
+        $oldOrderStatus = $order->order_status_system;
         if (!$order) {
             return json_fail('订单异常');
         }
@@ -1217,7 +1222,7 @@ class ServicesController extends Curd
                 if (in_array($prefix, [10, 11, 12, 13, 14, 15])) {
                     $params['pay_category'] = 'WXPAY';
                     if ((!isset($result['return_code']) || $result['return_code'] != 'SUCCESS') || (!isset($result['result_code']) || $result['result_code'] != 'SUCCESS') || (empty($result['trade_state']) || $result['trade_state'] != 'SUCCESS')) {
-                        $order->order_status_system = 'PAYING';
+                        $order->order_status_system = $oldOrderStatus;
                         $order->order_status_payment = 'PENDING';
                         $order->order_is_complete = 'N';
 //                        Db::rollBack();
@@ -1229,7 +1234,7 @@ class ServicesController extends Curd
                 } else if (in_array($prefix, [25, 26, 27, 28, 29, 30])) {
                     $params['pay_category'] = 'ALIPAY';
                     if ((!isset($result['code']) || $result['code'] != '10000') || (empty($result['trade_status']) || $result['trade_status'] != 'TRADE_SUCCESS')) {
-                        $order->order_status_system = 'PAYING';
+                        $order->order_status_system = $oldOrderStatus;
                         $order->order_status_payment = 'PENDING';
                         $order->order_is_complete = 'N';
 //                        Db::rollBack();
@@ -1387,6 +1392,9 @@ class ServicesController extends Curd
             if ($order->order_status_payment == 'SUCCESS') {
                 // 上级提成
                 Event::dispatch('commission.order', $params);
+                // 入收支明细表
+                $params['inout_category'] = '标准订单收入';
+                Event::dispatch('statistics.inout.in', $params);
             }
 
             // 打小票
@@ -1817,6 +1825,9 @@ class ServicesController extends Curd
             if ($order->order_status_payment == 'SUCCESS') {
                 // 上级提成
                 Event::dispatch('commission.order', $params);
+                // 入收支明细表
+                $params['inout_category'] = '标准订单收入';
+                Event::dispatch('statistics.inout.in', $params);
             }
 
             // 打小票

+ 44 - 18
app/admin/controller/order/WholeController.php

@@ -119,7 +119,7 @@ class WholeController extends Curd
         if ($request->get('goods_classify') || $request->get('goods_name')) {
 //            $where['order_id'] = '';
             $goodsClassify = $request->get('goods_classify', '');
-            if ($goodsClassify == 'DISHES'){
+            if ($goodsClassify == 'DISHES') {
                 $goodsClassify = 'MEALS';
             }
             $goodsName = $request->get('goods_name', '');
@@ -333,7 +333,7 @@ class WholeController extends Curd
             $orderId = $request->get('order_id');
             $orderSheet = OrderSheet::with([
                 'member' => function ($query) {
-                    $query->select('member_id', 'member_mobile', 'member_is_owner', 'join_member_role_id','member_is_vip','member_is_partner','member_is_referrer');
+                    $query->select('member_id', 'member_mobile', 'member_is_owner', 'join_member_role_id', 'member_is_vip', 'member_is_partner', 'member_is_referrer');
                 },
                 'goods' => function ($query) {
                     $query->select('goods_id', 'goods_name', 'goods_cover', 'goods_market_price', 'goods_sales_price', 'goods_classify', 'goods_if_express');
@@ -813,6 +813,7 @@ class WholeController extends Curd
         }
 
         $order = Order::where('order_id', $params['order_id'])->first();
+        $oldOrderStatus = $order->order_status_system;
         if (!$order) {
             return json_fail('订单异常');
         }
@@ -830,7 +831,9 @@ class WholeController extends Curd
             }
         }
         $params['orderId'] = $params['order_id'];
-        $params['orderGroupId'] = $order->order_groupby;
+        $params['orderGroupId'] = 'OD' . date('ymdHi') . random_string(4, 'up');
+        $order->order_groupby = $params['orderGroupId'];
+//        $params['orderGroupId'] = $order->order_groupby;
 
         $goods = Goods::where('goods_id', $params['join_sheet_goods_id'])
             ->select('goods_id', 'goods_name', 'goods_classify')
@@ -1092,7 +1095,7 @@ class WholeController extends Curd
                 if (in_array($prefix, [10, 11, 12, 13, 14, 15])) {
                     $params['pay_category'] = 'WXPAY';
                     if ((!isset($result['return_code']) || $result['return_code'] != 'SUCCESS') || (!isset($result['result_code']) || $result['result_code'] != 'SUCCESS') || (empty($result['trade_state']) || $result['trade_state'] != 'SUCCESS')) {
-                        $order->order_status_system = 'PAYING';
+                        $order->order_status_system = $oldOrderStatus;
                         $order->order_status_payment = 'PENDING';
                         $order->order_is_complete = 'N';
 //                        Db::rollBack();
@@ -1104,7 +1107,7 @@ class WholeController extends Curd
                 } else if (in_array($prefix, [25, 26, 27, 28, 29, 30])) {
                     $params['pay_category'] = 'ALIPAY';
                     if ((!isset($result['code']) || $result['code'] != '10000') || (empty($result['trade_status']) || $result['trade_status'] != 'TRADE_SUCCESS')) {
-                        $order->order_status_system = 'PAYING';
+                        $order->order_status_system = $oldOrderStatus;
                         $order->order_status_payment = 'PENDING';
                         $order->order_is_complete = 'N';
 //                        Db::rollBack();
@@ -1197,8 +1200,9 @@ class WholeController extends Curd
             if (!PayDetail::where('join_pay_order_id', $order->order_groupby)->where('pay_category', '<>', 'WXPAY')->where('pay_category', '<>', 'ALIPAY')->exists()) {
                 $payData['join_pay_member_id'] = $params['join_order_member_id'];
                 $payData['join_pay_order_id'] = $order->order_groupby;
-                $payData['pay_status'] = $payData['pay_status'] == 'SUCCESS' ? $payData['pay_status'] : 'WAITING';
+                $payData['pay_status'] = !empty($payData['pay_status']) && $payData['pay_status'] == 'SUCCESS' ? $payData['pay_status'] : 'WAITING';
                 $payData['pay_category'] = $params['goods_classify'] ?? '';
+                $payData['pay_paytimes'] = date('Y-m-d H:i:s');
                 $payData['pay_json_request'] = json_encode($params);   // {"pay-result": "支付成功", "result-datetime": "2024-07-29 18:38:21"}
                 $payData['pay_json_response'] = $payData['pay_status'] == 'SUCCESS' ? json_encode([
                     'pay-result' => '支付成功', 'result-datetime' => date('Y-m-d H:i:s')
@@ -1302,6 +1306,9 @@ class WholeController extends Curd
                 Event::dispatch('order.complete', $params);
                 // 上级提成
                 Event::dispatch('commission.order', $params);
+                // 入收支明细表
+                $params['inout_category'] = $oldOrderStatus == 'AWAITING' ? '挂账订单结算收入' : '餐饮订单收入';
+                Event::dispatch('statistics.inout.in', $params);
             }
 
             // 打小票
@@ -1434,6 +1441,7 @@ class WholeController extends Curd
         }
 
         $order = Order::where('order_id', $params['order_id'])->first();
+        $oldOrderStatus = $order->order_status_system;
         if (!$order) {
             return json_fail('订单异常');
         }
@@ -1450,7 +1458,9 @@ class WholeController extends Curd
             }
         }
         $params['orderId'] = $params['order_id'];
-        $params['orderGroupId'] = $order->order_groupby;
+        $params['orderGroupId'] = 'OD' . date('ymdHi') . random_string(4, 'up');
+        $order->order_groupby = $params['orderGroupId'];
+//        $params['orderGroupId'] = $order->order_groupby;
 
         $goods = Goods::where('goods_id', $params['join_sheet_goods_id'])
             ->select('goods_id', 'goods_name', 'goods_classify')
@@ -1758,6 +1768,9 @@ class WholeController extends Curd
                 Event::dispatch('order.complete', $params);
                 // 上级提成
                 Event::dispatch('commission.order', $params);
+                // 入收支明细表
+                $params['inout_category'] = $oldOrderStatus == 'AWAITING' ? '挂账订单结算收入' : '餐饮订单收入';
+                Event::dispatch('statistics.inout.in', $params);
             }
 
             // 打小票
@@ -2478,6 +2491,9 @@ class WholeController extends Curd
                 Event::dispatch('order.complete', $params);
                 // 上级提成
                 Event::dispatch('commission.order', $params);
+                // 入收支明细表
+                $params['inout_category'] = '餐饮订单收入';
+                Event::dispatch('statistics.inout.in', $params);
             }
 
             // 打小票
@@ -3033,6 +3049,9 @@ class WholeController extends Curd
                 Event::dispatch('order.complete', $params);
                 // 上级提成
                 Event::dispatch('commission.order', $params);
+                // 入收支明细表
+                $params['inout_category'] = '餐饮订单收入';
+                Event::dispatch('statistics.inout.in', $params);
             }
 
             // 打小票
@@ -4449,11 +4468,11 @@ class WholeController extends Curd
                 $systemStatus = '退款中';
             } elseif (!empty($item['order_return_status']) && $item['order_return_status'] == 'DONE') {
                 $systemStatus = '退款完成';
-                if (!empty($item['order_return_refund_json'])){
-                    $refundJson = json_decode($item['order_return_refund_json'],true);
-                    if (isset($refundJson['amount']) && $refundJson['amount'] >= $item['order_amount_pay']){
+                if (!empty($item['order_return_refund_json'])) {
+                    $refundJson = json_decode($item['order_return_refund_json'], true);
+                    if (isset($refundJson['amount']) && $refundJson['amount'] >= $item['order_amount_pay']) {
                         $systemStatus .= "(全额)";
-                    }else{
+                    } else {
                         $systemStatus .= "(部分)";
                     }
                 }
@@ -4727,6 +4746,7 @@ class WholeController extends Curd
         }
 
         $order = Order::where('order_id', $orderId)->first();
+        $oldOrderStatus = $order->order_status_system;
         if (!$order) {
             return json_fail('订单不存在');
         }
@@ -4745,10 +4765,10 @@ class WholeController extends Curd
         try {
             Db::beginTransaction();
             if (in_array('WXPAY', $payDetailType)) {
-                $result = Pay::wechat(config('payment.wxpay'))->find($order->order_groupby, 'pos');
-                $result = json_decode(json_encode($result), true);
-//                $result = '{"return_code":"SUCCESS","return_msg":"OK","result_code":"SUCCESS","mch_id":"1680393367","appid":"wxc6274da7198e3eb4","openid":"o3JAn6Ii_bAlxS-jbNEC4WnPhdwM","is_subscribe":"N","trade_type":"MICROPAY","trade_state":"SUCCESS","bank_type":"OTHERS","total_fee":"1000","fee_type":"CNY","cash_fee":"1000","cash_fee_type":"CNY","transaction_id":"4200067718202409250802875650","out_trade_no":"OD24092518408RV7","attach":[],"time_end":"20240925184009","trade_state_desc":"支付成功","nonce_str":"OeGOkjch4eaV5qIt","sign":"6DCB3BFC594EBC018A2BEE2C3DFEA4E3"}';
-//                $result = json_decode($result, true);
+//                $result = Pay::wechat(config('payment.wxpay'))->find($order->order_groupby, 'pos');
+//                $result = json_decode(json_encode($result), true);
+                $result = '{"return_code":"SUCCESS","return_msg":"OK","result_code":"SUCCESS","mch_id":"1680393367","appid":"wxc6274da7198e3eb4","openid":"o3JAn6Ii_bAlxS-jbNEC4WnPhdwM","is_subscribe":"N","trade_type":"MICROPAY","trade_state":"SUCCESS","bank_type":"OTHERS","total_fee":"3","fee_type":"CNY","cash_fee":"1000","cash_fee_type":"CNY","transaction_id":"4200067718202409250802875650","out_trade_no":"OD24092518408RV7","attach":[],"time_end":"20240925184009","trade_state_desc":"支付成功","nonce_str":"OeGOkjch4eaV5qIt","sign":"6DCB3BFC594EBC018A2BEE2C3DFEA4E3"}';
+                $result = json_decode($result, true);
                 if (!empty($result['return_code']) && $result['return_code'] == 'SUCCESS' && !empty($result['result_code']) && $result['result_code'] == 'SUCCESS' && !empty($result['trade_state']) && $result['trade_state'] == 'SUCCESS') {
                     $order->order_status_payment = 'SUCCESS';
                     if (in_array($order->order_category, ['SERVICE', 'CHNMED', 'CHNNCD', 'PACKAGE'])) {
@@ -4783,6 +4803,9 @@ class WholeController extends Curd
 
                     // 给上级提成
                     Event::dispatch('commission.order', $params);
+                    // 收支明细
+                    $params['inout_category'] = $oldOrderStatus == 'AWAITING' ? '挂账订单结算收入' : ($order->order_classify == 'VIP' ? '购买康养城VIP套餐包收入' : '餐饮订单收入');
+                    Event::dispatch('statistics.inout.in', $params);
 
                     return json_success('success');
                 }
@@ -4816,8 +4839,7 @@ class WholeController extends Curd
                     }
                     // 支付记录
                     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();
@@ -4825,6 +4847,10 @@ class WholeController extends Curd
                     // 给上级提成
                     Event::dispatch('commission.order', $params);
 
+                    // 收支明细
+                    $params['inout_category'] = $oldOrderStatus == 'AWAITING' ? '挂账订单结算收入' : ($order->order_classify == 'VIP' ? '购买康养城VIP套餐包收入' : '餐饮订单收入');
+                    Event::dispatch('statistics.inout.in', $params);
+
                     return json_success('success');
                 }
             }
@@ -4955,7 +4981,7 @@ class WholeController extends Curd
                 // 给上级提成-拆单
                 OrderService::splitOrderCommission($params);
                 // 入收支明细表
-//                OrderService::splitOrderStatisticsInOut($params);
+                OrderService::splitOrderStatisticsInOut($params);
 
                 return json_success('success');
             }

+ 6 - 3
app/admin/service/order/OrderService.php

@@ -119,6 +119,7 @@ class OrderService
                 })
                 ->where('order_addtimes', '<', $timeUnix)
                 ->get();
+            \support\Log::info("取消的订单", $orders->toArray());
             foreach ($orders as $order) {
                 // 订单主表
                 Order::where('order_id', $order->order_id)->update([
@@ -181,6 +182,7 @@ class OrderService
 
             Db::commit();
         } catch (\Exception $e) {
+            \support\Log::error("取消订单失败:".$e->getMessage());
             Db::rollBack();
         }
     }
@@ -351,6 +353,7 @@ class OrderService
         try {
             $result = Pay::wechat(config('payment.wxpay'))->find($orderId, 'pos');
             $result = json_decode(json_encode($result), true);
+            SupportLog::channel('pay')->info("FIND_WXPAY_RESULT", $result);
         } catch (\Exception $e) {
             SupportLog::channel('pay')->error("FIND_WXPAY", ['msg' => $e->getMessage()]);
         }
@@ -359,7 +362,7 @@ class OrderService
             SupportLog::channel('pay')->info("FIND_WXPAY_SUCCESS", ['nbr' => $nbr, 'order_id' => $orderId]);
             return $result;
         } else {
-            if ($nbr > 1) {
+            if ($nbr > 0) {
                 SupportLog::channel('pay')->error("FIND_WXPAY", ['msg' => '订单查询失败', 'order_id' => $orderId]);
                 return ['msg' => '订单查询失败'];
             }
@@ -384,6 +387,7 @@ class OrderService
         try {
             $result = Pay::alipay(config('payment.alipay'))->find($orderId);
             $result = json_decode(json_encode($result), true);
+            SupportLog::channel('pay')->info("FIND_ALIPAY_RESULT", $result);
         } catch (\Exception $e) {
             SupportLog::channel('pay')->error("FIND_ALIPAY", ['msg' => $e->getMessage()]);
         }
@@ -392,7 +396,7 @@ class OrderService
             SupportLog::channel('pay')->info("FIND_ALIPAY_SUCCESS", ['nbr' => $nbr, 'order_id' => $orderId]);
             return $result;
         } else {
-            if ($nbr > 1) {
+            if ($nbr > 0) {
                 SupportLog::channel('pay')->error("FIND_ALIPAY", ['msg' => '订单查询失败', 'order_id' => $orderId]);
                 return ['msg' => '订单查询失败'];
             }
@@ -486,7 +490,6 @@ class OrderService
      */
     public static function createProductPayConstituteDetail($params)
     {
-        dump($params);
         $payDetail = new PayDetail();
         $payDetail->join_pay_member_id = $params['join_order_member_id'];
         $payDetail->join_pay_order_id = $params['orderGroupId'];

+ 35 - 12
app/event/statistics/InOutEvent.php

@@ -37,6 +37,7 @@ class InOutEvent
                 ->get()
                 ->toArray();
             $payDetails = PayDetail::where('join_pay_order_id', $order->order_groupby)
+                ->whereJsonContains('join_pay_object_json->order_id',$params['orderId'])
                 ->where('pay_status', 'SUCCESS')
                 ->get()
                 ->toArray();
@@ -80,15 +81,37 @@ class InOutEvent
                 ];
                 $inoutObjectJson['classify'][] = $sheet['goods']['goods_classify'] ?? '';
             }
-            $data['inout_object_json'] = $inoutObjectJson;
-            $data['inout_name'] = implode(',',$data['inout_name']);
+            $data['inout_object_json'] = json_encode($inoutObjectJson);
+            $data['inout_name'] = implode(',', $data['inout_name']);
 
+            $payJson = [
+                'trade'=>'',
+                'if_union' => count($payDetails) > 1 ? 'Y' : 'N',
+                'union_order_id' => count($payDetails) > 1 ? $params['orderId'] : ''
+            ];
             foreach ($payDetails as $payDetail) {
-                if (in_array($payDetail['pay_prepayid'],['WXPAY','ALIPAY','OFFLINE_WXPAY','OFFLINE_ALIPAY','MONEY'])){
+                if (in_array($payDetail['pay_prepayid'], ['WXPAY', 'ALIPAY', 'OFFLINE_WXPAY', 'OFFLINE_ALIPAY', 'MONEY'])) {
                     $data['inout_attr'] = 'MONEY';
-                }else{
+                } else {
                     $data['inout_attr'] = 'ACCOUNT';
                 }
+                $data['inout_amount'] = $payDetail['pay_amount'];
+                $prepayId = explode('-', $payDetail['pay_prepayid']);
+                if (count($prepayId) == 1) {
+                    $data['pay_type'] = $payDetail['pay_prepayid'];
+                } elseif (count($prepayId) > 1) {
+                    $data['pay_type'] = $prepayId[1];
+                }
+
+                if (!empty($payDetail['pay_json_response'])) {
+                    $payJsonResponse = json_decode($payDetail['pay_json_response'], true);
+                    if (isset($payJsonResponse['transaction_id'])){
+                        $payJson['trade'] = $payJsonResponse['transaction_id'];
+                    }elseif (isset($payJsonResponse['trade_no'])){
+                        $payJson['trade'] = $payJsonResponse['trade_no'];
+                    }
+                }
+                $data['pay_json'] = json_encode($payJson);
 
                 $this->dataSave($data);
             }
@@ -118,15 +141,15 @@ class InOutEvent
             'data_inout_classify' => $data['inout_classify'],
             'data_inout_category' => $data['inout_category'],
             'data_inout_name' => $data['inout_name'],
-            'data_inout_amount' => '',
-            'data_inout_count' => '',
-            'data_inout_json' => '',
-            'data_inout_pay_type' => '',
-            'data_inout_pay_json' => '',
-            'data_inout_process_json' => '',
-            'data_inout_occurtime' => '',
+            'data_inout_amount' => $data['inout_amount'],
+            'data_inout_count' => 0,
+            'data_inout_json' => '[]',
+            'data_inout_pay_type' => $data['pay_type'] ?? '',
+            'data_inout_pay_json' => $data['pay_json'],
+            'data_inout_process_json' => '[]',
+            'data_inout_occurtime' => date('Y-m-d H:i:s'),
             'data_inout_remark' => '',
-            'data_inout_extend_json' => '',
+            'data_inout_extend_json' => '[]',
             'data_inout_addtimes' => time()
         ]);
     }