101 lines
4.2 KiB
PHP
101 lines
4.2 KiB
PHP
<?php
|
|
|
|
namespace app\jobs\store\platformCommission;
|
|
|
|
|
|
use app\common\model\store\order\StoreOrder;
|
|
use app\common\model\store\platformCommission\Record;
|
|
use app\common\repositories\store\platformCommission\LegumesLogRepository;
|
|
use app\common\repositories\store\platformCommission\LegumesRepository;
|
|
use crmeb\interfaces\JobInterface;
|
|
use think\facade\Log;
|
|
use think\facade\Queue;
|
|
|
|
/**
|
|
* Common: 给本周期内消费者分豆豆
|
|
* Author: wu-hui
|
|
* Time: 2023/12/28 19:01
|
|
* Class SparateLegumesJob
|
|
* @package app\jobs\store\platformCommission
|
|
*/
|
|
class SparateLegumesJob implements JobInterface{
|
|
|
|
public function fire($job,$data){
|
|
try{
|
|
Log::info('给本周期内消费者分豆豆 - 开始处理: '.var_export($data,1));
|
|
// 获取周期信息
|
|
$cycleLegumes = app()->make(LegumesRepository::class)->getLegumes($data['legumes_id']);
|
|
if(!$cycleLegumes) throw new \Exception('信息不存在');
|
|
if((int)$cycleLegumes['status'] != 0) throw new \Exception('当前豆豆已分配!');
|
|
// 获取时间段所有消费用户
|
|
$orderList = StoreOrder::whereNotIn('status',[-1,11])
|
|
->field('order_id,uid,status,(sum(pay_price) + sum(use_legumes_integral)) as sum_money')
|
|
->whereBetweenTime('pay_time',$cycleLegumes['start_time'],$cycleLegumes['end_time'])
|
|
->group('order_id')
|
|
->select()
|
|
->toArray();
|
|
$totalMoney = array_sum(array_column($orderList,'sum_money'));
|
|
// 获取平台抽成信息
|
|
$orderIds = array_column($orderList,'order_id');
|
|
$platformCommissionRecord = Record::whereIn('order_id',$orderIds)
|
|
->field('order_id,uid,platform_commission_money')
|
|
->select()
|
|
->toArray();
|
|
$totalPlatformCommission = array_sum(array_column($platformCommissionRecord,'platform_commission_money'));
|
|
$platformCommissionRecord = array_column($platformCommissionRecord,null,'order_id');
|
|
|
|
$insertData = [];
|
|
foreach($orderList as $orderInfo){
|
|
// 获取平台抽成信息
|
|
$platformCommissionInfo = $platformCommissionRecord[$orderInfo['order_id']] ?? [];
|
|
if($platformCommissionInfo){
|
|
// 计算订单金额占比 必须进行100的偏移计算
|
|
// $rate = (float)sprintf("%.3f",$orderInfo['sum_money'] / $totalMoney * 100);
|
|
$rate = (float)sprintf("%.3f",$platformCommissionInfo['platform_commission_money'] / $totalPlatformCommission * 100);
|
|
$getLegumes = sprintf("%.3f",$cycleLegumes['legumes_num'] * $rate / 100);
|
|
// 信息记录
|
|
$insertData[] = [
|
|
'uid' => $orderInfo['uid'],
|
|
'legumes_id' => $data['legumes_id'],
|
|
'order_id' => $orderInfo['order_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['status'],[2,3]) ? 1 : 0,
|
|
];
|
|
}
|
|
}
|
|
// 添加数据
|
|
if(count($insertData) > 0) app()->make(LegumesLogRepository::class)->insertAll($insertData);
|
|
// 修改豆豆周期分配状态
|
|
app()->make(LegumesRepository::class)->update($data['legumes_id'],[
|
|
'status' => 1
|
|
]);
|
|
// 触发全平台豆豆转积分操作
|
|
Queue::push(ComputeIntegralJob::class);
|
|
}
|
|
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));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|