feat(mining-admin): 增强系统账户算力明细信息

- 关联认种订单信息:树数、认种日期、状态、单价
- 关联用户信息:手机号(脱敏)、姓名
- 方便追溯每笔算力的来源

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-01-21 03:32:27 -08:00
parent 63aba087b6
commit 7c8ea7a9d7
1 changed files with 67 additions and 14 deletions

View File

@ -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);
}
/**
*
*