92 lines
4.5 KiB
PHP
92 lines
4.5 KiB
PHP
<?php
|
|
/**
|
|
* SaaSMall商城系统 - 团队十年电商经验汇集巨献!
|
|
* =========================================================
|
|
* Copy right 2019-2029 成都SAAS云科技有限公司, 保留所有权利。
|
|
* ----------------------------------------------
|
|
* 官方网址: https://www.gobuysaas.com
|
|
* =========================================================
|
|
*/
|
|
namespace addon\commission\job;
|
|
|
|
use think\Exception;
|
|
use think\facade\Db;
|
|
use think\facade\Queue;
|
|
use think\queue\Job;
|
|
|
|
class AllocationLegumesJob{
|
|
|
|
public function fire(Job $job,$data){
|
|
Db::startTrans();
|
|
try{
|
|
trace($data, '平台抽成 - 豆豆分配 - 开始处理');
|
|
// 获取周期信息
|
|
$legumesId = $data['legumes_id'];
|
|
$cycleLegumes = model('commission_legumes')->getInfo(['id' => $legumesId]);
|
|
if(!$cycleLegumes) throw new Exception('信息不存在');
|
|
if((int)$cycleLegumes['status'] != 0) throw new Exception('当前豆豆已分配!');
|
|
// 获取时间段所有消费用户
|
|
$where = [
|
|
[ 'a.pay_time', 'between', [ $cycleLegumes['start_time'], $cycleLegumes['end_time'] ] ],// 指定时间段内
|
|
[ 'og.refund_status', 'in', [0, 3] ],// 订单商品未退款
|
|
[ 'a.order_status', 'in', [1, 3, 4, 10, 11, 12] ],//待发货、已发货、已收货、已完成、待使用、已使用
|
|
];
|
|
$join = [
|
|
[ 'order_goods og', 'og.order_id = a.order_id', 'right' ],
|
|
];
|
|
$field = 'og.order_id,og.order_goods_id,og.member_id,a.order_status,(sum(og.real_goods_money) + sum(og.legumes_integral_money)) as sum_money';
|
|
$orderList = model('order')->getList($where,$field,'','a',$join,'og.order_goods_id');
|
|
$totalMoney = array_sum(array_column($orderList,'sum_money'));
|
|
// 获取平台抽成信息
|
|
$orderGoodsIds = array_column($orderList,'order_goods_id');
|
|
$commissionRecord = model('commission_record')->getList([
|
|
['order_goods_id','in',$orderGoodsIds],
|
|
],'order_goods_id,order_id,member_id,integral_money as platform_commission_money');
|
|
$totalPlatformCommission = array_sum(array_column($commissionRecord,'platform_commission_money'));
|
|
$commissionRecord = array_column($commissionRecord,null,'order_goods_id');
|
|
// 循环处理
|
|
$insertData = [];
|
|
foreach($orderList as $orderInfo){
|
|
// 获取平台抽成信息
|
|
$platformCommissionInfo = $commissionRecord[$orderInfo['order_goods_id']] ?? [];
|
|
if($platformCommissionInfo){
|
|
// 计算订单金额占比 必须进行100的偏移计算
|
|
$rate = (float)sprintf("%.3f",$platformCommissionInfo['platform_commission_money'] / $totalPlatformCommission * 100);
|
|
$getLegumes = sprintf("%.4f",$cycleLegumes['legumes_num'] * $rate / 100);
|
|
// 信息记录
|
|
$insertData[] = [
|
|
'member_id' => $orderInfo['member_id'],
|
|
'legumes_id' => $legumesId,
|
|
'order_id' => $orderInfo['order_id'],
|
|
'order_goods_id' => $orderInfo['order_goods_id'],
|
|
'cycle_total_legumes' => $cycleLegumes['legumes_num'],
|
|
'total_sales_money' => $totalMoney,
|
|
'order_money' => $orderInfo['sum_money'],
|
|
'order_money_rate' => $rate,
|
|
'get_legumes' => $getLegumes,
|
|
'status' => in_array((int)$orderInfo['order_status'],[10,12]) ? 1 : 0,
|
|
];
|
|
}
|
|
}
|
|
// 添加数据
|
|
if(count($insertData) > 0) model('commission_legumes_log')->addList($insertData);
|
|
// 修改豆豆周期分配状态
|
|
model('commission_legumes')->update(['status' => 1],[
|
|
['id', '=', $legumesId]
|
|
]);
|
|
// 触发全平台豆豆转积分操作
|
|
Queue::push(ComputeIntegralJob::class);
|
|
Db::commit();
|
|
}
|
|
catch(\Exception $e){
|
|
Db::rollback();
|
|
$data['error_msg'] = $e->getMessage();
|
|
trace($data, '平台抽成 - 豆豆分配 - 失败');
|
|
}
|
|
$job->delete();
|
|
}
|
|
public function failed($data){
|
|
trace($data, '平台抽成 - 豆豆分配 - 失败(failed)');
|
|
}
|
|
}
|