Merge remote-tracking branch 'origin/test' into test
This commit is contained in:
+28
-6
@@ -117,6 +117,7 @@ public class ReturnReceiptService {
|
|||||||
item.setSkuCode(text(input.skuCode()));
|
item.setSkuCode(text(input.skuCode()));
|
||||||
item.setProductNameZh(text(input.productNameZh())); item.setExpectedQuantity(input.expectedQuantity());
|
item.setProductNameZh(text(input.productNameZh())); item.setExpectedQuantity(input.expectedQuantity());
|
||||||
item.setReceivedQuantity(0L); item.setCreatedAt(now); item.setUpdatedAt(now); orderItems.insert(item);
|
item.setReceivedQuantity(0L); item.setCreatedAt(now); item.setUpdatedAt(now); orderItems.insert(item);
|
||||||
|
insertForecastCargo(order, item);
|
||||||
}
|
}
|
||||||
return detail(customerId, order.getReturnNo());
|
return detail(customerId, order.getReturnNo());
|
||||||
}
|
}
|
||||||
@@ -133,7 +134,7 @@ public class ReturnReceiptService {
|
|||||||
tail.setRelabelStatus(Boolean.TRUE.equals(returnOrder.getNeedRelabel()) ? PENDING_REVIEW : "NOT_REQUIRED");
|
tail.setRelabelStatus(Boolean.TRUE.equals(returnOrder.getNeedRelabel()) ? PENDING_REVIEW : "NOT_REQUIRED");
|
||||||
// A return forecast is already the source of truth for the expected cargo.
|
// A return forecast is already the source of truth for the expected cargo.
|
||||||
// Keep the tail-leg snapshot useful before PDA receipt facts exist.
|
// 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.setProductQuantity(returnOrder.getExpectedQuantity() == null ? 0 : Math.toIntExact(returnOrder.getExpectedQuantity()));
|
||||||
tail.setCustomerRemark(returnOrder.getRemark()); tail.setSourceEventId("RETURN_ORDER:" + returnOrder.getReturnNo());
|
tail.setCustomerRemark(returnOrder.getRemark()); tail.setSourceEventId("RETURN_ORDER:" + returnOrder.getReturnNo());
|
||||||
tail.setSourceLoadingPlanId("RETURN_RELABEL"); tail.setCreatedAt(now); tail.setUpdatedAt(now);
|
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);
|
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()));
|
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); }
|
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);
|
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
|
@Transactional
|
||||||
public ReturnOrderResponses.Detail cancelPending(String customerId, String returnNo) {
|
public ReturnOrderResponses.Detail cancelPending(String customerId, String returnNo) {
|
||||||
ReturnOrder order = orders.findNo(customerId, text(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.setId(IdWorker.getId()); detail.setCustomerId(customerId); detail.setOrderId(tailOrderId);
|
||||||
detail.setSourceInboundDetailId("RETURN_ORDER:" + order.getReturnNo() + ":" + item.getSkuCode());
|
detail.setSourceInboundDetailId("RETURN_ORDER:" + order.getReturnNo() + ":" + item.getSkuCode());
|
||||||
detail.setSkuCode(item.getSkuCode()); detail.setProductNameZh(item.getProductNameZh());
|
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);
|
lastlegOrderDetails.insert(detail); total = Math.addExact(total, quantity);
|
||||||
}
|
}
|
||||||
if (total > 0) {
|
if (total > 0) {
|
||||||
LastlegOrder tail = lastlegOrders.selectById(tailOrderId);
|
LastlegOrder tail = lastlegOrders.selectById(tailOrderId);
|
||||||
if (tail != null) {
|
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);
|
lastlegOrders.updateById(tail);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -696,8 +719,7 @@ public class ReturnReceiptService {
|
|||||||
}
|
}
|
||||||
boolean firstSku = true;
|
boolean firstSku = true;
|
||||||
for (Map.Entry<String, Long> entry : quantities.entrySet()) {
|
for (Map.Entry<String, Long> entry : quantities.entrySet()) {
|
||||||
int skuBoxes = Math.toIntExact("PARCEL".equals(receipt.getUnitType()) ? 1 : boxes.getOrDefault(entry.getKey(), 0L));
|
int skuBoxes = Math.toIntExact("PARCEL".equals(receipt.getUnitType()) ? 0 : boxes.getOrDefault(entry.getKey(), 0L));
|
||||||
if (skuBoxes <= 0) skuBoxes = 1;
|
|
||||||
String sourceKey = "RETURN_RECEIPT:" + receipt.getId() + ":" + entry.getKey();
|
String sourceKey = "RETURN_RECEIPT:" + receipt.getId() + ":" + entry.getKey();
|
||||||
LastlegOrderDetail detail = lastlegOrderDetails.selectOne(new LambdaQueryWrapper<LastlegOrderDetail>()
|
LastlegOrderDetail detail = lastlegOrderDetails.selectOne(new LambdaQueryWrapper<LastlegOrderDetail>()
|
||||||
.eq(LastlegOrderDetail::getCustomerId, order.getCustomerId()).eq(LastlegOrderDetail::getOrderId, tail.getId())
|
.eq(LastlegOrderDetail::getCustomerId, order.getCustomerId()).eq(LastlegOrderDetail::getOrderId, tail.getId())
|
||||||
@@ -721,7 +743,7 @@ public class ReturnReceiptService {
|
|||||||
int actualBoxes = 0, actualUnits = 0;
|
int actualBoxes = 0, actualUnits = 0;
|
||||||
Set<String> palletCodes = new LinkedHashSet<>();
|
Set<String> palletCodes = new LinkedHashSet<>();
|
||||||
for (ReturnReceipt signed : signedReceipts) {
|
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()
|
actualUnits = Math.addExact(actualUnits, Math.toIntExact(receiptItems.listReceipt(signed.getId()).stream()
|
||||||
.mapToLong(line -> value(line.getReceivedQuantity())).sum()));
|
.mapToLong(line -> value(line.getReceivedQuantity())).sum()));
|
||||||
if ("PALLET".equals(signed.getUnitType())) palletCodes.add(text(signed.getUnitCode()) == null ? signed.getReceiptNo() : signed.getUnitCode());
|
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 ReturnInventoryService inventory;
|
||||||
@Mock LastlegOrderNoGenerator numbers;
|
@Mock LastlegOrderNoGenerator numbers;
|
||||||
@Mock LastlegOrderMapper lastlegOrders;
|
@Mock LastlegOrderMapper lastlegOrders;
|
||||||
|
@Mock com.baiyue.lastleg.mapper.LastlegOrderDetailMapper cargoMapper;
|
||||||
@Mock ReturnInventoryCartonMapper cartons;
|
@Mock ReturnInventoryCartonMapper cartons;
|
||||||
@Mock ReturnInventoryCartonItemMapper cartonItems;
|
@Mock ReturnInventoryCartonItemMapper cartonItems;
|
||||||
@Mock RelabelApplicationMapper relabelApplications;
|
@Mock RelabelApplicationMapper relabelApplications;
|
||||||
@@ -113,6 +114,7 @@ class ReturnReceiptServiceTest {
|
|||||||
ReflectionTestUtils.setField(service, "numbers", numbers);
|
ReflectionTestUtils.setField(service, "numbers", numbers);
|
||||||
ReflectionTestUtils.setField(service, "objectMapper", new ObjectMapper());
|
ReflectionTestUtils.setField(service, "objectMapper", new ObjectMapper());
|
||||||
ReflectionTestUtils.setField(service, "lastlegOrders", lastlegOrders);
|
ReflectionTestUtils.setField(service, "lastlegOrders", lastlegOrders);
|
||||||
|
ReflectionTestUtils.setField(service, "lastlegOrderDetails", cargoMapper);
|
||||||
ReflectionTestUtils.setField(service, "cartons", cartons);
|
ReflectionTestUtils.setField(service, "cartons", cartons);
|
||||||
ReflectionTestUtils.setField(service, "cartonItems", cartonItems);
|
ReflectionTestUtils.setField(service, "cartonItems", cartonItems);
|
||||||
ReflectionTestUtils.setField(service, "relabelApplications", relabelApplications);
|
ReflectionTestUtils.setField(service, "relabelApplications", relabelApplications);
|
||||||
@@ -340,6 +342,14 @@ class ReturnReceiptServiceTest {
|
|||||||
assertEquals(saved.get().getRequestHash(), tail.getValue().getSourcePayloadHash());
|
assertEquals(saved.get().getRequestHash(), tail.getValue().getSourcePayloadHash());
|
||||||
assertEquals("RT-1", tail.getValue().getOrderNo());
|
assertEquals("RT-1", tail.getValue().getOrderNo());
|
||||||
assertEquals("RT-1", result.order().lastlegOrderNo());
|
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());
|
verify(numbers, never()).next(eq("RETURN_RELABEL"), anyString(), anyLong());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user