贴标申请,仓储转运
This commit is contained in:
+28
-6
@@ -117,6 +117,7 @@ public class ReturnReceiptService {
|
||||
item.setSkuCode(text(input.skuCode()));
|
||||
item.setProductNameZh(text(input.productNameZh())); item.setExpectedQuantity(input.expectedQuantity());
|
||||
item.setReceivedQuantity(0L); item.setCreatedAt(now); item.setUpdatedAt(now); orderItems.insert(item);
|
||||
insertForecastCargo(order, item);
|
||||
}
|
||||
return detail(customerId, order.getReturnNo());
|
||||
}
|
||||
@@ -133,7 +134,7 @@ public class ReturnReceiptService {
|
||||
tail.setRelabelStatus(Boolean.TRUE.equals(returnOrder.getNeedRelabel()) ? PENDING_REVIEW : "NOT_REQUIRED");
|
||||
// A return forecast is already the source of truth for the expected cargo.
|
||||
// Keep the tail-leg snapshot useful before PDA receipt facts exist.
|
||||
tail.setPackageCount(returnOrder.getExpectedQuantity() == null ? 0 : Math.toIntExact(returnOrder.getExpectedQuantity()));
|
||||
tail.setPackageCount(0);
|
||||
tail.setProductQuantity(returnOrder.getExpectedQuantity() == null ? 0 : Math.toIntExact(returnOrder.getExpectedQuantity()));
|
||||
tail.setCustomerRemark(returnOrder.getRemark()); tail.setSourceEventId("RETURN_ORDER:" + returnOrder.getReturnNo());
|
||||
tail.setSourceLoadingPlanId("RETURN_RELABEL"); tail.setCreatedAt(now); tail.setUpdatedAt(now);
|
||||
@@ -157,9 +158,31 @@ public class ReturnReceiptService {
|
||||
order.setNeedRelabel(request.needRelabel()); order.setRemark(text(request.remark())); order.setExpectedSkuTypes(skus.size()); order.setExpectedQuantity(expected); order.setUpdatedAt(LocalDateTime.now()); orders.updateById(order);
|
||||
orderItems.delete(new LambdaQueryWrapper<ReturnOrderItem>().eq(ReturnOrderItem::getReturnOrderId, order.getId()));
|
||||
for (ReturnOrderRequests.Item input : request.items()) { ReturnOrderItem item = new ReturnOrderItem(); item.setId(IdWorker.getId()); item.setReturnOrderId(order.getId()); item.setCustomerId(customerId); item.setSkuCode(text(input.skuCode())); item.setProductNameZh(text(input.productNameZh())); item.setExpectedQuantity(input.expectedQuantity()); item.setReceivedQuantity(0L); item.setCreatedAt(LocalDateTime.now()); item.setUpdatedAt(LocalDateTime.now()); orderItems.insert(item); }
|
||||
if (order.getLastlegOrderId() != null) {
|
||||
lastlegOrderDetails.delete(new LambdaQueryWrapper<LastlegOrderDetail>()
|
||||
.eq(LastlegOrderDetail::getCustomerId, customerId).eq(LastlegOrderDetail::getOrderId, order.getLastlegOrderId())
|
||||
.likeRight(LastlegOrderDetail::getSourceInboundDetailId, "RETURN_ORDER:"));
|
||||
for (ReturnOrderRequests.Item input : request.items()) {
|
||||
ReturnOrderItem item = new ReturnOrderItem(); item.setSkuCode(text(input.skuCode()));
|
||||
item.setProductNameZh(text(input.productNameZh())); item.setExpectedQuantity(input.expectedQuantity());
|
||||
insertForecastCargo(order, item);
|
||||
}
|
||||
LastlegOrder tail = lastlegOrders.selectById(order.getLastlegOrderId());
|
||||
if (tail != null) { tail.setPackageCount(0); tail.setProductQuantity(Math.toIntExact(expected));
|
||||
tail.setUpdatedAt(order.getUpdatedAt()); lastlegOrders.updateById(tail); }
|
||||
}
|
||||
return detail(customerId, returnNo);
|
||||
}
|
||||
|
||||
private void insertForecastCargo(ReturnOrder order, ReturnOrderItem item) {
|
||||
LastlegOrderDetail detail = new LastlegOrderDetail();
|
||||
detail.setId(IdWorker.getId()); detail.setCustomerId(order.getCustomerId()); detail.setOrderId(order.getLastlegOrderId());
|
||||
detail.setSourceInboundDetailId("RETURN_ORDER:" + order.getReturnNo() + ":" + item.getSkuCode());
|
||||
detail.setSkuCode(item.getSkuCode()); detail.setProductNameZh(item.getProductNameZh());
|
||||
detail.setPackageCount(0); detail.setProductQuantity(Math.toIntExact(value(item.getExpectedQuantity())));
|
||||
lastlegOrderDetails.insert(detail);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public ReturnOrderResponses.Detail cancelPending(String customerId, String returnNo) {
|
||||
ReturnOrder order = orders.findNo(customerId, text(returnNo));
|
||||
@@ -227,13 +250,13 @@ public class ReturnReceiptService {
|
||||
detail.setId(IdWorker.getId()); detail.setCustomerId(customerId); detail.setOrderId(tailOrderId);
|
||||
detail.setSourceInboundDetailId("RETURN_ORDER:" + order.getReturnNo() + ":" + item.getSkuCode());
|
||||
detail.setSkuCode(item.getSkuCode()); detail.setProductNameZh(item.getProductNameZh());
|
||||
detail.setPackageCount(quantity); detail.setProductQuantity(quantity);
|
||||
detail.setPackageCount(0); detail.setProductQuantity(quantity);
|
||||
lastlegOrderDetails.insert(detail); total = Math.addExact(total, quantity);
|
||||
}
|
||||
if (total > 0) {
|
||||
LastlegOrder tail = lastlegOrders.selectById(tailOrderId);
|
||||
if (tail != null) {
|
||||
tail.setPackageCount(total); tail.setProductQuantity(total); tail.setUpdatedAt(LocalDateTime.now());
|
||||
tail.setPackageCount(0); tail.setProductQuantity(total); tail.setUpdatedAt(LocalDateTime.now());
|
||||
lastlegOrders.updateById(tail);
|
||||
}
|
||||
}
|
||||
@@ -696,8 +719,7 @@ public class ReturnReceiptService {
|
||||
}
|
||||
boolean firstSku = true;
|
||||
for (Map.Entry<String, Long> entry : quantities.entrySet()) {
|
||||
int skuBoxes = Math.toIntExact("PARCEL".equals(receipt.getUnitType()) ? 1 : boxes.getOrDefault(entry.getKey(), 0L));
|
||||
if (skuBoxes <= 0) skuBoxes = 1;
|
||||
int skuBoxes = Math.toIntExact("PARCEL".equals(receipt.getUnitType()) ? 0 : boxes.getOrDefault(entry.getKey(), 0L));
|
||||
String sourceKey = "RETURN_RECEIPT:" + receipt.getId() + ":" + entry.getKey();
|
||||
LastlegOrderDetail detail = lastlegOrderDetails.selectOne(new LambdaQueryWrapper<LastlegOrderDetail>()
|
||||
.eq(LastlegOrderDetail::getCustomerId, order.getCustomerId()).eq(LastlegOrderDetail::getOrderId, tail.getId())
|
||||
@@ -721,7 +743,7 @@ public class ReturnReceiptService {
|
||||
int actualBoxes = 0, actualUnits = 0;
|
||||
Set<String> palletCodes = new LinkedHashSet<>();
|
||||
for (ReturnReceipt signed : signedReceipts) {
|
||||
actualBoxes = Math.addExact(actualBoxes, "PARCEL".equals(signed.getUnitType()) ? 1 : Math.toIntExact(value(signed.getTotalBoxCount())));
|
||||
actualBoxes = Math.addExact(actualBoxes, "PARCEL".equals(signed.getUnitType()) ? 0 : Math.toIntExact(value(signed.getTotalBoxCount())));
|
||||
actualUnits = Math.addExact(actualUnits, Math.toIntExact(receiptItems.listReceipt(signed.getId()).stream()
|
||||
.mapToLong(line -> value(line.getReceivedQuantity())).sum()));
|
||||
if ("PALLET".equals(signed.getUnitType())) palletCodes.add(text(signed.getUnitCode()) == null ? signed.getReceiptNo() : signed.getUnitCode());
|
||||
|
||||
+10
@@ -90,6 +90,7 @@ class ReturnReceiptServiceTest {
|
||||
@Mock ReturnInventoryService inventory;
|
||||
@Mock LastlegOrderNoGenerator numbers;
|
||||
@Mock LastlegOrderMapper lastlegOrders;
|
||||
@Mock com.baiyue.lastleg.mapper.LastlegOrderDetailMapper cargoMapper;
|
||||
@Mock ReturnInventoryCartonMapper cartons;
|
||||
@Mock ReturnInventoryCartonItemMapper cartonItems;
|
||||
@Mock RelabelApplicationMapper relabelApplications;
|
||||
@@ -113,6 +114,7 @@ class ReturnReceiptServiceTest {
|
||||
ReflectionTestUtils.setField(service, "numbers", numbers);
|
||||
ReflectionTestUtils.setField(service, "objectMapper", new ObjectMapper());
|
||||
ReflectionTestUtils.setField(service, "lastlegOrders", lastlegOrders);
|
||||
ReflectionTestUtils.setField(service, "lastlegOrderDetails", cargoMapper);
|
||||
ReflectionTestUtils.setField(service, "cartons", cartons);
|
||||
ReflectionTestUtils.setField(service, "cartonItems", cartonItems);
|
||||
ReflectionTestUtils.setField(service, "relabelApplications", relabelApplications);
|
||||
@@ -340,6 +342,14 @@ class ReturnReceiptServiceTest {
|
||||
assertEquals(saved.get().getRequestHash(), tail.getValue().getSourcePayloadHash());
|
||||
assertEquals("RT-1", tail.getValue().getOrderNo());
|
||||
assertEquals("RT-1", result.order().lastlegOrderNo());
|
||||
assertEquals(0, tail.getValue().getPackageCount());
|
||||
assertEquals(2, tail.getValue().getProductQuantity());
|
||||
var cargo = ArgumentCaptor.forClass(com.baiyue.lastleg.entity.LastlegOrderDetail.class);
|
||||
verify(cargoMapper).insert(cargo.capture());
|
||||
assertEquals("SKU-A", cargo.getValue().getSkuCode());
|
||||
assertEquals("商品A", cargo.getValue().getProductNameZh());
|
||||
assertEquals(2, cargo.getValue().getProductQuantity());
|
||||
assertEquals(0, cargo.getValue().getPackageCount());
|
||||
verify(numbers, never()).next(eq("RETURN_RELABEL"), anyString(), anyLong());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user