598 lines
24 KiB
TypeScript
598 lines
24 KiB
TypeScript
import Decimal from 'decimal.js';
|
||
import { ContributionAmount } from '../value-objects/contribution-amount.vo';
|
||
|
||
/**
|
||
* 贡献值来源类型
|
||
*/
|
||
export enum ContributionSourceType {
|
||
PERSONAL = 'PERSONAL', // 来自自己认种
|
||
TEAM_LEVEL = 'TEAM_LEVEL', // 来自团队层级 (1-15级)
|
||
TEAM_BONUS = 'TEAM_BONUS', // 来自团队加成奖励 (3档)
|
||
|
||
// ========== 转让相关(纯新增)==========
|
||
// 卖方转出(负数金额)
|
||
TRANSFER_OUT_PERSONAL = 'TRANSFER_OUT_PERSONAL', // 卖方个人算力转出
|
||
TRANSFER_OUT_TEAM_LEVEL = 'TRANSFER_OUT_TEAM_LEVEL', // 卖方上线团队层级算力转出
|
||
TRANSFER_OUT_BONUS = 'TRANSFER_OUT_BONUS', // 卖方个人加成算力转出
|
||
// 买方转入(正数金额)
|
||
TRANSFER_IN_PERSONAL = 'TRANSFER_IN_PERSONAL', // 买方个人算力转入
|
||
TRANSFER_IN_TEAM_LEVEL = 'TRANSFER_IN_TEAM_LEVEL', // 买方上线团队层级算力转入
|
||
TRANSFER_IN_BONUS = 'TRANSFER_IN_BONUS', // 买方个人加成算力转入
|
||
}
|
||
|
||
/**
|
||
* 算力账户聚合根
|
||
* 管理用户的贡献值/算力
|
||
*
|
||
* 设计说明:
|
||
* - 个人算力:自己认种,立即生效
|
||
* - 层级算力:下级1-15层认种的分成,每层0.5%,共7.5%
|
||
* - 加成算力:团队加成,3档各2.5%,共7.5%
|
||
*
|
||
* 解锁规则:
|
||
* - 自己认种:解锁层级1-5 + 加成第1档
|
||
* - 直推≥2人认种:解锁加成第2档
|
||
* - 直推≥3人认种:解锁层级6-10
|
||
* - 直推≥4人认种:解锁加成第3档
|
||
* - 直推≥5人认种:解锁层级11-15
|
||
*/
|
||
export class ContributionAccountAggregate {
|
||
private _id: bigint | null;
|
||
private _accountSequence: string;
|
||
|
||
// ========== 个人算力(立即生效)==========
|
||
private _personalContribution: ContributionAmount;
|
||
|
||
// ========== 15级层级待解锁算力 ==========
|
||
private _level1Pending: ContributionAmount;
|
||
private _level2Pending: ContributionAmount;
|
||
private _level3Pending: ContributionAmount;
|
||
private _level4Pending: ContributionAmount;
|
||
private _level5Pending: ContributionAmount;
|
||
private _level6Pending: ContributionAmount;
|
||
private _level7Pending: ContributionAmount;
|
||
private _level8Pending: ContributionAmount;
|
||
private _level9Pending: ContributionAmount;
|
||
private _level10Pending: ContributionAmount;
|
||
private _level11Pending: ContributionAmount;
|
||
private _level12Pending: ContributionAmount;
|
||
private _level13Pending: ContributionAmount;
|
||
private _level14Pending: ContributionAmount;
|
||
private _level15Pending: ContributionAmount;
|
||
|
||
// ========== 3档加成待解锁算力 ==========
|
||
private _bonusTier1Pending: ContributionAmount;
|
||
private _bonusTier2Pending: ContributionAmount;
|
||
private _bonusTier3Pending: ContributionAmount;
|
||
|
||
// ========== 汇总字段 ==========
|
||
private _totalLevelPending: ContributionAmount;
|
||
private _totalBonusPending: ContributionAmount;
|
||
private _totalPending: ContributionAmount;
|
||
private _totalUnlocked: ContributionAmount;
|
||
private _effectiveContribution: ContributionAmount;
|
||
|
||
// ========== 解锁条件状态 ==========
|
||
private _hasAdopted: boolean;
|
||
private _directReferralAdoptedCount: number;
|
||
private _unlockedLevelDepth: number; // 0, 5, 10, 15
|
||
private _unlockedBonusTiers: number; // 0, 1, 2, 3
|
||
|
||
private _version: number;
|
||
private _createdAt: Date;
|
||
private _updatedAt: Date;
|
||
|
||
constructor(props: {
|
||
id?: bigint | null;
|
||
accountSequence: string;
|
||
personalContribution?: ContributionAmount;
|
||
level1Pending?: ContributionAmount;
|
||
level2Pending?: ContributionAmount;
|
||
level3Pending?: ContributionAmount;
|
||
level4Pending?: ContributionAmount;
|
||
level5Pending?: ContributionAmount;
|
||
level6Pending?: ContributionAmount;
|
||
level7Pending?: ContributionAmount;
|
||
level8Pending?: ContributionAmount;
|
||
level9Pending?: ContributionAmount;
|
||
level10Pending?: ContributionAmount;
|
||
level11Pending?: ContributionAmount;
|
||
level12Pending?: ContributionAmount;
|
||
level13Pending?: ContributionAmount;
|
||
level14Pending?: ContributionAmount;
|
||
level15Pending?: ContributionAmount;
|
||
bonusTier1Pending?: ContributionAmount;
|
||
bonusTier2Pending?: ContributionAmount;
|
||
bonusTier3Pending?: ContributionAmount;
|
||
totalLevelPending?: ContributionAmount;
|
||
totalBonusPending?: ContributionAmount;
|
||
totalPending?: ContributionAmount;
|
||
totalUnlocked?: ContributionAmount;
|
||
effectiveContribution?: ContributionAmount;
|
||
hasAdopted?: boolean;
|
||
directReferralAdoptedCount?: number;
|
||
unlockedLevelDepth?: number;
|
||
unlockedBonusTiers?: number;
|
||
version?: number;
|
||
createdAt?: Date;
|
||
updatedAt?: Date;
|
||
}) {
|
||
this._id = props.id ?? null;
|
||
this._accountSequence = props.accountSequence;
|
||
|
||
this._personalContribution = props.personalContribution ?? ContributionAmount.zero();
|
||
|
||
// 15级待解锁
|
||
this._level1Pending = props.level1Pending ?? ContributionAmount.zero();
|
||
this._level2Pending = props.level2Pending ?? ContributionAmount.zero();
|
||
this._level3Pending = props.level3Pending ?? ContributionAmount.zero();
|
||
this._level4Pending = props.level4Pending ?? ContributionAmount.zero();
|
||
this._level5Pending = props.level5Pending ?? ContributionAmount.zero();
|
||
this._level6Pending = props.level6Pending ?? ContributionAmount.zero();
|
||
this._level7Pending = props.level7Pending ?? ContributionAmount.zero();
|
||
this._level8Pending = props.level8Pending ?? ContributionAmount.zero();
|
||
this._level9Pending = props.level9Pending ?? ContributionAmount.zero();
|
||
this._level10Pending = props.level10Pending ?? ContributionAmount.zero();
|
||
this._level11Pending = props.level11Pending ?? ContributionAmount.zero();
|
||
this._level12Pending = props.level12Pending ?? ContributionAmount.zero();
|
||
this._level13Pending = props.level13Pending ?? ContributionAmount.zero();
|
||
this._level14Pending = props.level14Pending ?? ContributionAmount.zero();
|
||
this._level15Pending = props.level15Pending ?? ContributionAmount.zero();
|
||
|
||
// 3档加成待解锁
|
||
this._bonusTier1Pending = props.bonusTier1Pending ?? ContributionAmount.zero();
|
||
this._bonusTier2Pending = props.bonusTier2Pending ?? ContributionAmount.zero();
|
||
this._bonusTier3Pending = props.bonusTier3Pending ?? ContributionAmount.zero();
|
||
|
||
// 汇总字段
|
||
this._totalLevelPending = props.totalLevelPending ?? ContributionAmount.zero();
|
||
this._totalBonusPending = props.totalBonusPending ?? ContributionAmount.zero();
|
||
this._totalPending = props.totalPending ?? ContributionAmount.zero();
|
||
this._totalUnlocked = props.totalUnlocked ?? ContributionAmount.zero();
|
||
this._effectiveContribution = props.effectiveContribution ?? ContributionAmount.zero();
|
||
|
||
this._hasAdopted = props.hasAdopted ?? false;
|
||
this._directReferralAdoptedCount = props.directReferralAdoptedCount ?? 0;
|
||
this._unlockedLevelDepth = props.unlockedLevelDepth ?? 0;
|
||
this._unlockedBonusTiers = props.unlockedBonusTiers ?? 0;
|
||
this._version = props.version ?? 1;
|
||
this._createdAt = props.createdAt ?? new Date();
|
||
this._updatedAt = props.updatedAt ?? new Date();
|
||
}
|
||
|
||
// Getters
|
||
get id(): bigint | null { return this._id; }
|
||
get accountSequence(): string { return this._accountSequence; }
|
||
get personalContribution(): ContributionAmount { return this._personalContribution; }
|
||
|
||
// 15级待解锁
|
||
get level1Pending(): ContributionAmount { return this._level1Pending; }
|
||
get level2Pending(): ContributionAmount { return this._level2Pending; }
|
||
get level3Pending(): ContributionAmount { return this._level3Pending; }
|
||
get level4Pending(): ContributionAmount { return this._level4Pending; }
|
||
get level5Pending(): ContributionAmount { return this._level5Pending; }
|
||
get level6Pending(): ContributionAmount { return this._level6Pending; }
|
||
get level7Pending(): ContributionAmount { return this._level7Pending; }
|
||
get level8Pending(): ContributionAmount { return this._level8Pending; }
|
||
get level9Pending(): ContributionAmount { return this._level9Pending; }
|
||
get level10Pending(): ContributionAmount { return this._level10Pending; }
|
||
get level11Pending(): ContributionAmount { return this._level11Pending; }
|
||
get level12Pending(): ContributionAmount { return this._level12Pending; }
|
||
get level13Pending(): ContributionAmount { return this._level13Pending; }
|
||
get level14Pending(): ContributionAmount { return this._level14Pending; }
|
||
get level15Pending(): ContributionAmount { return this._level15Pending; }
|
||
|
||
// 3档加成待解锁
|
||
get bonusTier1Pending(): ContributionAmount { return this._bonusTier1Pending; }
|
||
get bonusTier2Pending(): ContributionAmount { return this._bonusTier2Pending; }
|
||
get bonusTier3Pending(): ContributionAmount { return this._bonusTier3Pending; }
|
||
|
||
// 汇总
|
||
get totalLevelPending(): ContributionAmount { return this._totalLevelPending; }
|
||
get totalBonusPending(): ContributionAmount { return this._totalBonusPending; }
|
||
get totalPending(): ContributionAmount { return this._totalPending; }
|
||
get totalUnlocked(): ContributionAmount { return this._totalUnlocked; }
|
||
get effectiveContribution(): ContributionAmount { return this._effectiveContribution; }
|
||
|
||
get hasAdopted(): boolean { return this._hasAdopted; }
|
||
get directReferralAdoptedCount(): number { return this._directReferralAdoptedCount; }
|
||
get unlockedLevelDepth(): number { return this._unlockedLevelDepth; }
|
||
get unlockedBonusTiers(): number { return this._unlockedBonusTiers; }
|
||
get version(): number { return this._version; }
|
||
get createdAt(): Date { return this._createdAt; }
|
||
get updatedAt(): Date { return this._updatedAt; }
|
||
|
||
/**
|
||
* 添加个人贡献值(立即生效)
|
||
*/
|
||
addPersonalContribution(amount: ContributionAmount): void {
|
||
this._personalContribution = this._personalContribution.add(amount);
|
||
this._effectiveContribution = this._effectiveContribution.add(amount);
|
||
this._updatedAt = new Date();
|
||
}
|
||
|
||
/**
|
||
* 添加层级待解锁贡献值
|
||
* @param levelDepth 层级深度 1-15
|
||
* @param amount 贡献值金额
|
||
*/
|
||
addLevelPendingContribution(levelDepth: number, amount: ContributionAmount): void {
|
||
if (levelDepth < 1 || levelDepth > 15) {
|
||
throw new Error(`Invalid level depth: ${levelDepth}, must be 1-15`);
|
||
}
|
||
|
||
const levelPendingMap: Record<number, ContributionAmount> = {
|
||
1: this._level1Pending,
|
||
2: this._level2Pending,
|
||
3: this._level3Pending,
|
||
4: this._level4Pending,
|
||
5: this._level5Pending,
|
||
6: this._level6Pending,
|
||
7: this._level7Pending,
|
||
8: this._level8Pending,
|
||
9: this._level9Pending,
|
||
10: this._level10Pending,
|
||
11: this._level11Pending,
|
||
12: this._level12Pending,
|
||
13: this._level13Pending,
|
||
14: this._level14Pending,
|
||
15: this._level15Pending,
|
||
};
|
||
|
||
// 更新对应层级的待解锁金额
|
||
switch (levelDepth) {
|
||
case 1: this._level1Pending = this._level1Pending.add(amount); break;
|
||
case 2: this._level2Pending = this._level2Pending.add(amount); break;
|
||
case 3: this._level3Pending = this._level3Pending.add(amount); break;
|
||
case 4: this._level4Pending = this._level4Pending.add(amount); break;
|
||
case 5: this._level5Pending = this._level5Pending.add(amount); break;
|
||
case 6: this._level6Pending = this._level6Pending.add(amount); break;
|
||
case 7: this._level7Pending = this._level7Pending.add(amount); break;
|
||
case 8: this._level8Pending = this._level8Pending.add(amount); break;
|
||
case 9: this._level9Pending = this._level9Pending.add(amount); break;
|
||
case 10: this._level10Pending = this._level10Pending.add(amount); break;
|
||
case 11: this._level11Pending = this._level11Pending.add(amount); break;
|
||
case 12: this._level12Pending = this._level12Pending.add(amount); break;
|
||
case 13: this._level13Pending = this._level13Pending.add(amount); break;
|
||
case 14: this._level14Pending = this._level14Pending.add(amount); break;
|
||
case 15: this._level15Pending = this._level15Pending.add(amount); break;
|
||
}
|
||
|
||
this._totalLevelPending = this._totalLevelPending.add(amount);
|
||
this._totalPending = this._totalPending.add(amount);
|
||
this._updatedAt = new Date();
|
||
}
|
||
|
||
/**
|
||
* 添加加成待解锁贡献值
|
||
* @param tier 加成档位 1-3
|
||
* @param amount 贡献值金额
|
||
*/
|
||
addBonusTierPendingContribution(tier: number, amount: ContributionAmount): void {
|
||
if (tier < 1 || tier > 3) {
|
||
throw new Error(`Invalid bonus tier: ${tier}, must be 1-3`);
|
||
}
|
||
|
||
switch (tier) {
|
||
case 1: this._bonusTier1Pending = this._bonusTier1Pending.add(amount); break;
|
||
case 2: this._bonusTier2Pending = this._bonusTier2Pending.add(amount); break;
|
||
case 3: this._bonusTier3Pending = this._bonusTier3Pending.add(amount); break;
|
||
}
|
||
|
||
this._totalBonusPending = this._totalBonusPending.add(amount);
|
||
this._totalPending = this._totalPending.add(amount);
|
||
this._updatedAt = new Date();
|
||
}
|
||
|
||
/**
|
||
* 标记用户已认种
|
||
* 解锁层级1-5和加成第1档
|
||
*/
|
||
markAsAdopted(): void {
|
||
if (this._hasAdopted) return; // 已经认种过
|
||
|
||
this._hasAdopted = true;
|
||
this._unlockedLevelDepth = 5; // 解锁1-5级
|
||
this._unlockedBonusTiers = 1; // 解锁第1档
|
||
this._updatedAt = new Date();
|
||
}
|
||
|
||
/**
|
||
* 增加直推认种用户数
|
||
*/
|
||
incrementDirectReferralAdoptedCount(): void {
|
||
this._directReferralAdoptedCount++;
|
||
this.updateUnlockStatus();
|
||
}
|
||
|
||
/**
|
||
* 设置直推认种用户数
|
||
*/
|
||
setDirectReferralAdoptedCount(count: number): void {
|
||
this._directReferralAdoptedCount = count;
|
||
this.updateUnlockStatus();
|
||
}
|
||
|
||
/**
|
||
* 更新解锁状态
|
||
* 根据直推认种用户数
|
||
*/
|
||
private updateUnlockStatus(): void {
|
||
// 层级解锁规则(只有在已认种的情况下才会解锁)
|
||
if (this._hasAdopted) {
|
||
if (this._directReferralAdoptedCount >= 5) {
|
||
this._unlockedLevelDepth = 15; // 解锁11-15级
|
||
} else if (this._directReferralAdoptedCount >= 3) {
|
||
this._unlockedLevelDepth = 10; // 解锁6-10级
|
||
} else {
|
||
this._unlockedLevelDepth = 5; // 保持1-5级
|
||
}
|
||
}
|
||
|
||
// 加成解锁规则
|
||
let bonusTiers = 0;
|
||
if (this._hasAdopted) bonusTiers = 1; // 自己认种解锁第1档
|
||
if (this._directReferralAdoptedCount >= 2) bonusTiers = 2; // 直推≥2解锁第2档
|
||
if (this._directReferralAdoptedCount >= 4) bonusTiers = 3; // 直推≥4解锁第3档
|
||
this._unlockedBonusTiers = bonusTiers;
|
||
|
||
this._updatedAt = new Date();
|
||
}
|
||
|
||
/**
|
||
* 解锁待解锁的贡献值
|
||
* 根据当前解锁深度,将对应的 pending 转移到 unlocked
|
||
* @returns 本次解锁的金额
|
||
*/
|
||
unlockPendingContributions(): ContributionAmount {
|
||
let unlockAmount = ContributionAmount.zero();
|
||
|
||
// 解锁层级算力
|
||
if (this._unlockedLevelDepth >= 5) {
|
||
unlockAmount = unlockAmount.add(this._level1Pending);
|
||
unlockAmount = unlockAmount.add(this._level2Pending);
|
||
unlockAmount = unlockAmount.add(this._level3Pending);
|
||
unlockAmount = unlockAmount.add(this._level4Pending);
|
||
unlockAmount = unlockAmount.add(this._level5Pending);
|
||
this._level1Pending = ContributionAmount.zero();
|
||
this._level2Pending = ContributionAmount.zero();
|
||
this._level3Pending = ContributionAmount.zero();
|
||
this._level4Pending = ContributionAmount.zero();
|
||
this._level5Pending = ContributionAmount.zero();
|
||
}
|
||
if (this._unlockedLevelDepth >= 10) {
|
||
unlockAmount = unlockAmount.add(this._level6Pending);
|
||
unlockAmount = unlockAmount.add(this._level7Pending);
|
||
unlockAmount = unlockAmount.add(this._level8Pending);
|
||
unlockAmount = unlockAmount.add(this._level9Pending);
|
||
unlockAmount = unlockAmount.add(this._level10Pending);
|
||
this._level6Pending = ContributionAmount.zero();
|
||
this._level7Pending = ContributionAmount.zero();
|
||
this._level8Pending = ContributionAmount.zero();
|
||
this._level9Pending = ContributionAmount.zero();
|
||
this._level10Pending = ContributionAmount.zero();
|
||
}
|
||
if (this._unlockedLevelDepth >= 15) {
|
||
unlockAmount = unlockAmount.add(this._level11Pending);
|
||
unlockAmount = unlockAmount.add(this._level12Pending);
|
||
unlockAmount = unlockAmount.add(this._level13Pending);
|
||
unlockAmount = unlockAmount.add(this._level14Pending);
|
||
unlockAmount = unlockAmount.add(this._level15Pending);
|
||
this._level11Pending = ContributionAmount.zero();
|
||
this._level12Pending = ContributionAmount.zero();
|
||
this._level13Pending = ContributionAmount.zero();
|
||
this._level14Pending = ContributionAmount.zero();
|
||
this._level15Pending = ContributionAmount.zero();
|
||
}
|
||
|
||
// 解锁加成算力
|
||
if (this._unlockedBonusTiers >= 1) {
|
||
unlockAmount = unlockAmount.add(this._bonusTier1Pending);
|
||
this._bonusTier1Pending = ContributionAmount.zero();
|
||
}
|
||
if (this._unlockedBonusTiers >= 2) {
|
||
unlockAmount = unlockAmount.add(this._bonusTier2Pending);
|
||
this._bonusTier2Pending = ContributionAmount.zero();
|
||
}
|
||
if (this._unlockedBonusTiers >= 3) {
|
||
unlockAmount = unlockAmount.add(this._bonusTier3Pending);
|
||
this._bonusTier3Pending = ContributionAmount.zero();
|
||
}
|
||
|
||
// 更新汇总
|
||
this._totalUnlocked = this._totalUnlocked.add(unlockAmount);
|
||
this._totalPending = this._totalPending.subtract(unlockAmount);
|
||
this._effectiveContribution = this._effectiveContribution.add(unlockAmount);
|
||
this.recalculatePendingTotals();
|
||
|
||
this._updatedAt = new Date();
|
||
return unlockAmount;
|
||
}
|
||
|
||
/**
|
||
* 重新计算待解锁汇总
|
||
*/
|
||
private recalculatePendingTotals(): void {
|
||
this._totalLevelPending = this._level1Pending
|
||
.add(this._level2Pending)
|
||
.add(this._level3Pending)
|
||
.add(this._level4Pending)
|
||
.add(this._level5Pending)
|
||
.add(this._level6Pending)
|
||
.add(this._level7Pending)
|
||
.add(this._level8Pending)
|
||
.add(this._level9Pending)
|
||
.add(this._level10Pending)
|
||
.add(this._level11Pending)
|
||
.add(this._level12Pending)
|
||
.add(this._level13Pending)
|
||
.add(this._level14Pending)
|
||
.add(this._level15Pending);
|
||
|
||
this._totalBonusPending = this._bonusTier1Pending
|
||
.add(this._bonusTier2Pending)
|
||
.add(this._bonusTier3Pending);
|
||
|
||
this._totalPending = this._totalLevelPending.add(this._totalBonusPending);
|
||
}
|
||
|
||
/**
|
||
* 增加版本号(乐观锁)
|
||
*/
|
||
incrementVersion(): void {
|
||
this._version++;
|
||
this._updatedAt = new Date();
|
||
}
|
||
|
||
/**
|
||
* 创建新账户
|
||
*/
|
||
static create(accountSequence: string): ContributionAccountAggregate {
|
||
return new ContributionAccountAggregate({ accountSequence });
|
||
}
|
||
|
||
/**
|
||
* 从持久化数据恢复
|
||
*/
|
||
static fromPersistence(data: {
|
||
id: bigint;
|
||
accountSequence: string;
|
||
personalContribution: Decimal;
|
||
level1Pending: Decimal;
|
||
level2Pending: Decimal;
|
||
level3Pending: Decimal;
|
||
level4Pending: Decimal;
|
||
level5Pending: Decimal;
|
||
level6Pending: Decimal;
|
||
level7Pending: Decimal;
|
||
level8Pending: Decimal;
|
||
level9Pending: Decimal;
|
||
level10Pending: Decimal;
|
||
level11Pending: Decimal;
|
||
level12Pending: Decimal;
|
||
level13Pending: Decimal;
|
||
level14Pending: Decimal;
|
||
level15Pending: Decimal;
|
||
bonusTier1Pending: Decimal;
|
||
bonusTier2Pending: Decimal;
|
||
bonusTier3Pending: Decimal;
|
||
totalLevelPending: Decimal;
|
||
totalBonusPending: Decimal;
|
||
totalPending: Decimal;
|
||
totalUnlocked: Decimal;
|
||
effectiveContribution: Decimal;
|
||
hasAdopted: boolean;
|
||
directReferralAdoptedCount: number;
|
||
unlockedLevelDepth: number;
|
||
unlockedBonusTiers: number;
|
||
version: number;
|
||
createdAt: Date;
|
||
updatedAt: Date;
|
||
}): ContributionAccountAggregate {
|
||
return new ContributionAccountAggregate({
|
||
id: data.id,
|
||
accountSequence: data.accountSequence,
|
||
personalContribution: new ContributionAmount(data.personalContribution),
|
||
level1Pending: new ContributionAmount(data.level1Pending),
|
||
level2Pending: new ContributionAmount(data.level2Pending),
|
||
level3Pending: new ContributionAmount(data.level3Pending),
|
||
level4Pending: new ContributionAmount(data.level4Pending),
|
||
level5Pending: new ContributionAmount(data.level5Pending),
|
||
level6Pending: new ContributionAmount(data.level6Pending),
|
||
level7Pending: new ContributionAmount(data.level7Pending),
|
||
level8Pending: new ContributionAmount(data.level8Pending),
|
||
level9Pending: new ContributionAmount(data.level9Pending),
|
||
level10Pending: new ContributionAmount(data.level10Pending),
|
||
level11Pending: new ContributionAmount(data.level11Pending),
|
||
level12Pending: new ContributionAmount(data.level12Pending),
|
||
level13Pending: new ContributionAmount(data.level13Pending),
|
||
level14Pending: new ContributionAmount(data.level14Pending),
|
||
level15Pending: new ContributionAmount(data.level15Pending),
|
||
bonusTier1Pending: new ContributionAmount(data.bonusTier1Pending),
|
||
bonusTier2Pending: new ContributionAmount(data.bonusTier2Pending),
|
||
bonusTier3Pending: new ContributionAmount(data.bonusTier3Pending),
|
||
totalLevelPending: new ContributionAmount(data.totalLevelPending),
|
||
totalBonusPending: new ContributionAmount(data.totalBonusPending),
|
||
totalPending: new ContributionAmount(data.totalPending),
|
||
totalUnlocked: new ContributionAmount(data.totalUnlocked),
|
||
effectiveContribution: new ContributionAmount(data.effectiveContribution),
|
||
hasAdopted: data.hasAdopted,
|
||
directReferralAdoptedCount: data.directReferralAdoptedCount,
|
||
unlockedLevelDepth: data.unlockedLevelDepth,
|
||
unlockedBonusTiers: data.unlockedBonusTiers,
|
||
version: data.version,
|
||
createdAt: data.createdAt,
|
||
updatedAt: data.updatedAt,
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 转换为持久化数据
|
||
*/
|
||
toPersistence(): {
|
||
accountSequence: string;
|
||
personalContribution: Decimal;
|
||
level1Pending: Decimal;
|
||
level2Pending: Decimal;
|
||
level3Pending: Decimal;
|
||
level4Pending: Decimal;
|
||
level5Pending: Decimal;
|
||
level6Pending: Decimal;
|
||
level7Pending: Decimal;
|
||
level8Pending: Decimal;
|
||
level9Pending: Decimal;
|
||
level10Pending: Decimal;
|
||
level11Pending: Decimal;
|
||
level12Pending: Decimal;
|
||
level13Pending: Decimal;
|
||
level14Pending: Decimal;
|
||
level15Pending: Decimal;
|
||
bonusTier1Pending: Decimal;
|
||
bonusTier2Pending: Decimal;
|
||
bonusTier3Pending: Decimal;
|
||
totalLevelPending: Decimal;
|
||
totalBonusPending: Decimal;
|
||
totalPending: Decimal;
|
||
totalUnlocked: Decimal;
|
||
effectiveContribution: Decimal;
|
||
hasAdopted: boolean;
|
||
directReferralAdoptedCount: number;
|
||
unlockedLevelDepth: number;
|
||
unlockedBonusTiers: number;
|
||
version: number;
|
||
} {
|
||
return {
|
||
accountSequence: this._accountSequence,
|
||
personalContribution: this._personalContribution.value,
|
||
level1Pending: this._level1Pending.value,
|
||
level2Pending: this._level2Pending.value,
|
||
level3Pending: this._level3Pending.value,
|
||
level4Pending: this._level4Pending.value,
|
||
level5Pending: this._level5Pending.value,
|
||
level6Pending: this._level6Pending.value,
|
||
level7Pending: this._level7Pending.value,
|
||
level8Pending: this._level8Pending.value,
|
||
level9Pending: this._level9Pending.value,
|
||
level10Pending: this._level10Pending.value,
|
||
level11Pending: this._level11Pending.value,
|
||
level12Pending: this._level12Pending.value,
|
||
level13Pending: this._level13Pending.value,
|
||
level14Pending: this._level14Pending.value,
|
||
level15Pending: this._level15Pending.value,
|
||
bonusTier1Pending: this._bonusTier1Pending.value,
|
||
bonusTier2Pending: this._bonusTier2Pending.value,
|
||
bonusTier3Pending: this._bonusTier3Pending.value,
|
||
totalLevelPending: this._totalLevelPending.value,
|
||
totalBonusPending: this._totalBonusPending.value,
|
||
totalPending: this._totalPending.value,
|
||
totalUnlocked: this._totalUnlocked.value,
|
||
effectiveContribution: this._effectiveContribution.value,
|
||
hasAdopted: this._hasAdopted,
|
||
directReferralAdoptedCount: this._directReferralAdoptedCount,
|
||
unlockedLevelDepth: this._unlockedLevelDepth,
|
||
unlockedBonusTiers: this._unlockedBonusTiers,
|
||
version: this._version,
|
||
};
|
||
}
|
||
}
|