优化:退款成功 - 退回抵扣积分

This commit is contained in:
wuhui_zzw 2024-01-03 14:37:18 +08:00
parent dcd4be4234
commit 7f7a57d7a7
13 changed files with 147 additions and 14 deletions

View File

@ -133,6 +133,40 @@ class LegumesLogRepository extends BaseRepository{
return $list; 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: 获取用户可用积分 * Common: 获取用户可用积分
* Author: wu-hui * Author: wu-hui

View File

@ -21,7 +21,7 @@ class CommissionMerchantsSettlementJob implements JobInterface{
public function fire($job,$data){ public function fire($job,$data){
try{ try{
Log::info('招商员佣金结算 - 开始处理: '.var_export($data,1)); // Log::info('招商员佣金结算 - 开始处理: '.var_export($data,1));
$list = app()->make(RecordRepository::class) $list = app()->make(RecordRepository::class)
->getSearch([]) ->getSearch([])
->field(['id','uid','mer_id','order_id','commission_merchants_money']) ->field(['id','uid','mer_id','order_id','commission_merchants_money'])

View File

@ -21,7 +21,7 @@ class CommissionPromoterSettlementJob implements JobInterface{
public function fire($job,$data){ public function fire($job,$data){
try{ try{
Log::info('推广员佣金结算 - 开始处理: '.var_export($data,1)); // Log::info('推广员佣金结算 - 开始处理: '.var_export($data,1));
$list = app()->make(RecordRepository::class) $list = app()->make(RecordRepository::class)
->getSearch([]) ->getSearch([])
->field(['id','uid','mer_id','order_id','commission_promoter_money']) ->field(['id','uid','mer_id','order_id','commission_promoter_money'])

View File

@ -22,7 +22,7 @@ class GiveWeightValueJob implements JobInterface{
public function fire($job,$data){ public function fire($job,$data){
try{ try{
Log::info('下单赠送权重值 - 开始处理: '.var_export($data,1)); // Log::info('下单赠送权重值 - 开始处理: '.var_export($data,1));
// 获取所有用户的持有信息 // 获取所有用户的持有信息
$userList = app()->make(WeightValueRepository::class)->getUserHoldList($data['uid']); $userList = app()->make(WeightValueRepository::class)->getUserHoldList($data['uid']);
$orderIds = StoreOrder::where('group_order_id',$data['group_order_id'])->column('order_id');// 获取订单id $orderIds = StoreOrder::where('group_order_id',$data['group_order_id'])->column('order_id');// 获取订单id

View File

@ -21,7 +21,7 @@ class UseLegumesIntegralJob implements JobInterface{
public function fire($job,$data){ public function fire($job,$data){
try{ try{
Log::info('豆豆积分使用 - 开始处理: '.var_export($data,1)); // Log::info('豆豆积分使用 - 开始处理: '.var_export($data,1));
// 获取订单信息 // 获取订单信息
$orderInfo = app()->make(StoreOrderRepository::class) $orderInfo = app()->make(StoreOrderRepository::class)
->getSearch([]) ->getSearch([])

View File

@ -16,7 +16,7 @@ use think\facade\Log;
class HandleCommissionMoneyJob implements JobInterface{ class HandleCommissionMoneyJob implements JobInterface{
public function fire($job,$data){ public function fire($job,$data){
try{ try{
Log::info("订单退款成功 - 招商员佣金&推广员佣金处理 - 开始处理: ".var_export($data,1)); // Log::info("订单退款成功 - 招商员佣金&推广员佣金处理 - 开始处理: ".var_export($data,1));
$recordInfo = Record::where('order_product_id',$data['order_product_id']) $recordInfo = Record::where('order_product_id',$data['order_product_id'])
->field(['id','uid','mer_id','order_id','commission_merchants_money','commission_promoter_money']) ->field(['id','uid','mer_id','order_id','commission_merchants_money','commission_promoter_money'])
->with([ ->with([

View File

@ -19,7 +19,7 @@ use think\facade\Log;
class HandleCommissionPartnerMoneyJob implements JobInterface{ class HandleCommissionPartnerMoneyJob implements JobInterface{
public function fire($job,$data){ public function fire($job,$data){
try{ 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 = Record::where('order_product_id',$data['order_product_id'])->find();
// 待结算-结算时处理,已结算-减少用户已获得佣金2、3-无处理 // 待结算-结算时处理,已结算-减少用户已获得佣金2、3-无处理
if($platformCommissionRecord->commission_partner_status == 1){ if($platformCommissionRecord->commission_partner_status == 1){

View File

@ -0,0 +1,83 @@
<?php
namespace app\jobs\store\platformCommission\refundOrderHandle;
use app\common\model\store\order\StoreOrderProduct;
use app\common\model\store\platformCommission\LegumesLog;
use app\common\repositories\store\platformCommission\LegumesLogRepository;
use app\common\repositories\user\UserBillRepository;
use crmeb\interfaces\JobInterface;
use think\facade\Log;
class HandleIntegralJob implements JobInterface{
public function fire($job,$data){
try{
Log::info("订单退款成功 - 抵扣积分退回 - 开始处理: ".var_export($data,1));
// 获取订单商品信息
$orderProductInfo = StoreOrderProduct::field('uid,order_id,use_legumes_integral')->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));
}
}

View File

@ -20,7 +20,7 @@ use think\facade\Queue;
class HandleLegumesJob implements JobInterface{ class HandleLegumesJob implements JobInterface{
public function fire($job,$data){ public function fire($job,$data){
try{ 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 = Record::where('order_product_id',$data['order_product_id'])->find();
// 判断:当前抽成豆豆信息是否已经结算,未结算-无操作处理(结算时处理退款内容);已结算-处理退款相关内容 // 判断:当前抽成豆豆信息是否已经结算,未结算-无操作处理(结算时处理退款内容);已结算-处理退款相关内容

View File

@ -15,7 +15,7 @@ use think\facade\Log;
class HandlePlatformCommissionRecordJob implements JobInterface{ class HandlePlatformCommissionRecordJob implements JobInterface{
public function fire($job,$data){ public function fire($job,$data){
try{ 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 = Record::where('order_product_id',$data['order_product_id'])->find();
$platformCommissionRecord->refund_ratio += $data['refund_rate']; $platformCommissionRecord->refund_ratio += $data['refund_rate'];
if($platformCommissionRecord->refund_ratio >= 100){ if($platformCommissionRecord->refund_ratio >= 100){

View File

@ -17,7 +17,7 @@ use think\facade\Log;
class HandleWeightValueJob implements JobInterface{ class HandleWeightValueJob implements JobInterface{
public function fire($job,$data){ public function fire($job,$data){
try{ try{
Log::info("订单退款成功 - 权重值相关处理 - 开始处理: ".var_export($data,1)); // Log::info("订单退款成功 - 权重值相关处理 - 开始处理: ".var_export($data,1));
$weightValueLogList = WeightValueLog::where('order_product_id',$data['order_product_id']) $weightValueLogList = WeightValueLog::where('order_product_id',$data['order_product_id'])
->where('change_type',1) ->where('change_type',1)

View File

@ -6,6 +6,7 @@ namespace app\listener\platformCommission;
use app\common\repositories\store\order\StoreRefundProductRepository; use app\common\repositories\store\order\StoreRefundProductRepository;
use app\jobs\store\platformCommission\refundOrderHandle\HandleCommissionMoneyJob; use app\jobs\store\platformCommission\refundOrderHandle\HandleCommissionMoneyJob;
use app\jobs\store\platformCommission\refundOrderHandle\HandleCommissionPartnerMoneyJob; 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\HandleLegumesJob;
use app\jobs\store\platformCommission\refundOrderHandle\HandlePlatformCommissionRecordJob; use app\jobs\store\platformCommission\refundOrderHandle\HandlePlatformCommissionRecordJob;
use app\jobs\store\platformCommission\refundOrderHandle\HandleWeightValueJob; use app\jobs\store\platformCommission\refundOrderHandle\HandleWeightValueJob;
@ -25,7 +26,7 @@ class OrderAgreeRefundEvent{
public function handle($data){ public function handle($data){
try{ try{
$refund = $data['refund']; $refund = $data['refund'];
Log::info('订单进入退款成功 - 平台抽成相关处理 - 开始:'.var_export(['id' => $data['id']],1)); // Log::info('订单进入退款成功 - 平台抽成相关处理 - 开始:'.var_export(['id' => $data['id']],1));
$refundProductList = app()->make(StoreRefundProductRepository::class) $refundProductList = app()->make(StoreRefundProductRepository::class)
->getSearch([]) ->getSearch([])
->field('order_product_id,refund_price,refund_num,refund_legumes_integral') ->field('order_product_id,refund_price,refund_num,refund_legumes_integral')
@ -67,9 +68,19 @@ class OrderAgreeRefundEvent{
'order_product_id' => $refundProductInfo['order_product_id'], 'order_product_id' => $refundProductInfo['order_product_id'],
'refund_rate' => $refundRate 'refund_rate' => $refundRate
]); ]);
// 抵扣积分退回
Queue::push(HandleIntegralJob::class,[
'order_product_id' => $refundProductInfo['order_product_id'],
'refund_rate' => $refundRate
]);
} }
}catch(\Exception $e){ }catch(\Exception $e){
Log::info('订单进入退款成功 - 平台抽成相关处理 - 错误:'.$e->getMessage()); $error = [
'id' => $data['id'],
'msg' => $e->getMessage()
];
Log::info('订单进入退款成功 - 平台抽成相关处理 - 错误:'.var_export($error,1));
} }
} }
} }

View File

@ -16,9 +16,9 @@ class OrderPaySuccessEvent{
public $groupOrder; public $groupOrder;
public function handle($groupOrder){ public function handle($groupOrder){
try{
$groupOrder = $groupOrder['groupOrder']; $groupOrder = $groupOrder['groupOrder'];
Log::info('支付成功 - 平台抽成处理 - 开始: '.var_export(['uid'=>$groupOrder->uid,'group_order_id'=>$groupOrder->group_order_id],1)); try{
// Log::info('支付成功 - 平台抽成处理 - 开始: '.var_export(['uid'=>$groupOrder->uid,'group_order_id'=>$groupOrder->group_order_id],1));
$this->orderPaySuccessHandle($groupOrder); $this->orderPaySuccessHandle($groupOrder);
// 订单支付成功 触发购买商品升级 // 订单支付成功 触发购买商品升级
Queue::push(UserBrokerageLevelJob::class,[ Queue::push(UserBrokerageLevelJob::class,[
@ -33,7 +33,12 @@ class OrderPaySuccessEvent{
'group_order_id' => $groupOrder->group_order_id 'group_order_id' => $groupOrder->group_order_id
]); ]);
}catch(\Exception $e){ }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));
} }
} }
/** /**