添加:每日豆豆结算分配给每个用户,按照订单分配

This commit is contained in:
wuhui_zzw 2023-12-29 11:05:18 +08:00
parent bfd14e5f2c
commit bb411c89dd
5 changed files with 119 additions and 18 deletions

View File

@ -0,0 +1,19 @@
<?php
namespace app\common\dao\store\platformCommission;
use app\common\dao\BaseDao;
use app\common\model\store\platformCommission\LegumesLog;
class LegumesLogDao extends BaseDao{
protected function getModel():string{
return LegumesLog::class;
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace app\common\model\store\platformCommission;
use app\common\model\BaseModel;
class LegumesLog extends BaseModel{
public static function tablePk():string{
return 'id';
}
public static function tableName():string{
return 'platform_commission_legumes_log';
}
}

View File

@ -0,0 +1,19 @@
<?php
namespace app\common\repositories\store\platformCommission;
use app\common\dao\store\platformCommission\LegumesLogDao;
use app\common\repositories\BaseRepository;
class LegumesLogRepository extends BaseRepository{
protected $dao;
public function __construct(LegumesLogDao $dao){
$this->dao = $dao;
}
}

View File

@ -34,16 +34,17 @@ class LegumesRepository extends BaseRepository{
// 获取周期内基金池金额 // 获取周期内基金池金额
$totalIntegralReleaseMoney = (float)app()->make(RecordRepository::class)->getTotalIntegralReleaseMoney($startTime,$endTime); $totalIntegralReleaseMoney = (float)app()->make(RecordRepository::class)->getTotalIntegralReleaseMoney($startTime,$endTime);
if($totalIntegralReleaseMoney <= 0) throw new Exception('基金池金额为0'); if($totalIntegralReleaseMoney <= 0) throw new Exception('基金池金额为0');
$legumesPrice = $set['legumes_price'] <= 0 ? 0.5 : $set['legumes_price'];
// 计算豆豆数量 文创豆=平台抽成的销售额10%➗首次价格0.5 // 计算豆豆数量 文创豆=平台抽成的销售额10%➗首次价格0.5
$legumesNum = sprintf("%.2f",$totalIntegralReleaseMoney / $set['legumes_price']); $legumesNum = (float)sprintf("%.2f",$totalIntegralReleaseMoney / $legumesPrice);
// 明日价格 下次文创豆价格=基金池金额消费者的70%)➗文创豆数量 // 明日价格 下次文创豆价格=基金池金额消费者的70%)➗ 文创豆数量
$allIntegralReleaseMoney = (float)app()->make(RecordRepository::class)->getTotalIntegralReleaseMoney(); $allIntegralReleaseMoney = (float)app()->make(RecordRepository::class)->getTotalIntegralReleaseMoney();
$allLegumes = $this->dao->getSearch([])->sum('legumes_num'); $allLegumes = (float)$this->dao->getSearch([])->sum('legumes_num');
$tomorrowLegumesPrice = sprintf("%.2f",$allIntegralReleaseMoney / $allLegumes); $tomorrowLegumesPrice = sprintf("%.2f",$allIntegralReleaseMoney / ($allLegumes + $legumesNum));
// 记录 // 记录
$recordId = Legumes::insertGetId([ $recordId = Legumes::insertGetId([
'total_platform_commission_money' => $totalIntegralReleaseMoney, 'total_platform_commission_money' => $totalIntegralReleaseMoney,
'legumes_price' => $set['legumes_price'], 'legumes_price' => $legumesPrice,
'legumes_num' => $legumesNum, 'legumes_num' => $legumesNum,
'tomorrow_legumes_price' => $tomorrowLegumesPrice, 'tomorrow_legumes_price' => $tomorrowLegumesPrice,
'start_time' => $startTime, 'start_time' => $startTime,
@ -62,12 +63,24 @@ class LegumesRepository extends BaseRepository{
Db::commit(); Db::commit();
}catch(Exception $e){ }catch(Exception $e){
Db::rollback(); Db::rollback();
Log::info('合伙人佣金结算 - 错误:'.$e->getMessage()); Log::info('计算昨天产生的豆豆总数 - 错误:'.$e->getMessage());
} }
} }
/**
* Common: 获取某条信息
* Author: wu-hui
* Time: 2023/12/29 9:24
* @param $id
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getLegumes($id){
$info = $this->dao->get($id);
return $info ? $info->toArray() : [];
}
} }

View File

@ -3,11 +3,15 @@
namespace app\jobs\store\platformCommission; namespace app\jobs\store\platformCommission;
use app\common\model\store\order\StoreOrder;
use app\common\model\store\platformCommission\LegumesLog;
use app\common\repositories\store\platformCommission\LegumesLogRepository;
use app\common\repositories\store\platformCommission\LegumesRepository;
use crmeb\interfaces\JobInterface; use crmeb\interfaces\JobInterface;
use think\facade\Log; use think\facade\Log;
/** /**
* Common: 昨日消费者分豆豆 * Common: 本周期内消费者分豆豆
* Author: wu-hui * Author: wu-hui
* Time: 2023/12/28 19:01 * Time: 2023/12/28 19:01
* Class SparateLegumesJob * Class SparateLegumesJob
@ -17,15 +21,41 @@ class SparateLegumesJob implements JobInterface{
public function fire($job,$data){ public function fire($job,$data){
try{ try{
Log::info('给昨日消费者分豆豆 - 开始处理: '.var_export($data,1)); 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,(sum(pay_price) + sum(use_platform_integral_price)) 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'));
$insertData = [];
foreach($orderList as $orderInfo){
// 计算订单金额占比 必须进行100的偏移计算
$rate = (float)sprintf("%.3f",$orderInfo['sum_money'] / $totalMoney * 100);
$getLegumes = sprintf("%.3f",$cycleLegumes['legumes_num'] * $rate / 100);
// 信息记录
$insertData[] = [
'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,
];
}
// 添加数据
if(count($insertData) > 0) app()->make(LegumesLogRepository::class)->insertAll($insertData);
app()->make(LegumesRepository::class)->update($data['legumes_id'],[
'status' => 1
]);
} }
catch(\Exception $e){ catch(\Exception $e){
$data['error_msg'] = $e->getMessage(); $data['error_msg'] = $e->getMessage();
@ -35,7 +65,7 @@ class SparateLegumesJob implements JobInterface{
} }
public function failed($data){ public function failed($data){
Log::info('给昨日消费者分豆豆 - 失败(failed): '.var_export($data,1)); Log::info('给本周期内消费者分豆豆 - 失败(failed): '.var_export($data,1));
} }