From 7f7a57d7a7a8b56e198019cb77867f2a1172bcf2 Mon Sep 17 00:00:00 2001 From: wuhui_zzw <1760308791@qq.com> Date: Wed, 3 Jan 2024 14:37:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E9=80=80=E6=AC=BE?= =?UTF-8?q?=E6=88=90=E5=8A=9F=20-=20=E9=80=80=E5=9B=9E=E6=8A=B5=E6=89=A3?= =?UTF-8?q?=E7=A7=AF=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LegumesLogRepository.php | 34 ++++++++ .../CommissionMerchantsSettlementJob.php | 2 +- .../CommissionPromoterSettlementJob.php | 2 +- .../platformCommission/GiveWeightValueJob.php | 2 +- .../UseLegumesIntegralJob.php | 2 +- .../HandleCommissionMoneyJob.php | 2 +- .../HandleCommissionPartnerMoneyJob.php | 2 +- .../refundOrderHandle/HandleIntegralJob.php | 83 +++++++++++++++++++ .../refundOrderHandle/HandleLegumesJob.php | 2 +- .../HandlePlatformCommissionRecordJob.php | 2 +- .../HandleWeightValueJob.php | 2 +- .../OrderAgreeRefundEvent.php | 15 +++- .../OrderPaySuccessEvent.php | 11 ++- 13 files changed, 147 insertions(+), 14 deletions(-) create mode 100644 app/jobs/store/platformCommission/refundOrderHandle/HandleIntegralJob.php diff --git a/app/common/repositories/store/platformCommission/LegumesLogRepository.php b/app/common/repositories/store/platformCommission/LegumesLogRepository.php index 9f1691c..0b46ca5 100644 --- a/app/common/repositories/store/platformCommission/LegumesLogRepository.php +++ b/app/common/repositories/store/platformCommission/LegumesLogRepository.php @@ -133,6 +133,40 @@ class LegumesLogRepository extends BaseRepository{ return $list; } + /** + * Common: 查询已使用积分的分配信息 尽可能查询需要的信息 + * Author: wu-hui + * Time: 2024/01/03 14:27 + * @param int $uid + * @param float $maxIntegral + * @param int $limit + * @return array + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + */ + public function getUsedList(int $uid,float $maxIntegral,int $limit = 5){ + $model = $this->dao->getSearch([]) + ->field('id,get_integral,use_integral') + ->where('uid', (int)$uid) + ->where('use_integral','>',0) + ->where('status', 1) + ->order('id DESC'); + $count = $model->count(); + $list = $model->limit($limit)->select()->toArray(); + if($count > $limit){ + $totalSurplusIntegral = array_sum(array_column($list,'use_integral')); + if($maxIntegral > $totalSurplusIntegral) { + $limit = $limit + 5; + return $this->getUsedList($uid,$maxIntegral,$limit); + } + } + + return $list; + } + + + /** * Common: 获取用户可用积分 * Author: wu-hui diff --git a/app/jobs/store/platformCommission/CommissionMerchantsSettlementJob.php b/app/jobs/store/platformCommission/CommissionMerchantsSettlementJob.php index e682acb..ddcf2b3 100644 --- a/app/jobs/store/platformCommission/CommissionMerchantsSettlementJob.php +++ b/app/jobs/store/platformCommission/CommissionMerchantsSettlementJob.php @@ -21,7 +21,7 @@ class CommissionMerchantsSettlementJob implements JobInterface{ public function fire($job,$data){ try{ - Log::info('招商员佣金结算 - 开始处理: '.var_export($data,1)); + // Log::info('招商员佣金结算 - 开始处理: '.var_export($data,1)); $list = app()->make(RecordRepository::class) ->getSearch([]) ->field(['id','uid','mer_id','order_id','commission_merchants_money']) diff --git a/app/jobs/store/platformCommission/CommissionPromoterSettlementJob.php b/app/jobs/store/platformCommission/CommissionPromoterSettlementJob.php index 10bceb9..66b2c4f 100644 --- a/app/jobs/store/platformCommission/CommissionPromoterSettlementJob.php +++ b/app/jobs/store/platformCommission/CommissionPromoterSettlementJob.php @@ -21,7 +21,7 @@ class CommissionPromoterSettlementJob implements JobInterface{ public function fire($job,$data){ try{ - Log::info('推广员佣金结算 - 开始处理: '.var_export($data,1)); + // Log::info('推广员佣金结算 - 开始处理: '.var_export($data,1)); $list = app()->make(RecordRepository::class) ->getSearch([]) ->field(['id','uid','mer_id','order_id','commission_promoter_money']) diff --git a/app/jobs/store/platformCommission/GiveWeightValueJob.php b/app/jobs/store/platformCommission/GiveWeightValueJob.php index 341053e..8ee8cc8 100644 --- a/app/jobs/store/platformCommission/GiveWeightValueJob.php +++ b/app/jobs/store/platformCommission/GiveWeightValueJob.php @@ -22,7 +22,7 @@ class GiveWeightValueJob implements JobInterface{ public function fire($job,$data){ try{ - Log::info('下单赠送权重值 - 开始处理: '.var_export($data,1)); + // Log::info('下单赠送权重值 - 开始处理: '.var_export($data,1)); // 获取所有用户的持有信息 $userList = app()->make(WeightValueRepository::class)->getUserHoldList($data['uid']); $orderIds = StoreOrder::where('group_order_id',$data['group_order_id'])->column('order_id');// 获取订单id diff --git a/app/jobs/store/platformCommission/UseLegumesIntegralJob.php b/app/jobs/store/platformCommission/UseLegumesIntegralJob.php index 85afa5d..4e2a075 100644 --- a/app/jobs/store/platformCommission/UseLegumesIntegralJob.php +++ b/app/jobs/store/platformCommission/UseLegumesIntegralJob.php @@ -21,7 +21,7 @@ class UseLegumesIntegralJob implements JobInterface{ public function fire($job,$data){ try{ - Log::info('豆豆积分使用 - 开始处理: '.var_export($data,1)); + // Log::info('豆豆积分使用 - 开始处理: '.var_export($data,1)); // 获取订单信息 $orderInfo = app()->make(StoreOrderRepository::class) ->getSearch([]) diff --git a/app/jobs/store/platformCommission/refundOrderHandle/HandleCommissionMoneyJob.php b/app/jobs/store/platformCommission/refundOrderHandle/HandleCommissionMoneyJob.php index edd98e5..13de5c9 100644 --- a/app/jobs/store/platformCommission/refundOrderHandle/HandleCommissionMoneyJob.php +++ b/app/jobs/store/platformCommission/refundOrderHandle/HandleCommissionMoneyJob.php @@ -16,7 +16,7 @@ use think\facade\Log; class HandleCommissionMoneyJob implements JobInterface{ public function fire($job,$data){ try{ - Log::info("订单退款成功 - 招商员佣金&推广员佣金处理 - 开始处理: ".var_export($data,1)); + // Log::info("订单退款成功 - 招商员佣金&推广员佣金处理 - 开始处理: ".var_export($data,1)); $recordInfo = Record::where('order_product_id',$data['order_product_id']) ->field(['id','uid','mer_id','order_id','commission_merchants_money','commission_promoter_money']) ->with([ diff --git a/app/jobs/store/platformCommission/refundOrderHandle/HandleCommissionPartnerMoneyJob.php b/app/jobs/store/platformCommission/refundOrderHandle/HandleCommissionPartnerMoneyJob.php index 31c1832..36f2ff3 100644 --- a/app/jobs/store/platformCommission/refundOrderHandle/HandleCommissionPartnerMoneyJob.php +++ b/app/jobs/store/platformCommission/refundOrderHandle/HandleCommissionPartnerMoneyJob.php @@ -19,7 +19,7 @@ use think\facade\Log; class HandleCommissionPartnerMoneyJob implements JobInterface{ public function fire($job,$data){ try{ - Log::info("订单退款成功 - 合伙人佣金处理 - 开始处理: ".var_export($data,1)); + // Log::info("订单退款成功 - 合伙人佣金处理 - 开始处理: ".var_export($data,1)); $platformCommissionRecord = Record::where('order_product_id',$data['order_product_id'])->find(); // 待结算-结算时处理,已结算-减少用户已获得佣金,2、3-无处理 if($platformCommissionRecord->commission_partner_status == 1){ diff --git a/app/jobs/store/platformCommission/refundOrderHandle/HandleIntegralJob.php b/app/jobs/store/platformCommission/refundOrderHandle/HandleIntegralJob.php new file mode 100644 index 0000000..85b0729 --- /dev/null +++ b/app/jobs/store/platformCommission/refundOrderHandle/HandleIntegralJob.php @@ -0,0 +1,83 @@ +where('order_product_id',$data['order_product_id'])->find(); + $useLegumesIntegral = $orderProductInfo->use_legumes_integral ?? 0; + $uid = $orderProductInfo->uid ?? 0; + if($useLegumesIntegral > 0 && $uid > 0){ + // 计算退回积分 + $returnIntegral = (float)sprintf("%.2f",$useLegumesIntegral * $data['refund_rate'] / 100); + // 获取退回的记录列表 + $useLegumesLogList = app()->make(LegumesLogRepository::class)->getUsedList((int)$uid,(float)$returnIntegral); + // 循环处理 + $returnComputeIntegral = $returnIntegral;// 计算用 退回积分 + $updateData = []; + foreach($useLegumesLogList as $logInfo){ + // 当前分配信息可退回积分 剩余可退回积分 + $reduce = $returnComputeIntegral < $logInfo['use_integral'] ? $returnComputeIntegral : $logInfo['use_integral']; + $returnComputeIntegral = (float)sprintf("%.2f",$returnComputeIntegral - $reduce); + $updateData[] = [ + 'id' => $logInfo['id'], + 'use_integral' => (float)sprintf("%.2f",$logInfo['use_integral'] - $reduce) + ]; + if($returnComputeIntegral <= 0) break; + } + if($updateData){ + LegumesLog::batchUpdate(array_values($updateData)); + // 获取用户可用豆豆积分 + $hold_legumes_integral = app()->make(LegumesLogRepository::class)->getHoldLegumesIntegral((int)$uid); + // 添加用户账单信息变更记录 + $mark = '订单退款 - 退回抵扣积分:'.$returnIntegral; + $bills[] = [ + 'uid' => (int)$uid, + 'link_id' => $orderProductInfo->order_id ?? 0, + 'pm' => 1, + 'title' => '订单退款 - 退回积分', + 'category' => 'integral', + 'type' => 'deduction', + 'number' => (float)$returnIntegral, + 'balance' => $hold_legumes_integral, + 'mark' => $mark, + 'mer_id' => 0, + 'status' => 1 + ]; + app()->make(UserBillRepository::class)->insertAll($bills); + } + } + } + catch(\Exception $e){ + $data['error_msg'] = $e->getMessage(); + Log::info('订单退款成功 - 抵扣积分退回 - 失败: '.var_export($data,1)); + } + $job->delete(); + } + + public function failed($data){ + Log::info('订单退款成功 - 抵扣积分退回 - 失败(failed): '.var_export($data,1)); + } + + + + + + + + + + + +} diff --git a/app/jobs/store/platformCommission/refundOrderHandle/HandleLegumesJob.php b/app/jobs/store/platformCommission/refundOrderHandle/HandleLegumesJob.php index 5bacd59..9a7e997 100644 --- a/app/jobs/store/platformCommission/refundOrderHandle/HandleLegumesJob.php +++ b/app/jobs/store/platformCommission/refundOrderHandle/HandleLegumesJob.php @@ -20,7 +20,7 @@ use think\facade\Queue; class HandleLegumesJob implements JobInterface{ public function fire($job,$data){ try{ - Log::info("订单退款成功 - 豆豆和积分 - 开始处理: ".var_export($data,1)); + // Log::info("订单退款成功 - 豆豆和积分 - 开始处理: ".var_export($data,1)); // 获取当前抽成信息 $platformCommissionRecord = Record::where('order_product_id',$data['order_product_id'])->find(); // 判断:当前抽成豆豆信息是否已经结算,未结算-无操作处理(结算时处理退款内容);已结算-处理退款相关内容 diff --git a/app/jobs/store/platformCommission/refundOrderHandle/HandlePlatformCommissionRecordJob.php b/app/jobs/store/platformCommission/refundOrderHandle/HandlePlatformCommissionRecordJob.php index 8f335f2..7a51adf 100644 --- a/app/jobs/store/platformCommission/refundOrderHandle/HandlePlatformCommissionRecordJob.php +++ b/app/jobs/store/platformCommission/refundOrderHandle/HandlePlatformCommissionRecordJob.php @@ -15,7 +15,7 @@ use think\facade\Log; class HandlePlatformCommissionRecordJob implements JobInterface{ public function fire($job,$data){ try{ - Log::info("订单退款成功 - 平台抽成记录处理 - 开始处理: ".var_export($data,1)); + // Log::info("订单退款成功 - 平台抽成记录处理 - 开始处理: ".var_export($data,1)); $platformCommissionRecord = Record::where('order_product_id',$data['order_product_id'])->find(); $platformCommissionRecord->refund_ratio += $data['refund_rate']; if($platformCommissionRecord->refund_ratio >= 100){ diff --git a/app/jobs/store/platformCommission/refundOrderHandle/HandleWeightValueJob.php b/app/jobs/store/platformCommission/refundOrderHandle/HandleWeightValueJob.php index 1be7332..9b87272 100644 --- a/app/jobs/store/platformCommission/refundOrderHandle/HandleWeightValueJob.php +++ b/app/jobs/store/platformCommission/refundOrderHandle/HandleWeightValueJob.php @@ -17,7 +17,7 @@ use think\facade\Log; class HandleWeightValueJob implements JobInterface{ public function fire($job,$data){ try{ - Log::info("订单退款成功 - 权重值相关处理 - 开始处理: ".var_export($data,1)); + // Log::info("订单退款成功 - 权重值相关处理 - 开始处理: ".var_export($data,1)); $weightValueLogList = WeightValueLog::where('order_product_id',$data['order_product_id']) ->where('change_type',1) diff --git a/app/listener/platformCommission/OrderAgreeRefundEvent.php b/app/listener/platformCommission/OrderAgreeRefundEvent.php index 44bfe51..3036252 100644 --- a/app/listener/platformCommission/OrderAgreeRefundEvent.php +++ b/app/listener/platformCommission/OrderAgreeRefundEvent.php @@ -6,6 +6,7 @@ namespace app\listener\platformCommission; use app\common\repositories\store\order\StoreRefundProductRepository; use app\jobs\store\platformCommission\refundOrderHandle\HandleCommissionMoneyJob; use app\jobs\store\platformCommission\refundOrderHandle\HandleCommissionPartnerMoneyJob; +use app\jobs\store\platformCommission\refundOrderHandle\HandleIntegralJob; use app\jobs\store\platformCommission\refundOrderHandle\HandleLegumesJob; use app\jobs\store\platformCommission\refundOrderHandle\HandlePlatformCommissionRecordJob; use app\jobs\store\platformCommission\refundOrderHandle\HandleWeightValueJob; @@ -25,7 +26,7 @@ class OrderAgreeRefundEvent{ public function handle($data){ try{ $refund = $data['refund']; - Log::info('订单进入退款成功 - 平台抽成相关处理 - 开始:'.var_export(['id' => $data['id']],1)); + // Log::info('订单进入退款成功 - 平台抽成相关处理 - 开始:'.var_export(['id' => $data['id']],1)); $refundProductList = app()->make(StoreRefundProductRepository::class) ->getSearch([]) ->field('order_product_id,refund_price,refund_num,refund_legumes_integral') @@ -67,9 +68,19 @@ class OrderAgreeRefundEvent{ 'order_product_id' => $refundProductInfo['order_product_id'], 'refund_rate' => $refundRate ]); + // 抵扣积分退回 + Queue::push(HandleIntegralJob::class,[ + 'order_product_id' => $refundProductInfo['order_product_id'], + 'refund_rate' => $refundRate + ]); } }catch(\Exception $e){ - Log::info('订单进入退款成功 - 平台抽成相关处理 - 错误:'.$e->getMessage()); + $error = [ + 'id' => $data['id'], + 'msg' => $e->getMessage() + ]; + + Log::info('订单进入退款成功 - 平台抽成相关处理 - 错误:'.var_export($error,1)); } } } \ No newline at end of file diff --git a/app/listener/platformCommission/OrderPaySuccessEvent.php b/app/listener/platformCommission/OrderPaySuccessEvent.php index 116c00b..9bb7d07 100644 --- a/app/listener/platformCommission/OrderPaySuccessEvent.php +++ b/app/listener/platformCommission/OrderPaySuccessEvent.php @@ -16,9 +16,9 @@ class OrderPaySuccessEvent{ public $groupOrder; public function handle($groupOrder){ + $groupOrder = $groupOrder['groupOrder']; try{ - $groupOrder = $groupOrder['groupOrder']; - Log::info('支付成功 - 平台抽成处理 - 开始: '.var_export(['uid'=>$groupOrder->uid,'group_order_id'=>$groupOrder->group_order_id],1)); + // Log::info('支付成功 - 平台抽成处理 - 开始: '.var_export(['uid'=>$groupOrder->uid,'group_order_id'=>$groupOrder->group_order_id],1)); $this->orderPaySuccessHandle($groupOrder); // 订单支付成功 触发购买商品升级 Queue::push(UserBrokerageLevelJob::class,[ @@ -33,7 +33,12 @@ class OrderPaySuccessEvent{ 'group_order_id' => $groupOrder->group_order_id ]); }catch(\Exception $e){ - Log::info('支付成功 - 平台抽成处理 - 错误: '.$e->getMessage()); + $data = [ + 'uid' => $groupOrder->uid, + 'group_order_id' => $groupOrder->group_order_id, + 'msg' => $e->getMessage() + ]; + Log::info('支付成功 - 平台抽成处理 - 错误: '.var_export($data,1)); } } /**