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)'));
|
'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;
|
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 出库或派送。
|
-- 四期平台排车查询、智能预排与草稿锁;不开放编辑、发车、PDA 出库或派送。
|
||||||
CREATE TABLE IF NOT EXISTS ll_dispatch_order (
|
CREATE TABLE IF NOT EXISTS ll_dispatch_order (
|
||||||
id BIGINT NOT NULL COMMENT '主键ID', customer_id VARCHAR(128) NOT NULL COMMENT '客户租户ID',
|
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);
|
order.setUpdatedAt(completedAt);
|
||||||
orders.updateById(order);
|
orders.updateById(order);
|
||||||
LastlegOrderStatusHistory history = new LastlegOrderStatusHistory();
|
LastlegOrderStatusHistory history = new LastlegOrderStatusHistory();
|
||||||
|
history.setCustomerId(order.getCustomerId());
|
||||||
history.setOrderId(order.getId());
|
history.setOrderId(order.getId());
|
||||||
history.setFromStatus(before);
|
history.setFromStatus(before);
|
||||||
history.setToStatus("INBOUND_COMPLETED");
|
history.setToStatus("INBOUND_COMPLETED");
|
||||||
|
|||||||
@@ -46,9 +46,11 @@ public class LastlegOrderService {
|
|||||||
public LastlegOrderDetailResponse detail(String customerId, long orderId) {
|
public LastlegOrderDetailResponse detail(String customerId, long orderId) {
|
||||||
LastlegOrder order = findOwned(customerId, orderId);
|
LastlegOrder order = findOwned(customerId, orderId);
|
||||||
List<LastlegOrderDetail> cargo = detailMapper.selectList(new LambdaQueryWrapper<LastlegOrderDetail>()
|
List<LastlegOrderDetail> cargo = detailMapper.selectList(new LambdaQueryWrapper<LastlegOrderDetail>()
|
||||||
|
.eq(LastlegOrderDetail::getCustomerId, order.getCustomerId())
|
||||||
.eq(LastlegOrderDetail::getOrderId, orderId).orderByAsc(LastlegOrderDetail::getId));
|
.eq(LastlegOrderDetail::getOrderId, orderId).orderByAsc(LastlegOrderDetail::getId));
|
||||||
List<LastlegOrderStatusHistory> history = historyMapper.selectList(
|
List<LastlegOrderStatusHistory> history = historyMapper.selectList(
|
||||||
new LambdaQueryWrapper<LastlegOrderStatusHistory>()
|
new LambdaQueryWrapper<LastlegOrderStatusHistory>()
|
||||||
|
.eq(LastlegOrderStatusHistory::getCustomerId, order.getCustomerId())
|
||||||
.eq(LastlegOrderStatusHistory::getOrderId, orderId)
|
.eq(LastlegOrderStatusHistory::getOrderId, orderId)
|
||||||
.orderByAsc(LastlegOrderStatusHistory::getCreatedAt));
|
.orderByAsc(LastlegOrderStatusHistory::getCreatedAt));
|
||||||
return new LastlegOrderDetailResponse(summary(order), cargo, history.stream()
|
return new LastlegOrderDetailResponse(summary(order), cargo, history.stream()
|
||||||
@@ -89,6 +91,7 @@ public class LastlegOrderService {
|
|||||||
.eq(LastlegOrderDetail::getOrderId, order.getId()));
|
.eq(LastlegOrderDetail::getOrderId, order.getId()));
|
||||||
|
|
||||||
LastlegOrderStatusHistory history = new LastlegOrderStatusHistory();
|
LastlegOrderStatusHistory history = new LastlegOrderStatusHistory();
|
||||||
|
history.setCustomerId(order.getCustomerId());
|
||||||
history.setOrderId(order.getId());
|
history.setOrderId(order.getId());
|
||||||
history.setFromStatus(fromStatus);
|
history.setFromStatus(fromStatus);
|
||||||
history.setToStatus(DESTINATION_ASSIGNED);
|
history.setToStatus(DESTINATION_ASSIGNED);
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ CREATE TABLE IF NOT EXISTS ll_order (
|
|||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS ll_order_detail (
|
CREATE TABLE IF NOT EXISTS ll_order_detail (
|
||||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '订单明细主键',
|
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '订单明细主键',
|
||||||
|
customer_id VARCHAR(128) NOT NULL COMMENT '客户数据隔离键',
|
||||||
order_id BIGINT NOT NULL COMMENT '尾程订单 ID',
|
order_id BIGINT NOT NULL COMMENT '尾程订单 ID',
|
||||||
source_inbound_detail_id VARCHAR(128) NOT NULL COMMENT '来源入仓明细 ID',
|
source_inbound_detail_id VARCHAR(128) NOT NULL COMMENT '来源入仓明细 ID',
|
||||||
sku_code VARCHAR(128) COMMENT 'SKU 编码',
|
sku_code VARCHAR(128) COMMENT 'SKU 编码',
|
||||||
@@ -99,7 +100,8 @@ CREATE TABLE IF NOT EXISTS ll_order_detail (
|
|||||||
shipping_mark VARCHAR(255) COMMENT '唛头',
|
shipping_mark VARCHAR(255) COMMENT '唛头',
|
||||||
PRIMARY KEY(id),
|
PRIMARY KEY(id),
|
||||||
UNIQUE KEY uk_ll_detail_source(order_id,source_inbound_detail_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='尾程订单实装商品冻结明细';
|
) ENGINE=InnoDB COMMENT='尾程订单实装商品冻结明细';
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS ll_loading_order_status_history (
|
CREATE TABLE IF NOT EXISTS ll_loading_order_status_history (
|
||||||
|
|||||||
+3
-1
@@ -84,7 +84,9 @@ class InboundStockReceiptServiceTest {
|
|||||||
assertEquals(10L, receipt.getValue().getInventoryPositionId());
|
assertEquals(10L, receipt.getValue().getInventoryPositionId());
|
||||||
assertEquals("INBOUND_COMPLETED", fixture.order.getCurrentStatus());
|
assertEquals("INBOUND_COMPLETED", fixture.order.getCurrentStatus());
|
||||||
assertEquals("INBOUND_PLAN:COMPLETED", fixture.order.getSubOrderStatus());
|
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
|
@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());
|
assertEquals("LAX-02", cargo.getValue().getDestinationWarehouseCode());
|
||||||
ArgumentCaptor<LastlegOrderStatusHistory> history = ArgumentCaptor.forClass(LastlegOrderStatusHistory.class);
|
ArgumentCaptor<LastlegOrderStatusHistory> history = ArgumentCaptor.forClass(LastlegOrderStatusHistory.class);
|
||||||
verify(histories).insert(history.capture());
|
verify(histories).insert(history.capture());
|
||||||
|
assertEquals("100", history.getValue().getCustomerId());
|
||||||
assertEquals("PENDING_ASSIGNMENT", history.getValue().getFromStatus());
|
assertEquals("PENDING_ASSIGNMENT", history.getValue().getFromStatus());
|
||||||
assertEquals("DESTINATION_ASSIGNED", history.getValue().getToStatus());
|
assertEquals("DESTINATION_ASSIGNED", history.getValue().getToStatus());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user