From fb5af6e716ca0e4a4741a50fefbf39b3949a0159 Mon Sep 17 00:00:00 2001 From: luofei <604446095@qq.com> Date: Fri, 26 May 2023 16:07:11 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E8=B0=83=E8=AF=95=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E6=89=8B=E7=BB=AD=E8=B4=B9=E5=88=86=E6=B6=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/StoreRefundOrderRepository.php | 3 + .../system/merchant/MerchantRepository.php | 2 +- app/listener/AfterRefund.php | 68 +++++++++++++++++++ crmeb/jobs/AutoMarginJob.php | 1 + 4 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 app/listener/AfterRefund.php diff --git a/app/common/repositories/store/order/StoreRefundOrderRepository.php b/app/common/repositories/store/order/StoreRefundOrderRepository.php index 523acd0e..5d014f67 100644 --- a/app/common/repositories/store/order/StoreRefundOrderRepository.php +++ b/app/common/repositories/store/order/StoreRefundOrderRepository.php @@ -1293,6 +1293,9 @@ class StoreRefundOrderRepository extends BaseRepository 'financial_type' => 'refund_charge', 'number' => $refundRate, ], $res->mer_id); + + event('refund.after', compact('id', 'res')); + return $res; } diff --git a/app/common/repositories/system/merchant/MerchantRepository.php b/app/common/repositories/system/merchant/MerchantRepository.php index 27492c7b..13c2f6be 100644 --- a/app/common/repositories/system/merchant/MerchantRepository.php +++ b/app/common/repositories/system/merchant/MerchantRepository.php @@ -691,7 +691,7 @@ class MerchantRepository extends BaseRepository 'mer_id' => $this->merId, 'financial_record_sn' => $financeSn . $index ]; - Queue::push(AutoMarginJob::class, ['merId' => $this->merId, 'margin' => $margin]); + Queue::push(AutoMarginJob::class, ['merId' => $this->merId, 'margin' => $margin, 'orderId' => $order['order_id']]); return [$income, $finance, true]; } diff --git a/app/listener/AfterRefund.php b/app/listener/AfterRefund.php new file mode 100644 index 00000000..fcc6123f --- /dev/null +++ b/app/listener/AfterRefund.php @@ -0,0 +1,68 @@ +refundOrder = $event['res']; + $financialRecords = FinancialRecord::getInstance()->where('order_id', $this->refundOrder['order_id'])->select(); + foreach ($financialRecords as $financialRecord) { + if (in_array($financialRecord['financial_type'], ['commission_to_cloud_warehouse', 'commission_to_entry_merchant', 'commission_to_service_team', 'commission_to_village', 'commission_to_town', ])) { + //佣金类型的退还佣金 + $this->subMoney($financialRecord); + $this->saveFinanceRecord($financialRecord); + } + if ($financialRecord['financial_type'] == 'auto_margin') { + //佣金类型的扣除保证金 + ServeOrder::getInstance()->where('id', $financialRecord['order_id'])->update(['is_del' => 1]); + $merchant = app()->make(MerchantDao::class)->get($financialRecord['mer_id']); + $merchant->paid_margin = max(bcsub($merchant['paid_margin'], $financialRecord['number'], 2), 0); + $merchant->ot_margin = $merchant->paid_margin; + if ($merchant->paid_margin <= 0) { + $merchant->is_margin = MerchantRepository::NeedMargin; + } + $merchant->save(); + $this->saveFinanceRecord($financialRecord); + } + } + } + + public function subMoney($financialRecord) + { + /** @var MerchantRepository $merchantRepository */ + $merchantRepository = app()->make(MerchantRepository::class); + $merchantRepository->subLockMoney($financialRecord['mer_id'], 'order', $this->refundOrder['order_id'], (float)$financialRecord['number']); + } + + public function saveFinanceRecord($financialRecord) + { + /** @var FinancialRecordRepository $financialRecordRepository */ + $financialRecordRepository = app()->make(FinancialRecordRepository::class); + $financialRecordRepository->dec([ + 'order_id' => $this->refundOrder->refund_order_id, + 'order_sn' => $this->refundOrder->refund_order_sn, + 'user_info' => $this->refundOrder->user->nickname, + 'user_id' => $this->refundOrder->uid, + 'type' => 1, + 'financial_type' => $financialRecord['financial_type'] . '_refund', + 'number' => $financialRecord['number'], + ], $financialRecord['mer_id']); + } + +} diff --git a/crmeb/jobs/AutoMarginJob.php b/crmeb/jobs/AutoMarginJob.php index 8d757198..98daa4e5 100644 --- a/crmeb/jobs/AutoMarginJob.php +++ b/crmeb/jobs/AutoMarginJob.php @@ -43,6 +43,7 @@ class AutoMarginJob implements JobInterface 'pay_type' => ServeOrderRepository::PAY_TYPE_BALANCE, 'order_info' => json_encode($orderInfo,JSON_UNESCAPED_UNICODE), 'pay_price' => $data['margin'], + 'store_order_id' => $data['orderId'], ]; $values['order_sn'] = app()->make(StoreOrderRepository::class)->getNewOrderId('cs'); $values['pay_time'] = date('y_m-d H:i:s', time()); From 8e27d4bd39d502c360a8c38de34e409772dbf48d Mon Sep 17 00:00:00 2001 From: luofei <604446095@qq.com> Date: Fri, 26 May 2023 16:20:24 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E8=B0=83=E8=AF=95=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E6=89=8B=E7=BB=AD=E8=B4=B9=E5=88=86=E6=B6=A6=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/event.php | 1 + app/listener/AfterRefund.php | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/event.php b/app/event.php index 5d49b7c4..f9f7d132 100644 --- a/app/event.php +++ b/app/event.php @@ -66,6 +66,7 @@ return [ 'order.paySuccessOrder'=>[\app\listener\paySuccessOrder::class], 'product.create'=>[\app\listener\ProductCreate::class], 'product.sell'=>[\app\listener\CloudProduct::class], //商品上下架 + 'refund.after'=>[\app\listener\AfterRefund::class], ], 'subscribe' => [], diff --git a/app/listener/AfterRefund.php b/app/listener/AfterRefund.php index fcc6123f..b434e303 100644 --- a/app/listener/AfterRefund.php +++ b/app/listener/AfterRefund.php @@ -30,7 +30,7 @@ class AfterRefund } if ($financialRecord['financial_type'] == 'auto_margin') { //佣金类型的扣除保证金 - ServeOrder::getInstance()->where('id', $financialRecord['order_id'])->update(['is_del' => 1]); + ServeOrder::getInstance()->where('store_order_id', $financialRecord['order_id'])->update(['is_del' => 1]); $merchant = app()->make(MerchantDao::class)->get($financialRecord['mer_id']); $merchant->paid_margin = max(bcsub($merchant['paid_margin'], $financialRecord['number'], 2), 0); $merchant->ot_margin = $merchant->paid_margin; From ec41ef4e92b68e52efabf93484c3b90f08bd7d97 Mon Sep 17 00:00:00 2001 From: luofei <604446095@qq.com> Date: Fri, 26 May 2023 16:54:35 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E8=B0=83=E8=AF=95=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E6=89=8B=E7=BB=AD=E8=B4=B9=E5=88=86=E6=B6=A6=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/listener/AfterRefund.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/listener/AfterRefund.php b/app/listener/AfterRefund.php index b434e303..50424fcd 100644 --- a/app/listener/AfterRefund.php +++ b/app/listener/AfterRefund.php @@ -9,6 +9,7 @@ use app\common\model\system\merchant\FinancialRecord; use app\common\model\system\serve\ServeOrder; use app\common\repositories\system\merchant\FinancialRecordRepository; use app\common\repositories\system\merchant\MerchantRepository; +use think\facade\Log; /** * 订单退款之后,退佣金 @@ -20,8 +21,10 @@ class AfterRefund public function handle($event) { + Log::info('refundCommissionStart'); $this->refundOrder = $event['res']; $financialRecords = FinancialRecord::getInstance()->where('order_id', $this->refundOrder['order_id'])->select(); + Log::info('refundCommissionCount:' . count($financialRecords)); foreach ($financialRecords as $financialRecord) { if (in_array($financialRecord['financial_type'], ['commission_to_cloud_warehouse', 'commission_to_entry_merchant', 'commission_to_service_team', 'commission_to_village', 'commission_to_town', ])) { //佣金类型的退还佣金 @@ -29,6 +32,7 @@ class AfterRefund $this->saveFinanceRecord($financialRecord); } if ($financialRecord['financial_type'] == 'auto_margin') { + Log::info("refundMargin, mer_id: {$financialRecord['mer_id']}, money: {$financialRecord['number']}"); //佣金类型的扣除保证金 ServeOrder::getInstance()->where('store_order_id', $financialRecord['order_id'])->update(['is_del' => 1]); $merchant = app()->make(MerchantDao::class)->get($financialRecord['mer_id']); @@ -41,10 +45,12 @@ class AfterRefund $this->saveFinanceRecord($financialRecord); } } + Log::info('refundCommissionEnd'); } public function subMoney($financialRecord) { + Log::info("refundCommission, mer_id: {$financialRecord['mer_id']}, money: {$financialRecord['number']}"); /** @var MerchantRepository $merchantRepository */ $merchantRepository = app()->make(MerchantRepository::class); $merchantRepository->subLockMoney($financialRecord['mer_id'], 'order', $this->refundOrder['order_id'], (float)$financialRecord['number']);