From 7c8ea7a9d7fec87372d33738b2b2c024b35d1f76 Mon Sep 17 00:00:00 2001 From: hailin Date: Wed, 21 Jan 2026 03:32:27 -0800 Subject: [PATCH] =?UTF-8?q?feat(mining-admin):=20=E5=A2=9E=E5=BC=BA?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E8=B4=A6=E6=88=B7=E7=AE=97=E5=8A=9B=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 关联认种订单信息:树数、认种日期、状态、单价 - 关联用户信息:手机号(脱敏)、姓名 - 方便追溯每笔算力的来源 Co-Authored-By: Claude Opus 4.5 --- .../services/system-accounts.service.ts | 81 +++++++++++++++---- 1 file changed, 67 insertions(+), 14 deletions(-) diff --git a/backend/services/mining-admin-service/src/application/services/system-accounts.service.ts b/backend/services/mining-admin-service/src/application/services/system-accounts.service.ts index a1238edb..6191c0ca 100644 --- a/backend/services/mining-admin-service/src/application/services/system-accounts.service.ts +++ b/backend/services/mining-admin-service/src/application/services/system-accounts.service.ts @@ -402,21 +402,66 @@ export class SystemAccountsService { }), ]); + // 获取关联的认种订单和用户信息 + const adoptionIds = [...new Set(records.map(r => r.sourceAdoptionId))]; + const accountSequences = [...new Set(records.map(r => r.sourceAccountSequence))]; + + const [adoptions, users] = await Promise.all([ + this.prisma.syncedAdoption.findMany({ + where: { originalAdoptionId: { in: adoptionIds } }, + select: { + originalAdoptionId: true, + accountSequence: true, + treeCount: true, + adoptionDate: true, + status: true, + contributionPerTree: true, + }, + }), + this.prisma.syncedUser.findMany({ + where: { accountSequence: { in: accountSequences } }, + select: { + accountSequence: true, + phone: true, + realName: true, + nickname: true, + }, + }), + ]); + + // 构建映射 + const adoptionMap = new Map(adoptions.map(a => [a.originalAdoptionId.toString(), a])); + const userMap = new Map(users.map(u => [u.accountSequence, u])); + return { - records: records.map((record) => ({ - originalRecordId: record.originalRecordId.toString(), - accountType: record.accountType, - regionCode: record.regionCode, - sourceAdoptionId: record.sourceAdoptionId.toString(), - sourceAccountSequence: record.sourceAccountSequence, - distributionRate: record.distributionRate.toString(), - amount: record.amount.toString(), - effectiveDate: record.effectiveDate, - expireDate: record.expireDate, - isExpired: record.isExpired, - createdAt: record.createdAt, - syncedAt: record.syncedAt, - })), + records: records.map((record) => { + const adoption = adoptionMap.get(record.sourceAdoptionId.toString()); + const user = userMap.get(record.sourceAccountSequence); + + return { + originalRecordId: record.originalRecordId.toString(), + accountType: record.accountType, + regionCode: record.regionCode, + sourceAdoptionId: record.sourceAdoptionId.toString(), + sourceAccountSequence: record.sourceAccountSequence, + // 认种订单详情 + adoptionTreeCount: adoption?.treeCount || 0, + adoptionDate: adoption?.adoptionDate || null, + adoptionStatus: adoption?.status || null, + contributionPerTree: adoption?.contributionPerTree?.toString() || '0', + // 用户信息 + sourceUserPhone: user?.phone ? this.maskPhone(user.phone) : null, + sourceUserName: user?.realName || user?.nickname || null, + // 分配信息 + distributionRate: record.distributionRate.toString(), + amount: record.amount.toString(), + effectiveDate: record.effectiveDate, + expireDate: record.expireDate, + isExpired: record.isExpired, + createdAt: record.createdAt, + syncedAt: record.syncedAt, + }; + }), total, page, pageSize, @@ -424,6 +469,14 @@ export class SystemAccountsService { }; } + /** + * 手机号脱敏 + */ + private maskPhone(phone: string): string { + if (!phone || phone.length < 7) return phone; + return phone.substring(0, 3) + '****' + phone.substring(phone.length - 4); + } + /** * 获取系统账户算力明细统计 * 用于显示算力来源的汇总信息