优化
This commit is contained in:
+17
-12
@@ -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);
|
||||
|
||||
+2
-1
@@ -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'"));
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -240,7 +240,7 @@ class FbaAppointmentPersistenceTest {
|
||||
@Bean FbaAppointmentTransportPort receivingTransport(){
|
||||
var port=mock(FbaAppointmentTransportPort.class);var scope=new FbaAppointmentTransportPort.Scope("transport-v1",List.of(),List.of());
|
||||
when(port.inspect(anyList())).thenReturn(scope);when(port.lockAndInspect(anyList(),anyString(),anyString())).thenReturn(scope);
|
||||
when(port.apply(any(),anyList(),anyString(),anyString())).thenReturn(new FbaAppointmentTransportPort.Result(List.of(),List.of()));return port;
|
||||
when(port.apply(any(),anyList(),anyString(),anyString(),anyString())).thenReturn(new FbaAppointmentTransportPort.Result(List.of(),List.of()));return port;
|
||||
}
|
||||
@Bean FbaAppointmentWorkPort receivingWork(){
|
||||
var port=mock(FbaAppointmentWorkPort.class);
|
||||
|
||||
+1
-1
@@ -165,7 +165,7 @@ class FbaAppointmentRepartitionPersistenceTest {
|
||||
try(var context=new AnnotationConfigApplicationContext(FbaAppointmentPersistenceTest.Config.class)) {
|
||||
var service=context.getBean(InboundFbaAppointmentService.class);var db=new JdbcTemplate(context.getBean(DataSource.class));
|
||||
var original=service.createFromSources("operator",create("create"));
|
||||
db.update("INSERT INTO ll_dispatch_order VALUES(10,'A','DRAFT')");db.update("INSERT INTO ll_dispatch_item VALUES(1,'A',10)");
|
||||
db.update("INSERT INTO ll_dispatch_order(id,status) VALUES(10,'ACTIVE')");db.update("INSERT INTO ll_dispatch_item(id,customer_id,dispatch_order_id,plan_pallet_id) VALUES(11,'A',10,12)");
|
||||
db.update("INSERT INTO ll_dispatch_appointment_allocation VALUES(10,11,12,?,'A','ORDER:1','FBA:ONT8',1)",original.batchKey());
|
||||
assertThrows(ResponseStatusException.class,()->service.repartition("operator",split(original,"blocked")));
|
||||
db.update("UPDATE ll_dispatch_order SET status='CANCELLED' WHERE id=10");
|
||||
|
||||
+12
-12
@@ -33,7 +33,7 @@ class FbaReceivingPersistenceTest {
|
||||
assertFalse(f.store.hasPending(original.batchKey(),"A"));
|
||||
assertEquals(1,f.receiving.context(original.batchKey()).pendingChanges().size());
|
||||
f.assertAllocations(80,160,40);
|
||||
verify(f.transport,never()).apply(any(),anyList(),anyString(),anyString());
|
||||
verify(f.transport,never()).apply(any(),anyList(),anyString(),anyString(),anyString());
|
||||
var withdrawn=f.receiving.resolve(OPERATOR,pending.changeKey(),new Resolve("withdraw",0,"WITHDRAW",null,TRANSPORT));
|
||||
assertEquals("WITHDRAWN",withdrawn.status());
|
||||
assertFalse(f.store.hasPending(original.batchKey(),"B"));
|
||||
@@ -65,7 +65,7 @@ class FbaReceivingPersistenceTest {
|
||||
assertEquals(List.of(20,40,100),destinations.stream().flatMap(b->b.items().stream()).filter(i->i.customerId().equals("B")).map(FbaAppointmentResponse.Item::packageCount).sorted().toList());
|
||||
f.assertAllocations(80,160,40);
|
||||
assertEquals(0,f.db.queryForObject("SELECT SUM(version) FROM ll_order",Integer.class));
|
||||
verify(f.transport).apply(any(),eq(List.of(new FbaAppointmentTransportPort.Move(original.batchKey(),"B","ORDER:2",DESTINATION,160,100,later.batchKey()))),eq(OPERATOR),anyString());
|
||||
verify(f.transport).apply(any(),eq(List.of(new FbaAppointmentTransportPort.Move(original.batchKey(),"B","ORDER:2",DESTINATION,160,100,later.batchKey()))),eq(OPERATOR),anyString(),eq("partial-confirm"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,7 +102,7 @@ class FbaReceivingPersistenceTest {
|
||||
conflict(()->f.receiving.resolve(OPERATOR,first.changeKey(),new Resolve("same-resolve",0,"WITHDRAW",null,TRANSPORT)));
|
||||
assertEquals(2,f.db.queryForObject("SELECT COUNT(*) FROM ll_inbound_fba_appointment",Integer.class));
|
||||
assertEquals(1,f.db.queryForObject("SELECT COUNT(*) FROM ll_fba_receiving_change",Integer.class));
|
||||
verify(f.transport,times(1)).apply(any(),anyList(),anyString(),anyString());
|
||||
verify(f.transport,times(1)).apply(any(),anyList(),anyString(),anyString(),anyString());
|
||||
f.assertAllocations(80,160,40);
|
||||
}
|
||||
}
|
||||
@@ -119,7 +119,7 @@ class FbaReceivingPersistenceTest {
|
||||
assertEquals(1,f.db.queryForObject("SELECT COUNT(*) FROM ll_inbound_fba_appointment",Integer.class));
|
||||
assertEquals(0,f.db.queryForObject("SELECT COUNT(*) FROM ll_fba_appointment_command WHERE command_key='retry-resolve'",Integer.class));
|
||||
f.assertAllocations(80,160,40);
|
||||
doReturn(new FbaAppointmentTransportPort.Result(List.of(),List.of())).when(f.transport).apply(any(),anyList(),anyString(),anyString());
|
||||
doReturn(new FbaAppointmentTransportPort.Result(List.of(),List.of())).when(f.transport).apply(any(),anyList(),anyString(),anyString(),anyString());
|
||||
assertEquals("APPLIED",f.confirm(pending.changeKey(),"retry-resolve").status());
|
||||
f.assertAllocations(80,160,40);
|
||||
}
|
||||
@@ -171,7 +171,7 @@ class FbaReceivingPersistenceTest {
|
||||
conflict(()->f.confirm(pending.changeKey(),"stale-batch"));
|
||||
assertEquals("WAITING",f.store.change(pending.changeKey(),false).status());
|
||||
assertEquals(280,total(f.batches.detail(original.appointmentNo())));f.assertAllocations(80,160,40);
|
||||
verify(f.transport,never()).apply(any(),anyList(),anyString(),anyString());
|
||||
verify(f.transport,never()).apply(any(),anyList(),anyString(),anyString(),anyString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -185,7 +185,7 @@ class FbaReceivingPersistenceTest {
|
||||
conflict(()->f.confirm(pending.changeKey(),"stale-agreement"));
|
||||
assertEquals("WAITING",f.store.change(pending.changeKey(),false).status());
|
||||
assertEquals(original,f.batches.detail(original.appointmentNo()));f.assertAllocations(80,160,40);
|
||||
verify(f.transport,never()).apply(any(),anyList(),anyString(),anyString());
|
||||
verify(f.transport,never()).apply(any(),anyList(),anyString(),anyString(),anyString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -198,7 +198,7 @@ class FbaReceivingPersistenceTest {
|
||||
assertEquals(original,f.batches.detail(original.appointmentNo()));
|
||||
assertEquals("WAITING",f.store.change(pending.changeKey(),false).status());
|
||||
f.assertAllocations(80,160,40);
|
||||
verify(f.transport,never()).apply(any(),anyList(),anyString(),anyString());
|
||||
verify(f.transport,never()).apply(any(),anyList(),anyString(),anyString(),anyString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -286,7 +286,7 @@ class FbaReceivingPersistenceTest {
|
||||
assertEquals(result,f.receiving.resolve(OPERATOR,pending.changeKey(),request));
|
||||
conflict(()->f.receiving.resolve(OPERATOR,pending.changeKey(),new Resolve("withdraw-after-picking",0,"CONFIRM","修改请求内容",TRANSPORT)));
|
||||
verify(f.transport,times(2)).lockAndInspect(anyList(),eq(TRANSPORT),anyString());
|
||||
verify(f.transport,never()).apply(any(),anyList(),anyString(),anyString());
|
||||
verify(f.transport,never()).apply(any(),anyList(),anyString(),anyString(),anyString());
|
||||
f.assertAllocations(80,160,40);
|
||||
}
|
||||
}
|
||||
@@ -315,7 +315,7 @@ class FbaReceivingPersistenceTest {
|
||||
assertEquals(List.of("B","D"),rebooked.agreements().get(0).members().stream().map(Member::customerId).sorted().toList());
|
||||
verify(f.execution).lockAndInspect(eq(List.of(new FbaAppointmentExecutionPort.Member(batch.batchKey(),"B"),new FbaAppointmentExecutionPort.Member(batch.batchKey(),"D"))),eq("execution-v1"),anyString());
|
||||
verify(f.transport,never()).lockAndInspect(anyList(),anyString(),anyString());
|
||||
verify(f.transport,never()).apply(any(),anyList(),anyString(),anyString());
|
||||
verify(f.transport,never()).apply(any(),anyList(),anyString(),anyString(),anyString());
|
||||
f.assertAllocations(80,160,40);
|
||||
}
|
||||
}
|
||||
@@ -367,7 +367,7 @@ class FbaReceivingPersistenceTest {
|
||||
assertEquals(1,f.db.queryForObject("SELECT COUNT(*) FROM ll_inbound_fba_appointment",Integer.class));
|
||||
assertEquals(0,f.db.queryForObject("SELECT COUNT(*) FROM ll_fba_appointment_command WHERE command_key='inactive-confirm'",Integer.class));
|
||||
verify(f.work,never()).seedFollowup(any(),any(),any(),anyString());
|
||||
verify(f.transport,never()).apply(any(),anyList(),anyString(),anyString());
|
||||
verify(f.transport,never()).apply(any(),anyList(),anyString(),anyString(),anyString());
|
||||
f.assertAllocations(80,160,40);
|
||||
}
|
||||
}
|
||||
@@ -439,7 +439,7 @@ class FbaReceivingPersistenceTest {
|
||||
assertEquals(0,f.db.queryForObject("SELECT COUNT(*) FROM ll_fba_appointment_command WHERE command_key='raced-proposal'",Integer.class));
|
||||
assertEquals(original,f.batches.detail(original.appointmentNo()));
|
||||
assertEquals(agreement,f.store.currentAgreement(original.batchKey(),"B"));
|
||||
verify(f.transport,never()).apply(any(),anyList(),anyString(),anyString());
|
||||
verify(f.transport,never()).apply(any(),anyList(),anyString(),anyString(),anyString());
|
||||
f.assertAllocations(80,160,40);
|
||||
}
|
||||
}
|
||||
@@ -462,7 +462,7 @@ class FbaReceivingPersistenceTest {
|
||||
f.assertAllocations(80,160,40);
|
||||
}
|
||||
verify(f.transport,times(2)).lockAndInspect(eq(List.of(original.batchKey())),eq(TRANSPORT),anyString());
|
||||
verify(f.transport,never()).apply(any(),anyList(),anyString(),anyString());
|
||||
verify(f.transport,never()).apply(any(),anyList(),anyString(),anyString(),anyString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -87,7 +87,8 @@ class InboundPlanPaginationTest {
|
||||
assertThat(sql).contains("p.customer_id=#{customerId}", "o.customer_id=p.customer_id");
|
||||
assertThat(sql).doesNotContain("a2.customer_id=#{customerId}");
|
||||
assertThat(sql).contains("di.customer_id=p.customer_id AND di.order_id=l.order_id",
|
||||
"dispatch.customer_id=di.customer_id", "dispatch.status<>'CANCELLED'");
|
||||
"dispatch.id=di.dispatch_order_id", "dispatch.status<>'CANCELLED'");
|
||||
assertThat(sql).doesNotContain("dispatch.customer_id");
|
||||
assertThat(sql).contains("p.overseas_warehouse_id overseasWarehouseId", "o.overseas_warehouse_code overseasWarehouseCode",
|
||||
"o.overseas_warehouse_name overseasWarehouseName",
|
||||
"p.overseas_warehouse_id=#{q.overseasWarehouseId}");
|
||||
|
||||
+14
-3
@@ -61,17 +61,28 @@ class AppointmentWorkDomainMapperTest {
|
||||
var sessions=receiving.sessions(List.of("1","2"));assertEquals(2,sessions.size());
|
||||
assertEquals(403L,sessions.stream().filter(s->"1".equals(s.getSourceContainerBookingId())).findFirst().orElseThrow().getId());
|
||||
try(var sql=session.getConnection().createStatement()) {
|
||||
sql.execute("INSERT INTO ll_dispatch_order(id,customer_id,dispatch_no,status) VALUES(501,'A','D-1','PENDING_DEPARTURE'),(502,'B','D-2','CANCELLED'),(503,'B','D-3','PENDING_DEPARTURE')");
|
||||
sql.execute("INSERT INTO ll_dispatch_order(id,dispatch_no,trip_id,overseas_warehouse_id,status,stage,cargo_hash) VALUES(501,'D-1',801,'W','ACTIVE','BEFORE_LOADING','HASH'),(502,'D-2',802,'W','CANCELLED','BEFORE_LOADING','HASH'),(503,'D-3',803,'W','ACTIVE','BEFORE_LOADING','HASH')");
|
||||
sql.execute("INSERT INTO ll_dispatch_item(id,dispatch_order_id,customer_id,plan_pallet_id,order_id,pallet_no,source_key,source_version,source_snapshot_json,source_stage,package_count) VALUES(601,501,'A',701,101,'P-701','PLAN:701','HASH','{}','RECEIVED',4),(602,501,'B',702,102,'P-702','PLAN:702','HASH','{}','RECEIVED',6),(603,502,'B',703,102,'P-703','PLAN:703','HASH','{}','RECEIVED',2),(604,503,'B',704,102,'P-704','PLAN:704','HASH','{}','RECEIVED',3)");
|
||||
sql.execute("INSERT INTO ll_inbound_fba_appointment(id,appointment_no,origin_warehouse_id,fba_warehouse_code,created_by) VALUES(1,'AP-1','W','ONT8','operator'),(2,'AP-2','W','ONT8','operator')");
|
||||
sql.execute("INSERT INTO ll_dispatch_appointment_allocation(dispatch_id,dispatch_item_id,plan_pallet_id,batch_key,customer_id,source_key,destination_key,package_count) VALUES(501,601,701,'FBA_APPOINTMENT:1','A','ORDER:101','FBA:ONT8',4),(501,602,702,'FBA_APPOINTMENT:1','B','ORDER:102','FBA:ONT8',6),(502,603,703,'FBA_APPOINTMENT:1','B','ORDER:102','FBA:ONT8',2),(503,604,704,'FBA_APPOINTMENT:2','B','ORDER:102','FBA:ONT8',3)");
|
||||
}
|
||||
session.clearCache();
|
||||
var references=dispatch.references(List.of(501L,503L));
|
||||
assertEquals(2,references.size());assertEquals("A",references.get(0).customerId());assertEquals("AP-1",references.get(0).batchNo());assertEquals(4,references.get(0).packages());
|
||||
assertEquals("FBA_APPOINTMENT:2",references.get(1).batchKey());assertEquals("AP-2",references.get(1).batchNo()); // Wrong-customer rows on dispatch 501 must not leak into current references.
|
||||
// 同车两客户均由真实明细关联;主单没有单一客户归属。
|
||||
assertEquals(3,references.size());assertEquals("A",references.get(0).customerId());assertEquals("AP-1",references.get(0).batchNo());assertEquals(4,references.get(0).packages());
|
||||
assertEquals(501L,references.get(1).dispatchId());assertEquals("B",references.get(1).customerId());assertEquals("AP-1",references.get(1).batchNo());assertEquals(6,references.get(1).packages());
|
||||
assertEquals("FBA_APPOINTMENT:2",references.get(2).batchKey());assertEquals("AP-2",references.get(2).batchNo());
|
||||
assertEquals(4,dispatch.allocated("FBA_APPOINTMENT:1","A","ORDER:101","FBA:ONT8",503));
|
||||
assertEquals(6,dispatch.allocated("FBA_APPOINTMENT:1","B","ORDER:102","FBA:ONT8",503));
|
||||
var batchDeliveries=deliveries.batches(List.of("FBA_APPOINTMENT:1","FBA_APPOINTMENT:2"));assertEquals(3,batchDeliveries.size());
|
||||
assertEquals(deliveries.batch("FBA_APPOINTMENT:1"),batchDeliveries.stream().filter(d->d.batchKey().equals("FBA_APPOINTMENT:1")).map(AppointmentWorkDeliveryMapper.BatchDelivery::delivery).toList());
|
||||
assertEquals(deliveries.batch("FBA_APPOINTMENT:2"),batchDeliveries.stream().filter(d->d.batchKey().equals("FBA_APPOINTMENT:2")).map(AppointmentWorkDeliveryMapper.BatchDelivery::delivery).toList());
|
||||
// 错客户或错托盘的分配不能借同一主单混入当前明细引用。
|
||||
try(var sql=session.getConnection().createStatement()) {
|
||||
sql.execute("INSERT INTO ll_dispatch_appointment_allocation(dispatch_id,dispatch_item_id,plan_pallet_id,batch_key,customer_id,source_key,destination_key,package_count) VALUES(501,601,701,'FBA_APPOINTMENT:1','B','ORDER:102','FBA:ONT8',6),(501,602,999,'FBA_APPOINTMENT:1','B','ORDER:FOREIGN','FBA:ONT8',7)");
|
||||
}
|
||||
session.clearCache();
|
||||
assertEquals(references,dispatch.references(List.of(501L,503L)));
|
||||
var trips=session.getMapper(AppointmentWorkTripMapper.class);assertTrue(trips.batchTrips("FBA_APPOINTMENT:1").isEmpty());assertTrue(trips.batches(1).isEmpty());assertNull(trips.trip(1));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user