fix(contribution): use setDirectReferralAdoptedCount for accurate count update
Changed updateReferrerUnlockStatus to: 1. Create account if not exists (for full-reset scenarios) 2. Use setDirectReferralAdoptedCount instead of increment loop 3. This ensures the count is always accurate regardless of processing order Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
5eae4464ef
commit
1fbb88f773
|
|
@ -400,28 +400,29 @@ export class ContributionCalculationService {
|
||||||
* 更新上线的解锁状态(直推用户认种后)
|
* 更新上线的解锁状态(直推用户认种后)
|
||||||
*/
|
*/
|
||||||
private async updateReferrerUnlockStatus(referrerAccountSequence: string): Promise<void> {
|
private async updateReferrerUnlockStatus(referrerAccountSequence: string): Promise<void> {
|
||||||
const account = await this.contributionAccountRepository.findByAccountSequence(referrerAccountSequence);
|
let account = await this.contributionAccountRepository.findByAccountSequence(referrerAccountSequence);
|
||||||
if (!account) return;
|
|
||||||
|
|
||||||
// 重新计算直推认种用户数
|
// 如果账户不存在,先创建一个
|
||||||
|
if (!account) {
|
||||||
|
account = ContributionAccountAggregate.create(referrerAccountSequence);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 重新计算直推认种用户数(从数据库实时查询)
|
||||||
const directReferralAdoptedCount = await this.syncedDataRepository.getDirectReferralAdoptedCount(
|
const directReferralAdoptedCount = await this.syncedDataRepository.getDirectReferralAdoptedCount(
|
||||||
referrerAccountSequence,
|
referrerAccountSequence,
|
||||||
);
|
);
|
||||||
|
|
||||||
// 更新解锁状态
|
// 直接设置计数值(不是增量更新),确保数据一致性
|
||||||
const currentCount = account.directReferralAdoptedCount;
|
const currentCount = account.directReferralAdoptedCount;
|
||||||
if (directReferralAdoptedCount > currentCount) {
|
if (directReferralAdoptedCount !== currentCount) {
|
||||||
// 需要增量更新
|
account.setDirectReferralAdoptedCount(directReferralAdoptedCount);
|
||||||
for (let i = currentCount; i < directReferralAdoptedCount; i++) {
|
|
||||||
account.incrementDirectReferralAdoptedCount();
|
|
||||||
}
|
|
||||||
await this.contributionAccountRepository.save(account);
|
await this.contributionAccountRepository.save(account);
|
||||||
|
|
||||||
// 发布账户更新事件到 outbox(用于 CDC 同步到 mining-admin-service)
|
// 发布账户更新事件到 outbox(用于 CDC 同步到 mining-admin-service)
|
||||||
await this.publishContributionAccountUpdatedEvent(account);
|
await this.publishContributionAccountUpdatedEvent(account);
|
||||||
|
|
||||||
this.logger.debug(
|
this.logger.debug(
|
||||||
`Updated referrer ${referrerAccountSequence} unlock status: level=${account.unlockedLevelDepth}, bonus=${account.unlockedBonusTiers}`,
|
`Updated referrer ${referrerAccountSequence} unlock status: count=${directReferralAdoptedCount}, level=${account.unlockedLevelDepth}, bonus=${account.unlockedBonusTiers}`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue