fix(firstleg): validate settled partial pick totals

This commit is contained in:
2026-08-25 14:33:38 +08:00
parent 7eca39e4fd
commit 121e8ea619
2 changed files with 6 additions and 3 deletions
@@ -216,7 +216,8 @@ public interface LoadingPickItemMapper extends BaseMapper<LoadingPickItemEntity>
long unresolvedCount(@Param("taskId") long taskId); long unresolvedCount(@Param("taskId") long taskId);
/** /**
* 以装柜计划的全部有效明细为完成口径,不能只检查当前 PDA 任务中的明细。 * 以结算后的装柜计划事实为完成口径,不能只检查当前 PDA 任务中的明细。
* PARTIAL 在本查询前已把计划箱数收敛为实际拣货箱数;收敛前的严格小于关系由结算计划校验。
*/ */
@Select(""" @Select("""
SELECT COUNT(*) SELECT COUNT(*)
@@ -235,7 +236,7 @@ public interface LoadingPickItemMapper extends BaseMapper<LoadingPickItemEntity>
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 = 'PARTIAL' OR (pick_item.item_status = 'PARTIAL'
AND pick_item.picked_package_count > 0 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' OR (pick_item.item_status = 'SKIPPED'
AND pick_item.picked_package_count = 0) AND pick_item.picked_package_count = 0)
) )
@@ -43,11 +43,13 @@ class LoadingPickItemMapperContractTest {
.contains("pick_item.picked_package_count = plan_item.package_count") .contains("pick_item.picked_package_count = plan_item.package_count")
.contains("pick_item.item_status = 'PARTIAL'") .contains("pick_item.item_status = 'PARTIAL'")
.contains("pick_item.picked_package_count > 0") .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.item_status = 'SKIPPED'")
.contains("pick_item.picked_package_count = 0") .contains("pick_item.picked_package_count = 0")
.doesNotContain("pick_item.item_status = 'PENDING'") .doesNotContain("pick_item.item_status = 'PENDING'")
.doesNotContain("pick_item.item_status = 'PICKING'"); .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 @Test