From b67dfa0f4c8f6a2a9bd74189a6842c6d4dc8005d Mon Sep 17 00:00:00 2001 From: hailin Date: Wed, 4 Mar 2026 08:58:45 -0800 Subject: [PATCH] =?UTF-8?q?fix(planting-service+app):=20=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E8=A1=A5=E5=85=85=20totalPortions=EF=BC=8C?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E6=98=BE=E7=A4=BA=E5=AE=9E=E9=99=85=E4=BB=BD?= =?UTF-8?q?=E6=95=B0=E8=80=8C=E9=9D=9E=E8=AE=A2=E5=8D=95=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - getMerges 批量查来源订单 portionCount,按合并分组求和后返回 totalPortions - 预种明细合并卡片改用 totalPortions 显示份数,fallback 才用订单数 Co-Authored-By: Claude Sonnet 4.6 --- .../services/pre-planting-application.service.ts | 12 ++++++++++++ .../pages/pre_planting_position_page.dart | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/backend/services/planting-service/src/pre-planting/application/services/pre-planting-application.service.ts b/backend/services/planting-service/src/pre-planting/application/services/pre-planting-application.service.ts index 46c7fbc5..22f94a89 100644 --- a/backend/services/planting-service/src/pre-planting/application/services/pre-planting-application.service.ts +++ b/backend/services/planting-service/src/pre-planting/application/services/pre-planting-application.service.ts @@ -368,6 +368,7 @@ export class PrePlantingApplicationService { async getMerges(userId: bigint): Promise<{ mergeNo: string; sourceOrderNos: string[]; + totalPortions: number; treeCount: number; contractStatus: string; contractSignedAt: Date | null; @@ -376,9 +377,20 @@ export class PrePlantingApplicationService { }[]> { return this.prisma.$transaction(async (tx) => { const merges = await this.mergeRepo.findByUserId(tx, userId); + if (merges.length === 0) return []; + + // 批量查询所有合并的来源订单份数 + const allOrderNos = merges.flatMap((m) => m.sourceOrderNos); + const orderRecords = await tx.prePlantingOrder.findMany({ + where: { orderNo: { in: allOrderNos } }, + select: { orderNo: true, portionCount: true }, + }); + const portionByOrderNo = new Map(orderRecords.map((o) => [o.orderNo, o.portionCount])); + return merges.map((m) => ({ mergeNo: m.mergeNo, sourceOrderNos: m.sourceOrderNos, + totalPortions: m.sourceOrderNos.reduce((sum, no) => sum + (portionByOrderNo.get(no) ?? 1), 0), treeCount: m.treeCount, contractStatus: m.contractStatus, contractSignedAt: m.contractSignedAt, diff --git a/frontend/mobile-app/lib/features/pre_planting/presentation/pages/pre_planting_position_page.dart b/frontend/mobile-app/lib/features/pre_planting/presentation/pages/pre_planting_position_page.dart index de126c9a..10a2a326 100644 --- a/frontend/mobile-app/lib/features/pre_planting/presentation/pages/pre_planting_position_page.dart +++ b/frontend/mobile-app/lib/features/pre_planting/presentation/pages/pre_planting_position_page.dart @@ -669,7 +669,7 @@ class _PrePlantingPositionPageState const SizedBox(width: 16), _buildInfoChip( Icons.layers_outlined, - '${merge.sourceOrderNos.length} 份合并', + '${merge.totalPortions > 0 ? merge.totalPortions : merge.sourceOrderNos.length} 份合并', ), ], ),