diff --git a/backend/services/mining-admin-service/src/application/services/users.service.ts b/backend/services/mining-admin-service/src/application/services/users.service.ts index 266b05eb..fbc26eb5 100644 --- a/backend/services/mining-admin-service/src/application/services/users.service.ts +++ b/backend/services/mining-admin-service/src/application/services/users.service.ts @@ -1,4 +1,5 @@ -import { Injectable, NotFoundException } from '@nestjs/common'; +import { Injectable, NotFoundException, Logger } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; import { PrismaService } from '../../infrastructure/persistence/prisma/prisma.service'; import { Prisma } from '@prisma/client'; @@ -20,7 +21,15 @@ export interface GetOrdersQuery { @Injectable() export class UsersService { - constructor(private readonly prisma: PrismaService) {} + private readonly logger = new Logger(UsersService.name); + private readonly miningServiceUrl: string; + + constructor( + private readonly prisma: PrismaService, + private readonly configService: ConfigService, + ) { + this.miningServiceUrl = this.configService.get('MINING_SERVICE_URL', 'http://localhost:3021'); + } /** * 获取用户列表 @@ -423,8 +432,7 @@ export class UsersService { } /** - * 获取用户挖矿记录(从同步表获取概要) - * 注:详细流水需要调用 mining-service + * 获取用户挖矿记录(从 mining-service 获取) */ async getUserMiningRecords( accountSequence: string, @@ -441,33 +449,79 @@ export class UsersService { } const mining = user.miningAccount; - if (!mining) { + const emptySummary = { + accountSequence, + totalMined: '0', + availableBalance: '0', + frozenBalance: '0', + totalContribution: '0', + }; + + // 从 mining-service 获取挖矿记录 + try { + const url = `${this.miningServiceUrl}/api/v2/mining/accounts/${accountSequence}/records?page=${page}&pageSize=${pageSize}`; + this.logger.log(`Fetching mining records from ${url}`); + + const response = await fetch(url); + if (!response.ok) { + this.logger.warn(`Failed to fetch mining records: ${response.status}`); + return { + summary: mining ? { + accountSequence, + totalMined: mining.totalMined.toString(), + availableBalance: mining.availableBalance.toString(), + frozenBalance: mining.frozenBalance.toString(), + totalContribution: mining.totalContribution.toString(), + } : emptySummary, + records: [], + pagination: { page, pageSize, total: 0, totalPages: 0 }, + }; + } + + const result = await response.json(); + const recordsData = result.data || result; + + // 格式化记录以匹配前端期望的格式 + const records = (recordsData.data || []).map((r: any) => ({ + id: r.id, + accountSequence, + distributionMinute: r.miningMinute, + contributionRatio: r.contributionRatio, + shareAmount: r.minedAmount, + priceSnapshot: r.secondDistribution, + createdAt: r.createdAt, + })); + return { - summary: { + summary: mining ? { accountSequence, - totalMined: '0', - availableBalance: '0', - frozenBalance: '0', - totalContribution: '0', + totalMined: mining.totalMined.toString(), + availableBalance: mining.availableBalance.toString(), + frozenBalance: mining.frozenBalance.toString(), + totalContribution: mining.totalContribution.toString(), + } : emptySummary, + records, + pagination: { + page, + pageSize, + total: recordsData.total || 0, + totalPages: Math.ceil((recordsData.total || 0) / pageSize), }, + }; + } catch (error) { + this.logger.error('Failed to fetch mining records from mining-service', error); + return { + summary: mining ? { + accountSequence, + totalMined: mining.totalMined.toString(), + availableBalance: mining.availableBalance.toString(), + frozenBalance: mining.frozenBalance.toString(), + totalContribution: mining.totalContribution.toString(), + } : emptySummary, records: [], pagination: { page, pageSize, total: 0, totalPages: 0 }, }; } - - return { - summary: { - accountSequence, - totalMined: mining.totalMined.toString(), - availableBalance: mining.availableBalance.toString(), - frozenBalance: mining.frozenBalance.toString(), - totalContribution: mining.totalContribution.toString(), - }, - // 详细流水需要从 mining-service 获取 - records: [], - pagination: { page, pageSize, total: 0, totalPages: 0 }, - note: '详细挖矿记录请查看 mining-service', - }; } /**