From 17ecc9954f6b85e523c9cc4f155ced7f02e03c2e Mon Sep 17 00:00:00 2001 From: hailin Date: Tue, 3 Feb 2026 08:09:12 -0800 Subject: [PATCH] =?UTF-8?q?fix(admin-service):=20=E8=AE=A4=E7=A7=8D?= =?UTF-8?q?=E7=AD=9B=E9=80=89=E6=94=B9=E7=94=A8=20PlantingOrderQueryView?= =?UTF-8?q?=20=E5=AE=9E=E6=97=B6=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit UserQueryView.personalAdoptionCount 预计算字段未被事件同步更新(始终为 0), 导致前端选"已认种"后查不到数据。 修复:认种数过滤(minAdoptions/maxAdoptions)不再查 UserQueryView 的 stale 字段,改为实时 groupBy 查询 PlantingOrderQueryView (status='MINING_ENABLED'),与 getBatchUserStats 展示数据源保持一致。 - 已认种(minAdoptions>=1):accountSequence IN 有订单的集合 - 未认种(maxAdoptions=0):accountSequence NOT IN 有订单的集合 Co-Authored-By: Claude Opus 4.5 --- .../user-query.repository.impl.ts | 38 ++++++++++++++----- 1 file changed, 28 insertions(+), 10 deletions(-) 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) {