修改:股东分红 - 由均分修改为根据经销商当前权重值在所有权重值中的比例来计算
This commit is contained in:
parent
e5210815ca
commit
4b23b90fe9
|
|
@ -23,6 +23,11 @@ class SetController extends BaseController
|
|||
public function fix()
|
||||
{
|
||||
|
||||
// 手动触发全网分红处理流程
|
||||
(new \Yunshop\ShareholderDividend\services\TimedTaskService)->handle();
|
||||
|
||||
|
||||
dd("全网分红处理完成");
|
||||
$teamLevels = TeamDividendLevelModel::getList()->get();
|
||||
foreach ($teamLevels as $teamLevel) {
|
||||
$teamAgents = TeamAgentModel::getTeamAgentByLevelId($teamLevel['id'])->where('uid', 30971);
|
||||
|
|
|
|||
|
|
@ -58,13 +58,14 @@ class TimedTaskService
|
|||
Setting::$uniqueAccountId = \YunShop::app()->uniacid = $u->uniacid;
|
||||
$this->set = Setting::get('plugin.shareholder');
|
||||
$this->setLog = Setting::get('plugin.shareholder_log');
|
||||
$is_execute = $this->isExecute();
|
||||
$is_execute = true;//$this->isExecute();
|
||||
if ($is_execute) {
|
||||
\Log::info('========股东分红UNIACID:' . $u->uniacid . '执行========');
|
||||
$this->setLog['current_d'] = date('d');
|
||||
$this->setLog['current_m'] = date('m');
|
||||
Setting::set('plugin.shareholder_log', $this->setLog);
|
||||
$this->shareholderDividend();
|
||||
// $this->shareholderDividend();
|
||||
$this->shareholderDividendV2();
|
||||
} else {
|
||||
\Log::info('========股东分红UNIACID:' . $u->uniacid . '不满足条件========');
|
||||
}
|
||||
|
|
@ -151,11 +152,7 @@ class TimedTaskService
|
|||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 分红处理
|
||||
*
|
||||
* todo 需要进一步优化
|
||||
*/
|
||||
//分红处理 2023-9-27 修改使用V2,分红金额由均分修改为根据权重值比例分配
|
||||
private function shareholderDividend()
|
||||
{
|
||||
//判断平台是否有开启 股东分红条件
|
||||
|
|
@ -287,6 +284,156 @@ class TimedTaskService
|
|||
}
|
||||
}
|
||||
}
|
||||
private function shareholderDividendV2(){
|
||||
//判断平台是否有开启 股东分红条件
|
||||
$condition_dividend = $this->set['condition_dividend'];//1-开启
|
||||
$condition_level_dividend = $this->set['condition_level_dividend'];//1-开启
|
||||
$condition_black_list = BlacklistModel::uniacid()->get();//1-开启
|
||||
$orderAmount = CycleAmounyService::getCycleAmount($this->set['culate_cycle'], $this->set['culate_method']); // 上一个周期金额
|
||||
if ($orderAmount <= 0) {
|
||||
\Log::info('========shareholderDividend():没有返现总金额');
|
||||
ExceptionLog::create([
|
||||
'uniacid' => \YunShop::app()->uniacid,
|
||||
'comment' => '没有返现总金额',
|
||||
'time' => date('Y-m-d H:i:s', time())
|
||||
]);
|
||||
return;
|
||||
}
|
||||
$teamLevels = TeamDividendLevelModel::getList()->get(); // 团队等级
|
||||
$typeName = $this->set['custom_name'] ?: '股东分红';
|
||||
|
||||
foreach ($teamLevels as $teamLevel) {
|
||||
if ($this->set['level_rate']['level_' . $teamLevel['id']]) {
|
||||
$teamAgents = TeamAgentModel::getTeamAgentByLevelId($teamLevel['id']); // 等级下团队代理
|
||||
$teamAgentCount = $teamAgents->count(); // 同等级代理人数
|
||||
$teamAgentsList = $teamAgents->with([
|
||||
'hasOneMember' => function($query){
|
||||
$query->select(['uid','weight_value']);
|
||||
}
|
||||
])->get();
|
||||
$rate = $this->set['level_rate']['level_' . $teamLevel['id']]; // 等级分红比例
|
||||
$lvCountOrderAmount = sprintf("%.2f", $orderAmount / 100 * $rate);// 当前等级共分红金额
|
||||
$totalWeightValue = sprintf("%.2f", array_sum(array_column(array_column($teamAgentsList->toArray(),'has_one_member'),'weight_value')));
|
||||
foreach ($teamAgentsList as $item) {
|
||||
/********* 权重值相关操作 START ***************************************************/
|
||||
// 获取当前经销商的权重值
|
||||
$currentWeightValue = (float)$item->hasOneMember->weight_value;
|
||||
if($currentWeightValue <= 0){
|
||||
\Log::debug("---- 固定分红 - 当前经销商没有权重值 -----:",['uid'=>$item->uid,'weight_value'=>$currentWeightValue]);
|
||||
continue;
|
||||
}
|
||||
// 存在权重值 查看当前用户比例
|
||||
$weightValueRate = $currentWeightValue / $totalWeightValue;// 权重值占比率
|
||||
$amount = sprintf("%.2f", $lvCountOrderAmount * $weightValueRate);// 当前经销商实际可得金额
|
||||
if($amount <= 0){
|
||||
\Log::debug("---- 固定分红 - 当前经销商没有分红佣金 -----:",['uid'=>$item->uid,'weightValueRate'=>$weightValueRate,'weight_value'=>$currentWeightValue,'amount'=>$amount]);
|
||||
continue;
|
||||
}
|
||||
/********* 权重值相关操作 END ***************************************************/
|
||||
//开启了股东分红条件进行验证
|
||||
if ($condition_dividend) {
|
||||
$condition_sign = $this->checkConditionDividend($item['uid'], $this->set['consume_amount']);//条件标记
|
||||
//false
|
||||
if (!$condition_sign) {
|
||||
continue;//此用户没有股东分红
|
||||
}
|
||||
}
|
||||
//开启了股东等级分红设置
|
||||
if ($condition_level_dividend) {
|
||||
$checkGoodsCondition = $this->checkGoodsConditionDividend($item);
|
||||
//false
|
||||
if (!$checkGoodsCondition) {
|
||||
continue;//此用户没有股东分红
|
||||
}
|
||||
}
|
||||
//有黑名单
|
||||
if (!$condition_black_list->isEmpty()) {
|
||||
$checkGoodsCondition = $condition_black_list->where('member_id',$item['uid'])->first();
|
||||
//false
|
||||
if ($checkGoodsCondition) {
|
||||
continue;//此用户没有股东分红
|
||||
}
|
||||
}
|
||||
|
||||
$check_amount = $amount;
|
||||
if ($this->set['level_capping']['level_' . $teamLevel['id']] > 0 && $this->set['capping'] == 1) {
|
||||
//验证数据
|
||||
$check_amount = $this->checkCopping($this->set, $teamLevel, $item['uid'], $amount);
|
||||
if ($check_amount <= 0) {
|
||||
\Log::info("股东分红封顶", [$item['uid'], $amount, $this->set]);
|
||||
ExceptionLog::create([
|
||||
'uniacid' => \YunShop::app()->uniacid,
|
||||
'comment' => '会员' . $item['uid'] . '已经达到封顶金额',
|
||||
'time' => date('Y-m-d H:i:s', time())
|
||||
]);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// 股东分红数据
|
||||
$shareData = [
|
||||
'uniacid' => \YunShop::app()->uniacid,
|
||||
'member_id' => $item['uid'],
|
||||
'order_amount' => $orderAmount,
|
||||
'rate' => $rate,
|
||||
'team_level' => $teamLevel['id'],
|
||||
'team_level_name' => $teamLevel['level_name'],
|
||||
'level_num' => $teamAgentCount,
|
||||
'amount' => $check_amount,
|
||||
'created_at' => time(),
|
||||
'updated_at' => time(),
|
||||
];
|
||||
|
||||
$shareholderDividendModel = new ShareholderDividendModel();
|
||||
|
||||
$shareholderDividendModel->fill($shareData);
|
||||
/**
|
||||
* 股东分红申请事件,《股东分红额度》插件验证数据,额度不足时,修改分红金额
|
||||
*
|
||||
* todo 有改变模型数据,不应该用事件(加速开发速度,暂时用事件处理)
|
||||
*/
|
||||
event(new ShareholderDividendApplyingEvent($shareholderDividendModel));
|
||||
|
||||
$shareholderDividendModel->save();
|
||||
|
||||
/**
|
||||
* 股东分红申请后事件,《股东分红额度》根据分红额度扣除'会员分红额度'
|
||||
*/
|
||||
event(new ShareholderDividendAppliedEvent($shareholderDividendModel));
|
||||
|
||||
$incomeData = [
|
||||
'uniacid' => $shareData['uniacid'],
|
||||
'member_id' => $shareData['member_id'],
|
||||
'incometable_type' => ShareholderDividendModel::class,
|
||||
'dividend_code' => IncomeService::SHAREHOLDER_DIVIDEND,
|
||||
'dividend_table_id' => $shareholderDividendModel->id,
|
||||
'type_name' => $typeName,
|
||||
'amount' => $shareData['amount'],
|
||||
'status' => 0,
|
||||
'pay_status' => 0,
|
||||
'create_month' => date('Y-m'),
|
||||
'created_at' => time()
|
||||
];
|
||||
$this->addIncome($incomeData);
|
||||
// $this->dispatch((new addShareholderDividendJob($shareData))); // 添加分红数据
|
||||
$member = Member::getMemberByUid($item->uid)->with('hasOneFans')->first();
|
||||
MessageService::shareholderDividend($shareData, $member, \YunShop::app()->uniacid); // 发送分红通知
|
||||
if (app('plugins')->isEnabled('instation-message')) {
|
||||
//开启了站内消息插件
|
||||
event(new \Yunshop\InstationMessage\event\ShareholderSettlementEvent([
|
||||
'changeTime' => date('Y-m-d H:i:s', time()),
|
||||
'order_amount' => $orderAmount,
|
||||
'dividend_amount' => $shareData['amount'],
|
||||
'member_id' => $shareData['member_id'],
|
||||
'uniacid' => $shareData['uniacid']
|
||||
]));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in New Issue