feat(contribution): 认种处理后自动发布全网进度事件
- 每次认种分配完成后发布 NetworkProgressUpdatedEvent - mining-service 通过 Kafka 实时接收全网理论算力更新 - 定时同步改为每5分钟一次,作为兜底方案 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
23bb8baa9c
commit
bb75ff19a4
|
|
@ -113,6 +113,39 @@ export class ContributionCalculationService {
|
||||||
`teamBonus=${result.teamBonusRecords.length}, ` +
|
`teamBonus=${result.teamBonusRecords.length}, ` +
|
||||||
`unallocated=${result.unallocatedContributions.length}`,
|
`unallocated=${result.unallocatedContributions.length}`,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// 发布全网进度更新事件(用于 mining-service 同步全网理论算力)
|
||||||
|
await this.publishNetworkProgressEvent();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发布全网进度更新事件
|
||||||
|
*/
|
||||||
|
private async publishNetworkProgressEvent(): Promise<void> {
|
||||||
|
try {
|
||||||
|
const progress = await this.contributionRateService.getNetworkProgress();
|
||||||
|
|
||||||
|
const event = new NetworkProgressUpdatedEvent(
|
||||||
|
progress.totalTreeCount,
|
||||||
|
progress.totalAdoptionOrders,
|
||||||
|
progress.totalAdoptedUsers,
|
||||||
|
progress.currentUnit,
|
||||||
|
progress.currentMultiplier.toString(),
|
||||||
|
progress.currentContributionPerTree.toString(),
|
||||||
|
progress.nextUnitTreeCount,
|
||||||
|
);
|
||||||
|
|
||||||
|
await this.outboxRepository.save({
|
||||||
|
aggregateType: NetworkProgressUpdatedEvent.AGGREGATE_TYPE,
|
||||||
|
aggregateId: 'network',
|
||||||
|
eventType: NetworkProgressUpdatedEvent.EVENT_TYPE,
|
||||||
|
payload: event.toPayload(),
|
||||||
|
});
|
||||||
|
|
||||||
|
this.logger.debug(`Published NetworkProgressUpdatedEvent: trees=${progress.totalTreeCount}`);
|
||||||
|
} catch (error) {
|
||||||
|
this.logger.error('Failed to publish NetworkProgressUpdatedEvent', error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -118,9 +118,10 @@ export class MiningScheduler implements OnModuleInit {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 每分钟同步全网数据(系统账户算力、全网理论算力)
|
* 每5分钟同步全网数据(兜底方案,防止 Kafka 事件丢失)
|
||||||
|
* 正常情况下由 Kafka 事件驱动实时同步
|
||||||
*/
|
*/
|
||||||
@Cron(CronExpression.EVERY_MINUTE)
|
@Cron(CronExpression.EVERY_5_MINUTES)
|
||||||
async syncNetworkData(): Promise<void> {
|
async syncNetworkData(): Promise<void> {
|
||||||
const lockValue = await this.redis.acquireLock('mining:network-sync:lock', 30);
|
const lockValue = await this.redis.acquireLock('mining:network-sync:lock', 30);
|
||||||
if (!lockValue) {
|
if (!lockValue) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue