feat(mining-admin): 增强系统账户算力明细信息
- 关联认种订单信息:树数、认种日期、状态、单价 - 关联用户信息:手机号(脱敏)、姓名 - 方便追溯每笔算力的来源 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
63aba087b6
commit
7c8ea7a9d7
|
|
@ -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 {
|
return {
|
||||||
records: records.map((record) => ({
|
records: records.map((record) => {
|
||||||
originalRecordId: record.originalRecordId.toString(),
|
const adoption = adoptionMap.get(record.sourceAdoptionId.toString());
|
||||||
accountType: record.accountType,
|
const user = userMap.get(record.sourceAccountSequence);
|
||||||
regionCode: record.regionCode,
|
|
||||||
sourceAdoptionId: record.sourceAdoptionId.toString(),
|
return {
|
||||||
sourceAccountSequence: record.sourceAccountSequence,
|
originalRecordId: record.originalRecordId.toString(),
|
||||||
distributionRate: record.distributionRate.toString(),
|
accountType: record.accountType,
|
||||||
amount: record.amount.toString(),
|
regionCode: record.regionCode,
|
||||||
effectiveDate: record.effectiveDate,
|
sourceAdoptionId: record.sourceAdoptionId.toString(),
|
||||||
expireDate: record.expireDate,
|
sourceAccountSequence: record.sourceAccountSequence,
|
||||||
isExpired: record.isExpired,
|
// 认种订单详情
|
||||||
createdAt: record.createdAt,
|
adoptionTreeCount: adoption?.treeCount || 0,
|
||||||
syncedAt: record.syncedAt,
|
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,
|
total,
|
||||||
page,
|
page,
|
||||||
pageSize,
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取系统账户算力明细统计
|
* 获取系统账户算力明细统计
|
||||||
* 用于显示算力来源的汇总信息
|
* 用于显示算力来源的汇总信息
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue