添加:分销商添加升级条件 - 直推间推指定等级人数后可以升级

This commit is contained in:
wuhui_zzw 2023-10-26 10:13:00 +08:00
parent 7d54455095
commit eb6900320d
6 changed files with 196 additions and 70 deletions

View File

@ -56,26 +56,31 @@ class OrderPaidListener
/**
* @param $model
*/
public function upgradeData($model)
{
$levels = UpgradeService::getLevelUpgraded();
if (!$levels) {
return;
}
$set = \Setting::get('plugin.commission');
if ($set['is_with']) {
\Log::debug('分销商升级[与]');
$this->dispatch((new UpgrateByOrderJob($model->uid, 1, $model, $levels, $set))->delay(10));
} else {
\Log::debug('订单升级->');
//分销商 自购升级
UpgradeService::selfBuyAfterPaid($model->uid);
//指定商品
foreach ($model->hasManyOrderGoods as $goods) {
UpgradeService::goodsAfterPaid($goods['goods_id'], $model->uid);
UpgradeService::manyGood($goods['goods_id'], $model->uid);
public function upgradeData($model){
try{
\Log::debug('分销商升级 - 订单支付->');
$levels = UpgradeService::getLevelUpgraded();
if (!$levels) return;
$set = \Setting::get('plugin.commission');
if ($set['is_with']) {
\Log::debug('分销商升级[与]');
$this->dispatch((new UpgrateByOrderJob($model->uid, 1, $model, $levels, $set))->delay(10));
} else {
//分销商 自购升级
UpgradeService::selfBuyAfterPaid($model->uid);
//指定商品
foreach ($model->hasManyOrderGoods as $goods) {
UpgradeService::goodsAfterPaid($goods['goods_id'], $model->uid);
UpgradeService::manyGood($goods['goods_id'], $model->uid);
}
// 直推间推满多少人
UpgradeService::oneOrTwo($model->uid, 'order_paid');
}
\Log::debug('订单升级<-');
\Log::debug('分销商升级 - 订单支付<-');
}catch(\Exception $e){
\Log::debug('分销商升级 - 订单支付<-ERROR',$e->getMessage());
}
}
}

View File

@ -105,25 +105,31 @@ class OrderReceiveListener
*/
public function upgradeData($model)
{
$levels = UpgradeService::getLevelUpgraded();
if (!$levels) {
return;
}
$set = \Setting::get('plugin.commission');
if ($set['is_with']) {
$this->dispatch((new UpgrateByOrderJob($model->uid, 0, $model, $levels, $set))->delay(10));
} else {
\Log::info('订单升级->');
//分销商 订单升级
UpgradeService::order($model->uid);
//分销商 自购升级
UpgradeService::selfBuy($model->uid);
//指定商品
foreach ($model->hasManyOrderGoods as $goods) {
UpgradeService::goods($goods['goods_id'], $model->uid);
UpgradeService::manyGood($goods['goods_id'], $model->uid);
try{
\Log::debug('分销商升级 - 订单完成->');
$levels = UpgradeService::getLevelUpgraded();
if (!$levels) return;
$set = \Setting::get('plugin.commission');
if ($set['is_with']) {
$this->dispatch((new UpgrateByOrderJob($model->uid, 0, $model, $levels, $set))->delay(10));
} else {
//分销商 订单升级
UpgradeService::order($model->uid);
//分销商 自购升级
UpgradeService::selfBuy($model->uid);
//指定商品
foreach ($model->hasManyOrderGoods as $goods) {
UpgradeService::goods($goods['goods_id'], $model->uid);
UpgradeService::manyGood($goods['goods_id'], $model->uid);
}
// 直推间推满多少人
UpgradeService::oneOrTwo($model->uid, 'order_receive');
}
\Log::info('订单升级<-');
\Log::debug('分销商升级 - 订单完成<-');
}catch(\Exception $e){
\Log::debug('分销商升级 - 订单完成<-ERROR',$e->getMessage());
}
}
}

View File

@ -78,7 +78,8 @@ class LevelController extends BaseController
'set' => $set,
'upgrade_data' => $upgrade_data,
'upgrade_config' => $upgrade_config,
'levelModel' => $LevelModel
'levelModel' => $LevelModel,
'level_list' => AgentLevel::uniacid()->select(['id','name'])->get()->toArray()
])->render();
}
@ -117,11 +118,13 @@ class LevelController extends BaseController
}
$upgrade_data = AgentLevelService::setUpgradedata($LevelModel->upgraded);
$upgrade_config = AgentLevelService::upgradeConfig();
return view('Yunshop\Commission::admin.level_info', [
'set' => $set,
'upgrade_data' => $upgrade_data,
'upgrade_config' => $upgrade_config,
'levelModel' => $LevelModel
'levelModel' => $LevelModel,
'level_list' => AgentLevel::uniacid()->select(['id','name'])->get()->toArray()
])->render();
}

View File

@ -35,6 +35,7 @@ class AgentLevelService
}
$data['buy_and_sum'] = $upgrade['buy_and_sum'];
$data['team_buy_sum'] = $upgrade['team_buy_sum'];
$data['one_or_two'] = $upgrade['one_or_two'];
return $data;
}
@ -60,6 +61,9 @@ class AgentLevelService
$upgrades[$key]['team_buy'] = intval($upgradeValue['team_buy']);
$upgrades[$key]['team_sum'] = intval($upgradeValue['team_sum']);
}
if ($key == 'one_or_two' && intval($upgradeValue['one_or_two'])) {
$upgrades[$key] = $upgradeValue['one_or_two'];
}
}
}
@ -92,6 +96,11 @@ class AgentLevelService
if ($type == 'team_buy_sum') {
$upgrades['team_buy_sum']['type'] = '团队下级购买指定商品ID'.$upgrade['team_buy_sum']['team_buy'].'满'.$upgrade['team_buy_sum']['team_sum'].'个';
}
if ($type == 'one_or_two') {
$levelId = $upgrade['one_or_two']['one_or_two_level_id'];
$lvName = AgentLevel::uniacid()->where('id',$levelId)->value('name');
$upgrades['one_or_two']['type'] = '直推间推'.$lvName.'满'.$upgrade['one_or_two']['one_or_two_people'].'人';
}
}
$level->upgrades = $upgrades;
}

View File

@ -5,6 +5,7 @@ namespace Yunshop\Commission\services;
use app\common\facades\Setting;
use app\common\models\member\MemberParent;
use app\common\models\Order;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
@ -54,14 +55,10 @@ class UpgradeService
{
//等级 升级条件
$levels = static::getLevelUpgraded();
if (!$levels) {
return;
}
if (!$levels) return;
//分销商数据
$agentModel = Agents::getAgentByMemberId($memberId)->first();
if (!$agentModel) {
return;
}
if (!$agentModel) return;
$order_query = CommissionOrder::where('member_id', $memberId)
->join('yz_order', function ($query) {
@ -79,35 +76,116 @@ class UpgradeService
foreach ($levels as $level) {
//团队+自购 购买指定商品满N件
if (isset($level['upgraded']['team_buy_sum'])) {
static::teamBuySum($memberId, $level);
}
if (isset($level['upgraded']['team_buy_sum'])) static::teamBuySum($memberId, $level);
//一级客户消费满x元 人数达到x个
if (isset($level['upgraded']['buy_and_sum'])) {
static::buyAndSum($memberId, $level);
}
if (!$order_count) {
continue;
}
if (isset($level['upgraded']['buy_and_sum'])) static::buyAndSum($memberId, $level);
if (!$order_count) continue;
//分销订单金额
if (isset($level['upgraded']['order_money'])) {
static::orderMoney($sum_price, $level, $memberId);
}
if (isset($level['upgraded']['order_money'])) static::orderMoney($sum_price, $level, $memberId);
//分销订单数量
if (isset($level['upgraded']['order_count'])) {
static::orderCount($order_count, $level, $memberId);
}
if (isset($level['upgraded']['order_count'])) static::orderCount($order_count, $level, $memberId);
//一级分销订单金额
if (isset($level['upgraded']['first_order_money'])) {
static::firstOrderMoney($first_sum_price, $level, $memberId);
}
if (isset($level['upgraded']['first_order_money'])) static::firstOrderMoney($first_sum_price, $level, $memberId);
//一级分销订单数量
if (isset($level['upgraded']['first_order_count'])) {
static::firstOrderCount($first_order_count, $level, $memberId);
}
if (isset($level['upgraded']['first_order_count'])) static::firstOrderCount($first_order_count, $level, $memberId);
}
return;
}
// 升级条件判断 - 直推间推多少人
public static function oneOrTwo($memberId, $type = 'order_receive'){
try{
// \Log::debug('分销商升级 - 直推间推人数 - 开始处理:',['member_id'=>$memberId,'type'=>$type]);
// 等级 升级条件
$levels = static::getLevelUpgraded();
if (!$levels) return;
// 分销商数据
$agentModel = Agents::getAgentByMemberId($memberId)->first();
if (!$agentModel) return;
// 获取全部上级
$parentAgent = self::getParentsCommission($memberId);
// \Log::debug('分销商升级 - 直推间推人数 - 本人及上级分销商信息:',$parentAgent);
// \Log::debug('分销商升级 - 直推间推人数 - 等级信息:',$levels);
// 循环处理
$levelNameList = array_column($levels,'name','id');
foreach($levels as $levelIndex => $levelItem){
$upgraded = $levelItem['upgraded'] ?? [];
$oneOrTwo = $upgraded['one_or_two'] ?? [];
// 判断:支付后 完成后 是否存在对应的设置
if(!empty($oneOrTwo) && (($type == 'order_receive' && (int)$upgraded['self_order_after'] != 1) || ($type == 'order_paid' && (int)$upgraded['self_order_after'] == 1))){
// \Log::debug('分销商升级 - 直推间推人数 - 升级条件:',$oneOrTwo);
// 循环所有上级 判断是否可以升级到当前等级
foreach($parentAgent as $parentUser){
if((int)$parentUser['agent_level']['level'] < (int)$levelItem['level']){
$oneLvAndTwoLvNum = MemberParent::getOneOrTwoList($parentUser['member_id']);
$subMemberIds = array_column($oneLvAndTwoLvNum,'member_id');
$hasNum = (int)\Yunshop\Commission\models\Log::uniacid()
->where('after_level_id',$oneOrTwo['one_or_two_level_id'])
->whereIn('uid',$subMemberIds)
->count(DB::raw('DISTINCT(uid)'));
// 判断:是否达到升级要求 需求人数小于等于当前人数-达成升级条件
$people = (int)$oneOrTwo['one_or_two_people'] > 0 ? (int)$oneOrTwo['one_or_two_people'] : 1;
$isReach = (boolean)($people <= $hasNum);
$validateResult = static::validate($levelItem['level'], $parentUser['member_id']);
// \Log::debug('分销商升级 - 直推间推人数 - 升级:',[
// '当前分销商uid' => $parentUser['member_id'],
// '当前分销商等级权重' => $parentUser['agent_level']['level'],
// '升级后等级权重' => (int)$levelItem['level'],
// '一二下级id' => implode(',',$subMemberIds),
// '拥有的人数' => $hasNum,
// '条件人数' => $people,
// '是否达成' => $isReach,
// "直推间推{$levelNameList[$oneOrTwo['one_or_two_level_id']]}满{$people}人"
// ]);
if($isReach && $validateResult) {
\Yunshop\Commission\models\Log::addLog(
$validateResult['agent_level_id'],
$levelItem['id'],
$validateResult,
"直推间推{$levelNameList[$oneOrTwo['one_or_two_level_id']]}{$people}"
);
static::upgrade($levelItem, $parentUser['member_id'], $validateResult);
}
}
}
}
}
}catch(\Exception $e){
\Log::debug('分销商升级 - 直推间推人数 - 错误:',$e->getMessage());
}
return;
}
/**
* Common: 获取全部的本人及上级分销商信息
* Author: wu-hui
* Time: 2023/10/25 17:44
* @param $memberId
* @return array
*/
public static function getParentsCommission($memberId){
$parents = MemberParent::uniacid()
->where('member_id', $memberId)
->select(['parent_id','level'])
->orderBy('level', 'asc')
->get()
->keyBy('parent_id')
->toArray();
$parentMemberIds = array_column($parents,'parent_id');
$parentMemberIds[] = $memberId;
$parentAgent = Agents::uniacid()
->select(['member_id','agent_level_id','is_black'])
->whereIn('member_id',$parentMemberIds)
->get()
->toArray();
// 循环重构数组信息
foreach($parentAgent as &$agentInfo){
$agentInfo['distance'] = $parents[$agentInfo['member_id']]['level'];
}
array_multisort($parentAgent,SORT_ASC,array_column($parentAgent,'distance'));
return $parentAgent;
}
public static function teamBuySum($uid, $level_model)
{
@ -490,7 +568,7 @@ class UpgradeService
*/
public static function member($memberId)
{
Log::info('会员下线升级');
\Log::debug('分销商升级 - 会员下线升级入口');
//等级 升级条件
$levels = static::getLevelUpgraded();
if (!$levels) {
@ -581,11 +659,11 @@ class UpgradeService
*/
public static function agent($agent)
{
\Log::debug('分销商升级 - 分销下线升级入口');
//等级 升级条件
$levels = static::getLevelUpgraded();
if (!$levels) {
return;
}
if (!$levels) return;
$agentPraent = Agents::getPraents($agent->parent)->get();
foreach ($levels as $level) {
@ -821,6 +899,7 @@ class UpgradeService
$levelData[$key] = [
'id' => $level['id'],
'level' => $level['level'],
'name' => $level['name'],
'upgraded' => unserialize($level['upgraded']),
];
}

View File

@ -138,6 +138,30 @@
<span></span>
</label>
</div>
{{-- 直推间推 某个等级 满多少人 START --}}
<div class="input-group row">
<label class="radio-inline col-xs-12 col-sm-12">
<div class="col-xs-12 col-sm-12" style="padding-left: 0">
<div class='input-group'>
<div class='input-group-addon waytxt'>
<input type="checkbox" name="upgrade_type[one_or_two]" value="1" @if ($upgrade_data['one_or_two']) checked @endif>
</div>
<div class='input-group-addon waytxt'>直推间推</div>
<select name='upgrade_value[one_or_two][one_or_two_level_id]' class="form-control" style="width: 150px;">
@foreach($level_list as $level)
<option value='{{$level['id']}}' @if($level['id'] == $upgrade_data['one_or_two']['one_or_two_level_id'])selected @endif >
{{$level['name']}}
</option>
@endforeach
</select>
<div class='input-group-addon waytxt'>等级,总人数达到</div>
<input type="number" name="upgrade_value[one_or_two][one_or_two_people]" value="{{$upgrade_data['one_or_two']['one_or_two_people']}}" class="form-control">
<div class='input-group-addon waytxt'>(不填或0默认为1人)</div>
</div>
</div>
</label>
</div>
{{-- 直推间推 某个等级 满多少人 END --}}
@foreach($upgrade_config as $key=>$config)
@if($config['key'] != 'goods' && $config['key'] != 'self_order_after' && $config['key'] != 'many_good')