99 lines
5.5 KiB
PHP
99 lines
5.5 KiB
PHP
<?php
|
||
/**
|
||
* SaaSMall商城系统 - 团队十年电商经验汇集巨献!
|
||
* =========================================================
|
||
* Copy right 2019-2029 成都SAAS云科技有限公司, 保留所有权利。
|
||
* ----------------------------------------------
|
||
* 官方网址: https://www.gobuysaas.com
|
||
* =========================================================
|
||
*/
|
||
namespace addon\commission\job;
|
||
|
||
use think\Exception;
|
||
use addon\commission\model\Setting;
|
||
use think\facade\Queue;
|
||
use think\queue\Job;
|
||
|
||
class CreateRecordJob{
|
||
|
||
public function fire(Job $job,$data){
|
||
try{
|
||
// trace($data, '平台抽成 - 支付成功生成抽成记录 - 开始处理');
|
||
$orderId = (int)$data['order_id'];
|
||
$adminSet = (new Setting())->getConfig();
|
||
if($adminSet['switch'] != 1) throw new Exception('总平台未开启平台抽成');
|
||
// 当前订单是否已经处理
|
||
$isHas = (int)model('commission_record')->getValue([
|
||
['order_id', '=', $orderId]
|
||
],'id');
|
||
if($isHas > 0) throw new Exception('当前订单已经处理');
|
||
// 获取订单商品信息
|
||
$field = 'order_goods_id,order_id,site_id,member_id,goods_id,store_id,num,(real_goods_money + legumes_integral_use) as use_money';
|
||
$orderGoodsList = model('order_goods')->getList(['order_id'=>$orderId],$field);
|
||
// 循环处理
|
||
$insertData = [];
|
||
foreach($orderGoodsList as $orderGoodsInfo){
|
||
$useMoney = $orderGoodsInfo['use_money'] ?? 0;
|
||
if($useMoney <= 0) continue;// 当前订单商品有效金额为0
|
||
// 设置获取
|
||
$set = (new Setting())->getFinalSet((int)$orderGoodsInfo['site_id'],(int)$orderGoodsInfo['goods_id']);
|
||
if($set['switch'] != 1) continue;// 当前商品不参与平台抽成
|
||
$integralRate = (float)$set['integral_rate'] ?? 0;
|
||
$operationsRate = (float)$set['operations_rate'] ?? 0;
|
||
$partnerRate = (float)$set['partner_rate'] ?? 0;
|
||
$merchantsRate = (float)$set['merchants_rate'] ?? 0;
|
||
$promoterRate = (float)$set['promoter_rate'] ?? 0;
|
||
// 根据抽成计算类型生成记录信息
|
||
$commissionType = $set['commission_type'] ?? 0;// 抽成计算类型
|
||
$operationsMoney = (float)sprintf("%.3f",$useMoney * $operationsRate / 100);// 运营抽成总金额
|
||
$operationsTechnologyMoney = (float)sprintf("%.3f",$operationsMoney * 0.2);// 运营抽成 - 技术公司所得(20%)
|
||
$operationsPlatformMoney = (float)sprintf("%.3f",$operationsMoney - $operationsTechnologyMoney);// 运营抽成 - 平台所得(80%)
|
||
|
||
$insertData[] = [
|
||
'member_id' => $orderGoodsInfo['member_id'],
|
||
'site_id' => $orderGoodsInfo['site_id'],
|
||
'store_id' => $orderGoodsInfo['store_id'],
|
||
'order_id' => $orderGoodsInfo['order_id'],
|
||
'order_goods_id' => $orderGoodsInfo['order_goods_id'],
|
||
'goods_id' => $orderGoodsInfo['goods_id'],
|
||
'real_goods_money' => $useMoney,
|
||
// 根据计算类型获取值 抽成类型:0=比例,1=固定金额
|
||
'integral_rate' => $commissionType == 1 ? -1 : $integralRate,
|
||
'integral_money' => $commissionType == 1 ? sprintf("%.3f",$orderGoodsInfo['num'] * $integralRate) : sprintf("%.3f",$useMoney * $integralRate / 100),
|
||
'operations_rate' => $operationsRate,
|
||
'operations_money' => $operationsMoney,
|
||
'partner_rate' => $commissionType == 1 ? -1 : $partnerRate,
|
||
'partner_money' => $commissionType == 1 ? sprintf("%.3f",$orderGoodsInfo['num'] * $partnerRate) : sprintf("%.3f",$useMoney * $partnerRate / 100),
|
||
'merchants_rate' => $commissionType == 1 ? -1 : $merchantsRate,
|
||
'merchants_money' => $commissionType == 1 ? sprintf("%.3f",$orderGoodsInfo['num'] * $merchantsRate) : sprintf("%.3f",$useMoney * $merchantsRate / 100),
|
||
'promoter_rate' => $commissionType == 1 ? -1 : $promoterRate,
|
||
'promoter_money' => $commissionType == 1 ? sprintf("%.3f",$orderGoodsInfo['num'] * $promoterRate) : sprintf("%.3f",$useMoney * $promoterRate / 100),
|
||
'operations_technology_money' => (float)$operationsTechnologyMoney,
|
||
'operations_platform_money' => (float)$operationsPlatformMoney,
|
||
];
|
||
}
|
||
|
||
if(count($insertData) > 0){
|
||
model('commission_record')->addList($insertData);
|
||
// 支付成功 - 抽成记录生成后 - 招商员佣金结算
|
||
Queue::push(MerchantsSettlementJob::class,[
|
||
'order_id' => (int)$orderId
|
||
]);
|
||
// 支付成功 - 抽成记录生成后 - 推广员佣金结算
|
||
Queue::push(PromoterSettlementJob::class,[
|
||
'order_id' => (int)$orderId,
|
||
]);
|
||
}
|
||
}
|
||
catch(\Exception $e){
|
||
$data['error_msg'] = $e->getMessage();
|
||
trace($data, '平台抽成 - 支付成功生成抽成记录 - 失败');
|
||
}
|
||
|
||
$job->delete();
|
||
}
|
||
public function failed($data){
|
||
trace($data, '平台抽成 - 支付成功生成抽成记录 - 失败(failed)');
|
||
}
|
||
}
|