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 [] } } }