From 121e8ea619ef6ae8d4f9674732a852eaf94b3f8d Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Tue, 25 Aug 2026 14:33:38 +0800 Subject: [PATCH] fix(firstleg): validate settled partial pick totals --- .../com/baiyue/firstleg/mapper/LoadingPickItemMapper.java | 5 +++-- .../repository/LoadingPickItemMapperContractTest.java | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/firstleg/src/main/java/com/baiyue/firstleg/mapper/LoadingPickItemMapper.java b/firstleg/src/main/java/com/baiyue/firstleg/mapper/LoadingPickItemMapper.java index 81650f914..08ba4d734 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/mapper/LoadingPickItemMapper.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/mapper/LoadingPickItemMapper.java @@ -216,7 +216,8 @@ public interface LoadingPickItemMapper extends BaseMapper long unresolvedCount(@Param("taskId") long taskId); /** - * 以装柜计划的全部有效明细为完成口径,不能只检查当前 PDA 任务中的明细。 + * 以结算后的装柜计划事实为完成口径,不能只检查当前 PDA 任务中的明细。 + * PARTIAL 在本查询前已把计划箱数收敛为实际拣货箱数;收敛前的严格小于关系由结算计划校验。 */ @Select(""" SELECT COUNT(*) @@ -235,7 +236,7 @@ public interface LoadingPickItemMapper extends BaseMapper AND pick_item.picked_package_count = plan_item.package_count) OR (pick_item.item_status = 'PARTIAL' AND pick_item.picked_package_count > 0 - AND pick_item.picked_package_count < plan_item.package_count) + AND pick_item.picked_package_count = plan_item.package_count) OR (pick_item.item_status = 'SKIPPED' AND pick_item.picked_package_count = 0) ) diff --git a/firstleg/src/test/java/com/baiyue/firstleg/repository/LoadingPickItemMapperContractTest.java b/firstleg/src/test/java/com/baiyue/firstleg/repository/LoadingPickItemMapperContractTest.java index df0a6c03e..0810397ec 100644 --- a/firstleg/src/test/java/com/baiyue/firstleg/repository/LoadingPickItemMapperContractTest.java +++ b/firstleg/src/test/java/com/baiyue/firstleg/repository/LoadingPickItemMapperContractTest.java @@ -43,11 +43,13 @@ class LoadingPickItemMapperContractTest { .contains("pick_item.picked_package_count = plan_item.package_count") .contains("pick_item.item_status = 'PARTIAL'") .contains("pick_item.picked_package_count > 0") - .contains("pick_item.picked_package_count < plan_item.package_count") + .doesNotContain("pick_item.picked_package_count < plan_item.package_count") .contains("pick_item.item_status = 'SKIPPED'") .contains("pick_item.picked_package_count = 0") .doesNotContain("pick_item.item_status = 'PENDING'") .doesNotContain("pick_item.item_status = 'PICKING'"); + assertThat(org.springframework.util.StringUtils.countOccurrencesOf(sql, + "pick_item.picked_package_count = plan_item.package_count")).isEqualTo(2); } @Test