添加:退款成功 - 合伙人佣金处理
添加:退款成功 - 豆豆和积分处理 修改:当日豆豆和积分计算 - 添加已退款信息处理
This commit is contained in:
parent
0902bf142e
commit
b1d3c95c4f
|
|
@ -23,12 +23,17 @@ class ComputeIntegralJob implements JobInterface{
|
|||
try{
|
||||
Log::info("全平台豆豆计算 - 开始处理: ".var_export($data,1));
|
||||
$page = $data['page'] ?? 0;
|
||||
$ids = $data['ids'] ?? [];
|
||||
$limit = 1000;
|
||||
$set = app()->make(RecordRepository::class)->getBaseConfig();
|
||||
// 获取当前页数据 有效记录、已获取积分低于订单金额
|
||||
$model = LegumesLog::field('id,order_money,get_legumes,get_integral')
|
||||
->whereIn('status',[0,1])
|
||||
->where('get_integral < order_money');
|
||||
$model = LegumesLog::field('id,(order_money - refund_order_money) as order_money,(get_legumes - refund_get_legumes) as get_legumes,get_integral')
|
||||
->when(count($ids) > 0,function($query) use ($ids){
|
||||
$query->whereIn('id',$ids);
|
||||
},function($query){
|
||||
$query->where('get_integral < order_money');
|
||||
})
|
||||
->whereIn('status',[0,1]);
|
||||
$count = $model->count();
|
||||
$list = $model->page($page,$limit)->select()->toArray();
|
||||
if(count($list) <= 0) throw new \Exception('无处理数据!');
|
||||
|
|
@ -45,9 +50,8 @@ class ComputeIntegralJob implements JobInterface{
|
|||
// 判断:是否存在下一页
|
||||
$currentLimit = $page * $limit;
|
||||
if($currentLimit < $count){
|
||||
Queue::push(ComputeIntegralJob::class,[
|
||||
'page' => $page + 1
|
||||
]);
|
||||
$data['page'] = $page + 1;
|
||||
Queue::push(ComputeIntegralJob::class,$data);
|
||||
}
|
||||
}
|
||||
catch(\Exception $e){
|
||||
|
|
|
|||
|
|
@ -0,0 +1,83 @@
|
|||
<?php
|
||||
namespace app\jobs\store\platformCommission\refundOrderHandle;
|
||||
|
||||
use app\common\model\store\platformCommission\Record;
|
||||
use app\common\repositories\user\UserBillRepository;
|
||||
use crmeb\interfaces\JobInterface;
|
||||
use think\facade\Log;
|
||||
|
||||
/**
|
||||
* Common: 订单退款成功 - 招商员佣金 & 推广员佣金处理
|
||||
* Author: wu-hui
|
||||
* Time: 2024/01/03 9:26
|
||||
* Class HandleCommissionMoneyJob
|
||||
* @package app\jobs\store\platformCommission\refundOrderHandle
|
||||
*/
|
||||
class HandleCommissionMoneyJob implements JobInterface{
|
||||
public function fire($job,$data){
|
||||
try{
|
||||
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([
|
||||
'mer' => function($query){
|
||||
$query->field('mer_id,spread_uid as mer_spread_uid')->bind(['mer_spread_uid']);
|
||||
},
|
||||
'user' => function($query){
|
||||
$query->field('uid,spread_uid')->bind(['spread_uid']);
|
||||
},
|
||||
])->find();
|
||||
if(!$recordInfo) return false;
|
||||
$recordInfo = $recordInfo->toArray();
|
||||
$userBillRepository = app()->make(UserBillRepository::class);
|
||||
// 处理招商员佣金
|
||||
if((int)$recordInfo['mer_spread_uid'] > 0){
|
||||
// 获取冻结中佣金信息
|
||||
$reduce = (float)sprintf("%.2f",$recordInfo['commission_merchants_money'] * $data['refund_rate'] / 100);// 减少数量
|
||||
// 添加减少记录
|
||||
$userBillRepository->decBill($recordInfo['mer_spread_uid'], 'brokerage', 'commission_merchants', [
|
||||
'link_id' => $recordInfo['order_id'],
|
||||
'status' => 1,
|
||||
'title' => '减少招商佣金',
|
||||
'number' => $reduce,
|
||||
'mark' => '订单退款,减少招商佣金' . floatval($reduce),
|
||||
'balance' => 0
|
||||
]);
|
||||
}
|
||||
// 处理推广员佣金
|
||||
if((int)$recordInfo['spread_uid'] > 0){
|
||||
// 获取冻结中佣金信息
|
||||
$reduce = (float)sprintf("%.2f",$recordInfo['commission_promoter_money'] * $data['refund_rate'] / 100);// 减少数量
|
||||
// 添加减少记录
|
||||
$userBillRepository->decBill($recordInfo['spread_uid'], 'brokerage', 'commission_promoter', [
|
||||
'link_id' => $recordInfo['order_id'],
|
||||
'status' => 1,
|
||||
'title' => '减少推广佣金',
|
||||
'number' => $reduce,
|
||||
'mark' => '订单退款,减少推广佣金' . floatval($reduce),
|
||||
'balance' => 0
|
||||
]);
|
||||
}
|
||||
}
|
||||
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));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
<?php
|
||||
namespace app\jobs\store\platformCommission\refundOrderHandle;
|
||||
|
||||
|
||||
use app\common\model\store\platformCommission\PartnerSettlement;
|
||||
use app\common\model\store\platformCommission\PartnerSettlementCycle;
|
||||
use app\common\model\store\platformCommission\Record;
|
||||
use app\common\repositories\user\UserBillRepository;
|
||||
use crmeb\interfaces\JobInterface;
|
||||
use think\facade\Log;
|
||||
|
||||
/**
|
||||
* Common: 订单退款成功 - 合伙人佣金处理
|
||||
* Author: wu-hui
|
||||
* Time: 2024/01/03 9:25
|
||||
* Class HandleWeightValueJob
|
||||
* @package app\jobs\store\platformCommission\refundOrderHandle
|
||||
*/
|
||||
class HandleCommissionPartnerMoneyJob implements JobInterface{
|
||||
public function fire($job,$data){
|
||||
try{
|
||||
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){
|
||||
// 获取:获取当前抽成结算的归属周期
|
||||
$createTime = strtotime($platformCommissionRecord->create_time);
|
||||
$cycleInfo = PartnerSettlementCycle::where('start_time','<',$createTime)
|
||||
->where('end_time','>',$createTime)
|
||||
->find();
|
||||
if($cycleInfo){
|
||||
// 计算总退款的合伙人佣金
|
||||
$reduceCommissionMoney = (float)sprintf("%.2f",$platformCommissionRecord['commission_partner_money'] * $data['refund_rate'] / 100);// 减少数量
|
||||
// 获取退款的用户列表
|
||||
$userList = PartnerSettlement::field('id,uid,money,proportion,cycle_id')
|
||||
->where('cycle_id',$cycleInfo->id)
|
||||
->select()
|
||||
->toArray();
|
||||
$bills = [];
|
||||
foreach($userList as $partnerInfo){
|
||||
// 计算当前用户应扣除合伙人佣金
|
||||
$reduce = (float)sprintf("%.2f",$reduceCommissionMoney * $partnerInfo['proportion'] / 100);
|
||||
// 记录账单
|
||||
$bills[] = [
|
||||
'uid' => $partnerInfo['uid'],
|
||||
'link_id' => $partnerInfo['cycle_id'],
|
||||
'pm' => 0,
|
||||
'title' => '订单退款-扣除合伙人佣金',
|
||||
'category' => 'brokerage',
|
||||
'type' => 'commission_partner',
|
||||
'number' => $reduce,
|
||||
'balance' => 0,
|
||||
'mark' => '订单退款,扣除合伙人佣金'.floatval($reduce).'元',
|
||||
'mer_id' => 0,
|
||||
'status' => 1
|
||||
];
|
||||
}
|
||||
// 记录账单变化信息
|
||||
if (count($bills) > 0) 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));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
<?php
|
||||
namespace app\jobs\store\platformCommission\refundOrderHandle;
|
||||
|
||||
|
||||
use app\common\model\store\platformCommission\Legumes;
|
||||
use app\common\model\store\platformCommission\LegumesLog;
|
||||
use app\common\model\store\platformCommission\Record;
|
||||
use app\jobs\store\platformCommission\ComputeIntegralJob;
|
||||
use crmeb\interfaces\JobInterface;
|
||||
use think\facade\Log;
|
||||
use think\facade\Queue;
|
||||
|
||||
/**
|
||||
* Common: 订单退款成功 - 豆豆和积分处理
|
||||
* Author: wu-hui
|
||||
* Time: 2024/01/03 10:09
|
||||
* Class HandleLegumesJob
|
||||
* @package app\jobs\store\platformCommission\refundOrderHandle
|
||||
*/
|
||||
class HandleLegumesJob implements JobInterface{
|
||||
public function fire($job,$data){
|
||||
try{
|
||||
Log::info("订单退款成功 - 豆豆和积分 - 开始处理: ".var_export($data,1));
|
||||
// 获取当前抽成信息
|
||||
$platformCommissionRecord = Record::where('order_product_id',$data['order_product_id'])->find();
|
||||
// 判断:当前抽成豆豆信息是否已经结算,未结算-无操作处理(结算时处理退款内容);已结算-处理退款相关内容
|
||||
$maxEndTime = Legumes::max('end_time');
|
||||
$createTime = strtotime($platformCommissionRecord->create_time);
|
||||
if($createTime < $maxEndTime){
|
||||
// 已结算 - 处理退款相关内容
|
||||
$legumesId = (int)Legumes::where('start_time','<',$createTime)->where('end_time','>',$createTime)->value('id');
|
||||
if($legumesId > 0){
|
||||
// 获取需要修改的信息列表
|
||||
$correlationList = LegumesLog::field('id,uid,order_money,refund_order_money,get_legumes,refund_get_legumes,get_integral')
|
||||
->where('legumes_id',$legumesId)
|
||||
->select()
|
||||
->toArray();
|
||||
// 循环处理
|
||||
$updateData = [];
|
||||
foreach($correlationList as $correlationInfo){
|
||||
// 计算 退款金额
|
||||
$reduceOrderMoney = (float)sprintf("%.2f",$correlationInfo['order_money'] * $data['refund_rate'] / 100);
|
||||
$refundOrderMoney = bcadd($correlationInfo['refund_order_money'],$reduceOrderMoney,2);
|
||||
if($refundOrderMoney > $correlationInfo['order_money']) $refundOrderMoney = $correlationInfo['order_money'];
|
||||
// 计算 退款豆豆
|
||||
$reduceGetLegumes = (float)sprintf("%.2f",$correlationInfo['get_legumes'] * $data['refund_rate'] / 100);
|
||||
$refundGetLegumes = bcadd($correlationInfo['refund_get_legumes'],$reduceGetLegumes,3);
|
||||
if($refundGetLegumes > $correlationInfo['get_legumes']) $refundGetLegumes = $correlationInfo['get_legumes'];
|
||||
// 记录修改信息
|
||||
$updateData[] = [
|
||||
'id' => $correlationInfo['id'],
|
||||
'refund_order_money' => $refundOrderMoney,
|
||||
'refund_get_legumes' => $refundGetLegumes
|
||||
];
|
||||
}
|
||||
|
||||
if(count($updateData) > 0) {
|
||||
LegumesLog::batchUpdate(array_values($updateData));
|
||||
Queue::push(ComputeIntegralJob::class,[
|
||||
'ids' => array_column($correlationList,'id')
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
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));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
<?php
|
||||
namespace app\jobs\store\platformCommission\refundOrderHandle;
|
||||
|
||||
use app\common\model\store\platformCommission\Record;
|
||||
use crmeb\interfaces\JobInterface;
|
||||
use think\facade\Log;
|
||||
|
||||
/**
|
||||
* Common: 订单退款成功 - 平台抽成记录处理
|
||||
* Author: wu-hui
|
||||
* Time: 2024/01/03 9:18
|
||||
* Class HandlePlatformCommissionRecordJob
|
||||
* @package app\jobs\store\platformCommission\refundOrderHandle
|
||||
*/
|
||||
class HandlePlatformCommissionRecordJob implements JobInterface{
|
||||
public function fire($job,$data){
|
||||
try{
|
||||
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){
|
||||
$platformCommissionRecord->refund_ratio = 100;
|
||||
$platformCommissionRecord->commission_partner_status = 3;
|
||||
$platformCommissionRecord->commission_merchants_status = 3;
|
||||
$platformCommissionRecord->commission_promoter_status = 3;
|
||||
}
|
||||
$platformCommissionRecord->save();
|
||||
}
|
||||
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));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
<?php
|
||||
namespace app\jobs\store\platformCommission\refundOrderHandle;
|
||||
|
||||
|
||||
use app\common\model\store\platformCommission\WeightValue;
|
||||
use app\common\model\store\platformCommission\WeightValueLog;
|
||||
use crmeb\interfaces\JobInterface;
|
||||
use think\facade\Log;
|
||||
|
||||
/**
|
||||
* Common: 订单退款成功 - 权重值相关处理
|
||||
* Author: wu-hui
|
||||
* Time: 2024/01/03 9:25
|
||||
* Class HandleWeightValueJob
|
||||
* @package app\jobs\store\platformCommission\refundOrderHandle
|
||||
*/
|
||||
class HandleWeightValueJob implements JobInterface{
|
||||
public function fire($job,$data){
|
||||
try{
|
||||
Log::info("订单退款成功 - 权重值相关处理 - 开始处理: ".var_export($data,1));
|
||||
|
||||
$weightValueLogList = WeightValueLog::where('order_product_id',$data['order_product_id'])
|
||||
->where('change_type',1)
|
||||
->where('source',0)
|
||||
->select()
|
||||
->toArray();
|
||||
$insertLogData = [];
|
||||
foreach($weightValueLogList as $weightValueLogInfo){
|
||||
// 获取用户持有信息
|
||||
$holdInfo = WeightValue::where('uid',$weightValueLogInfo['uid'])
|
||||
->where('brokerage_level',$weightValueLogInfo['brokerage_level'])
|
||||
->find();
|
||||
// 获取已经减少数量
|
||||
$reduced = WeightValueLog::where('order_product_id',$data['order_product_id'])
|
||||
->where('change_type',0)
|
||||
->where('source',1)
|
||||
->where('uid',$weightValueLogInfo['uid'])
|
||||
->sum('change_quantity');
|
||||
// 计算减少信息,总减少数量不能超过获取数量
|
||||
$reduce = (float)sprintf("%.2f",$weightValueLogInfo['change_quantity'] * $data['refund_rate'] / 100);
|
||||
$totalReduce = (float)sprintf("%.2f",$reduced * $reduce);
|
||||
if($totalReduce > $weightValueLogInfo['change_quantity']) {
|
||||
$reduce = (float)sprintf("%.2f",$weightValueLogInfo['change_quantity'] - $reduced);
|
||||
}
|
||||
$changeFront = $holdInfo->quantity;
|
||||
$holdInfo->quantity = (float)sprintf("%.2f",$holdInfo->quantity - $reduce);
|
||||
$holdInfo->save();
|
||||
// 记录变更记录
|
||||
$insertLogData[] = [
|
||||
'uid' => $weightValueLogInfo['uid'],
|
||||
'brokerage_level' => $weightValueLogInfo['brokerage_level'],
|
||||
'product_id' => $weightValueLogInfo['product_id'],
|
||||
'order_id' => $weightValueLogInfo['order_id'],
|
||||
'order_product_id' => $weightValueLogInfo['order_product_id'],
|
||||
'change_type' => 0,
|
||||
'change_quantity' => $reduce,
|
||||
'change_front' => $changeFront,
|
||||
'change_after' => (float)$holdInfo->quantity,
|
||||
'remark' => '商品退款,减少权重值',
|
||||
'source' => 1,
|
||||
];
|
||||
}
|
||||
|
||||
if(count($insertLogData) > 0) WeightValueLog::insertAll($insertLogData);
|
||||
}
|
||||
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));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -3,7 +3,14 @@
|
|||
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\HandleLegumesJob;
|
||||
use app\jobs\store\platformCommission\refundOrderHandle\HandlePlatformCommissionRecordJob;
|
||||
use app\jobs\store\platformCommission\refundOrderHandle\HandleWeightValueJob;
|
||||
use think\facade\Log;
|
||||
use think\facade\Queue;
|
||||
|
||||
/**
|
||||
* Common: 订单退款申请成功(同意退款)
|
||||
|
|
@ -19,21 +26,50 @@ class OrderAgreeRefundEvent{
|
|||
try{
|
||||
$refund = $data['refund'];
|
||||
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')
|
||||
->with([
|
||||
'product' => function($query){
|
||||
$query->field('order_product_id,order_id,product_num,use_legumes_integral');
|
||||
}
|
||||
])
|
||||
->where('refund_order_id',$data['id'])
|
||||
->select()
|
||||
->toArray();
|
||||
foreach($refundProductList as $refundProductInfo){
|
||||
// 判断:当前商品是否存在豆豆积分抵扣情况
|
||||
if((float)$refundProductInfo['product']['use_legumes_integral'] <= 0) continue;
|
||||
if((int)$refundProductInfo['refund_num'] <= 0) continue;
|
||||
$refundRate = (float)sprintf("%.2f",(int)$refundProductInfo['refund_num'] / (int)$refundProductInfo['product']['product_num'] * 100);
|
||||
// 退款成功 计算平台抽成相关退款内容
|
||||
Queue::push(HandlePlatformCommissionRecordJob::class,[
|
||||
'order_product_id' => $refundProductInfo['order_product_id'],
|
||||
'refund_rate' => $refundRate
|
||||
]);
|
||||
// 退款成功 权重值相关处理
|
||||
Queue::push(HandleWeightValueJob::class,[
|
||||
'order_product_id' => $refundProductInfo['order_product_id'],
|
||||
'refund_rate' => $refundRate
|
||||
]);
|
||||
// 招商员佣金 & 推广员佣金处理
|
||||
Queue::push(HandleCommissionMoneyJob::class,[
|
||||
'order_product_id' => $refundProductInfo['order_product_id'],
|
||||
'refund_rate' => $refundRate
|
||||
]);
|
||||
// 合伙人佣金处理
|
||||
Queue::push(HandleCommissionPartnerMoneyJob::class,[
|
||||
'order_product_id' => $refundProductInfo['order_product_id'],
|
||||
'refund_rate' => $refundRate
|
||||
]);
|
||||
// 积分和豆豆处理
|
||||
Queue::push(HandleLegumesJob::class,[
|
||||
'order_product_id' => $refundProductInfo['order_product_id'],
|
||||
'refund_rate' => $refundRate
|
||||
]);
|
||||
}
|
||||
}catch(\Exception $e){
|
||||
Log::info('订单进入退款成功 - 平台抽成相关处理 - 错误:'.$e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue