代理晋升条件
parent
a1408153be
commit
c090157c81
|
|
@ -0,0 +1,158 @@
|
|||
<?php
|
||||
|
||||
namespace App\Endpoint\Api\Http\Controllers\Merchant;
|
||||
|
||||
use App\Endpoint\Api\Http\Controllers\Controller;
|
||||
use App\Models\UserInfo;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class AgentController extends Controller
|
||||
{
|
||||
/**
|
||||
* 代理晋升条件
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function upgradeConditions(Request $request)
|
||||
{
|
||||
$userInfo = $request->user()->userInfo;
|
||||
|
||||
// 升级规则
|
||||
$rules = config('agent.upgrade_rules');
|
||||
|
||||
switch ($userInfo->agent_level) {
|
||||
case UserInfo::AGENT_LEVEL_VIP:
|
||||
$data = [
|
||||
// 是否显示
|
||||
'display' => true,
|
||||
// 业绩
|
||||
'team_sales_value' => [
|
||||
'label' => '业绩',
|
||||
'current_team_sales_value' => $userInfo->team_sales_value,
|
||||
'upgrade_team_sales_value' => '-1',
|
||||
],
|
||||
// 代理
|
||||
'agents_count' => [
|
||||
'label' => '店铺',
|
||||
'current_agents_count' => $userInfo->getVipAgentsCount(),
|
||||
'upgrade_agents_count' => $rules['community']['vips_agents_count'],
|
||||
],
|
||||
];
|
||||
break;
|
||||
|
||||
case UserInfo::AGENT_LEVEL_COMMUNITY:
|
||||
$data = [
|
||||
'display' => true,
|
||||
'team_sales_value' => [
|
||||
'label' => '业绩',
|
||||
'current_team_sales_value' => $userInfo->team_sales_value,
|
||||
'upgrade_team_sales_value' => (string) $rules['district']['team_sales_value'],
|
||||
],
|
||||
'agents_count' => [
|
||||
'label' => '店铺',
|
||||
'current_agents_count' => $userInfo->getVipAgentsCount(),
|
||||
'upgrade_agents_count' => $rules['district']['vips_agents_count'],
|
||||
],
|
||||
];
|
||||
break;
|
||||
|
||||
case UserInfo::AGENT_LEVEL_DISTRICT:
|
||||
$data = [
|
||||
'display' => true,
|
||||
'team_sales_value' => [
|
||||
'label' => '业绩',
|
||||
'current_team_sales_value' => $userInfo->team_sales_value,
|
||||
'upgrade_team_sales_value' => (string) $rules['city']['team_sales_value'],
|
||||
],
|
||||
'agents_count' => [
|
||||
'label' => '区代',
|
||||
'current_agents_count' => $userInfo->getDistrictAgentsCountOnDifferentLines(),
|
||||
'upgrade_agents_count' => $rules['city']['district_agents_count'],
|
||||
],
|
||||
];
|
||||
break;
|
||||
|
||||
case UserInfo::AGENT_LEVEL_CITY:
|
||||
$data = [
|
||||
'display' => true,
|
||||
'team_sales_value' => [
|
||||
'label' => '市代',
|
||||
'current_team_sales_value' => $userInfo->team_sales_value,
|
||||
'upgrade_team_sales_value' => (string) $rules['province']['team_sales_value'],
|
||||
],
|
||||
'agents_count' => [
|
||||
'label' => '店铺',
|
||||
'current_agents_count' => $userInfo->getCityAgentsCountOnDifferentLines(),
|
||||
'upgrade_agents_count' => $rules['province']['city_agents_count'],
|
||||
],
|
||||
];
|
||||
break;
|
||||
|
||||
case UserInfo::AGENT_LEVEL_PROVINCE:
|
||||
$data = [
|
||||
'display' => true,
|
||||
'team_sales_value' => [
|
||||
'label' => '业绩',
|
||||
'current_team_sales_value' => $userInfo->team_sales_value,
|
||||
'upgrade_team_sales_value' => (string) $rules['branch']['team_sales_value'],
|
||||
],
|
||||
'agents_count' => [
|
||||
'label' => '省代',
|
||||
'current_agents_count' => $userInfo->getProvinceAgentsCountOnDifferentLines(),
|
||||
'upgrade_agents_count' => $rules['branch']['province_agents_count'],
|
||||
],
|
||||
];
|
||||
break;
|
||||
|
||||
default:
|
||||
$data = [
|
||||
'display' => false,
|
||||
'team_sales_value' => [
|
||||
'label' => '',
|
||||
'current_team_sales_value' => '0',
|
||||
'upgrade_team_sales_value' => '-1',
|
||||
],
|
||||
'agents_count' => [
|
||||
'label' => '',
|
||||
'current_agents_count' => 0,
|
||||
'upgrade_agents_count' => -1,
|
||||
],
|
||||
];
|
||||
break;
|
||||
}
|
||||
|
||||
return response()->json($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 代理统计
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function statistics(Request $request)
|
||||
{
|
||||
$path = $request->user()->userInfo->full_path;
|
||||
|
||||
$statistics = UserInfo::selectRaw('count(1) as aggregate, agent_level')
|
||||
->where('agent_level', '>=', 0)
|
||||
->where('path', 'like', "{$path}%")
|
||||
->groupBy('agent_level')
|
||||
->pluck('aggregate', 'agent_level');
|
||||
$data = [];
|
||||
|
||||
foreach ([
|
||||
UserInfo::AGENT_LEVEL_VIP => 'vip',
|
||||
UserInfo::AGENT_LEVEL_COMMUNITY => 'community',
|
||||
UserInfo::AGENT_LEVEL_DISTRICT => 'district',
|
||||
UserInfo::AGENT_LEVEL_CITY => 'city',
|
||||
UserInfo::AGENT_LEVEL_PROVINCE => 'province',
|
||||
UserInfo::AGENT_LEVEL_BRANCH => 'branch',
|
||||
] as $k => $v) {
|
||||
$data[$v] = $statistics[$k] ?? 0;
|
||||
}
|
||||
|
||||
return response()->json($data);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Endpoint\Api\Http\Controllers\Merchant;
|
||||
|
||||
use App\Endpoint\Api\Http\Controllers\Controller;
|
||||
use App\Models\UserInfo;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class AgentStatisticController extends Controller
|
||||
{
|
||||
/**
|
||||
* 代理统计
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function __invoke(Request $request)
|
||||
{
|
||||
$user = $request->user();
|
||||
|
||||
$statistics = UserInfo::selectRaw('count(1) as aggregate, agent_level')
|
||||
->where('agent_level', '>=', 0)
|
||||
->where('path', 'like', "{$user->userInfo->full_path}%")
|
||||
->groupBy('agent_level')
|
||||
->pluck('aggregate', 'agent_level');
|
||||
$data = [];
|
||||
|
||||
foreach ([
|
||||
UserInfo::AGENT_LEVEL_VIP => 'vip',
|
||||
UserInfo::AGENT_LEVEL_COMMUNITY => 'community',
|
||||
UserInfo::AGENT_LEVEL_DISTRICT => 'district',
|
||||
UserInfo::AGENT_LEVEL_CITY => 'city',
|
||||
UserInfo::AGENT_LEVEL_PROVINCE => 'province',
|
||||
UserInfo::AGENT_LEVEL_BRANCH => 'branch',
|
||||
] as $k => $v) {
|
||||
$data[$v] = $statistics[$k] ?? 0;
|
||||
}
|
||||
|
||||
return response()->json($data);
|
||||
}
|
||||
}
|
||||
|
|
@ -196,7 +196,9 @@ Route::group([
|
|||
Route::get('sales-value-logs', [Merchant\SalesValueLogController::class, 'index']);
|
||||
// 团队销售值日志
|
||||
Route::get('team-sales-value-logs', [Merchant\TeamSalesValueLogController::class, 'index']);
|
||||
// 代理晋升条件
|
||||
Route::get('agent-upgrade-conditions', [Merchant\AgentController::class, 'upgradeConditions']);
|
||||
// 代理统计
|
||||
Route::get('agent-statistics', Merchant\AgentStatisticController::class);
|
||||
Route::get('agent-statistics', [Merchant\AgentController::class, 'statistics']);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ class User extends Model implements AuthorizableContract, AuthenticatableContrac
|
|||
*/
|
||||
public function isVip(): bool
|
||||
{
|
||||
return $this->userInfo?->growth_value >= 650;
|
||||
return $this->userInfo?->growth_value >= config('agent.upgrade_rules.vip.sales_value');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -274,8 +274,10 @@ class UserInfo extends Model
|
|||
return;
|
||||
}
|
||||
|
||||
$rules = config('agent.upgrade_rules');
|
||||
|
||||
// 如果成长值不足650时,不能升级
|
||||
if (bccomp($this->growth_value, '650') < 0) {
|
||||
if (bccomp($this->growth_value, $rules['vip']['sales_value']) < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -284,6 +286,7 @@ class UserInfo extends Model
|
|||
$lvl = static::AGENT_LEVEL_VIP;
|
||||
}
|
||||
|
||||
// 团队销售值
|
||||
$salesValue = $this->team_sales_value;
|
||||
|
||||
if ($lvl === static::AGENT_LEVEL_VIP) {
|
||||
|
|
@ -291,31 +294,34 @@ class UserInfo extends Model
|
|||
|
||||
// 如果直推店铺人数>=6,并且团队销售值>=65000,则可升级为区级代理
|
||||
// 或者直推店铺人数>=4,则可升级为社区
|
||||
if ($vipsCount >= 6 && bccomp($salesValue, '65000') >= 0) {
|
||||
if (
|
||||
$vipsCount >= $rules['district']['vips_agents_count']
|
||||
&& bccomp($salesValue, $rules['district']['team_sales_value']) >= 0
|
||||
) {
|
||||
$lvl = static::AGENT_LEVEL_DISTRICT;
|
||||
} elseif ($vipsCount >= 4) {
|
||||
} elseif ($vipsCount >= $rules['community']['vips_agents_count']) {
|
||||
$lvl = static::AGENT_LEVEL_COMMUNITY;
|
||||
}
|
||||
} elseif ($lvl === static::AGENT_LEVEL_COMMUNITY && bccomp($salesValue, '65000') >= 0) {
|
||||
if ($this->getVipAgentsCount() >= 6) {
|
||||
} elseif ($lvl === static::AGENT_LEVEL_COMMUNITY && bccomp($salesValue, $rules['district']['team_sales_value']) >= 0) {
|
||||
if ($this->getVipAgentsCount() >= $rules['district']['vips_agents_count']) {
|
||||
$lvl = static::AGENT_LEVEL_DISTRICT;
|
||||
}
|
||||
}
|
||||
|
||||
if ($lvl === static::AGENT_LEVEL_DISTRICT && bccomp($salesValue, '780000') >= 0) {
|
||||
if ($this->getDistrictAgentsCountOnDifferentLines() >= 3) {
|
||||
if ($lvl === static::AGENT_LEVEL_DISTRICT && bccomp($salesValue, $rules['city']['team_sales_value']) >= 0) {
|
||||
if ($this->getDistrictAgentsCountOnDifferentLines() >= $rules['city']['district_agents_count']) {
|
||||
$lvl = static::AGENT_LEVEL_CITY;
|
||||
}
|
||||
}
|
||||
|
||||
if ($lvl === static::AGENT_LEVEL_CITY && bccomp($salesValue, '7800000') >= 0) {
|
||||
if ($this->getCityAgentsCountOnDifferentLines() >= 2) {
|
||||
if ($lvl === static::AGENT_LEVEL_CITY && bccomp($salesValue, $rules['province']['team_sales_value']) >= 0) {
|
||||
if ($this->getCityAgentsCountOnDifferentLines() >= $rules['province']['city_agents_count']) {
|
||||
$lvl = static::AGENT_LEVEL_PROVINCE;
|
||||
}
|
||||
}
|
||||
|
||||
if ($lvl === static::AGENT_LEVEL_PROVINCE && bccomp($salesValue, '52000000') >= 0) {
|
||||
if ($this->getProvinceAgentsCountOnDifferentLines() >= 2) {
|
||||
if ($lvl === static::AGENT_LEVEL_PROVINCE && bccomp($salesValue, $rules['branch']['team_sales_value']) >= 0) {
|
||||
if ($this->getProvinceAgentsCountOnDifferentLines() >= $rules['branch']['province_agents_count']) {
|
||||
$lvl = static::AGENT_LEVEL_BRANCH;
|
||||
}
|
||||
}
|
||||
|
|
@ -349,7 +355,8 @@ class UserInfo extends Model
|
|||
// 增加预收益的成长值
|
||||
$this->increment('pre_growth_value', $growthValue);
|
||||
|
||||
$compared = bccomp(bcadd($this->growth_value, $this->pre_growth_value, 2), '650', 2);
|
||||
$totalGrowthValue = bcadd($this->growth_value, $this->pre_growth_value, 2);
|
||||
$compared = bccomp($totalGrowthValue, config('agent.upgrade_rules.vip.sales_value'), 2);
|
||||
|
||||
if ($this->agent_level === static::AGENT_LEVEL_VIP && $compared < 0) {
|
||||
$this->update([
|
||||
|
|
|
|||
|
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
// 升级规则
|
||||
'upgrade_rules' => [
|
||||
// 升级到店铺
|
||||
'vip' => [
|
||||
// 个人销售值 650
|
||||
'sales_value' => 650,
|
||||
],
|
||||
// 升级到社区
|
||||
'community' => [
|
||||
// 个人销售值
|
||||
'sales_value' => 650,
|
||||
// 直推店铺数
|
||||
'vips_agents_count' => 4,
|
||||
],
|
||||
// 升级到区级
|
||||
'district' => [
|
||||
// 团队销售值
|
||||
'team_sales_value' => 65000,
|
||||
// 直推店铺数
|
||||
'vips_agents_count' => 6,
|
||||
],
|
||||
// 升级到市级
|
||||
'city' => [
|
||||
// 团队销售值
|
||||
'team_sales_value' => 780000,
|
||||
// 不同线上的区代
|
||||
'district_agents_count' => 3,
|
||||
],
|
||||
// 升级到省级
|
||||
'province' => [
|
||||
// 团队销售值
|
||||
'team_sales_value' => 7800000,
|
||||
// 不同线上的市代
|
||||
'city_agents_count' => 2,
|
||||
],
|
||||
// 升级到分公司
|
||||
'branch' => [
|
||||
// 团队销售值
|
||||
'team_sales_value' => 52000000,
|
||||
// 不同线上的省代
|
||||
'province_agents_count' => 2,
|
||||
],
|
||||
],
|
||||
];
|
||||
Loading…
Reference in New Issue