贴标申请,仓储转运
This commit is contained in:
+2
-1
@@ -36,7 +36,8 @@ public final class WarehouseTransferResponses {
|
|||||||
String destinationType, String destinationWarehouseCode, String destinationWarehouseName,
|
String destinationType, String destinationWarehouseCode, String destinationWarehouseName,
|
||||||
int packageCount, String deliveryMethod, boolean needRelabel, String relabelNo,
|
int packageCount, String deliveryMethod, boolean needRelabel, String relabelNo,
|
||||||
String relabelStatus, String relabelFulfillmentStatus,
|
String relabelStatus, String relabelFulfillmentStatus,
|
||||||
String status, LocalDateTime estimatedArrivalAt, LocalDateTime createdAt) {}
|
String status, LocalDateTime estimatedArrivalAt, LocalDateTime createdAt,
|
||||||
|
LocalDateTime reviewedAt, LocalDateTime measuredAt, LocalDateTime outboundAt) {}
|
||||||
public record Detail(Long id, String transferNo, Long inboundOrderId, String inboundCode,
|
public record Detail(Long id, String transferNo, Long inboundOrderId, String inboundCode,
|
||||||
Long lastlegOrderId, String lastlegOrderNo, String orderType, String orderStatus,
|
Long lastlegOrderId, String lastlegOrderNo, String orderType, String orderStatus,
|
||||||
String status,
|
String status,
|
||||||
|
|||||||
+9
@@ -10,6 +10,15 @@ import java.util.List;
|
|||||||
|
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface WarehouseTransferPalletMapper extends BaseMapper<WarehouseTransferPallet> {
|
public interface WarehouseTransferPalletMapper extends BaseMapper<WarehouseTransferPallet> {
|
||||||
|
record MeasurementTime(Long transferOrderId, java.time.LocalDateTime measuredAt) {}
|
||||||
|
|
||||||
|
@Select("<script>SELECT p.transfer_order_id AS transferOrderId,MAX(p.completed_at) AS measuredAt " +
|
||||||
|
"FROM ll_warehouse_transfer_pallet p JOIN ll_warehouse_transfer_order t " +
|
||||||
|
"ON t.id=p.transfer_order_id AND t.customer_id=p.customer_id " +
|
||||||
|
"WHERE t.id IN <foreach collection='orderIds' item='id' open='(' separator=',' close=')'>#{id}</foreach> " +
|
||||||
|
"AND p.completed_at IS NOT NULL GROUP BY p.transfer_order_id</script>")
|
||||||
|
List<MeasurementTime> measurementTimes(@Param("orderIds") List<Long> orderIds);
|
||||||
|
|
||||||
@Select("SELECT * FROM ll_warehouse_transfer_pallet WHERE customer_id=#{customerId} AND transfer_order_id=#{transferOrderId} ORDER BY sequence_no")
|
@Select("SELECT * FROM ll_warehouse_transfer_pallet WHERE customer_id=#{customerId} AND transfer_order_id=#{transferOrderId} ORDER BY sequence_no")
|
||||||
List<WarehouseTransferPallet> listOrder(@Param("customerId") String customerId,
|
List<WarehouseTransferPallet> listOrder(@Param("customerId") String customerId,
|
||||||
@Param("transferOrderId") Long transferOrderId);
|
@Param("transferOrderId") Long transferOrderId);
|
||||||
|
|||||||
+11
-2
@@ -428,6 +428,7 @@ public class WarehouseTransferService {
|
|||||||
.orderByDesc(WarehouseTransferOrder::getCreatedAt).orderByDesc(WarehouseTransferOrder::getId);
|
.orderByDesc(WarehouseTransferOrder::getCreatedAt).orderByDesc(WarehouseTransferOrder::getId);
|
||||||
Page<WarehouseTransferOrder> result = transfers.selectPage(Page.of(query.page(), query.size()), wrapper);
|
Page<WarehouseTransferOrder> result = transfers.selectPage(Page.of(query.page(), query.size()), wrapper);
|
||||||
Map<String, RelabelApplication> relabelApplicationsByNo = relabelApplications(result.getRecords());
|
Map<String, RelabelApplication> relabelApplicationsByNo = relabelApplications(result.getRecords());
|
||||||
|
Map<Long, LocalDateTime> measurementTimes = measurementTimes(result.getRecords());
|
||||||
List<WarehouseTransferResponses.Summary> records = result.getRecords().stream().map(value ->
|
List<WarehouseTransferResponses.Summary> records = result.getRecords().stream().map(value ->
|
||||||
new WarehouseTransferResponses.Summary(value.getId(), value.getTransferNo(), value.getInboundCode(),
|
new WarehouseTransferResponses.Summary(value.getId(), value.getTransferNo(), value.getInboundCode(),
|
||||||
value.getLastlegOrderId(), value.getLastlegOrderNo(), value.getOperatingWarehouseId(),
|
value.getLastlegOrderId(), value.getLastlegOrderNo(), value.getOperatingWarehouseId(),
|
||||||
@@ -439,7 +440,8 @@ public class WarehouseTransferService {
|
|||||||
value.getRelabelNo() == null || relabelApplicationsByNo.get(value.getRelabelNo()) == null
|
value.getRelabelNo() == null || relabelApplicationsByNo.get(value.getRelabelNo()) == null
|
||||||
? null : relabelApplicationsByNo.get(value.getRelabelNo()).getFulfillmentStatus(),
|
? null : relabelApplicationsByNo.get(value.getRelabelNo()).getFulfillmentStatus(),
|
||||||
value.getStatus(),
|
value.getStatus(),
|
||||||
value.getEstimatedArrivalAt(), value.getCreatedAt())).toList();
|
value.getEstimatedArrivalAt(), value.getCreatedAt(), value.getReviewedAt(),
|
||||||
|
measurementTimes.get(value.getId()), value.getOutboundAt())).toList();
|
||||||
return new PageResult<>(records, result.getCurrent(), result.getSize(), result.getTotal(), result.getPages());
|
return new PageResult<>(records, result.getCurrent(), result.getSize(), result.getTotal(), result.getPages());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1320,10 +1322,17 @@ public class WarehouseTransferService {
|
|||||||
relabel == null ? null : relabel.getStatus(),
|
relabel == null ? null : relabel.getStatus(),
|
||||||
relabel == null ? null : relabel.getFulfillmentStatus(),
|
relabel == null ? null : relabel.getFulfillmentStatus(),
|
||||||
value.getStatus(),
|
value.getStatus(),
|
||||||
value.getEstimatedArrivalAt(), value.getCreatedAt());
|
value.getEstimatedArrivalAt(), value.getCreatedAt(), value.getReviewedAt(), null, value.getOutboundAt());
|
||||||
}).toList();
|
}).toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Map<Long, LocalDateTime> measurementTimes(List<WarehouseTransferOrder> transferOrders) {
|
||||||
|
if (transferOrders.isEmpty()) return Map.of();
|
||||||
|
return transferPallets.measurementTimes(transferOrders.stream().map(WarehouseTransferOrder::getId).toList())
|
||||||
|
.stream().collect(Collectors.toMap(WarehouseTransferPalletMapper.MeasurementTime::transferOrderId,
|
||||||
|
WarehouseTransferPalletMapper.MeasurementTime::measuredAt));
|
||||||
|
}
|
||||||
|
|
||||||
private Map<String, RelabelApplication> relabelApplications(List<WarehouseTransferOrder> transferOrders) {
|
private Map<String, RelabelApplication> relabelApplications(List<WarehouseTransferOrder> transferOrders) {
|
||||||
Set<String> relabelNos = transferOrders.stream().map(WarehouseTransferOrder::getRelabelNo)
|
Set<String> relabelNos = transferOrders.stream().map(WarehouseTransferOrder::getRelabelNo)
|
||||||
.filter(StringUtils::hasText).collect(Collectors.toSet());
|
.filter(StringUtils::hasText).collect(Collectors.toSet());
|
||||||
|
|||||||
+12
@@ -126,6 +126,12 @@ class WarehouseTransferServiceTest {
|
|||||||
WarehouseTransferOrder transfer = transfer(WarehouseTransferService.WAIT_RELABEL);
|
WarehouseTransferOrder transfer = transfer(WarehouseTransferService.WAIT_RELABEL);
|
||||||
transfer.setNeedRelabel(true);
|
transfer.setNeedRelabel(true);
|
||||||
transfer.setRelabelNo("RL-20260923-000001");
|
transfer.setRelabelNo("RL-20260923-000001");
|
||||||
|
var reviewedAt = LocalDateTime.of(2026, 10, 9, 15, 36, 14);
|
||||||
|
var measuredAt = reviewedAt.plusNanos(300_000_000);
|
||||||
|
var outboundAt = reviewedAt.plusSeconds(2);
|
||||||
|
transfer.setReviewedAt(reviewedAt); transfer.setOutboundAt(outboundAt);
|
||||||
|
when(transferPallets.measurementTimes(List.of(transfer.getId()))).thenReturn(List.of(
|
||||||
|
new WarehouseTransferPalletMapper.MeasurementTime(transfer.getId(), measuredAt)));
|
||||||
Page<WarehouseTransferOrder> resultPage = new Page<>(1, 20, 1);
|
Page<WarehouseTransferOrder> resultPage = new Page<>(1, 20, 1);
|
||||||
resultPage.setRecords(List.of(transfer));
|
resultPage.setRecords(List.of(transfer));
|
||||||
RelabelApplication relabel = new RelabelApplication();
|
RelabelApplication relabel = new RelabelApplication();
|
||||||
@@ -141,6 +147,9 @@ class WarehouseTransferServiceTest {
|
|||||||
assertEquals("RL-20260923-000001", result.records().get(0).relabelNo());
|
assertEquals("RL-20260923-000001", result.records().get(0).relabelNo());
|
||||||
assertEquals("COMPLETED", result.records().get(0).relabelStatus());
|
assertEquals("COMPLETED", result.records().get(0).relabelStatus());
|
||||||
assertEquals("READY_FOR_DISPATCH", result.records().get(0).relabelFulfillmentStatus());
|
assertEquals("READY_FOR_DISPATCH", result.records().get(0).relabelFulfillmentStatus());
|
||||||
|
assertEquals(reviewedAt, result.records().get(0).reviewedAt());
|
||||||
|
assertEquals(measuredAt, result.records().get(0).measuredAt());
|
||||||
|
assertEquals(outboundAt, result.records().get(0).outboundAt());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -157,6 +166,9 @@ class WarehouseTransferServiceTest {
|
|||||||
assertEquals(1, result.records().size());
|
assertEquals(1, result.records().size());
|
||||||
assertNull(result.records().get(0).relabelStatus());
|
assertNull(result.records().get(0).relabelStatus());
|
||||||
assertNull(result.records().get(0).relabelFulfillmentStatus());
|
assertNull(result.records().get(0).relabelFulfillmentStatus());
|
||||||
|
assertNull(result.records().get(0).reviewedAt());
|
||||||
|
assertNull(result.records().get(0).measuredAt());
|
||||||
|
assertNull(result.records().get(0).outboundAt());
|
||||||
verify(relabelApplications, never()).selectList(any());
|
verify(relabelApplications, never()).selectList(any());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user