100 lines
3.3 KiB
TypeScript
100 lines
3.3 KiB
TypeScript
import { RoleType } from '@/domain/enums'
|
|
import { DomainError } from '@/shared/exceptions'
|
|
|
|
export class LadderTargetRule {
|
|
constructor(
|
|
public readonly roleType: RoleType,
|
|
public readonly monthIndex: number,
|
|
public readonly monthlyTarget: number,
|
|
public readonly cumulativeTarget: number,
|
|
) {}
|
|
|
|
// 省代阶梯目标表
|
|
static readonly PROVINCE_LADDER: LadderTargetRule[] = [
|
|
new LadderTargetRule(RoleType.AUTH_PROVINCE_COMPANY, 1, 150, 150),
|
|
new LadderTargetRule(RoleType.AUTH_PROVINCE_COMPANY, 2, 300, 450),
|
|
new LadderTargetRule(RoleType.AUTH_PROVINCE_COMPANY, 3, 600, 1050),
|
|
new LadderTargetRule(RoleType.AUTH_PROVINCE_COMPANY, 4, 1200, 2250),
|
|
new LadderTargetRule(RoleType.AUTH_PROVINCE_COMPANY, 5, 2400, 4650),
|
|
new LadderTargetRule(RoleType.AUTH_PROVINCE_COMPANY, 6, 4800, 9450),
|
|
new LadderTargetRule(RoleType.AUTH_PROVINCE_COMPANY, 7, 9600, 19050),
|
|
new LadderTargetRule(RoleType.AUTH_PROVINCE_COMPANY, 8, 19200, 38250),
|
|
new LadderTargetRule(RoleType.AUTH_PROVINCE_COMPANY, 9, 11750, 50000),
|
|
]
|
|
|
|
// 市代阶梯目标表
|
|
static readonly CITY_LADDER: LadderTargetRule[] = [
|
|
new LadderTargetRule(RoleType.AUTH_CITY_COMPANY, 1, 30, 30),
|
|
new LadderTargetRule(RoleType.AUTH_CITY_COMPANY, 2, 60, 90),
|
|
new LadderTargetRule(RoleType.AUTH_CITY_COMPANY, 3, 120, 210),
|
|
new LadderTargetRule(RoleType.AUTH_CITY_COMPANY, 4, 240, 450),
|
|
new LadderTargetRule(RoleType.AUTH_CITY_COMPANY, 5, 480, 930),
|
|
new LadderTargetRule(RoleType.AUTH_CITY_COMPANY, 6, 960, 1890),
|
|
new LadderTargetRule(RoleType.AUTH_CITY_COMPANY, 7, 1920, 3810),
|
|
new LadderTargetRule(RoleType.AUTH_CITY_COMPANY, 8, 3840, 7650),
|
|
new LadderTargetRule(RoleType.AUTH_CITY_COMPANY, 9, 2350, 10000),
|
|
]
|
|
|
|
// 社区固定目标
|
|
static readonly COMMUNITY_FIXED: LadderTargetRule = new LadderTargetRule(
|
|
RoleType.COMMUNITY,
|
|
1,
|
|
10,
|
|
10,
|
|
)
|
|
|
|
/**
|
|
* 获取指定角色和月份的目标
|
|
*/
|
|
static getTarget(roleType: RoleType, monthIndex: number): LadderTargetRule {
|
|
switch (roleType) {
|
|
case RoleType.AUTH_PROVINCE_COMPANY:
|
|
// 超过9个月后使用第9个月的目标
|
|
const provinceIndex = Math.min(monthIndex, 9) - 1
|
|
return this.PROVINCE_LADDER[provinceIndex >= 0 ? provinceIndex : 0]
|
|
|
|
case RoleType.AUTH_CITY_COMPANY:
|
|
const cityIndex = Math.min(monthIndex, 9) - 1
|
|
return this.CITY_LADDER[cityIndex >= 0 ? cityIndex : 0]
|
|
|
|
case RoleType.COMMUNITY:
|
|
return this.COMMUNITY_FIXED
|
|
|
|
default:
|
|
throw new DomainError(`不支持的角色类型: ${roleType}`)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取最终累计目标
|
|
*/
|
|
static getFinalTarget(roleType: RoleType): number {
|
|
switch (roleType) {
|
|
case RoleType.AUTH_PROVINCE_COMPANY:
|
|
return 50000
|
|
case RoleType.AUTH_CITY_COMPANY:
|
|
return 10000
|
|
case RoleType.COMMUNITY:
|
|
return 10
|
|
default:
|
|
return 0
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取所有阶梯目标
|
|
*/
|
|
static getAllTargets(roleType: RoleType): LadderTargetRule[] {
|
|
switch (roleType) {
|
|
case RoleType.AUTH_PROVINCE_COMPANY:
|
|
return this.PROVINCE_LADDER
|
|
case RoleType.AUTH_CITY_COMPANY:
|
|
return this.CITY_LADDER
|
|
case RoleType.COMMUNITY:
|
|
return [this.COMMUNITY_FIXED]
|
|
default:
|
|
return []
|
|
}
|
|
}
|
|
}
|