fix(contribution): 将未分配算力汇总到总部账户(HEADQUARTERS)

之前 HEADQUARTERS 账户在算力分配时被遗漏,未获得未分配算力的汇总。
现在在保存未分配算力时,同时更新 HEADQUARTERS 账户的 contributionBalance,
并发布同步事件用于 mining-admin-service 同步。

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-01-20 08:26:53 -08:00
parent e8e1193387
commit d844228711
1 changed files with 25 additions and 0 deletions

View File

@ -9,6 +9,7 @@ import { OutboxRepository } from '../../infrastructure/persistence/repositories/
import { UnitOfWork } from '../../infrastructure/persistence/unit-of-work/unit-of-work';
import { ContributionAccountAggregate, ContributionSourceType } from '../../domain/aggregates/contribution-account.aggregate';
import { ContributionRecordAggregate } from '../../domain/aggregates/contribution-record.aggregate';
import { ContributionAmount } from '../../domain/value-objects/contribution-amount.vo';
import { SyncedReferral } from '../../domain/repositories/synced-data.repository.interface';
import { ContributionDistributionPublisherService } from './contribution-distribution-publisher.service';
import { ContributionRateService } from './contribution-rate.service';
@ -279,6 +280,30 @@ export class ContributionCalculationService {
})),
);
// 汇总未分配算力到 HEADQUARTERS总部账户
const totalUnallocatedAmount = result.unallocatedContributions.reduce(
(sum, u) => sum.add(u.amount),
new ContributionAmount(0),
);
await this.systemAccountRepository.addContribution('HEADQUARTERS', totalUnallocatedAmount);
// 发布 HEADQUARTERS 账户同步事件
const headquartersAccount = await this.systemAccountRepository.findByType('HEADQUARTERS');
if (headquartersAccount) {
const hqEvent = new SystemAccountSyncedEvent(
'HEADQUARTERS',
headquartersAccount.name,
headquartersAccount.contributionBalance.value.toString(),
headquartersAccount.createdAt,
);
await this.outboxRepository.save({
aggregateType: SystemAccountSyncedEvent.AGGREGATE_TYPE,
aggregateId: 'HEADQUARTERS',
eventType: SystemAccountSyncedEvent.EVENT_TYPE,
payload: hqEvent.toPayload(),
});
}
// 发布未分配算力同步事件(用于 mining-service 同步待解锁算力)
for (const unallocated of result.unallocatedContributions) {
const event = new UnallocatedContributionSyncedEvent(