diff --git a/backend/services/admin-service/src/api/controllers/user-detail.controller.ts b/backend/services/admin-service/src/api/controllers/user-detail.controller.ts index 96030771..146d1b1a 100644 --- a/backend/services/admin-service/src/api/controllers/user-detail.controller.ts +++ b/backend/services/admin-service/src/api/controllers/user-detail.controller.ts @@ -7,6 +7,7 @@ import { HttpStatus, NotFoundException, Inject, + Logger, } from '@nestjs/common'; import { ReferralTreeQueryDto, LedgerQueryDto, WalletLedgerQueryDto } from '../dto/request/user-detail-query.dto'; import { @@ -32,6 +33,8 @@ import { */ @Controller('admin/users') export class UserDetailController { + private readonly logger = new Logger(UserDetailController.name); + constructor( @Inject(USER_QUERY_REPOSITORY) private readonly userQueryRepository: IUserQueryRepository, @@ -188,7 +191,10 @@ export class UserDetailController { @Param('accountSequence') accountSequence: string, @Query() query: LedgerQueryDto, ): Promise { + this.logger.log(`[getPlantingLedger] 查询认种分类账, accountSequence=${accountSequence}`); + const user = await this.userQueryRepository.findByAccountSequence(accountSequence); + this.logger.log(`[getPlantingLedger] 用户查询结果: ${user ? `userId=${user.userId}` : 'null'}`); if (!user) { throw new NotFoundException(`用户 ${accountSequence} 不存在`); } @@ -204,6 +210,9 @@ export class UserDetailController { ), ]); + this.logger.log(`[getPlantingLedger] 认种汇总: ${JSON.stringify(summary)}`); + this.logger.log(`[getPlantingLedger] 认种流水条数: ${ledger.items.length}, total=${ledger.total}`); + return { summary: { totalOrders: summary?.totalOrders || 0, @@ -244,7 +253,10 @@ export class UserDetailController { @Param('accountSequence') accountSequence: string, @Query() query: WalletLedgerQueryDto, ): Promise { + this.logger.log(`[getWalletLedger] 查询钱包分类账, accountSequence=${accountSequence}`); + const user = await this.userQueryRepository.findByAccountSequence(accountSequence); + this.logger.log(`[getWalletLedger] 用户查询结果: ${user ? `userId=${user.userId}` : 'null'}`); if (!user) { throw new NotFoundException(`用户 ${accountSequence} 不存在`); } @@ -264,6 +276,9 @@ export class UserDetailController { ), ]); + this.logger.log(`[getWalletLedger] 钱包汇总: ${JSON.stringify(summary)}`); + this.logger.log(`[getWalletLedger] 钱包流水条数: ${ledger.items.length}, total=${ledger.total}`); + return { summary: { usdtAvailable: this.formatDecimal(summary?.usdtAvailable), diff --git a/backend/services/admin-service/src/infrastructure/persistence/repositories/user-detail-query.repository.impl.ts b/backend/services/admin-service/src/infrastructure/persistence/repositories/user-detail-query.repository.impl.ts index 88505135..8be7ddc5 100644 --- a/backend/services/admin-service/src/infrastructure/persistence/repositories/user-detail-query.repository.impl.ts +++ b/backend/services/admin-service/src/infrastructure/persistence/repositories/user-detail-query.repository.impl.ts @@ -1,4 +1,4 @@ -import { Injectable } from '@nestjs/common'; +import { Injectable, Logger } from '@nestjs/common'; import { Decimal } from '@prisma/client/runtime/library'; import { PrismaService } from '../prisma/prisma.service'; import { @@ -19,6 +19,8 @@ import { @Injectable() export class UserDetailQueryRepositoryImpl implements IUserDetailQueryRepository { + private readonly logger = new Logger(UserDetailQueryRepositoryImpl.name); + constructor(private readonly prisma: PrismaService) {} // ============================================================================ @@ -160,12 +162,16 @@ export class UserDetailQueryRepositoryImpl implements IUserDetailQueryRepository // ============================================================================ async getPlantingSummary(accountSequence: string): Promise { + this.logger.log(`[getPlantingSummary] 查询认种汇总, accountSequence=${accountSequence}`); + // 先获取用户的 userId 用于查询持仓 const user = await this.prisma.userQueryView.findUnique({ where: { accountSequence }, select: { userId: true }, }); + this.logger.log(`[getPlantingSummary] 用户查询结果: ${user ? `userId=${user.userId}` : 'null'}`); + if (!user) return null; // 获取持仓信息 @@ -173,6 +179,8 @@ export class UserDetailQueryRepositoryImpl implements IUserDetailQueryRepository where: { userId: user.userId }, }); + this.logger.log(`[getPlantingSummary] 持仓查询结果: ${position ? `effectiveTreeCount=${position.effectiveTreeCount}` : 'null'}`); + // 获取订单统计 - 使用 accountSequence const [orderStats, firstOrder, lastOrder] = await Promise.all([ this.prisma.plantingOrderQueryView.aggregate({ @@ -195,6 +203,8 @@ export class UserDetailQueryRepositoryImpl implements IUserDetailQueryRepository }), ]); + this.logger.log(`[getPlantingSummary] 订单统计: count=${orderStats._count}, treeCount=${orderStats._sum.treeCount}, totalAmount=${orderStats._sum.totalAmount}`); + return { totalOrders: orderStats._count, totalTreeCount: orderStats._sum.treeCount || 0, @@ -257,10 +267,14 @@ export class UserDetailQueryRepositoryImpl implements IUserDetailQueryRepository // ============================================================================ async getWalletSummary(accountSequence: string): Promise { + this.logger.log(`[getWalletSummary] 查询钱包, accountSequence=${accountSequence}`); + const wallet = await this.prisma.walletAccountQueryView.findUnique({ where: { accountSequence }, }); + this.logger.log(`[getWalletSummary] 查询结果: ${wallet ? `id=${wallet.id}, userId=${wallet.userId}, usdtAvailable=${wallet.usdtAvailable}` : 'null'}`); + if (!wallet) return null; return { @@ -292,6 +306,8 @@ export class UserDetailQueryRepositoryImpl implements IUserDetailQueryRepository pageSize: number, filters?: WalletLedgerFilters, ): Promise { + this.logger.log(`[getWalletLedger] 查询钱包流水, accountSequence=${accountSequence}, page=${page}`); + const where: any = { accountSequence }; if (filters?.assetType) { diff --git a/frontend/admin-web/src/app/(dashboard)/users/[id]/page.tsx b/frontend/admin-web/src/app/(dashboard)/users/[id]/page.tsx index 573c5caf..4669d823 100644 --- a/frontend/admin-web/src/app/(dashboard)/users/[id]/page.tsx +++ b/frontend/admin-web/src/app/(dashboard)/users/[id]/page.tsx @@ -62,7 +62,7 @@ const entryTypeLabels: Record = { }; const assetTypeLabels: Record = { - USDT: 'USDT', + USDT: '绿积分', DST: 'DST', BNB: 'BNB', OG: 'OG', @@ -440,7 +440,7 @@ export default function UserDetailPage() {
- 总金额 (USDT) + 总金额 (绿积分) {formatAmount(plantingData.summary.totalAmount)} @@ -543,13 +543,13 @@ export default function UserDetailPage() {

钱包汇总

- USDT 可用 + 绿积分 可用 {formatAmount(walletData.summary.usdtAvailable)}
- USDT 冻结 + 绿积分 冻结 {formatAmount(walletData.summary.usdtFrozen)}