fix(firstleg): reuse running preload lifecycle
This commit is contained in:
@@ -83,13 +83,20 @@ public class SplitPreloadService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void ensureLoadingAllocationLifecycle(long tenantId, long inboundId, long operatorId,
|
private void ensureLoadingAllocationLifecycle(long tenantId, long inboundId, long operatorId,
|
||||||
String operatorName, boolean allowConfirmed) {
|
String operatorName, boolean running) {
|
||||||
InboundSnapshot inbound = requireInbound(tenantId, inboundId);
|
InboundSnapshot inbound = requireInbound(tenantId, inboundId);
|
||||||
requireWaitingSplit(inbound, "仅待分柜订单可以建立智能装柜预装计划");
|
|
||||||
PreloadPlanEntity plan = repository.findPlan(tenantId, inboundId);
|
PreloadPlanEntity plan = repository.findPlan(tenantId, inboundId);
|
||||||
|
boolean waitingSplit = isWaitingSplit(inbound.processStatus());
|
||||||
|
boolean loading = "LOADING".equals(inbound.processStatus());
|
||||||
|
if (!waitingSplit && !(running && loading)) {
|
||||||
|
throw new BizException(ResultCode.CONFLICT, "仅待分柜订单可以建立智能装柜预装计划");
|
||||||
|
}
|
||||||
|
if (loading && plan == null) {
|
||||||
|
throw new BizException(ResultCode.CONFLICT, "装柜中的订单缺少既有预装计划,不能新增分配");
|
||||||
|
}
|
||||||
if (plan != null) {
|
if (plan != null) {
|
||||||
if (!PreloadStatus.PENDING.equals(plan.getStatus())
|
if (!PreloadStatus.PENDING.equals(plan.getStatus())
|
||||||
&& !(allowConfirmed && PreloadStatus.CONFIRMED.equals(plan.getStatus()))) {
|
&& !(running && PreloadStatus.CONFIRMED.equals(plan.getStatus()))) {
|
||||||
throw new BizException(ResultCode.CONFLICT, "预装计划已进入确认流程,不能修改智能装柜分配");
|
throw new BizException(ResultCode.CONFLICT, "预装计划已进入确认流程,不能修改智能装柜分配");
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|||||||
+38
-2
@@ -82,7 +82,7 @@ class SplitPreloadServiceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void runningLoadingAllocationMayReuseConfirmedPreload() {
|
void runningLoadingAllocationMayReuseConfirmedPreload() {
|
||||||
when(repository.findInbound(10, 20)).thenReturn(new InboundSnapshot(20L, 10L, "WAIT_SPLIT", 3));
|
when(repository.findInbound(10, 20)).thenReturn(new InboundSnapshot(20L, 10L, "LOADING", 3));
|
||||||
PreloadPlanEntity plan = new PreloadPlanEntity();
|
PreloadPlanEntity plan = new PreloadPlanEntity();
|
||||||
plan.setStatus("CONFIRMED");
|
plan.setStatus("CONFIRMED");
|
||||||
when(repository.findPlan(10, 20)).thenReturn(plan);
|
when(repository.findPlan(10, 20)).thenReturn(plan);
|
||||||
@@ -92,9 +92,45 @@ class SplitPreloadServiceTest {
|
|||||||
verify(repository, never()).createPlan(any());
|
verify(repository, never()).createPlan(any());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void runningLoadingAllocationMayReusePendingPreload() {
|
||||||
|
when(repository.findInbound(10, 20)).thenReturn(new InboundSnapshot(20L, 10L, "LOADING", 3));
|
||||||
|
PreloadPlanEntity plan = new PreloadPlanEntity();
|
||||||
|
plan.setStatus("PENDING");
|
||||||
|
when(repository.findPlan(10, 20)).thenReturn(plan);
|
||||||
|
|
||||||
|
service.ensureForRunningLoadingAllocation(10, 20, 7, "admin");
|
||||||
|
|
||||||
|
verify(repository, never()).createPlan(any());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void runningLoadingAllocationMustNotCreateMissingPreload() {
|
||||||
|
when(repository.findInbound(10, 20)).thenReturn(new InboundSnapshot(20L, 10L, "LOADING", 3));
|
||||||
|
when(repository.findPlan(10, 20)).thenReturn(null);
|
||||||
|
|
||||||
|
assertThatThrownBy(() -> service.ensureForRunningLoadingAllocation(10, 20, 7, "admin"))
|
||||||
|
.hasMessageContaining("缺少既有预装计划");
|
||||||
|
|
||||||
|
verify(repository, never()).createPlan(any());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void ordinaryLoadingAllocationStillRequiresWaitingSplit() {
|
||||||
|
when(repository.findInbound(10, 20)).thenReturn(new InboundSnapshot(20L, 10L, "LOADING", 3));
|
||||||
|
PreloadPlanEntity plan = new PreloadPlanEntity();
|
||||||
|
plan.setStatus("PENDING");
|
||||||
|
when(repository.findPlan(10, 20)).thenReturn(plan);
|
||||||
|
|
||||||
|
assertThatThrownBy(() -> service.ensurePendingForLoadingAllocation(10, 20, 7, "admin"))
|
||||||
|
.hasMessageContaining("仅待分柜订单");
|
||||||
|
|
||||||
|
verify(repository, never()).createPlan(any());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void runningLoadingAllocationStillRejectsConfirmingPreload() {
|
void runningLoadingAllocationStillRejectsConfirmingPreload() {
|
||||||
when(repository.findInbound(10, 20)).thenReturn(new InboundSnapshot(20L, 10L, "WAIT_SPLIT", 3));
|
when(repository.findInbound(10, 20)).thenReturn(new InboundSnapshot(20L, 10L, "LOADING", 3));
|
||||||
PreloadPlanEntity plan = new PreloadPlanEntity();
|
PreloadPlanEntity plan = new PreloadPlanEntity();
|
||||||
plan.setStatus("CONFIRMING");
|
plan.setStatus("CONFIRMING");
|
||||||
when(repository.findPlan(10, 20)).thenReturn(plan);
|
when(repository.findPlan(10, 20)).thenReturn(plan);
|
||||||
|
|||||||
Reference in New Issue
Block a user