jh-admin/addon/commission/job/CreateRecordJob.php

99 lines
5.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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)');
}
}