fix(lastleg): match looseboard pickup customer identity across collations
This commit is contained in:
+3
-1
@@ -16,7 +16,9 @@ public interface LocalLooseboardOrderMapper extends BaseMapper<LocalLooseboardOr
|
||||
+ " WHERE p.source_order_id=ll_local_looseboard_order.lastleg_order_id"
|
||||
+ " AND p.customer_id=ll_local_looseboard_order.customer_id";
|
||||
String PICKUP = " FROM ll_warehouse_transfer_order w"
|
||||
+ " JOIN ll_fleet_pickup_task t ON t.transfer_order_id=w.id AND t.customer_id=w.customer_id"
|
||||
// 两表客户标识使用各自排序规则,按完整字节身份关联,512 字节覆盖 VARCHAR(128) 的 utf8mb4 上限。
|
||||
+ " JOIN ll_fleet_pickup_task t ON t.transfer_order_id=w.id"
|
||||
+ " AND CAST(t.customer_id AS BINARY(512))=CAST(w.customer_id AS BINARY(512))"
|
||||
+ " JOIN ll_fleet_trip f ON f.trip_no=t.trip_no AND f.status IN ('PLANNED','IN_TRANSIT')"
|
||||
+ " WHERE w.customer_id=ll_local_looseboard_order.customer_id"
|
||||
+ " AND w.transfer_no=ll_local_looseboard_order.transfer_no";
|
||||
|
||||
+19
@@ -118,6 +118,25 @@ class LocalLooseboardMerchantStatusTest {
|
||||
assertStatus(1, "COMPLETED");
|
||||
}
|
||||
|
||||
/** 取货关联按完整客户标识匹配,忽略大小写的字段排序和长多字节前缀均不能串用其他客户事实。 */
|
||||
@Test
|
||||
void pickupFactsMatchTheEntireCustomerIdentityAcrossTextComparisonRules() {
|
||||
String customer = "客".repeat(60) + "A";
|
||||
order(1, customer, "WAITING_INBOUND");
|
||||
jdbc.execute("ALTER TABLE ll_warehouse_transfer_order ALTER COLUMN customer_id VARCHAR_IGNORECASE(128)");
|
||||
jdbc.update("INSERT INTO ll_warehouse_transfer_order VALUES(1,'W1',?)", customer);
|
||||
jdbc.update("INSERT INTO ll_fleet_trip VALUES('T1','IN_TRANSIT')");
|
||||
jdbc.update("INSERT INTO ll_fleet_pickup_task VALUES(1,'T1',?,'PICKED')", customer);
|
||||
assertThat(service.merchantDetail(customer, "LB1").summary().status()).isEqualTo("PICKING_UP");
|
||||
|
||||
for (String otherCustomer : List.of("客".repeat(60) + "a", "客".repeat(60) + "B")) {
|
||||
jdbc.update("UPDATE ll_fleet_pickup_task SET customer_id=?", otherCustomer);
|
||||
assertThat(service.merchantDetail(customer, "LB1").summary().status()).isEqualTo("PENDING_DISPATCH");
|
||||
assertThat(service.page(customer, query(1, 20, "PICKING_UP")).total()).isZero();
|
||||
assertThat(service.page(customer, query(1, 20, "PENDING_DISPATCH")).total()).isEqualTo(1);
|
||||
}
|
||||
}
|
||||
|
||||
/** 取货直送及分车派送按有效排车判断,取消排车和重复托盘关联不污染状态或总数。 */
|
||||
@Test
|
||||
void directDeliveryIgnoresCancelledDispatchesAndKeepsSplitDeliveryInTransit() {
|
||||
|
||||
Reference in New Issue
Block a user