fix(contribution): 将未分配算力汇总到总部账户(HEADQUARTERS)
之前 HEADQUARTERS 账户在算力分配时被遗漏,未获得未分配算力的汇总。 现在在保存未分配算力时,同时更新 HEADQUARTERS 账户的 contributionBalance, 并发布同步事件用于 mining-admin-service 同步。 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
e8e1193387
commit
d844228711
|
|
@ -9,6 +9,7 @@ import { OutboxRepository } from '../../infrastructure/persistence/repositories/
|
||||||
import { UnitOfWork } from '../../infrastructure/persistence/unit-of-work/unit-of-work';
|
import { UnitOfWork } from '../../infrastructure/persistence/unit-of-work/unit-of-work';
|
||||||
import { ContributionAccountAggregate, ContributionSourceType } from '../../domain/aggregates/contribution-account.aggregate';
|
import { ContributionAccountAggregate, ContributionSourceType } from '../../domain/aggregates/contribution-account.aggregate';
|
||||||
import { ContributionRecordAggregate } from '../../domain/aggregates/contribution-record.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 { SyncedReferral } from '../../domain/repositories/synced-data.repository.interface';
|
||||||
import { ContributionDistributionPublisherService } from './contribution-distribution-publisher.service';
|
import { ContributionDistributionPublisherService } from './contribution-distribution-publisher.service';
|
||||||
import { ContributionRateService } from './contribution-rate.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 同步待解锁算力)
|
// 发布未分配算力同步事件(用于 mining-service 同步待解锁算力)
|
||||||
for (const unallocated of result.unallocatedContributions) {
|
for (const unallocated of result.unallocatedContributions) {
|
||||||
const event = new UnallocatedContributionSyncedEvent(
|
const event = new UnallocatedContributionSyncedEvent(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue