添加:分销商添加人数限制(每个等级单独设置)

This commit is contained in:
wuhui_zzw 2023-10-11 16:25:55 +08:00
parent cd9a571d4d
commit 8ef8d416a1
8 changed files with 117 additions and 52 deletions

View File

@ -29,7 +29,7 @@ class OrderPaidListener
{
date_default_timezone_set("PRC");
$model = $event->getOrderModel();
\Log::info('分销订单支付',$model->id);
\Log::debug('分销订单支付',$model->id);
//先验证是否成为分销商
(new BecomeAgentService())->verification($model->uid, 0);
$this->upgradeData($model);
@ -64,10 +64,10 @@ class OrderPaidListener
}
$set = \Setting::get('plugin.commission');
if ($set['is_with']) {
\Log::info('分销商升级[与]');
\Log::debug('分销商升级[与]');
$this->dispatch((new UpgrateByOrderJob($model->uid, 1, $model, $levels, $set))->delay(10));
} else {
\Log::info('订单升级->');
\Log::debug('订单升级->');
//分销商 自购升级
UpgradeService::selfBuyAfterPaid($model->uid);
//指定商品
@ -75,7 +75,7 @@ class OrderPaidListener
UpgradeService::goodsAfterPaid($goods['goods_id'], $model->uid);
UpgradeService::manyGood($goods['goods_id'], $model->uid);
}
\Log::info('订单升级<-');
\Log::debug('订单升级<-');
}
}
}

View File

@ -17,13 +17,14 @@ class AgentLevel extends BaseModel
public $table = 'yz_agent_level';
static protected $needLog = true;
public $attributes = [
'name' => '',
'level' => '',
'first_level' => '',
'second_level' => '',
'third_level' => '',
'upgrade_type' => '',
'upgrade_value' => ''
'name' => '',
'level' => '',
'first_level' => '',
'second_level' => '',
'third_level' => '',
'upgrade_type' => '',
'upgrade_value' => '',
'number_limit' => 0
];
protected $guarded = [''];

View File

@ -9,6 +9,7 @@ use app\common\models\member\MemberParent;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Facades\DB;
use Illuminate\Database\Eloquent\Builder;
use Yunshop\Commission\observers\AgentsObserver;
/**
* Class Agents
@ -611,5 +612,6 @@ class Agents extends BaseModel
static::addGlobalScope(function (Builder $builder) {
$builder->uniacid();
});
self::observe(new AgentsObserver());
}
}

View File

@ -0,0 +1,27 @@
<?php
namespace Yunshop\Commission\observers;
use app\common\observers\BaseObserver;
use Illuminate\Database\Eloquent\Model;
use Yunshop\Commission\models\AgentLevel;
use Yunshop\Commission\models\Agents;
class AgentsObserver extends BaseObserver{
// 修改前
public function updating(Model $model){
// \Log::debug('修改分销商 - 信息:',$model->toArray());
if ($model->getOriginal('agent_level_id') != $model->agent_level_id) {
// 判断:如果当前等级人数已经达到限制 则不升级(上限小于等于已存在数量 不能升级到该等级)
$hasNum = (int)Agents::uniacid()->where('member_id','!=',$model->member_id)->count();
$levelNumberLimit = (int)AgentLevel::uniacid()->where('id',$model->agent_level_id)->value('number_limit');
if((int)$levelNumberLimit <= $hasNum && (int)$levelNumberLimit > 0) return false;
}
}
}

View File

@ -25,58 +25,69 @@ class BecomeAgentService
{
$agent = Agents::getAgentByMemberId($uid)->first();
if($agent){
\Log::debug('成为分销商条件判断 - 已经成为分销商');
return;
}
$set = MemberRelation::getSetInfo()->first();
if (empty($set)) {
\Log::debug('成为分销商条件判断 - 关系链不存在');
return;
}
//付款后 完成后
if ($set->become_order != $order_status) {
\Log::debug('成为分销商条件判断 - 订单完成后触发');
return;
}
$become_term = unserialize($set->become_term);
if (empty($become_term)) {
return;
}
//只支持 或和与
if ($set->become != 2 && $set->become != 3) {
return;
}
//如果销售佣金插件未开启则不走销售佣金
if (!app('plugins')->isEnabled('sale-commission')) {
unset($become_term[5]);
}
$result = false;
foreach ($become_term as $item) {
$result = $this->conditionalVerification($item, $set, $uid);
//或
if ($set->become == 2) {
// 假 继续循环
if ($result) {
break;
}
// 真 跳出循环
continue;
$become_term = is_array(unserialize($set->become_term)) ? unserialize($set->become_term) : [];
if(($set->become == 2 || $set->become == 3)){
// 有条件
if (empty($become_term)) {
\Log::debug('成为分销商条件判断 - 条件未设置');
return;
}
//与
if ($set->become == 3) {
if (!$result) {
break;
}
//只支持 或和与
// if ($set->become != 2 && $set->become != 3) {
// \Log::debug('成为分销商条件判断 - 条件设置错误');
// return;
// }
//如果销售佣金插件未开启则不走销售佣金
if (!app('plugins')->isEnabled('sale-commission')) {
unset($become_term[5]);
}
$result = false;
foreach ($become_term as $item) {
$result = $this->conditionalVerification($item, $set, $uid);
//或
if ($set->become == 2) {
// 假 继续循环
if ($result) break;
// 真 跳出循环
continue;
}
//与
if ($set->become == 3 && !$result) break;
}
}
if ($result) {
$this->become($uid);
else if((int)$set->become == 0){
// 无条件
$result = true;
}else{
// 需要申请
$result = false;
}
\Log::debug('成为分销商条件判断 - 最终结果:',$result);
if ($result) $this->become($uid);
}
public function conditionalVerification($item, $set, $uid)
@ -138,7 +149,7 @@ class BecomeAgentService
if (!$levels) {
return;
}
\Log::debug("监听is_with",$set);
\Log::debug("监听is_with",$set['is_with']);
if ($set['is_with']) {
$this->dispatch(new UpgrateByRegisterJob($yzMemberModel['member_id'], $levels));
} else {

View File

@ -854,6 +854,20 @@ class UpgradeService
}
$newLevel = $newLevel->toArray();
$oldLevel = AgentLevel::getAgentLevelByid($agent->agent_level_id);
// 判断:如果当前等级人数已经达到限制 则不升级(上限小于等于已存在数量 不能升级到该等级)
// \Log::debug('修改分销商等级信息 - 分销商升级',['level_id'=>$level['id'],'member_id' => $memberId]);
$hasNum = (int)Agents::uniacid()->where('member_id','!=',$memberId)->count();
if((int)$newLevel['number_limit'] <= $hasNum && (int)$newLevel['number_limit'] > 0) {
\Log::debug("当前等级已达到人数上限", [
'next_lv_id' => $level['id'],
'current_lv_id' => $agent->agent_level_id,
'next_lv_limit' => $newLevel['number_limit'],
'has_num' => $hasNum,
]);
return false;
}
if (!$oldLevel) {
$oldLevel['name'] = '默认等级';

View File

@ -24,14 +24,24 @@
</div>
<div class="form-group">
<label class="col-xs-12 col-sm-3 col-md-2 control-label"><span
style='color:red'>*</span>
等级名称</label>
<label class="col-xs-12 col-sm-3 col-md-2 control-label"><span style='color:red'>*</span>等级名称</label>
<div class="col-sm-9 col-xs-12">
<input type="text" name="level[name]" class="form-control"
value="{{$levelModel['name']}}"/>
<input type="text" name="level[name]" class="form-control" value="{{$levelModel['name']}}"/>
</div>
</div>
<div class="form-group">
<label class="col-xs-12 col-sm-3 col-md-2 control-label">等级人数限制</label>
<div class="col-sm-6 col-xs-6">
<div class='input-group col-xs-4'>
<input type='text' name='level[number_limit]' class="form-control" value="{{$levelModel['number_limit'] ?? 0}}"/>
<div class='input-group-addon waytxt'></div>
</div>
<span class="help-block">当前等级总人数达到指定数量后其他人则不能升级到当前等级。为空或者0则不限制人数</span>
</div>
</div>
@if($set['level']>=1)
<div class="form-group">
<label class="col-xs-12 col-sm-3 col-md-2 control-label">一级分销比例</label>

View File

@ -31,7 +31,7 @@ class DealerObserver extends BaseObserver
*/
event(new LevelChangeEvent($model));
// 判断:如果当前等级人数已经达到限制 则不升级(上限小于等于已存在数量 不能升级到该等级)
$hasNum = (int)TeamDividendAgencyModel::uniacid()->count();
$hasNum = (int)TeamDividendAgencyModel::uniacid()->where('uid','!=',$model->uid)->count();
$levelNumberLimit = (int)TeamDividendLevelModel::uniacid()->where('id',$model->level)->value('number_limit');
if((int)$levelNumberLimit <= $hasNum && (int)$levelNumberLimit > 0) return false;
}