From 78a36d1a398cc04c88407ed62599df07ad53d0bf Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Sun, 20 Sep 2026 11:09:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/ContainerOverviewMapper.java | 2 +- .../mapper/InboundHoldGateMapper.java | 7 ------- .../ContainerOverviewSqlContractTest.java | 9 +++++++++ .../InboundHoldGateSqlContractTest.java | 19 +++++++++++++++++++ 4 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 firstleg/src/test/java/com/baiyue/firstleg/repository/InboundHoldGateSqlContractTest.java diff --git a/firstleg/src/main/java/com/baiyue/firstleg/mapper/ContainerOverviewMapper.java b/firstleg/src/main/java/com/baiyue/firstleg/mapper/ContainerOverviewMapper.java index e69662efd..8be1ec952 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/mapper/ContainerOverviewMapper.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/mapper/ContainerOverviewMapper.java @@ -28,7 +28,7 @@ import java.util.List; @Select("SELECT COUNT(*) FROM fl_loading_pick_item WHERE pick_task_id=#{id}") int itemCount(@Param("id") long id); @Select("SELECT COUNT(*) FROM fl_loading_pick_item WHERE pick_task_id=#{id} AND item_status IN ('PICKED','PARTIAL','SKIPPED')") int completedItemCount(@Param("id") long id); @Select("SELECT COUNT(*) FROM fl_loading_pick_item WHERE pick_task_id=#{id} AND item_status NOT IN ('PICKED','PARTIAL','SKIPPED')") int unresolvedItemCount(@Param("id") long id); - @Select("SELECT DISTINCT h.operation_reason FROM fl_loading_pick_history h WHERE h.pick_task_id=#{id} AND h.operation_reason IS NOT NULL AND h.operation_reason<>'' ORDER BY h.id") List pickExceptionReasons(@Param("id") long id); + @Select("SELECT h.operation_reason FROM fl_loading_pick_history h WHERE h.pick_task_id=#{id} AND h.operation_reason IS NOT NULL AND h.operation_reason<>'' GROUP BY h.operation_reason ORDER BY MIN(h.id)") List pickExceptionReasons(@Param("id") long id); @Select("SELECT e.id evidenceId,NULL tenantId,NULL inboundId,e.evidence_type evidenceType,e.file_id fileId,e.file_name fileName,e.status,e.created_at uploadedAt FROM fl_loading_cabinet_evidence e JOIN fl_loading_plan p ON p.container_booking_id=e.container_booking_id WHERE p.id=#{id} ORDER BY e.created_at,e.id") List photos(@Param("id") long id); @Select("SELECT action_type eventType,operation_id detail,operator_id operatorId,operator_name operatorName,created_at occurredAt FROM fl_loading_pick_operation WHERE pick_task_id=#{id} ORDER BY created_at,id") List pickTimeline(@Param("id") long id); record ExceptionRow(Long id,String action,String reason,Long operatorId,String operatorName,java.time.LocalDateTime occurredAt,String requestHash) {} diff --git a/firstleg/src/main/java/com/baiyue/firstleg/mapper/InboundHoldGateMapper.java b/firstleg/src/main/java/com/baiyue/firstleg/mapper/InboundHoldGateMapper.java index 9ce969034..976ff6a5a 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/mapper/InboundHoldGateMapper.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/mapper/InboundHoldGateMapper.java @@ -53,13 +53,6 @@ public interface InboundHoldGateMapper { WHERE plan_item.account_id=inbound.tenant_id AND plan_item.inbound_id=inbound.id AND plan_item.deleted=0 AND pick_item.picked_package_count>0 ) - OR EXISTS ( - SELECT 1 FROM fl_loading_plan_item plan_item - JOIN fl_loading_pick_item pick_item ON pick_item.loading_plan_item_id=plan_item.id - JOIN fl_loading_work_pallet_carton carton ON carton.pick_item_id=pick_item.id - WHERE plan_item.account_id=inbound.tenant_id AND plan_item.inbound_id=inbound.id - AND plan_item.deleted=0 - ) OR EXISTS ( SELECT 1 FROM fl_outbound_dispatch dispatch WHERE dispatch.tenant_id=inbound.tenant_id AND dispatch.inbound_id=inbound.id diff --git a/firstleg/src/test/java/com/baiyue/firstleg/repository/ContainerOverviewSqlContractTest.java b/firstleg/src/test/java/com/baiyue/firstleg/repository/ContainerOverviewSqlContractTest.java index e00485be6..b01370026 100644 --- a/firstleg/src/test/java/com/baiyue/firstleg/repository/ContainerOverviewSqlContractTest.java +++ b/firstleg/src/test/java/com/baiyue/firstleg/repository/ContainerOverviewSqlContractTest.java @@ -29,6 +29,15 @@ class ContainerOverviewSqlContractTest { .doesNotContain("SELECT *"); } + @Test void pickExceptionReasonsRemainOrderedWithoutInvalidDistinctOrdering() throws Exception { + String sql = String.join(" ", ContainerOverviewMapper.class + .getDeclaredMethod("pickExceptionReasons", long.class) + .getAnnotation(Select.class).value()); + assertThat(sql) + .contains("GROUP BY h.operation_reason", "ORDER BY MIN(h.id)") + .doesNotContain("SELECT DISTINCT"); + } + @Test void exceptionQueriesSelectEveryExceptionRowConstructorField() throws Exception { for (String method : java.util.List.of("exceptions", "latestException")) { String sql = String.join(" ", ContainerOverviewMapper.class.getDeclaredMethod(method, long.class) diff --git a/firstleg/src/test/java/com/baiyue/firstleg/repository/InboundHoldGateSqlContractTest.java b/firstleg/src/test/java/com/baiyue/firstleg/repository/InboundHoldGateSqlContractTest.java new file mode 100644 index 000000000..6156b3e4b --- /dev/null +++ b/firstleg/src/test/java/com/baiyue/firstleg/repository/InboundHoldGateSqlContractTest.java @@ -0,0 +1,19 @@ +package com.baiyue.firstleg.repository; + +import com.baiyue.firstleg.mapper.InboundHoldGateMapper; +import org.apache.ibatis.annotations.Select; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class InboundHoldGateSqlContractTest { + @Test void physicalWorkGateUsesOnlyCurrentFulfillmentTables() throws Exception { + String sql = String.join(" ", InboundHoldGateMapper.class + .getDeclaredMethod("hasPhysicalWork", long.class, long.class) + .getAnnotation(Select.class).value()); + + assertThat(sql) + .contains("fl_loading_pick_item", "picked_package_count>0", "fl_outbound_dispatch") + .doesNotContain("fl_loading_work_pallet", "fl_loading_work_pallet_carton"); + } +} -- 2.54.0