fix(firstleg): align loading completion trigger
This commit is contained in:
@@ -5688,14 +5688,23 @@ BEGIN
|
||||
SET NEW.preload_pushed_at = COALESCE(NEW.preload_pushed_at, CURRENT_TIMESTAMP(3));
|
||||
ELSEIF OLD.plan_status = 'LOADING' AND NEW.plan_status = 'COMPLETED' THEN
|
||||
IF EXISTS (SELECT 1 FROM fl_loading_plan_item item
|
||||
LEFT JOIN fl_loading_pick_item pick_item
|
||||
ON pick_item.loading_plan_item_id = item.id
|
||||
LEFT JOIN fl_loading_pick_task pick_task
|
||||
ON pick_task.id = pick_item.pick_task_id
|
||||
AND pick_task.loading_plan_id = OLD.id
|
||||
WHERE item.loading_plan_id = OLD.id AND item.deleted = 0
|
||||
AND (pick_task.id IS NULL
|
||||
OR pick_item.picked_package_count <> item.package_count)) THEN
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM fl_loading_pick_item pick_item
|
||||
JOIN fl_loading_pick_task pick_task ON pick_task.id = pick_item.pick_task_id
|
||||
WHERE pick_item.loading_plan_item_id = item.id
|
||||
AND pick_task.loading_plan_id = OLD.id
|
||||
AND pick_task.task_status = 'LOADING'
|
||||
AND (
|
||||
(pick_item.item_status = 'PICKED'
|
||||
AND pick_item.picked_package_count = item.package_count)
|
||||
OR (pick_item.item_status = 'PARTIAL'
|
||||
AND pick_item.picked_package_count > 0
|
||||
AND pick_item.picked_package_count = item.package_count)
|
||||
OR (pick_item.item_status = 'SKIPPED'
|
||||
AND pick_item.picked_package_count = 0)
|
||||
)
|
||||
)) THEN
|
||||
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '仍有未完成拣货明细,不能完成装柜';
|
||||
END IF;
|
||||
SET NEW.confirmed_at = COALESCE(NEW.confirmed_at, CURRENT_TIMESTAMP(3));
|
||||
|
||||
@@ -813,14 +813,23 @@ BEGIN
|
||||
SET NEW.preload_pushed_at = COALESCE(NEW.preload_pushed_at, CURRENT_TIMESTAMP(3));
|
||||
ELSEIF OLD.plan_status = 'LOADING' AND NEW.plan_status = 'COMPLETED' THEN
|
||||
IF EXISTS (SELECT 1 FROM fl_loading_plan_item item
|
||||
LEFT JOIN fl_loading_pick_item pick_item
|
||||
ON pick_item.loading_plan_item_id = item.id
|
||||
LEFT JOIN fl_loading_pick_task pick_task
|
||||
ON pick_task.id = pick_item.pick_task_id
|
||||
AND pick_task.loading_plan_id = OLD.id
|
||||
WHERE item.loading_plan_id = OLD.id AND item.deleted = 0
|
||||
AND (pick_task.id IS NULL
|
||||
OR pick_item.picked_package_count <> item.package_count)) THEN
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM fl_loading_pick_item pick_item
|
||||
JOIN fl_loading_pick_task pick_task ON pick_task.id = pick_item.pick_task_id
|
||||
WHERE pick_item.loading_plan_item_id = item.id
|
||||
AND pick_task.loading_plan_id = OLD.id
|
||||
AND pick_task.task_status = 'LOADING'
|
||||
AND (
|
||||
(pick_item.item_status = 'PICKED'
|
||||
AND pick_item.picked_package_count = item.package_count)
|
||||
OR (pick_item.item_status = 'PARTIAL'
|
||||
AND pick_item.picked_package_count > 0
|
||||
AND pick_item.picked_package_count = item.package_count)
|
||||
OR (pick_item.item_status = 'SKIPPED'
|
||||
AND pick_item.picked_package_count = 0)
|
||||
)
|
||||
)) THEN
|
||||
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '仍有未完成拣货明细,不能完成装柜';
|
||||
END IF;
|
||||
SET NEW.confirmed_at = COALESCE(NEW.confirmed_at, CURRENT_TIMESTAMP(3));
|
||||
|
||||
+17
-2
@@ -208,8 +208,6 @@ class SmartLoadingSqlContractTest {
|
||||
.contains("SET MESSAGE_TEXT = '装柜状态只允许单向推进'")
|
||||
.contains("IF OLD.plan_status = 'EDITING' AND NEW.plan_status = 'LOADING' THEN")
|
||||
.contains("ELSEIF OLD.plan_status = 'LOADING' AND NEW.plan_status = 'COMPLETED' THEN")
|
||||
.contains("LEFT JOIN fl_loading_pick_item pick_item")
|
||||
.contains("pick_item.picked_package_count <> item.package_count")
|
||||
.contains("IF OLD.plan_status = 'LOADING' AND NEW.plan_status = 'COMPLETED' THEN")
|
||||
.contains("SET frozen_at = COALESCE(frozen_at, NEW.confirmed_at, CURRENT_TIMESTAMP(3))")
|
||||
.contains("已有PDA拣货记录的装柜明细仅允许收敛部分拣货实际箱数")
|
||||
@@ -226,6 +224,23 @@ class SmartLoadingSqlContractTest {
|
||||
.doesNotContain("CONFIRMED")
|
||||
.doesNotContain("ROLLED_BACK")
|
||||
.doesNotContain("WITHDRAWN");
|
||||
assertLoadingCompletionTrigger(migration());
|
||||
assertLoadingCompletionTrigger(unifiedMigration());
|
||||
}
|
||||
|
||||
private static void assertLoadingCompletionTrigger(String sql) {
|
||||
assertThat(sql)
|
||||
.contains("AND NOT EXISTS (")
|
||||
.contains("pick_task.loading_plan_id = OLD.id")
|
||||
.contains("pick_task.task_status = 'LOADING'")
|
||||
.contains("pick_item.item_status = 'PICKED'")
|
||||
.contains("pick_item.item_status = 'PARTIAL'")
|
||||
.contains("pick_item.picked_package_count > 0")
|
||||
.contains("pick_item.item_status = 'SKIPPED'")
|
||||
.contains("pick_item.picked_package_count = 0")
|
||||
.doesNotContain("pick_item.picked_package_count <> item.package_count");
|
||||
assertThat(org.springframework.util.StringUtils.countOccurrencesOf(sql,
|
||||
"pick_item.picked_package_count = item.package_count")).isEqualTo(2);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user