diff --git a/backend/services/mining-service/src/application/queries/get-mining-account.query.ts b/backend/services/mining-service/src/application/queries/get-mining-account.query.ts index c6635a49..2147b86c 100644 --- a/backend/services/mining-service/src/application/queries/get-mining-account.query.ts +++ b/backend/services/mining-service/src/application/queries/get-mining-account.query.ts @@ -1,5 +1,6 @@ import { Injectable } from '@nestjs/common'; import { MiningAccountRepository } from '../../infrastructure/persistence/repositories/mining-account.repository'; +import { MiningConfigRepository } from '../../infrastructure/persistence/repositories/mining-config.repository'; import { PrismaService } from '../../infrastructure/persistence/prisma/prisma.service'; export interface MiningAccountDto { @@ -9,6 +10,7 @@ export interface MiningAccountDto { frozenBalance: string; totalBalance: string; totalContribution: string; + perSecondEarning: string; // 每秒收益 = (用户贡献 / 全网贡献) × 每秒分配量 lastSyncedAt: Date | null; } @@ -38,6 +40,7 @@ export interface MiningTransactionDto { export class GetMiningAccountQuery { constructor( private readonly accountRepository: MiningAccountRepository, + private readonly configRepository: MiningConfigRepository, private readonly prisma: PrismaService, ) {} @@ -47,6 +50,24 @@ export class GetMiningAccountQuery { return null; } + // 计算每秒收益 = (用户贡献 / 全网贡献) × 每秒分配量 + let perSecondEarning = '0'; + try { + const [config, totalContribution] = await Promise.all([ + this.configRepository.getConfig(), + this.accountRepository.getTotalContribution(), + ]); + + if (config && totalContribution.toNumber() > 0) { + const userContribution = account.totalContribution.toNumber(); + const secondDistribution = config.secondDistribution.toNumber(); + const ratio = userContribution / totalContribution.toNumber(); + perSecondEarning = (ratio * secondDistribution).toFixed(8); + } + } catch { + // 如果计算失败,返回 0 + } + return { accountSequence: account.accountSequence, totalMined: account.totalMined.toString(), @@ -54,6 +75,7 @@ export class GetMiningAccountQuery { frozenBalance: account.frozenBalance.toString(), totalBalance: account.totalBalance.toString(), totalContribution: account.totalContribution.toString(), + perSecondEarning, lastSyncedAt: account.lastSyncedAt, }; } diff --git a/frontend/mining-app/lib/data/models/share_account_model.dart b/frontend/mining-app/lib/data/models/share_account_model.dart index 09879e87..36313072 100644 --- a/frontend/mining-app/lib/data/models/share_account_model.dart +++ b/frontend/mining-app/lib/data/models/share_account_model.dart @@ -14,12 +14,15 @@ class ShareAccountModel extends ShareAccount { factory ShareAccountModel.fromJson(Map json) { return ShareAccountModel( accountSequence: json['accountSequence']?.toString() ?? '', - miningBalance: json['miningBalance']?.toString() ?? '0', - tradingBalance: json['tradingBalance']?.toString() ?? '0', + // 后端返回 availableBalance,映射到 miningBalance + miningBalance: json['availableBalance']?.toString() ?? json['miningBalance']?.toString() ?? '0', + // 后端返回 totalBalance,映射到 tradingBalance(可交易余额) + tradingBalance: json['totalBalance']?.toString() ?? json['tradingBalance']?.toString() ?? '0', frozenBalance: json['frozenBalance']?.toString() ?? '0', totalMined: json['totalMined']?.toString() ?? '0', perSecondEarning: json['perSecondEarning']?.toString() ?? '0', - effectiveContribution: json['effectiveContribution']?.toString() ?? '0', + // 后端返回 totalContribution,映射到 effectiveContribution + effectiveContribution: json['totalContribution']?.toString() ?? json['effectiveContribution']?.toString() ?? '0', ); }