diff --git a/backend/services/contribution-service/src/application/services/contribution-calculation.service.ts b/backend/services/contribution-service/src/application/services/contribution-calculation.service.ts index 7c689301..889b314e 100644 --- a/backend/services/contribution-service/src/application/services/contribution-calculation.service.ts +++ b/backend/services/contribution-service/src/application/services/contribution-calculation.service.ts @@ -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(