From ed715111ae46ab036e60b9a37d0cc9c8dee4e160 Mon Sep 17 00:00:00 2001 From: hailin Date: Thu, 15 Jan 2026 19:32:46 -0800 Subject: [PATCH] fix(trading): auto-initialize SharePool and CirculationPool on startup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add SharePool and CirculationPool initialization in BurnService.initialize() - Initialize SharePool with 5760 green points (fixes price showing as 0) - Remove misleading "= 5,760 积分值" display from trading page Co-Authored-By: Claude Opus 4.5 --- .../src/application/services/burn.service.ts | 28 +++++++++++++++---- .../pages/trading/trading_page.dart | 26 +++++------------ 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/backend/services/trading-service/src/application/services/burn.service.ts b/backend/services/trading-service/src/application/services/burn.service.ts index 531e30a6..f9be7672 100644 --- a/backend/services/trading-service/src/application/services/burn.service.ts +++ b/backend/services/trading-service/src/application/services/burn.service.ts @@ -2,6 +2,7 @@ import { Injectable, Logger } from '@nestjs/common'; import { TradingCalculatorService } from '../../domain/services/trading-calculator.service'; import { BlackHoleRepository } from '../../infrastructure/persistence/repositories/black-hole.repository'; import { CirculationPoolRepository } from '../../infrastructure/persistence/repositories/circulation-pool.repository'; +import { SharePoolRepository } from '../../infrastructure/persistence/repositories/share-pool.repository'; import { TradingConfigRepository } from '../../infrastructure/persistence/repositories/trading-config.repository'; import { OutboxRepository } from '../../infrastructure/persistence/repositories/outbox.repository'; import { RedisService } from '../../infrastructure/redis/redis.service'; @@ -38,6 +39,7 @@ export class BurnService { constructor( private readonly blackHoleRepository: BlackHoleRepository, private readonly circulationPoolRepository: CirculationPoolRepository, + private readonly sharePoolRepository: SharePoolRepository, private readonly tradingConfigRepository: TradingConfigRepository, private readonly outboxRepository: OutboxRepository, private readonly redis: RedisService, @@ -238,13 +240,16 @@ export class BurnService { } /** - * 初始化黑洞和配置 + * 初始化交易系统(黑洞、配置、积分股池、流通池) */ async initialize(): Promise { - const [existingConfig, existingBlackHole] = await Promise.all([ - this.tradingConfigRepository.getConfig(), - this.blackHoleRepository.getBlackHole(), - ]); + const [existingConfig, existingBlackHole, existingSharePool, existingCirculationPool] = + await Promise.all([ + this.tradingConfigRepository.getConfig(), + this.blackHoleRepository.getBlackHole(), + this.sharePoolRepository.getPool(), + this.circulationPoolRepository.getPool(), + ]); if (!existingConfig) { await this.tradingConfigRepository.initializeConfig(); @@ -257,6 +262,19 @@ export class BurnService { ); this.logger.log('Black hole initialized'); } + + // 初始化积分股池(绿积分池),初始值 5760 + if (!existingSharePool) { + const initialGreenPoints = new Money(5760); + await this.sharePoolRepository.initializePool(initialGreenPoints); + this.logger.log(`Share pool initialized with ${initialGreenPoints.toFixed(8)} green points`); + } + + // 初始化流通池 + if (!existingCirculationPool) { + await this.circulationPoolRepository.initializePool(); + this.logger.log('Circulation pool initialized'); + } } /** diff --git a/frontend/mining-app/lib/presentation/pages/trading/trading_page.dart b/frontend/mining-app/lib/presentation/pages/trading/trading_page.dart index f149b0f1..6c3e44b1 100644 --- a/frontend/mining-app/lib/presentation/pages/trading/trading_page.dart +++ b/frontend/mining-app/lib/presentation/pages/trading/trading_page.dart @@ -157,7 +157,6 @@ class _TradingPageState extends ConsumerState { } final price = priceInfo?.price ?? '0'; - final greenPoints = priceInfo?.greenPoints ?? '0'; return Container( margin: const EdgeInsets.all(16), @@ -169,24 +168,13 @@ class _TradingPageState extends ConsumerState { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - const Text( - '当前积分股价格', - style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.w500, - color: _grayText, - ), - ), - DataText( - data: priceInfo != null ? '= ${formatCompact(greenPoints)} 积分值' : null, - isLoading: isLoading, - placeholder: '= -- 积分值', - style: const TextStyle(fontSize: 12, color: _grayText), - ), - ], + const Text( + '当前积分股价格', + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w500, + color: _grayText, + ), ), const SizedBox(height: 8), Row(