This commit is contained in:
2026-10-20 10:35:52 +08:00
parent ce189f062f
commit c13175bf77
202 changed files with 38397 additions and 7138 deletions
@@ -17,6 +17,7 @@ import static org.assertj.core.api.Assertions.assertThat;
class InboundPlanDispatchStatusPersistenceTest {
private JdbcTemplate db;
private InboundPlanQueryMapper mapper;
private com.baiyue.lastleg.mapper.LastlegOrderMapper orders;
@BeforeEach
void setUp() throws Exception {
@@ -31,30 +32,33 @@ class InboundPlanDispatchStatusPersistenceTest {
db.execute("CREATE TABLE ll_order_detail(order_id BIGINT,customer_id VARCHAR(20),gross_weight_kg DECIMAL(18,3),net_weight_kg DECIMAL(18,3))");
db.execute("CREATE TABLE ll_inbound_order(id BIGINT,customer_id VARCHAR(20),gross_weight_kg DECIMAL(18,3),net_weight_kg DECIMAL(18,3))");
db.execute("CREATE TABLE ll_dispatch_item(id BIGINT,customer_id VARCHAR(20),dispatch_order_id BIGINT,order_id BIGINT)");
db.execute("CREATE TABLE ll_dispatch_order(id BIGINT,customer_id VARCHAR(20),status VARCHAR(30))");
db.execute("CREATE TABLE ll_dispatch_order(id BIGINT,status VARCHAR(30),stage VARCHAR(30))");
db.update("INSERT INTO ll_inbound_plan VALUES(1,'LIP-1','A',90,TRUE,FALSE,FALSE,'RECEIVED',CURRENT_TIMESTAMP,0)");
db.update("INSERT INTO ll_inbound_plan_line VALUES(2,1,3,'IN-1','91','ABE4','ABE4','ABE4',1,1,1)");
db.update("INSERT INTO ll_order VALUES(3,'A','LX-1','FIRST_LEG','LA','洛杉矶仓','客户A')");
var config = new MybatisConfiguration();
config.addMapper(InboundPlanQueryMapper.class);
config.addMapper(com.baiyue.lastleg.mapper.LastlegOrderMapper.class);
var factory = new MybatisSqlSessionFactoryBean();
factory.setDataSource(data);
factory.setConfiguration(config);
mapper = new SqlSessionTemplate(factory.getObject()).getMapper(InboundPlanQueryMapper.class);
var session = new SqlSessionTemplate(factory.getObject());
mapper = session.getMapper(InboundPlanQueryMapper.class);
orders = session.getMapper(com.baiyue.lastleg.mapper.LastlegOrderMapper.class);
}
@Test
void cancelledDispatchRetainsHistoryButDoesNotMarkOrFilterTheInboundAsScheduled() {
dispatch(10, "A", "CANCELLED", "A");
dispatch(10, "CANCELLED", "BEFORE_LOADING", "A");
assertStatus("UNSCHEDULED");
assertThat(db.queryForObject("SELECT COUNT(*) FROM ll_dispatch_item", Integer.class)).isEqualTo(1);
}
@Test
void replacementDispatchCountsOnceAndCancellingItRestoresUnscheduled() {
dispatch(10, "A", "CANCELLED", "A");
dispatch(11, "A", "PENDING_DEPARTURE", "A");
dispatch(12, "A", "PICKING", "A");
dispatch(10, "CANCELLED", "BEFORE_LOADING", "A");
dispatch(11, "ACTIVE", "BEFORE_LOADING", "A");
dispatch(12, "ACTIVE", "LOADING", "A");
assertStatus("SCHEDULED");
db.update("UPDATE ll_dispatch_order SET status='CANCELLED'");
assertStatus("UNSCHEDULED");
@@ -62,16 +66,15 @@ class InboundPlanDispatchStatusPersistenceTest {
@Test
void departedAndCompletedDispatchesRemainScheduled() {
dispatch(10, "A", "DEPARTED", "A");
dispatch(10, "ACTIVE", "DELIVERING", "A");
assertStatus("SCHEDULED");
db.update("UPDATE ll_dispatch_order SET status='COMPLETED'");
db.update("UPDATE ll_dispatch_order SET stage='DELIVERED'");
assertStatus("SCHEDULED");
}
@Test
void otherCustomerOrMissingDispatchCannotMarkThisInboundScheduled() {
dispatch(10, "B", "PENDING_DEPARTURE", "B");
dispatch(11, "B", "PENDING_DEPARTURE", "A");
dispatch(10, "ACTIVE", "BEFORE_LOADING", "B");
db.update("INSERT INTO ll_dispatch_item VALUES(12,'A',999,3)");
assertStatus("UNSCHEDULED");
assertThat(mapper.rows("B", query(null), 0, 20)).isEmpty();
@@ -106,12 +109,14 @@ class InboundPlanDispatchStatusPersistenceTest {
assertThat(remaining.appointmentNo()).isEqualTo("AP-FIRST");assertThat(remaining.appointmentStatus()).isEqualTo("SUCCESS");
}
private void dispatch(long id, String owner, String status, String itemOwner) {
db.update("INSERT INTO ll_dispatch_order VALUES(?,?,?)", id, owner, status);
private void dispatch(long id, String status, String stage, String itemOwner) {
db.update("INSERT INTO ll_dispatch_order VALUES(?,?,?)", id, status, stage);
db.update("INSERT INTO ll_dispatch_item VALUES(?,?,?,3)", id, itemOwner, id);
}
private void assertStatus(String status) {
assertThat(orders.findDispatchStatuses(java.util.List.of(3L)))
.extracting(com.baiyue.lastleg.mapper.LastlegOrderMapper.DispatchStatusRow::dispatchStatus).containsExactly(status);
for (String customer : new String[]{null, "A"}) {
assertThat(mapper.rows(customer, query(null), 0, 20))
.extracting(InboundPlanListResponse::dispatchStatus).containsExactly(status);
@@ -4,6 +4,7 @@ import org.apache.ibatis.annotations.Select;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.assertFalse;
class InboundPlanQueryMapperContractTest {
@Test
@@ -20,7 +21,7 @@ class InboundPlanQueryMapperContractTest {
assertTrue(sql.contains("p.overseas_warehouse_id overseasWarehouseId"));
assertTrue(sql.contains("p.overseas_warehouse_id=#{q.overseasWarehouseId}"));
assertTrue(sql.contains("di.customer_id=p.customer_id AND di.order_id=l.order_id"));
assertTrue(sql.contains("dispatch.customer_id=di.customer_id"));
assertFalse(sql.contains("dispatch.customer_id"));
assertTrue(sql.contains("dispatch.status<>'CANCELLED'"));
}
}