From eb6900320d55fd9188c6aa57ebed4f3487086b24 Mon Sep 17 00:00:00 2001 From: wuhui_zzw <1760308791@qq.com> Date: Thu, 26 Oct 2023 10:13:00 +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=E5=8D=87=E7=BA=A7=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=20-=20=E7=9B=B4=E6=8E=A8=E9=97=B4=E6=8E=A8=E6=8C=87=E5=AE=9A?= =?UTF-8?q?=E7=AD=89=E7=BA=A7=E4=BA=BA=E6=95=B0=E5=90=8E=E5=8F=AF=E4=BB=A5?= =?UTF-8?q?=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Listener/OrderPaidListener.php | 43 +++--- .../src/Listener/OrderReceiveListener.php | 42 +++--- .../commission/src/admin/LevelController.php | 7 +- .../src/services/AgentLevelService.php | 9 ++ .../src/services/UpgradeService.php | 141 ++++++++++++++---- .../views/admin/level_info.blade.php | 24 +++ 6 files changed, 196 insertions(+), 70 deletions(-) diff --git a/plugins/commission/src/Listener/OrderPaidListener.php b/plugins/commission/src/Listener/OrderPaidListener.php index d923f4ac..de78fe04 100644 --- a/plugins/commission/src/Listener/OrderPaidListener.php +++ b/plugins/commission/src/Listener/OrderPaidListener.php @@ -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()); } + } } diff --git a/plugins/commission/src/Listener/OrderReceiveListener.php b/plugins/commission/src/Listener/OrderReceiveListener.php index bd03ed1f..272e1cc2 100644 --- a/plugins/commission/src/Listener/OrderReceiveListener.php +++ b/plugins/commission/src/Listener/OrderReceiveListener.php @@ -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()); } + + } } diff --git a/plugins/commission/src/admin/LevelController.php b/plugins/commission/src/admin/LevelController.php index 68396d62..20894046 100644 --- a/plugins/commission/src/admin/LevelController.php +++ b/plugins/commission/src/admin/LevelController.php @@ -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(); } diff --git a/plugins/commission/src/services/AgentLevelService.php b/plugins/commission/src/services/AgentLevelService.php index c4ac56f4..923d0dcd 100644 --- a/plugins/commission/src/services/AgentLevelService.php +++ b/plugins/commission/src/services/AgentLevelService.php @@ -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; } diff --git a/plugins/commission/src/services/UpgradeService.php b/plugins/commission/src/services/UpgradeService.php index 921d3822..67d5a920 100644 --- a/plugins/commission/src/services/UpgradeService.php +++ b/plugins/commission/src/services/UpgradeService.php @@ -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']), ]; } diff --git a/plugins/commission/views/admin/level_info.blade.php b/plugins/commission/views/admin/level_info.blade.php index a53516d7..79e21b3f 100644 --- a/plugins/commission/views/admin/level_info.blade.php +++ b/plugins/commission/views/admin/level_info.blade.php @@ -138,6 +138,30 @@ + {{-- 直推间推 某个等级 满多少人 START --}} +
+ +
+ {{-- 直推间推 某个等级 满多少人 END --}} @foreach($upgrade_config as $key=>$config) @if($config['key'] != 'goods' && $config['key'] != 'self_order_after' && $config['key'] != 'many_good')