This commit is contained in:
2026-09-20 11:09:52 +08:00
parent c909d9044e
commit 78a36d1a39
4 changed files with 29 additions and 8 deletions
@@ -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<String> 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<String> 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<PhotoRow> 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<TimelineRow> pickTimeline(@Param("id") long id);
record ExceptionRow(Long id,String action,String reason,Long operatorId,String operatorName,java.time.LocalDateTime occurredAt,String requestHash) {}
@@ -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
@@ -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)
@@ -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");
}
}