diff --git a/backend/services/admin-service/src/infrastructure/persistence/repositories/user-query.repository.impl.ts b/backend/services/admin-service/src/infrastructure/persistence/repositories/user-query.repository.impl.ts index 04475332..d06146a4 100644 --- a/backend/services/admin-service/src/infrastructure/persistence/repositories/user-query.repository.impl.ts +++ b/backend/services/admin-service/src/infrastructure/persistence/repositories/user-query.repository.impl.ts @@ -24,6 +24,32 @@ export class UserQueryRepositoryImpl implements IUserQueryRepository { const where = this.buildWhereClause(filters); const orderBy = this.buildOrderBy(sort); + // 认种筛选:UserQueryView.personalAdoptionCount 可能未同步, + // 改为实时查询 PlantingOrderQueryView(与 getBatchUserStats 数据源一致) + if (filters.minAdoptions !== undefined || filters.maxAdoptions !== undefined) { + const adoptedAccounts = await this.prisma.plantingOrderQueryView.groupBy({ + by: ['accountSequence'], + where: { status: 'MINING_ENABLED' }, + _count: { id: true }, + }); + const adoptedSeqs = new Set(adoptedAccounts.map(a => a.accountSequence)); + + if (filters.minAdoptions !== undefined && filters.minAdoptions > 0) { + // 已认种:accountSequence 必须在有 MINING_ENABLED 订单的集合中 + where.accountSequence = { + ...(typeof where.accountSequence === 'object' ? where.accountSequence as any : {}), + in: [...adoptedSeqs], + }; + } + if (filters.maxAdoptions !== undefined && filters.maxAdoptions === 0) { + // 未认种:accountSequence 不在有 MINING_ENABLED 订单的集合中 + where.accountSequence = { + ...(typeof where.accountSequence === 'object' ? where.accountSequence as any : {}), + notIn: [...adoptedSeqs], + }; + } + } + const [items, total] = await Promise.all([ this.prisma.userQueryView.findMany({ where, @@ -264,16 +290,8 @@ export class UserQueryRepositoryImpl implements IUserQueryRepository { where.inviterSequence = filters.hasInviter ? { not: null } : null; } - // 认种数范围 - if (filters.minAdoptions !== undefined || filters.maxAdoptions !== undefined) { - where.personalAdoptionCount = {}; - if (filters.minAdoptions !== undefined) { - where.personalAdoptionCount.gte = filters.minAdoptions; - } - if (filters.maxAdoptions !== undefined) { - where.personalAdoptionCount.lte = filters.maxAdoptions; - } - } + // 认种数范围:不再使用 personalAdoptionCount(预计算字段可能未同步), + // 改为在 findMany 中实时查询 PlantingOrderQueryView 处理 // 注册时间范围 if (filters.registeredAfter || filters.registeredBefore) {