fix lastleg order detail customer schema
This commit is contained in:
@@ -204,6 +204,22 @@ SET @ddl = (SELECT IF(EXISTS (SELECT 1 FROM information_schema.statistics WHERE
|
||||
'ALTER TABLE ll_loading_order_status_history ADD KEY idx_ll_loading_history_customer_order(customer_id,order_id,created_at)'));
|
||||
PREPARE phase4_loading_history_customer_stmt FROM @ddl; EXECUTE phase4_loading_history_customer_stmt; DEALLOCATE PREPARE phase4_loading_history_customer_stmt;
|
||||
|
||||
-- 尾程订单明细实体、事件消费者和详情查询均使用 customer_id;已有开发库需从主订单回填。
|
||||
SET @ddl = (SELECT IF(EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema=DATABASE()
|
||||
AND table_name='ll_order_detail' AND column_name='customer_id'), 'SELECT 1',
|
||||
'ALTER TABLE ll_order_detail ADD COLUMN customer_id VARCHAR(128) NULL COMMENT ''客户数据隔离键'' AFTER id'));
|
||||
PREPARE phase4_order_detail_customer_stmt FROM @ddl; EXECUTE phase4_order_detail_customer_stmt; DEALLOCATE PREPARE phase4_order_detail_customer_stmt;
|
||||
UPDATE ll_order_detail detail
|
||||
JOIN ll_order orders ON orders.id=detail.order_id
|
||||
SET detail.customer_id=orders.customer_id
|
||||
WHERE detail.customer_id IS NULL;
|
||||
ALTER TABLE ll_order_detail
|
||||
MODIFY COLUMN customer_id VARCHAR(128) NOT NULL COMMENT '客户数据隔离键';
|
||||
SET @ddl = (SELECT IF(EXISTS (SELECT 1 FROM information_schema.statistics WHERE table_schema=DATABASE()
|
||||
AND table_name='ll_order_detail' AND index_name='idx_ll_detail_customer_order'), 'SELECT 1',
|
||||
'ALTER TABLE ll_order_detail ADD KEY idx_ll_detail_customer_order(customer_id,order_id,id)'));
|
||||
PREPARE phase4_order_detail_customer_stmt FROM @ddl; EXECUTE phase4_order_detail_customer_stmt; DEALLOCATE PREPARE phase4_order_detail_customer_stmt;
|
||||
|
||||
-- 四期平台排车查询、智能预排与草稿锁;不开放编辑、发车、PDA 出库或派送。
|
||||
CREATE TABLE IF NOT EXISTS ll_dispatch_order (
|
||||
id BIGINT NOT NULL COMMENT '主键ID', customer_id VARCHAR(128) NOT NULL COMMENT '客户租户ID',
|
||||
|
||||
+1
@@ -116,6 +116,7 @@ public class InboundStockReceiptService {
|
||||
order.setUpdatedAt(completedAt);
|
||||
orders.updateById(order);
|
||||
LastlegOrderStatusHistory history = new LastlegOrderStatusHistory();
|
||||
history.setCustomerId(order.getCustomerId());
|
||||
history.setOrderId(order.getId());
|
||||
history.setFromStatus(before);
|
||||
history.setToStatus("INBOUND_COMPLETED");
|
||||
|
||||
@@ -46,9 +46,11 @@ public class LastlegOrderService {
|
||||
public LastlegOrderDetailResponse detail(String customerId, long orderId) {
|
||||
LastlegOrder order = findOwned(customerId, orderId);
|
||||
List<LastlegOrderDetail> cargo = detailMapper.selectList(new LambdaQueryWrapper<LastlegOrderDetail>()
|
||||
.eq(LastlegOrderDetail::getCustomerId, order.getCustomerId())
|
||||
.eq(LastlegOrderDetail::getOrderId, orderId).orderByAsc(LastlegOrderDetail::getId));
|
||||
List<LastlegOrderStatusHistory> history = historyMapper.selectList(
|
||||
new LambdaQueryWrapper<LastlegOrderStatusHistory>()
|
||||
.eq(LastlegOrderStatusHistory::getCustomerId, order.getCustomerId())
|
||||
.eq(LastlegOrderStatusHistory::getOrderId, orderId)
|
||||
.orderByAsc(LastlegOrderStatusHistory::getCreatedAt));
|
||||
return new LastlegOrderDetailResponse(summary(order), cargo, history.stream()
|
||||
@@ -89,6 +91,7 @@ public class LastlegOrderService {
|
||||
.eq(LastlegOrderDetail::getOrderId, order.getId()));
|
||||
|
||||
LastlegOrderStatusHistory history = new LastlegOrderStatusHistory();
|
||||
history.setCustomerId(order.getCustomerId());
|
||||
history.setOrderId(order.getId());
|
||||
history.setFromStatus(fromStatus);
|
||||
history.setToStatus(DESTINATION_ASSIGNED);
|
||||
|
||||
@@ -79,6 +79,7 @@ CREATE TABLE IF NOT EXISTS ll_order (
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ll_order_detail (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '订单明细主键',
|
||||
customer_id VARCHAR(128) NOT NULL COMMENT '客户数据隔离键',
|
||||
order_id BIGINT NOT NULL COMMENT '尾程订单 ID',
|
||||
source_inbound_detail_id VARCHAR(128) NOT NULL COMMENT '来源入仓明细 ID',
|
||||
sku_code VARCHAR(128) COMMENT 'SKU 编码',
|
||||
@@ -99,7 +100,8 @@ CREATE TABLE IF NOT EXISTS ll_order_detail (
|
||||
shipping_mark VARCHAR(255) COMMENT '唛头',
|
||||
PRIMARY KEY(id),
|
||||
UNIQUE KEY uk_ll_detail_source(order_id,source_inbound_detail_id),
|
||||
KEY idx_ll_detail_order(order_id)
|
||||
KEY idx_ll_detail_order(order_id),
|
||||
KEY idx_ll_detail_customer_order(customer_id,order_id,id)
|
||||
) ENGINE=InnoDB COMMENT='尾程订单实装商品冻结明细';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ll_loading_order_status_history (
|
||||
|
||||
+3
-1
@@ -84,7 +84,9 @@ class InboundStockReceiptServiceTest {
|
||||
assertEquals(10L, receipt.getValue().getInventoryPositionId());
|
||||
assertEquals("INBOUND_COMPLETED", fixture.order.getCurrentStatus());
|
||||
assertEquals("INBOUND_PLAN:COMPLETED", fixture.order.getSubOrderStatus());
|
||||
verify(orderHistories).insert(any(LastlegOrderStatusHistory.class));
|
||||
ArgumentCaptor<LastlegOrderStatusHistory> history = ArgumentCaptor.forClass(LastlegOrderStatusHistory.class);
|
||||
verify(orderHistories).insert(history.capture());
|
||||
assertEquals("100", history.getValue().getCustomerId());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package com.baiyue.lastleg.schema;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class LastlegOrderDetailSchemaContractTest {
|
||||
@Test
|
||||
void orderDetailHasCustomerIsolationInBaselineAndRepeatableUpgrade() throws Exception {
|
||||
String baseline = new ClassPathResource("db/lastleg.sql")
|
||||
.getContentAsString(StandardCharsets.UTF_8);
|
||||
String unified = Files.readString(Path.of("..", "deploy", "sql", "海外区域统一增量-MySQL8.sql"),
|
||||
StandardCharsets.UTF_8);
|
||||
String service = Files.readString(Path.of("src", "main", "java", "com", "baiyue", "lastleg",
|
||||
"service", "LastlegOrderService.java"), StandardCharsets.UTF_8);
|
||||
|
||||
assertThat(baseline)
|
||||
.contains("CREATE TABLE IF NOT EXISTS ll_order_detail")
|
||||
.contains("customer_id VARCHAR(128) NOT NULL COMMENT '客户数据隔离键'")
|
||||
.contains("KEY idx_ll_detail_customer_order(customer_id,order_id,id)");
|
||||
assertThat(unified)
|
||||
.contains("table_name='ll_order_detail' AND column_name='customer_id'")
|
||||
.contains("UPDATE ll_order_detail detail")
|
||||
.contains("SET detail.customer_id=orders.customer_id")
|
||||
.contains("MODIFY COLUMN customer_id VARCHAR(128) NOT NULL COMMENT '客户数据隔离键'")
|
||||
.contains("ADD KEY idx_ll_detail_customer_order(customer_id,order_id,id)");
|
||||
assertThat(service)
|
||||
.contains(".eq(LastlegOrderDetail::getCustomerId, order.getCustomerId())")
|
||||
.contains(".eq(LastlegOrderStatusHistory::getCustomerId, order.getCustomerId())");
|
||||
}
|
||||
}
|
||||
@@ -78,6 +78,7 @@ class LastlegOrderServiceTest {
|
||||
assertEquals("LAX-02", cargo.getValue().getDestinationWarehouseCode());
|
||||
ArgumentCaptor<LastlegOrderStatusHistory> history = ArgumentCaptor.forClass(LastlegOrderStatusHistory.class);
|
||||
verify(histories).insert(history.capture());
|
||||
assertEquals("100", history.getValue().getCustomerId());
|
||||
assertEquals("PENDING_ASSIGNMENT", history.getValue().getFromStatus());
|
||||
assertEquals("DESTINATION_ASSIGNED", history.getValue().getToStatus());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user