优化:分销商升级条件 直推间推多少人、团队业绩满多少支持和其他条件一起使用

修改:一级粉丝分销商满X人 不计算默认等级经销商
This commit is contained in:
wuhui_zzw 2023-11-30 19:57:16 +08:00
parent fd8e3858f2
commit 869c82b06c
4 changed files with 176 additions and 30 deletions

View File

@ -939,7 +939,7 @@ class SurveyController extends BaseController{
// 获取存在数据的表
$hasTable = $this->getHasDataTable($tables,$notCleanUp);
debug($hasTable);
// 执行清除操作
// foreach($tables as $name){
// if(!in_array($name,$notCleanUp)){

View File

@ -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;

View File

@ -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()

View File

@ -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;
}
}