From 8ef8d416a13dfc14fc57e199b382b3dabfdac332 Mon Sep 17 00:00:00 2001 From: wuhui_zzw <1760308791@qq.com> Date: Wed, 11 Oct 2023 16:25:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=9A=E5=88=86=E9=94=80?= =?UTF-8?q?=E5=95=86=E6=B7=BB=E5=8A=A0=E4=BA=BA=E6=95=B0=E9=99=90=E5=88=B6?= =?UTF-8?q?=EF=BC=88=E6=AF=8F=E4=B8=AA=E7=AD=89=E7=BA=A7=E5=8D=95=E7=8B=AC?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Listener/OrderPaidListener.php | 8 +- plugins/commission/src/models/AgentLevel.php | 15 ++-- plugins/commission/src/models/Agents.php | 2 + .../src/observers/AgentsObserver.php | 27 +++++++ .../src/services/BecomeAgentService.php | 81 +++++++++++-------- .../src/services/UpgradeService.php | 14 ++++ .../views/admin/level_info.blade.php | 20 +++-- .../src/observers/DealerObserver.php | 2 +- 8 files changed, 117 insertions(+), 52 deletions(-) create mode 100644 plugins/commission/src/observers/AgentsObserver.php diff --git a/plugins/commission/src/Listener/OrderPaidListener.php b/plugins/commission/src/Listener/OrderPaidListener.php index 30a82859..d923f4ac 100644 --- a/plugins/commission/src/Listener/OrderPaidListener.php +++ b/plugins/commission/src/Listener/OrderPaidListener.php @@ -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('订单升级<-'); } } } diff --git a/plugins/commission/src/models/AgentLevel.php b/plugins/commission/src/models/AgentLevel.php index 2393af09..6e909f80 100644 --- a/plugins/commission/src/models/AgentLevel.php +++ b/plugins/commission/src/models/AgentLevel.php @@ -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 = ['']; diff --git a/plugins/commission/src/models/Agents.php b/plugins/commission/src/models/Agents.php index 8beb9f63..cdd631a8 100644 --- a/plugins/commission/src/models/Agents.php +++ b/plugins/commission/src/models/Agents.php @@ -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()); } } \ No newline at end of file diff --git a/plugins/commission/src/observers/AgentsObserver.php b/plugins/commission/src/observers/AgentsObserver.php new file mode 100644 index 00000000..f8b39bf6 --- /dev/null +++ b/plugins/commission/src/observers/AgentsObserver.php @@ -0,0 +1,27 @@ +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; + } + } + + + + +} diff --git a/plugins/commission/src/services/BecomeAgentService.php b/plugins/commission/src/services/BecomeAgentService.php index 7b94cad1..c6f12a53 100644 --- a/plugins/commission/src/services/BecomeAgentService.php +++ b/plugins/commission/src/services/BecomeAgentService.php @@ -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 { diff --git a/plugins/commission/src/services/UpgradeService.php b/plugins/commission/src/services/UpgradeService.php index d6c22e21..a6862624 100644 --- a/plugins/commission/src/services/UpgradeService.php +++ b/plugins/commission/src/services/UpgradeService.php @@ -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'] = '默认等级'; diff --git a/plugins/commission/views/admin/level_info.blade.php b/plugins/commission/views/admin/level_info.blade.php index 8346983e..a53516d7 100644 --- a/plugins/commission/views/admin/level_info.blade.php +++ b/plugins/commission/views/admin/level_info.blade.php @@ -24,14 +24,24 @@
- +
- +
+ +
+ +
+
+ +
+
+ 当前等级总人数达到指定数量后,其他人则不能升级到当前等级。为空或者0则不限制人数 +
+
+ + @if($set['level']>=1)
diff --git a/plugins/team-dividend/src/observers/DealerObserver.php b/plugins/team-dividend/src/observers/DealerObserver.php index 5ee914c3..7e7b4160 100644 --- a/plugins/team-dividend/src/observers/DealerObserver.php +++ b/plugins/team-dividend/src/observers/DealerObserver.php @@ -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; }