From 869c82b06c602629c082729771ef55689db26782 Mon Sep 17 00:00:00 2001 From: wuhui_zzw <1760308791@qq.com> Date: Thu, 30 Nov 2023 19:57:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E5=88=86=E9=94=80?= =?UTF-8?q?=E5=95=86=E5=8D=87=E7=BA=A7=E6=9D=A1=E4=BB=B6=20=E7=9B=B4?= =?UTF-8?q?=E6=8E=A8=E9=97=B4=E6=8E=A8=E5=A4=9A=E5=B0=91=E4=BA=BA=E3=80=81?= =?UTF-8?q?=E5=9B=A2=E9=98=9F=E4=B8=9A=E7=BB=A9=E6=BB=A1=E5=A4=9A=E5=B0=91?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=92=8C=E5=85=B6=E4=BB=96=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E4=B8=80=E8=B5=B7=E4=BD=BF=E7=94=A8=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=EF=BC=9A=E4=B8=80=E7=BA=A7=E7=B2=89=E4=B8=9D=E5=88=86=E9=94=80?= =?UTF-8?q?=E5=95=86=E6=BB=A1X=E4=BA=BA=20=E4=B8=8D=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E7=AD=89=E7=BA=A7=E7=BB=8F=E9=94=80=E5=95=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../survey/controllers/SurveyController.php | 2 +- .../commission/src/Jobs/UpgrateByOrderJob.php | 13 +- .../commission/src/admin/FixController.php | 15 +- .../src/services/UpgrateConditionsService.php | 176 ++++++++++++++++-- 4 files changed, 176 insertions(+), 30 deletions(-) diff --git a/app/backend/modules/survey/controllers/SurveyController.php b/app/backend/modules/survey/controllers/SurveyController.php index 218f445e..abbfceb2 100644 --- a/app/backend/modules/survey/controllers/SurveyController.php +++ b/app/backend/modules/survey/controllers/SurveyController.php @@ -939,7 +939,7 @@ class SurveyController extends BaseController{ // 获取存在数据的表 $hasTable = $this->getHasDataTable($tables,$notCleanUp); - +debug($hasTable); // 执行清除操作 // foreach($tables as $name){ // if(!in_array($name,$notCleanUp)){ diff --git a/plugins/commission/src/Jobs/UpgrateByOrderJob.php b/plugins/commission/src/Jobs/UpgrateByOrderJob.php index 02242640..8db88f9e 100644 --- a/plugins/commission/src/Jobs/UpgrateByOrderJob.php +++ b/plugins/commission/src/Jobs/UpgrateByOrderJob.php @@ -70,13 +70,15 @@ class UpgrateByOrderJob implements ShouldQueue $agent = Agents::getAgentByMemberId($uid)->first(); // 没有分销商数据 或 不允许升级 if (!$agent || $agent->agent_not_upgrade) { - file_put_contents(storage_path('logs/Y0914.txt'), print_r('UID['.$uid.']没有分销商数据 或 不允许升级, '.PHP_EOL,1), FILE_APPEND); + \Log::debug('UID['.$uid.']没有分销商数据 或 不允许升级,'); + // file_put_contents(storage_path('logs/Y0914.txt'), print_r('UID['.$uid.']没有分销商数据 或 不允许升级, '.PHP_EOL,1), FILE_APPEND); } else { // 分销商的等级权重 $agent_level_weight = isset($agent->agentLevel->level) ? $agent->agentLevel->level : 0; // uid 重新赋值 $this->uid = $agent->member_id; - file_put_contents(storage_path('logs/Y0914.txt'), print_r('time:'.date('Y-m-d H:i:s').',UID['.$this->uid.']要进行升级'.PHP_EOL,1), FILE_APPEND); + \Log::debug('UID['.$this->uid.']要进行升级'); + // file_put_contents(storage_path('logs/Y0914.txt'), print_r('time:'.date('Y-m-d H:i:s').',UID['.$this->uid.']要进行升级'.PHP_EOL,1), FILE_APPEND); // 下一步 $this->fecLevels($agent_level_weight); } @@ -98,9 +100,8 @@ class UpgrateByOrderJob implements ShouldQueue // 判断条件 $condition = $this->getCondition($level); - if ($condition) { - continue; - } + if ($condition) continue; + // 触发升级条件判断 $is_upgrate = $this->upgrateVerdict($level, $is_upgrate); if ($is_upgrate) { @@ -133,7 +134,7 @@ class UpgrateByOrderJob implements ShouldQueue $function_name = Str::camel($upgrateType); // 验证方法是否存在 并 执行 if(method_exists(new UpgrateConditionsService(), $function_name)) { - $is_upgrate = UpgrateConditionsService::$function_name($this->uid, $level, $this->order, $level['upgraded']['self_order_after']); + $is_upgrate = UpgrateConditionsService::$function_name($this->uid, $level, $this->order, $level['upgraded']['self_order_after'],$this->self_order_after); // 返回false 跳出循环 if (!$is_upgrate) { break; diff --git a/plugins/commission/src/admin/FixController.php b/plugins/commission/src/admin/FixController.php index 91d278e7..22aa12ea 100644 --- a/plugins/commission/src/admin/FixController.php +++ b/plugins/commission/src/admin/FixController.php @@ -29,13 +29,16 @@ class FixController extends BaseController // plugin.commission.admin.fix.test public function test() { - $levels = UpgradeService::getLevelUpgraded(); - $set = \Setting::get('plugin.commission'); - (new UpgrateByOrderJob($model->uid, 0, $model, $levels, $set))->handle(); - - (new OrderCreatedListener())->handler(Order::find(230995)); - dd('ok'); + // $model = Order::find(276); + // $levels = UpgradeService::getLevelUpgraded(); + // $set = \Setting::get('plugin.commission'); + // (new UpgrateByOrderJob($model->uid, 1, $model, $levels, $set))->handle(); + // + // debug("完成") + // + // (new OrderCreatedListener())->handler(Order::find(230995)); + // dd('ok'); } public function up() diff --git a/plugins/commission/src/services/UpgrateConditionsService.php b/plugins/commission/src/services/UpgrateConditionsService.php index 369c4b71..75590863 100644 --- a/plugins/commission/src/services/UpgrateConditionsService.php +++ b/plugins/commission/src/services/UpgrateConditionsService.php @@ -9,17 +9,20 @@ namespace Yunshop\Commission\services; use app\common\models\member\ChildrenOfMember; +use app\common\models\member\MemberParent; use app\common\models\Order; +use Illuminate\Support\Facades\DB; use Yunshop\Commission\models\Agents; use Yunshop\Commission\models\BlackLog; use Yunshop\Commission\models\CommissionOrder; use Yunshop\Commission\models\YzMember; use Yunshop\Love\Common\Models\LoveRecords; use Yunshop\Love\Common\Services\ConstService; +use Yunshop\TeamDividend\admin\models\MemberChild; class UpgrateConditionsService { - public static function teamBuySum($uid, $level_model, $order_model, $self_order_after) + public static function teamBuySum($uid, $level_model, $order_model, $self_order_after,$current_self_order_after) { $total = $level_model['upgraded']['team_buy_sum']['team_sum']; $goodsId = $level_model['upgraded']['team_buy_sum']['team_buy']; @@ -50,7 +53,7 @@ class UpgrateConditionsService } // 一级客户消费满x元 人数达到x个 - public static function buyAndSum($uid, $level_model, $order_model, $self_order_after) + public static function buyAndSum($uid, $level_model, $order_model, $self_order_after,$current_self_order_after) { $status = $self_order_after == 1 ? 1: 3; @@ -76,7 +79,7 @@ class UpgrateConditionsService } // 分销订单金额满x元 - public static function orderMoney($uid, $level_model, $order_model, $self_order_after) + public static function orderMoney($uid, $level_model, $order_model, $self_order_after,$current_self_order_after) { $order = self::orderCommon($uid); // 比较 @@ -87,7 +90,7 @@ class UpgrateConditionsService } // 分销订单数量满X个 - public static function orderCount($uid, $level_model, $order_model, $self_order_after) + public static function orderCount($uid, $level_model, $order_model, $self_order_after,$current_self_order_after) { $order = self::orderCommon($uid); // 比较 @@ -98,7 +101,7 @@ class UpgrateConditionsService } // 一级分销订单金额满X元 - public static function firstOrderMoney($uid, $level_model, $order_model, $self_order_after) + public static function firstOrderMoney($uid, $level_model, $order_model, $self_order_after,$current_self_order_after) { $order = self::orderCommon($uid); // 一级层级分销订单 @@ -111,7 +114,7 @@ class UpgrateConditionsService } // 一级分销订单数量满X个 - public static function firstOrderCount($uid, $level_model, $order_model, $self_order_after) + public static function firstOrderCount($uid, $level_model, $order_model, $self_order_after,$current_self_order_after) { $order = self::orderCommon($uid); // 一级层级分销订单 @@ -124,7 +127,7 @@ class UpgrateConditionsService } // 购买指定商品 - public static function goods($uid, $level_model, $order_model, $self_order_after) + public static function goods($uid, $level_model, $order_model, $self_order_after,$current_self_order_after) { // 如果订单是已付款 并且 等级设置不是 付款后 返回 /*if ($order_model->status == 1 && $self_order_after != 1) { @@ -179,7 +182,7 @@ class UpgrateConditionsService // } // 自购订单金额满X元 - public static function selfBuyMoney($uid, $level_model, $order_model, $self_order_after) + public static function selfBuyMoney($uid, $level_model, $order_model, $self_order_after,$current_self_order_after) { $status = $self_order_after == 1 ? 1: 3; @@ -191,7 +194,7 @@ class UpgrateConditionsService } // 自购订单数量满X个 - public static function selfBuyCount($uid, $level_model, $order_model, $self_order_after) + public static function selfBuyCount($uid, $level_model, $order_model, $self_order_after,$current_self_order_after) { $status = 3; if ($self_order_after == 1) { @@ -205,7 +208,7 @@ class UpgrateConditionsService } // 结算佣金满X元 - public static function settleMoney($uid, $level_model, $order_model, $self_order_after) + public static function settleMoney($uid, $level_model, $order_model, $self_order_after,$current_self_order_after) { $agentModel = Agents::getAgentByMemberId($uid)->first(); if ($agentModel->commission_total < $level_model['upgraded']['settle_money']) { @@ -215,7 +218,7 @@ class UpgrateConditionsService } // 粉丝数量满X人 - public static function lowerCount($uid, $level_model, $order_model, $self_order_after) + public static function lowerCount($uid, $level_model, $order_model, $self_order_after,$current_self_order_after) { $memberPraentData = YzMember::getLowerData($uid)->get(); if ($memberPraentData->count('member_id') < $level_model['upgraded']['lower_count']) { @@ -225,7 +228,7 @@ class UpgrateConditionsService } // 一级粉丝数量满X人 - public static function firstLowerCount($uid, $level_model, $order_model, $self_order_after) + public static function firstLowerCount($uid, $level_model, $order_model, $self_order_after,$current_self_order_after) { $memberPraentData = YzMember::getLowerData($uid, '1')->get(); if ($memberPraentData->count('member_id') < $level_model['upgraded']['first_lower_count']) { @@ -235,7 +238,7 @@ class UpgrateConditionsService } // 粉丝分销商满X人 - public static function lowerAgentCount($uid, $level_model, $order_model, $self_order_after) + public static function lowerAgentCount($uid, $level_model, $order_model, $self_order_after,$current_self_order_after) { $agentPraentData = Agents::getLowerData($uid)->get(); if ($agentPraentData->count('id') < $level_model['upgraded']['lower_agent_count']) { @@ -245,9 +248,13 @@ class UpgrateConditionsService } // 一级粉丝分销商满X人 - public static function firstLowerAgentCount($uid, $level_model, $order_model, $self_order_after) + public static function firstLowerAgentCount($uid, $level_model, $order_model, $self_order_after,$current_self_order_after) { - $agentPraentData = Agents::getLowerData($uid, '1')->get(); + $agentPraentData = Agents::getLowerData($uid,'1') + ->where(function($query){ + $query->where('agent_level_id','>',0) + ->orWhere('cultural_level_id','>',0); + }); if ($agentPraentData->count('id') < $level_model['upgraded']['first_lower_agent_count']) { return false; } @@ -262,7 +269,7 @@ class UpgrateConditionsService * @return bool * 取消黑名单后累计自购订单冻结爱心值 */ - public static function selfLoveAfterBlack($uid, $level, $order, $self_order_after){ + public static function selfLoveAfterBlack($uid, $level, $order, $self_order_after,$current_self_order_after){ if (!app('plugins')->isEnabled('love')) { return false; } @@ -304,7 +311,7 @@ class UpgrateConditionsService * @return bool * 累计自购订单冻结爱心值 */ - public static function selfLove($uid, $level, $order, $self_order_after){ + public static function selfLove($uid, $level, $order, $self_order_after,$current_self_order_after){ if (!app('plugins')->isEnabled('love')) { return false; } @@ -340,4 +347,139 @@ class UpgrateConditionsService // 返回分销订单集合 return $order; } + + // 升级条件判断 - 直推间推多少人 + public static function oneOrTwo($memberId, $level, $order, $self_order_after,$current_self_order_after){ + try{ + $isPass = false; + $type = (int)$current_self_order_after == 1 ? 'order_paid' : 'order_receive'; + // \Log::debug('分销商升级 - 直推间推人数 - 开始处理(与):',['member_id'=>$memberId,'type'=>$type]); + // 分销商数据 + $agentModel = Agents::getAgentByMemberId($memberId)->first(); + if (!$agentModel) return false; + // 获取全部上级 + $parentAgent = self::getParentsCommission($memberId); + // \Log::debug('分销商升级 - 直推间推人数 - 本人及上级分销商信息:',$parentAgent); + // \Log::debug('分销商升级 - 直推间推人数 - 等级信息:',$levels); + $upgraded = $level['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(($level['level_type'] == 1 ? (int)$parentUser['cultural_level']['level'] : (int)$parentUser['agent_level']['level']) < (int)$level['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 = UpgradeService::validate($level, $parentUser['member_id']); + // \Log::debug('分销商升级 - 直推间推人数 - 升级:',[ + // '当前分销商uid' => $parentUser['member_id'], + // '当前分销商等级权重' => ($levelItem['level_type'] == 1 ? (int)$parentUser['cultural_level']['level'] : (int)$parentUser['agent_level']['level']), + // '升级后等级权重' => (int)$levelItem['level'], + // '一二下级id' => implode(',',$subMemberIds), + // '拥有的人数' => $hasNum, + // '条件人数' => $people, + // '是否达成' => $isReach, + // "直推间推{$levelNameList[$oneOrTwo['one_or_two_level_id']]}满{$people}人" + // ]); + if($isReach && $validateResult) $isPass = true; + } + } + } + + + return $isPass; + }catch(\Exception $e){ + \Log::debug('分销商升级 - 直推间推人数 - 错误(与):',$e->getMessage()); + } + return false; + } + // 获取全部的本人及上级分销商信息 + 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','cultural_level_id','is_black']) + ->whereIn('member_id',$parentMemberIds) + ->get() + ->toArray(); + // 循环重构数组信息 + // foreach($parentAgent as &$agentInfo){ + // $agentInfo['distance'] = 0;//$parents[$agentInfo['member_id']]['level']; + // } + // array_multisort($parentAgent,SORT_ASC,array_column($parentAgent,'distance')); + + // 这里是要本人 + return $parentAgent; + } + // 升级条件判断 - 团队业绩满多少 + public static function teamPerformance($memberId, $level, $order, $self_order_after,$current_self_order_after){ + try{ + $isPass = false; + $type = (int)$current_self_order_after == 1 ? 'order_paid' : 'order_receive'; + // \Log::debug('分销商升级 - 团队业绩满多少 - 开始处理(与):',$memberId); + // 分销商数据 + $agentModel = Agents::getAgentByMemberId($memberId)->first(); + if (!$agentModel) return false; + // 获取全部上级 + $parentAgent = self::getParentsCommission($memberId); + + $upgraded = $level['upgraded'] ?? []; + $teamPerformance = $upgraded['team_performance'] ?? []; + // 判断:支付后 完成后 是否存在对应的设置 + if(!empty($teamPerformance) && (($type == 'order_receive' && (int)$upgraded['self_order_after'] != 1) || ($type == 'order_paid' && (int)$upgraded['self_order_after'] == 1))){ + // \Log::debug('分销商升级 - 团队业绩满多少 - 升级条件:',$teamPerformance); + // 循环所有上级 判断是否可以升级到当前等级 + foreach($parentAgent as $parentUser){ + if(($level['level_type'] == 1 ? (int)$parentUser['cultural_level']['level'] : (int)$parentUser['agent_level']['level']) < (int)$level['level']){ + // 获取直推下级列表 + $subIds = MemberChild::uniacid() + ->where('level',1) + ->where('member_id',$parentUser['member_id']) + ->pluck('child_id') + ->toArray(); + + if(count($subIds) <= 0) continue; + $subPerformance = [];// 每条线的业绩 + foreach($subIds as $subUid){ + $lineAllUid = MemberChild::uniacid()->where('member_id',$subUid)->pluck('child_id')->toArray(); + $lineAllUid[] = $subUid; + $subPerformance[$subUid] = Order::whereIn('uid',$lineAllUid)->where('status','>=',0)->sum('yz_order.price'); + } + // 计算团队总业绩 判断:是否去除最大业绩 + $maxAmount = 0; + if((int)$teamPerformance['team_performance_close_max'] == 1) $maxAmount = max($subPerformance); + $teamOrderPrice = (float)sprintf("%.2f",array_sum($subPerformance) - $maxAmount); + // 是否达到升级条件 + $validateResult = UpgradeService::validate($level, $parentUser['member_id']); + if($teamOrderPrice >= (float)$teamPerformance['team_performance_total'] && $validateResult) { + $isPass = true; + } + } + } + } + + return $isPass; + }catch(\Exception $e){ + \Log::debug('分销商升级 - 团队业绩满多少 - 错误(与):',$e->getMessage()); + } + return false; + } + + + } \ No newline at end of file