优化
This commit is contained in:
+52
-13
@@ -78,20 +78,36 @@ public interface OutboundDispatchReadMapper {
|
||||
|
||||
@Select("""
|
||||
SELECT module,action,fromStatus,toStatus,operatorId,operatorName,remark,occurredAt FROM (
|
||||
SELECT 'INBOUND' module,h.action action,h.from_status fromStatus,h.to_status toStatus,
|
||||
h.operator_id operatorId,h.operator_name operatorName,h.reason remark,h.occurred_at occurredAt
|
||||
SELECT CONVERT('INBOUND' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci module,
|
||||
CONVERT(h.action USING utf8mb4) COLLATE utf8mb4_0900_ai_ci action,
|
||||
CONVERT(h.from_status USING utf8mb4) COLLATE utf8mb4_0900_ai_ci fromStatus,
|
||||
CONVERT(h.to_status USING utf8mb4) COLLATE utf8mb4_0900_ai_ci toStatus,
|
||||
h.operator_id operatorId,
|
||||
CONVERT(h.operator_name USING utf8mb4) COLLATE utf8mb4_0900_ai_ci operatorName,
|
||||
CONVERT(h.reason USING utf8mb4) COLLATE utf8mb4_0900_ai_ci remark,h.occurred_at occurredAt
|
||||
FROM fl_inbound_status_history h WHERE h.tenant_id=#{tenantId} AND h.inbound_id=#{inboundId}
|
||||
UNION ALL
|
||||
SELECT 'LOADING_PLAN',h.action_type,h.from_status,h.to_status,h.operator_id,h.operator_name,
|
||||
h.operation_reason,h.created_at FROM fl_loading_plan_history h WHERE h.loading_plan_id=#{loadingPlanId}
|
||||
SELECT CONVERT('LOADING_PLAN' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.action_type USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.from_status USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.to_status USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,h.operator_id,
|
||||
CONVERT(h.operator_name USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.operation_reason USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,h.created_at
|
||||
FROM fl_loading_plan_history h WHERE h.loading_plan_id=#{loadingPlanId}
|
||||
UNION ALL
|
||||
SELECT 'PDA_PICK',h.action_type,NULL,NULL,h.operator_id,h.operator_name,h.operation_reason,h.created_at
|
||||
SELECT CONVERT('PDA_PICK' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.action_type USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,NULL,NULL,h.operator_id,
|
||||
CONVERT(h.operator_name USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.operation_reason USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,h.created_at
|
||||
FROM fl_loading_pick_history h JOIN fl_loading_pick_task task ON task.id=h.pick_task_id
|
||||
WHERE task.loading_plan_id=#{loadingPlanId}
|
||||
UNION ALL
|
||||
SELECT 'LOADING_EVIDENCE',CASE WHEN e.status='VOID' THEN 'VOID_EVIDENCE' ELSE 'UPSERT_EVIDENCE' END,NULL,NULL,
|
||||
COALESCE(e.updated_by,e.created_by),COALESCE(e.updated_by_name,e.created_by_name),
|
||||
CONCAT(e.evidence_type,CASE WHEN e.seal_no IS NULL OR e.seal_no='' THEN '' ELSE CONCAT(':',e.seal_no) END),
|
||||
SELECT CONVERT('LOADING_EVIDENCE' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(CASE WHEN e.status='VOID' THEN 'VOID_EVIDENCE' ELSE 'UPSERT_EVIDENCE' END USING utf8mb4)
|
||||
COLLATE utf8mb4_0900_ai_ci,NULL,NULL,COALESCE(e.updated_by,e.created_by),
|
||||
CONVERT(COALESCE(e.updated_by_name,e.created_by_name) USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(CONCAT(e.evidence_type,CASE WHEN e.seal_no IS NULL OR e.seal_no='' THEN '' ELSE CONCAT(':',e.seal_no) END)
|
||||
USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
COALESCE(e.updated_at,e.created_at)
|
||||
FROM fl_loading_cabinet_evidence e
|
||||
JOIN fl_loading_plan evidence_plan ON evidence_plan.container_booking_id=e.container_booking_id
|
||||
@@ -99,17 +115,35 @@ public interface OutboundDispatchReadMapper {
|
||||
AND evidence_item.deleted=0
|
||||
WHERE evidence_item.account_id=#{tenantId} AND evidence_item.inbound_id=#{inboundId}
|
||||
UNION ALL
|
||||
SELECT 'OCEAN_BOOKING',h.action,h.from_status,h.to_status,h.operator_id,h.operator_name,h.reason,h.created_at
|
||||
SELECT CONVERT('OCEAN_BOOKING' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.action USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.from_status USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.to_status USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,h.operator_id,
|
||||
CONVERT(h.operator_name USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.reason USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,h.created_at
|
||||
FROM fl_ocean_booking_status_history h WHERE h.ocean_booking_id=#{oceanBookingId}
|
||||
UNION ALL
|
||||
SELECT 'TRUCK_APPOINTMENT',h.action,h.from_status,h.to_status,h.operator_id,h.operator_name,h.reason,h.created_at
|
||||
SELECT CONVERT('TRUCK_APPOINTMENT' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.action USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.from_status USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.to_status USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,h.operator_id,
|
||||
CONVERT(h.operator_name USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.reason USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,h.created_at
|
||||
FROM fl_truck_appointment_history h WHERE h.appointment_id=#{truckAppointmentId}
|
||||
UNION ALL
|
||||
SELECT 'CUSTOMS',h.action,h.from_status,h.to_status,h.operator_id,h.operator_name,h.remark,h.created_at
|
||||
SELECT CONVERT('CUSTOMS' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.action USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.from_status USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.to_status USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,h.operator_id,
|
||||
CONVERT(h.operator_name USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.remark USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,h.created_at
|
||||
FROM fl_customs_container_history h JOIN fl_customs_container customs_container ON customs_container.id=h.customs_container_id
|
||||
WHERE customs_container.container_booking_id=#{containerBookingId}
|
||||
UNION ALL
|
||||
SELECT 'SAILING_SCHEDULE',h.action,NULL,NULL,h.operator_id,h.operator_name,h.reason,h.created_at
|
||||
SELECT CONVERT('SAILING_SCHEDULE' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.action USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,NULL,NULL,h.operator_id,
|
||||
CONVERT(h.operator_name USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.reason USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,h.created_at
|
||||
FROM fl_port_schedule_history h JOIN fl_port_schedule port_schedule ON port_schedule.id=h.port_schedule_id
|
||||
WHERE port_schedule.customer_id=#{tenantId} AND port_schedule.ocean_booking_id=#{oceanBookingId}
|
||||
AND port_schedule.container_booking_id=#{containerBookingId}
|
||||
@@ -123,7 +157,12 @@ public interface OutboundDispatchReadMapper {
|
||||
AND schedule_inbound.id=#{inboundId}
|
||||
)
|
||||
UNION ALL
|
||||
SELECT 'OUTBOUND_DISPATCH',h.action,h.from_status,h.to_status,h.operator_id,h.operator_name,h.remark,h.created_at
|
||||
SELECT CONVERT('OUTBOUND_DISPATCH' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.action USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.from_status USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.to_status USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,h.operator_id,
|
||||
CONVERT(h.operator_name USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,
|
||||
CONVERT(h.remark USING utf8mb4) COLLATE utf8mb4_0900_ai_ci,h.created_at
|
||||
FROM fl_outbound_dispatch_history h WHERE h.tenant_id=#{tenantId} AND h.inbound_id=#{inboundId}
|
||||
AND h.container_booking_id=#{containerBookingId}
|
||||
) timeline ORDER BY occurredAt,module
|
||||
|
||||
@@ -34,7 +34,7 @@ CREATE TABLE IF NOT EXISTS fl_loading_cabinet_evidence (
|
||||
CONSTRAINT fk_cabinet_evidence_task FOREIGN KEY (source_task_id) REFERENCES fl_loading_pick_task(id),
|
||||
CONSTRAINT chk_cabinet_evidence_type CHECK (evidence_type IN ('PHOTO_STEP_1','PHOTO_STEP_2','PHOTO_STEP_3','PHOTO_STEP_4','SEAL')),
|
||||
CONSTRAINT chk_cabinet_evidence_status CHECK (status IN ('ACTIVE','VOID'))
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='柜次物理装柜证据;task仅记录来源审计';
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='柜次物理装柜证据;task仅记录来源审计';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS fl_loading_operation (
|
||||
id BIGINT UNSIGNED NOT NULL COMMENT '装柜写操作记录ID',
|
||||
|
||||
+2
@@ -20,6 +20,7 @@ class LoadingEvidenceSqlContractTest {
|
||||
.contains("source_task_id BIGINT UNSIGNED NOT NULL")
|
||||
.contains("UNIQUE KEY uk_cabinet_evidence_active (container_booking_id,evidence_type,active_flag)")
|
||||
.contains("UNIQUE KEY uk_cabinet_evidence_operation (source_task_id,operation_key)")
|
||||
.contains("DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci")
|
||||
.contains("FOREIGN KEY (container_booking_id) REFERENCES fl_container_booking(id)")
|
||||
.doesNotContain("CREATE TABLE IF NOT EXISTS fl_loading_evidence");
|
||||
}
|
||||
@@ -32,6 +33,7 @@ class LoadingEvidenceSqlContractTest {
|
||||
assertThat(sql).contains("CREATE TABLE IF NOT EXISTS fl_loading_cabinet_evidence")
|
||||
.contains("uk_cabinet_evidence_active")
|
||||
.contains("uk_cabinet_evidence_operation")
|
||||
.contains("normalize_loading_cabinet_evidence_collation")
|
||||
.doesNotContain("CREATE TABLE IF NOT EXISTS fl_loading_evidence")
|
||||
.doesNotContain("phase3_loading_evidence_add_column");
|
||||
}
|
||||
|
||||
+17
-2
@@ -87,11 +87,12 @@ class OutboundDispatchReadMapperContractTest {
|
||||
.getAnnotation(Select.class).value());
|
||||
|
||||
assertThat(sql)
|
||||
.contains("SELECT 'CUSTOMS'", "FROM fl_customs_container_history h JOIN fl_customs_container customs_container")
|
||||
.contains("CONVERT('CUSTOMS' USING utf8mb4)",
|
||||
"FROM fl_customs_container_history h JOIN fl_customs_container customs_container")
|
||||
.contains("customs_container.container_booking_id=#{containerBookingId}")
|
||||
.doesNotContain("fl_customs_history", "customs_case.tenant_id=#{tenantId}",
|
||||
"customs_case.order_id=#{orderId}", "customs_case.inbound_id=#{inboundId}")
|
||||
.contains("SELECT 'SAILING_SCHEDULE'",
|
||||
.contains("CONVERT('SAILING_SCHEDULE' USING utf8mb4)",
|
||||
"FROM fl_port_schedule_history h JOIN fl_port_schedule port_schedule")
|
||||
.contains("port_schedule.customer_id=#{tenantId}",
|
||||
"port_schedule.ocean_booking_id=#{oceanBookingId}")
|
||||
@@ -100,4 +101,18 @@ class OutboundDispatchReadMapperContractTest {
|
||||
.contains("schedule_inbound.id=#{inboundId}")
|
||||
.contains("ORDER BY occurredAt,module");
|
||||
}
|
||||
|
||||
@Test
|
||||
void timelineNormalizesTextCollationAcrossEveryUnionBranch() throws Exception {
|
||||
String sql = String.join("\n", OutboundDispatchReadMapper.class
|
||||
.getMethod("timeline", long.class, long.class, long.class, long.class,
|
||||
long.class, Long.class, Long.class)
|
||||
.getAnnotation(Select.class).value());
|
||||
|
||||
assertThat(sql)
|
||||
.contains("CONVERT('INBOUND' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci")
|
||||
.contains("CONVERT('LOADING_EVIDENCE' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci")
|
||||
.contains("CONVERT(COALESCE(e.updated_by_name,e.created_by_name) USING utf8mb4) COLLATE utf8mb4_0900_ai_ci")
|
||||
.contains("CONVERT('OUTBOUND_DISPATCH' USING utf8mb4) COLLATE utf8mb4_0900_ai_ci");
|
||||
}
|
||||
}
|
||||
|
||||
+3
-1
@@ -48,6 +48,8 @@ class Phase3FinalUnifiedSqlContractTest {
|
||||
.contains("CREATE TABLE IF NOT EXISTS fl_loading_cabinet_evidence")
|
||||
.contains("UNIQUE KEY uk_cabinet_evidence_active (container_booking_id,evidence_type,active_flag)")
|
||||
.contains("UNIQUE KEY uk_cabinet_evidence_operation (source_task_id,operation_key)")
|
||||
.contains("normalize_loading_cabinet_evidence_collation")
|
||||
.contains("table_collation<>'utf8mb4_0900_ai_ci'")
|
||||
.contains("column_name IN ('container_booking_id','source_task_id','active_flag','operation_key','request_hash')")
|
||||
.doesNotContain("CREATE TABLE IF NOT EXISTS fl_loading_evidence", "phase3_loading_evidence_add_column")
|
||||
.contains("CALL assert_phase3_final_schema()")
|
||||
@@ -153,7 +155,7 @@ class Phase3FinalUnifiedSqlContractTest {
|
||||
.contains("存在缺失中文注释的业务字段")
|
||||
.doesNotContain("CREATE PROCEDURE upgrade_column_comment");
|
||||
assertThat(count(sql, "CALL queue_table_comment(")).isEqualTo(144);
|
||||
assertThat(count(sql, "CALL queue_column_comment(")).isGreaterThanOrEqualTo(2380);
|
||||
assertThat(count(sql, "CALL queue_column_comment(")).isGreaterThanOrEqualTo(2379);
|
||||
assertThat(sql)
|
||||
.contains("CALL queue_column_comment('baiyue_firstleg', 'fl_inbound_fee_detail', 'supplier_id'")
|
||||
.contains("CALL queue_column_comment('baiyue_firstleg', 'fl_inbound_fee_detail', 'supplier_name'")
|
||||
|
||||
Reference in New Issue
Block a user