This commit is contained in:
2026-09-10 17:13:02 +08:00
parent d37e6cf147
commit 56d555668d
2 changed files with 34 additions and 9 deletions
@@ -245,6 +245,10 @@ public class InboundMeasurementService {
List<InboundMeasurementItemEntity> items = repository.listItems(tenantId, measurement.getId()); List<InboundMeasurementItemEntity> items = repository.listItems(tenantId, measurement.getId());
List<InboundWeightResultEntity> weights = repository.listWeights(tenantId, inboundId); List<InboundWeightResultEntity> weights = repository.listWeights(tenantId, inboundId);
ConfirmedWeightTotals confirmedTotals = confirmedWeightTotals(weights); ConfirmedWeightTotals confirmedTotals = confirmedWeightTotals(weights);
if (confirmedTotals.palletCount() == 0) {
throw new BizException(ResultCode.VALIDATION_FAILED,
"请至少上传并确认一张称重图片后再提交测量审核");
}
requireConfirmedPackageTotal(inbound, items); requireConfirmedPackageTotal(inbound, items);
measurement.setStatus(STATUS_SUBMITTED); measurement.setStatus(STATUS_SUBMITTED);
@@ -1171,7 +1171,7 @@ class InboundMeasurementServiceTest {
} }
@Test @Test
void submitDoesNotBlockOnUnconfirmedWeight() { void submitRejectsWhenNoWeightImageHasBeenConfirmed() {
InboundOrderEntity inbound = inbound("MEASURING"); InboundOrderEntity inbound = inbound("MEASURING");
InboundMeasurementEntity measurement = new InboundMeasurementEntity(); InboundMeasurementEntity measurement = new InboundMeasurementEntity();
measurement.setId(30L); measurement.setId(30L);
@@ -1185,16 +1185,37 @@ class InboundMeasurementServiceTest {
when(repository.listItems(1L, 30L)).thenReturn(List.of(item)); when(repository.listItems(1L, 30L)).thenReturn(List.of(item));
when(repository.listWeights(1L, 10L)).thenReturn(List.of( when(repository.listWeights(1L, 10L)).thenReturn(List.of(
weight(20L, "20", "KG", "PENDING_CONFIRM", 0))); weight(20L, "20", "KG", "PENDING_CONFIRM", 0)));
when(repository.updateMeasurement(measurement)).thenReturn(true); assertThatThrownBy(() -> service.submit(1L, 10L, 9L,
when(repository.updateInbound(inbound)).thenReturn(true); new InboundMeasurementRequests.SubmitRequest(30L, 0)))
.isInstanceOf(BizException.class)
.hasMessageContaining("至少上传并确认一张称重图片");
InboundMeasurementResponses.MeasurementSubmitted result = service.submit(1L, 10L, 9L, verify(repository, never()).updateMeasurement(any());
new InboundMeasurementRequests.SubmitRequest(30L, 0)); verify(repository, never()).updateInbound(any());
}
assertThat(result.processStatus()).isEqualTo("MEASURE_PENDING"); @Test
assertThat(inbound.getActualGrossWeightKg()).isNull(); void submitRejectsWhenThereIsNoWeightImage() {
verify(repository).updateMeasurement(measurement); InboundOrderEntity inbound = inbound("MEASURING");
verify(repository).updateInbound(inbound); InboundMeasurementEntity measurement = new InboundMeasurementEntity();
measurement.setId(30L);
measurement.setStatus("DRAFT");
measurement.setVersion(0);
InboundMeasurementItemEntity item = new InboundMeasurementItemEntity();
item.setPackageCount(1);
item.setSourceImageFileId(500L);
when(repository.findInbound(1L, 10L)).thenReturn(inbound);
when(repository.findMeasurement(1L, 10L, 30L)).thenReturn(measurement);
when(repository.listItems(1L, 30L)).thenReturn(List.of(item));
when(repository.listWeights(1L, 10L)).thenReturn(List.of());
assertThatThrownBy(() -> service.submit(1L, 10L, 9L,
new InboundMeasurementRequests.SubmitRequest(30L, 0)))
.isInstanceOf(BizException.class)
.hasMessageContaining("至少上传并确认一张称重图片");
verify(repository, never()).updateMeasurement(any());
verify(repository, never()).updateInbound(any());
} }
@Test @Test