From 5f6ecf9670ae35fb48ca672ddc9fbc5727e2799e Mon Sep 17 00:00:00 2001 From: hailin Date: Wed, 7 Jan 2026 20:53:30 -0800 Subject: [PATCH] =?UTF-8?q?fix(admin):=20=E7=94=A8=E6=88=B7=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E9=A1=B5=20USDT=20=E6=94=B9=E4=B8=BA=E7=BB=BF?= =?UTF-8?q?=E7=A7=AF=E5=88=86=20+=20=E6=B7=BB=E5=8A=A0=E8=B0=83=E8=AF=95?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 前端修改: - 钱包汇总: USDT 可用/冻结 → 绿积分 可用/冻结 - 认种汇总: 总金额 (USDT) → 总金额 (绿积分) - 资产类型标签: USDT → 绿积分 后端修改: - UserDetailController: 添加认种/钱包查询日志 - UserDetailQueryRepositoryImpl: 添加数据库查询日志 - 日志包含 accountSequence、查询结果、数据条数等信息 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../api/controllers/user-detail.controller.ts | 15 +++++++++++++++ .../user-detail-query.repository.impl.ts | 18 +++++++++++++++++- .../src/app/(dashboard)/users/[id]/page.tsx | 8 ++++---- 3 files changed, 36 insertions(+), 5 deletions(-) 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)}