fix(orders): filter tax mode before unified order pagination

This commit is contained in:
2026-10-02 14:44:51 +08:00
parent 2d73ce9f37
commit f532e5ee7e
16 changed files with 250 additions and 15 deletions
@@ -34,7 +34,7 @@ public interface FirstlegUnifiedOrderClient {
String feeReviewStatus, String channelName, String containerNo, String cabinetNo,
LocalDate sailingDate, Boolean loaded, Boolean fullContainer,
String measurementReviewStatus, List<Long> candidateOrderIds,
LocalDateTime createdFrom, LocalDateTime createdTo, long page, long size) {}
LocalDateTime createdFrom, LocalDateTime createdTo, long page, long size, String taxMode) {}
record BatchRequest(Long tenantId, List<Long> orderIds) {}
record DetailRequest(long tenantId, long orderId) {}
@@ -33,7 +33,9 @@ public record UnifiedOrderQuery(
LocalDateTime createdFrom,
LocalDateTime createdTo,
@Min(1) long page,
@Min(1) @Max(200) long size
@Min(1) @Max(200) long size,
@Schema(allowableValues = {"TAX_REFUND", "BUY_DECLARATION"})
@jakarta.validation.constraints.Pattern(regexp = "TAX_REFUND|BUY_DECLARATION") String taxMode
) {
public UnifiedOrderQuery {
if (page == 0) page = 1;
@@ -301,6 +301,7 @@ public class OrderRepository {
List<OrderStatus> statuses) {
LambdaQueryWrapper<OrderEntity> wrapper = new LambdaQueryWrapper<OrderEntity>()
.eq(tenantId != null, OrderEntity::getTenantId, tenantId)
.eq(query.taxMode() != null, OrderEntity::getTaxMode, query.taxMode())
.in(OrderEntity::getStatus, statuses)
.like(StringUtils.hasText(query.orderNo()), OrderEntity::getOrderNo, query.orderNo())
.like(StringUtils.hasText(query.inboundCode()), OrderEntity::getInboundCode, query.inboundCode())
@@ -282,7 +282,7 @@ public class DomesticWarehouseOrderExportProviderService {
string("inboundCode"), string("internalOrderStatus"), date("expectedArrivalDate"),
string("feeReviewStatus"), string("channelName"), string("containerNo"), string("cabinetNo"),
date("sailingDate"), bool("loaded"), bool("fullContainer"), string("measurementReviewStatus"),
string("fbaCode"), dateTime("createdFrom"), dateTime("createdTo"), page, limit);
string("fbaCode"), dateTime("createdFrom"), dateTime("createdTo"), page, limit, null);
}
private String string(String key) { Object value = parameters.get(key); return value == null || String.valueOf(value).isBlank() ? null : String.valueOf(value).trim(); }
private Long number(String key) { String value = string(key); if (value == null) return null; try { long parsed=Long.parseLong(value); if(parsed<=0)throw new NumberFormatException(); return parsed; } catch(NumberFormatException ex){throw new BizException(ResultCode.VALIDATION_FAILED,key+" 必须为正整数字符串");} }
@@ -159,7 +159,7 @@ public class UnifiedOrderQueryService {
query.internalOrderStatus(), query.expectedArrivalDate(), query.feeReviewStatus(), query.channelName(),
query.containerNo(), query.cabinetNo(), query.sailingDate(), query.loaded(), query.fullContainer(),
query.measurementReviewStatus(), candidateOrderIds, query.createdFrom(), query.createdTo(),
query.page(), query.size());
query.page(), query.size(), query.taxMode());
PageResult<FirstlegUnifiedOrderClient.Summary> source = require(
call(() -> firstleg.page(internalToken, request)), "统一订单履约查询响应无效");
List<FirstlegUnifiedOrderClient.Summary> summaries = validateSummaries(
@@ -555,6 +555,9 @@ public class UnifiedOrderQueryService {
}
private void validate(UnifiedOrderQuery query) {
if (query.taxMode() != null && !Set.of("TAX_REFUND", "BUY_DECLARATION").contains(query.taxMode())) {
throw new BizException(ResultCode.BAD_REQUEST, "taxMode仅支持TAX_REFUND或BUY_DECLARATION");
}
if (StringUtils.hasText(query.mainStatus())
&& !MAIN_STATUSES.contains(query.mainStatus())
) {
@@ -329,6 +329,7 @@ paths:
relation(仅有关联时返回;PARENT 含 childCount,CHILD 含 rootOrderId、parentOrderId 与 splitSequence)。
coLoadGroup 仅平台响应返回,由 Order 经 Firstleg 内部批量只读契约聚合;成员业务标识由 Order 权威订单片段补齐。
parameters:
- $ref: '#/components/parameters/UnifiedTaxMode'
- {name: tenantId, in: query, required: false, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
- $ref: '#/components/parameters/UnifiedKeyword'
- $ref: '#/components/parameters/UnifiedOrderNo'
@@ -444,6 +445,7 @@ paths:
有入库单时同时返回 inboundId、inboundVersion、loadingVersion、pickingVersion;inboundVersion
才是 C04 loading/complete 的 expectedVersion,loadingVersion 当前等于 pickingVersion(兼容别名)。
parameters:
- $ref: '#/components/parameters/UnifiedTaxMode'
- $ref: '#/components/parameters/UnifiedKeyword'
- $ref: '#/components/parameters/UnifiedOrderNo'
- $ref: '#/components/parameters/UnifiedMainStatus'
@@ -1488,6 +1490,12 @@ components:
in: query
required: false
schema: {type: string, maxLength: 64}
UnifiedTaxMode:
name: taxMode
in: query
required: false
description: 严格按税务模式在数据库计数和分页前过滤;未传查询全部税务模式,空串或其他值拒绝
schema: {type: string, enum: [TAX_REFUND, BUY_DECLARATION]}
UnifiedOrderNo:
name: orderNo
in: query