fix(lastleg): search frozen warehouse code and name
This commit is contained in:
@@ -14,6 +14,9 @@ import java.util.List;
|
||||
|
||||
@Mapper
|
||||
public interface LastlegOrderMapper extends BaseMapper<LastlegOrder> {
|
||||
String WAREHOUSE_FILTER_SQL = "(LOWER(TRIM(overseas_warehouse_code)) LIKE CONCAT('%',LOWER({0}),'%') " +
|
||||
"OR LOWER(TRIM(overseas_warehouse_name)) LIKE CONCAT('%',LOWER({0}),'%'))";
|
||||
|
||||
String CONTAINER_PROGRESS_FILTER = " FROM ll_order o LEFT JOIN ll_inbound_plan p " +
|
||||
"ON p.customer_id=o.customer_id AND p.source_order_id=o.id " +
|
||||
"WHERE o.source_container_booking_id IS NOT NULL AND o.source_container_booking_id<>'' " +
|
||||
|
||||
@@ -511,6 +511,7 @@ public class LastlegOrderService {
|
||||
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "createdFrom must not be after createdTo");
|
||||
}
|
||||
String currentStatus = StringUtils.hasText(query.currentStatus()) ? query.currentStatus() : query.status();
|
||||
String warehouse = StringUtils.hasText(query.warehouse()) ? query.warehouse().trim() : null;
|
||||
return new LambdaQueryWrapper<LastlegOrder>()
|
||||
.eq(StringUtils.hasText(customerId), LastlegOrder::getCustomerId, customerId)
|
||||
.like(StringUtils.hasText(query.orderNo()), LastlegOrder::getOrderNo, query.orderNo())
|
||||
@@ -520,11 +521,7 @@ public class LastlegOrderService {
|
||||
.like(StringUtils.hasText(query.sourceOrderNo()), LastlegOrder::getSourceOrderNo, query.sourceOrderNo())
|
||||
.like(StringUtils.hasText(query.containerNo()), LastlegOrder::getContainerNo, query.containerNo())
|
||||
.eq(StringUtils.hasText(currentStatus), LastlegOrder::getCurrentStatus, currentStatus)
|
||||
.and(StringUtils.hasText(query.warehouse()), wrapper -> wrapper
|
||||
.like(LastlegOrder::getOverseasWarehouseId, query.warehouse())
|
||||
.or().like(LastlegOrder::getOverseasWarehouseName, query.warehouse())
|
||||
.or().like(LastlegOrder::getTransferWarehouseCode, query.warehouse())
|
||||
.or().like(LastlegOrder::getTransferWarehouseName, query.warehouse()))
|
||||
.apply(StringUtils.hasText(warehouse), LastlegOrderMapper.WAREHOUSE_FILTER_SQL, warehouse)
|
||||
.eq(StringUtils.hasText(query.transferWarehouseCode()), LastlegOrder::getTransferWarehouseCode,
|
||||
query.transferWarehouseCode())
|
||||
.eq(query.abnormal() != null, LastlegOrder::getAbnormal, query.abnormal())
|
||||
|
||||
@@ -160,7 +160,7 @@ paths:
|
||||
- { name: inboundCode, in: query, schema: { type: string } }
|
||||
- { name: sourceOrderNo, in: query, schema: { type: string } }
|
||||
- { name: containerNo, in: query, schema: { type: string } }
|
||||
- { name: warehouse, in: query, schema: { type: string } }
|
||||
- { name: warehouse, in: query, description: 按尾程订单冻结的海外接柜仓名称或编码进行大小写无关的包含匹配, schema: { type: string } }
|
||||
- { name: transferWarehouseCode, in: query, schema: { type: string } }
|
||||
- { name: abnormal, in: query, schema: { type: boolean } }
|
||||
- { name: detained, in: query, schema: { type: boolean } }
|
||||
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
package com.baiyue.lastleg.mapper;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
class LastlegOrderWarehouseQueryContractTest {
|
||||
@Test
|
||||
void warehouseFilterUsesOnlyFrozenReceivingWarehouseCodeAndName() {
|
||||
String sql = LastlegOrderMapper.WAREHOUSE_FILTER_SQL;
|
||||
|
||||
assertTrue(sql.contains("LOWER(TRIM(overseas_warehouse_code))"));
|
||||
assertTrue(sql.contains("LOWER(TRIM(overseas_warehouse_name))"));
|
||||
assertTrue(sql.contains("LIKE CONCAT('%',LOWER({0}),'%')"));
|
||||
assertFalse(sql.contains("overseas_warehouse_id"));
|
||||
assertFalse(sql.contains("transfer_warehouse"));
|
||||
}
|
||||
}
|
||||
@@ -282,6 +282,26 @@ class LastlegOrderServiceTest {
|
||||
assertEquals(25, page.getValue().getSize());
|
||||
}
|
||||
|
||||
@Test
|
||||
void pageWarehouseFilterMatchesFrozenWarehouseName() {
|
||||
assertWarehouseFilter("洛杉矶仓", "洛杉矶仓", true);
|
||||
}
|
||||
|
||||
@Test
|
||||
void pageWarehouseFilterMatchesFrozenWarehouseCodeIgnoringCaseAndSpaces() {
|
||||
assertWarehouseFilter(" us-lax-01 ", "us-lax-01", true);
|
||||
}
|
||||
|
||||
@Test
|
||||
void pageWarehouseFilterMatchesPartialFrozenWarehouseCode() {
|
||||
assertWarehouseFilter("LAX-0", "LAX-0", true);
|
||||
}
|
||||
|
||||
@Test
|
||||
void pageWarehouseFilterReturnsEmptyPageWhenNothingMatches() {
|
||||
assertWarehouseFilter("WAREHOUSE-NOT-FOUND", "WAREHOUSE-NOT-FOUND", false);
|
||||
}
|
||||
|
||||
@Test
|
||||
void containerProgressPageUsesServerSideAggregatePagination() {
|
||||
var query = new LastlegOrderRequests.ContainerProgressQuery(2, 10, "CONT-", null, null);
|
||||
@@ -480,4 +500,30 @@ class LastlegOrderServiceTest {
|
||||
return order;
|
||||
}
|
||||
|
||||
@SuppressWarnings({"rawtypes", "unchecked"})
|
||||
private void assertWarehouseFilter(String input, String normalized, boolean matched) {
|
||||
var resultPage = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<LastlegOrder>(1, 10);
|
||||
LastlegOrder row = order(11L, "100", "PENDING_ASSIGNMENT", null);
|
||||
row.setOverseasWarehouseCode("US-LAX-01");
|
||||
row.setOverseasWarehouseName("洛杉矶仓");
|
||||
resultPage.setRecords(matched ? List.of(row) : List.of());
|
||||
resultPage.setTotal(matched ? 1 : 0);
|
||||
when(orders.selectPage(any(), any())).thenReturn(resultPage);
|
||||
|
||||
var result = service.page(null, new LastlegOrderRequests.Query(1L, 10L, null, null, null, null,
|
||||
null, null, null, null, input, null, null, null, null, null));
|
||||
|
||||
ArgumentCaptor<com.baomidou.mybatisplus.core.conditions.Wrapper<LastlegOrder>> filter =
|
||||
ArgumentCaptor.forClass(com.baomidou.mybatisplus.core.conditions.Wrapper.class);
|
||||
verify(orders).selectPage(any(), filter.capture());
|
||||
var wrapper = (com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<LastlegOrder>) filter.getValue();
|
||||
String warehouseSql = wrapper.getExpression().getNormal().getSqlSegment();
|
||||
assertTrue(warehouseSql.contains("LOWER(TRIM(overseas_warehouse_code))"));
|
||||
assertTrue(warehouseSql.contains("LOWER(TRIM(overseas_warehouse_name))"));
|
||||
assertTrue(wrapper.getParamNameValuePairs().containsValue(normalized),
|
||||
wrapper.getParamNameValuePairs().toString());
|
||||
assertEquals(matched ? 1 : 0, result.total());
|
||||
assertEquals(matched ? 1 : 0, result.records().size());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user