提交
This commit is contained in:
@@ -136,7 +136,8 @@ public class UnifiedOrderQueryService {
|
||||
OrderEntity order = authority.get(row.orderId());
|
||||
if (order == null || !Objects.equals(order.getTenantId(), row.tenantId())
|
||||
|| !ACTIVE_ORDER_STATUSES.contains(order.getStatus())) continue;
|
||||
String status = order.getStatus() == OrderStatus.SUBMITTED ? "PENDING_REVIEW"
|
||||
// 待审核主状态仍由 Order 决定,提前测量提交产生的独立审核任务须保留。
|
||||
String status = order.getStatus() == OrderStatus.SUBMITTED && !"MEASUREMENT_REVIEW".equals(row.mainStatus()) ? "PENDING_REVIEW"
|
||||
: order.getStatus() == OrderStatus.COMPLETED && !WORKFLOW_STATUSES.contains(row.mainStatus()) ? "COMPLETED" : row.mainStatus();
|
||||
if (status != null) result.add(new FirstlegUnifiedOrderClient.StatusRow(row.tenantId(), row.orderId(), status));
|
||||
}
|
||||
|
||||
@@ -421,7 +421,7 @@ paths:
|
||||
需要平台身份和 platform:order:list;tenantId 省略时按授权平台范围查询全部客户。
|
||||
按统一列表非分页、非 mainStatus 筛选全量去重;忽略主状态和分页,不返回全部数量。
|
||||
订单审核与完成状态优先于履约投影,依赖异常返回业务错误,不能以零代替失败。
|
||||
MEASUREMENT_REVIEW 为独立任务,暂不返回该 key。
|
||||
MEASUREMENT_REVIEW 返回独立测量审核任务数量;待审核订单提前测量并提交审核后可同时计入 PENDING_REVIEW 与 MEASUREMENT_REVIEW。
|
||||
parameters:
|
||||
- $ref: '#/components/parameters/UnifiedTaxMode'
|
||||
- {name: tenantId, in: query, required: false, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
|
||||
@@ -1743,7 +1743,7 @@ components:
|
||||
name: mainStatus
|
||||
in: query
|
||||
required: false
|
||||
description: 统一订单主状态及业务页签筛选;WAIT_PALLETIZE、WAIT_SPLIT 与存量兼容状态 INBOUNDED 独立查询。WAIT_CUSTOMS_DOCS 为实际装柜后待上传客户报关资料;EXPORT_CUSTOMS 为本票报关资料已上传且实际装柜完成、尚未报关完成或实际开船的汇总,买单票无需客户退税资料,不以点击开始报关为前提;SAILING_CLEARANCE 在整柜报关完成后进入,也接受实际离港事实;清关资料保存成功后才进入 WAIT_UNLOAD/WAIT_DISPATCH。WAIT_UNLOAD 持续到实际卸柜或生成有效出库单;生成出库单后进入 OUTBOUND_DOCUMENT,实际出库后进入 DELIVERING,派送完成进入 SIGNED。
|
||||
description: 统一订单主状态及业务页签筛选;WAIT_PALLETIZE、WAIT_SPLIT 与存量兼容状态 INBOUNDED 独立查询。WAIT_CUSTOMS_DOCS 为实际装柜后待上传客户报关资料;EXPORT_CUSTOMS 为本票报关资料已上传且实际装柜完成、尚未报关完成或实际开船的汇总,买单票无需客户退税资料,不以点击开始报关为前提;SAILING_CLEARANCE 在整柜报关完成后进入,也接受实际离港事实;清关资料保存成功后才进入 WAIT_UNLOAD/WAIT_DISPATCH。WAIT_UNLOAD 持续到实际卸柜或生成有效出库单;尾程排车理货审核通过并生成有效出库单后进入 OUTBOUND_DOCUMENT,不以前置开船节点或清关资料为条件;取消或实际出库后移出,实际出库并发车后进入 DELIVERING,派送完成进入 SIGNED。
|
||||
schema:
|
||||
type: string
|
||||
enum: [PENDING_REVIEW, WAIT_MEASURE, WAIT_PALLETIZE, INBOUNDED, WAIT_SPLIT, LOADING, LOADED, DELIVERED, COMPLETED, WAIT_WEIGHT_CONFIRM, WEIGHT_CONFIRMED, WAIT_CUSTOMS_DOCS, EXPORT_CUSTOMS, SAILING_CLEARANCE, WAIT_UNLOAD, WAIT_DISPATCH, OUTBOUND_DOCUMENT, DELIVERING, SIGNED, MEASUREMENT_REVIEW]
|
||||
|
||||
@@ -1012,6 +1012,35 @@ class UnifiedOrderQueryServiceTest {
|
||||
});
|
||||
}
|
||||
|
||||
/** 提前测量提交后同时保留订单待审核和测量审核待办,统计与列表一致。 */
|
||||
@Test
|
||||
void submittedOrderRetainsIndependentMeasurementReviewTask() {
|
||||
var pending = order(OrderStatus.SUBMITTED);
|
||||
when(orders.unifiedStatusOrders(eq(10001L), any(), any())).thenReturn(List.of(pending));
|
||||
when(orders.statusAuthorities(eq(10001L), any())).thenReturn(List.of(pending));
|
||||
when(orders.findByIds(eq(10001L), any())).thenReturn(List.of(pending));
|
||||
when(firstleg.statusRows(eq("internal-token"), any())).thenReturn(ApiResponse.success(List.of(
|
||||
new FirstlegUnifiedOrderClient.StatusRow(10001L, 77L, "WAIT_MEASURE"),
|
||||
new FirstlegUnifiedOrderClient.StatusRow(10001L, 77L, "MEASUREMENT_REVIEW"),
|
||||
new FirstlegUnifiedOrderClient.StatusRow(10001L, 77L, "MEASUREMENT_REVIEW"))));
|
||||
var projected = summary("WAIT_MEASURE", null);
|
||||
when(projected.inbound().processStatus()).thenReturn("MEASURE_PENDING");
|
||||
when(firstleg.statusSummaries(eq("internal-token"), any()))
|
||||
.thenReturn(ApiResponse.success(List.of(projected)));
|
||||
|
||||
var counts = service.statusCounts(10001L, query(null));
|
||||
var page = service.page(10001L, query("MEASUREMENT_REVIEW"));
|
||||
|
||||
assertThat(counts.counts()).containsEntry("PENDING_REVIEW", 1L)
|
||||
.containsEntry("MEASUREMENT_REVIEW", 1L).containsEntry("WAIT_MEASURE", 0L);
|
||||
assertThat(page.total()).isEqualTo(1L);
|
||||
assertThat(page.records()).singleElement().satisfies(row -> {
|
||||
assertThat(row.mainStatus()).isEqualTo("PENDING_REVIEW");
|
||||
assertThat(row.nextAction()).isEqualTo("APPROVE_ORDER");
|
||||
assertThat(row.inboundId()).isEqualTo(88L);
|
||||
});
|
||||
}
|
||||
|
||||
/** 错误响应和跨客户投影均失败关闭,不能返回看似可信的零。 */
|
||||
@Test
|
||||
void statusCountsRejectDependencyFailuresAndForeignCustomerRows() {
|
||||
|
||||
Reference in New Issue
Block a user