fix(mining-admin): remove MINING_ENABLED status filter for adoption stats
The adoption stats were showing 0 because the synced_adoptions table contains status values directly from 1.0 system (PAID, POOL_INJECTED, etc.) rather than MINING_ENABLED. Since contribution-service doesn't update the status after calculating contributions, we now count all synced adoptions. Changes: - Remove status filter in getAdoptionStatsForUsers - Remove status filter in getUserDetail adoption queries - Remove status filter in getUserAdoptionStats for referral tree - Add order count display in user detail page Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
2f3a0f3652
commit
65bd4f9b65
|
|
@ -111,12 +111,11 @@ export class UsersService {
|
|||
|
||||
if (accountSequences.length === 0) return result;
|
||||
|
||||
// 获取每个用户的个人认种数量和订单数(只统计 MINING_ENABLED 状态)
|
||||
// 获取每个用户的个人认种数量和订单数(统计所有已同步的认种记录)
|
||||
const personalAdoptions = await this.prisma.syncedAdoption.groupBy({
|
||||
by: ['accountSequence'],
|
||||
where: {
|
||||
accountSequence: { in: accountSequences },
|
||||
status: 'MINING_ENABLED',
|
||||
},
|
||||
_sum: { treeCount: true },
|
||||
_count: { id: true },
|
||||
|
|
@ -159,7 +158,6 @@ export class UsersService {
|
|||
const teamAdoptionStats = await this.prisma.syncedAdoption.aggregate({
|
||||
where: {
|
||||
accountSequence: { in: teamMembers.map((m) => m.accountSequence) },
|
||||
status: 'MINING_ENABLED',
|
||||
},
|
||||
_sum: { treeCount: true },
|
||||
_count: { id: true },
|
||||
|
|
@ -221,9 +219,9 @@ export class UsersService {
|
|||
throw new NotFoundException(`用户 ${accountSequence} 不存在`);
|
||||
}
|
||||
|
||||
// 获取个人认种数量(从 synced_adoptions 统计,只统计 MINING_ENABLED 状态)
|
||||
// 获取个人认种数量(从 synced_adoptions 统计)
|
||||
const personalAdoptionStats = await this.prisma.syncedAdoption.aggregate({
|
||||
where: { accountSequence, status: 'MINING_ENABLED' },
|
||||
where: { accountSequence },
|
||||
_sum: { treeCount: true },
|
||||
_count: { id: true },
|
||||
});
|
||||
|
|
@ -235,7 +233,7 @@ export class UsersService {
|
|||
});
|
||||
const directReferralCount = directReferrals.length;
|
||||
|
||||
// 获取直推认种数量(只统计 MINING_ENABLED 状态)
|
||||
// 获取直推认种数量
|
||||
let directReferralAdoptions = 0;
|
||||
if (directReferrals.length > 0) {
|
||||
const directAdoptionStats = await this.prisma.syncedAdoption.aggregate({
|
||||
|
|
@ -243,7 +241,6 @@ export class UsersService {
|
|||
accountSequence: {
|
||||
in: directReferrals.map((r) => r.accountSequence),
|
||||
},
|
||||
status: 'MINING_ENABLED',
|
||||
},
|
||||
_sum: { treeCount: true },
|
||||
});
|
||||
|
|
@ -277,7 +274,6 @@ export class UsersService {
|
|||
accountSequence: {
|
||||
in: teamMembers.map((m) => m.accountSequence),
|
||||
},
|
||||
status: 'MINING_ENABLED',
|
||||
},
|
||||
_sum: { treeCount: true },
|
||||
});
|
||||
|
|
@ -579,14 +575,14 @@ export class UsersService {
|
|||
}
|
||||
|
||||
/**
|
||||
* 获取用户认种统计(只统计 MINING_ENABLED 状态)
|
||||
* 获取用户认种统计
|
||||
*/
|
||||
private async getUserAdoptionStats(
|
||||
accountSequence: string,
|
||||
): Promise<{ personal: number; team: number }> {
|
||||
// 个人认种(只统计 MINING_ENABLED 状态)
|
||||
// 个人认种
|
||||
const personalStats = await this.prisma.syncedAdoption.aggregate({
|
||||
where: { accountSequence, status: 'MINING_ENABLED' },
|
||||
where: { accountSequence },
|
||||
_sum: { treeCount: true },
|
||||
});
|
||||
|
||||
|
|
@ -598,7 +594,7 @@ export class UsersService {
|
|||
|
||||
let teamCount = 0;
|
||||
if (referral?.originalUserId) {
|
||||
// 团队认种 = 所有下级的认种总和(只统计 MINING_ENABLED 状态)
|
||||
// 团队认种 = 所有下级的认种总和
|
||||
const teamMembers = await this.prisma.syncedReferral.findMany({
|
||||
where: {
|
||||
ancestorPath: { contains: referral.originalUserId.toString() },
|
||||
|
|
@ -610,7 +606,6 @@ export class UsersService {
|
|||
const teamStats = await this.prisma.syncedAdoption.aggregate({
|
||||
where: {
|
||||
accountSequence: { in: teamMembers.map((m) => m.accountSequence) },
|
||||
status: 'MINING_ENABLED',
|
||||
},
|
||||
_sum: { treeCount: true },
|
||||
});
|
||||
|
|
|
|||
|
|
@ -145,13 +145,27 @@ export default function UserDetailPage() {
|
|||
<p className="text-sm text-muted-foreground flex items-center gap-1">
|
||||
<TreePine className="h-3 w-3 text-green-600" /> 个人认种
|
||||
</p>
|
||||
<p className="text-lg font-bold text-green-600">{formatNumber(user?.personalAdoptions ?? 0)}</p>
|
||||
<p className="text-lg font-bold text-green-600">
|
||||
{formatNumber(user?.personalAdoptions ?? 0)}
|
||||
{(user?.personalAdoptionOrders ?? 0) > 0 && (
|
||||
<span className="text-sm font-normal text-green-500 ml-1">
|
||||
({user?.personalAdoptionOrders}单)
|
||||
</span>
|
||||
)}
|
||||
</p>
|
||||
</div>
|
||||
<div className="p-3 bg-blue-50 dark:bg-blue-950 rounded-lg">
|
||||
<p className="text-sm text-muted-foreground flex items-center gap-1">
|
||||
<Users className="h-3 w-3 text-blue-600" /> 团队认种
|
||||
</p>
|
||||
<p className="text-lg font-bold text-blue-600">{formatNumber(user?.teamAdoptions ?? 0)}</p>
|
||||
<p className="text-lg font-bold text-blue-600">
|
||||
{formatNumber(user?.teamAdoptions ?? 0)}
|
||||
{(user?.teamAdoptionOrders ?? 0) > 0 && (
|
||||
<span className="text-sm font-normal text-blue-500 ml-1">
|
||||
({user?.teamAdoptionOrders}单)
|
||||
</span>
|
||||
)}
|
||||
</p>
|
||||
</div>
|
||||
<div className="p-3 bg-purple-50 dark:bg-purple-950 rounded-lg">
|
||||
<p className="text-sm text-muted-foreground">团队地址</p>
|
||||
|
|
|
|||
Loading…
Reference in New Issue