fix: tolerate stale pallets in smart recommendation

This commit is contained in:
2026-09-14 15:01:05 +08:00
parent 1d258ab27b
commit febe265c50
3 changed files with 47 additions and 13 deletions
@@ -221,18 +221,20 @@ public interface DropshipPalletizationMapper {
SELECT p.id pallet_id,p.pallet_no,p.pallet_status,c.tenant_id account_id,c.inbound_id,o.order_id,o.order_no,
o.inbound_code,o.warehouse_id,o.channel_code,o.channel_name,o.destination_warehouse_id,
o.destination_code destination_warehouse_code,o.destination_name destination_warehouse_name,o.customer_name,
s.inbound_detail_id,s.sku_code,MAX(s.cargo_name) cargo_name,COUNT(DISTINCT c.id) carton_count,
SUM(s.actual_quantity) actual_sku_quantity,
COALESCE(s.inbound_detail_id,c.inbound_detail_id) inbound_detail_id,
COALESCE(s.sku_code,c.sku_code) sku_code,MAX(COALESCE(s.cargo_name,c.cargo_name)) cargo_name,
COUNT(DISTINCT c.id) carton_count,SUM(COALESCE(s.actual_quantity,c.actual_sku_quantity,0)) actual_sku_quantity,
COALESCE(o.actual_gross_weight_kg/NULLIF(o.total_package_count,0),0) unit_gross_weight_kg,
COALESCE(o.actual_net_weight_kg/NULLIF(o.total_package_count,0),0) unit_net_weight_kg,
COALESCE(o.actual_volume_cbm/NULLIF(o.total_package_count,0),0) unit_volume_cbm
FROM fl_dropship_pallet p JOIN fl_dropship_pallet_carton c ON c.pallet_id=p.id
JOIN fl_dropship_pallet_carton_sku s ON s.carton_id=c.id
LEFT JOIN fl_dropship_pallet_carton_sku s ON s.carton_id=c.id
JOIN fl_inbound_order o ON o.id=c.inbound_id AND o.tenant_id=c.tenant_id WHERE p.id=#{palletId}
GROUP BY p.id,p.pallet_no,p.pallet_status,c.tenant_id,c.inbound_id,o.order_id,o.order_no,o.inbound_code,
o.warehouse_id,o.channel_code,o.channel_name,o.destination_warehouse_id,o.destination_code,o.destination_name,
o.customer_name,s.inbound_detail_id,s.sku_code,o.actual_gross_weight_kg,o.actual_net_weight_kg,o.actual_volume_cbm,o.total_package_count
ORDER BY s.inbound_detail_id
o.customer_name,COALESCE(s.inbound_detail_id,c.inbound_detail_id),COALESCE(s.sku_code,c.sku_code),
o.actual_gross_weight_kg,o.actual_net_weight_kg,o.actual_volume_cbm,o.total_package_count
ORDER BY inbound_detail_id
""") List<PalletLine> sealedPalletLines(@Param("palletId") long palletId);
@Getter @Setter class TaskRow { private Long id,tenantId,inboundId,warehouseId,assigneeId; private String inboundCode,customerName,warehouseName,taskStatus,assigneeName,processStatus,fulfillmentType; private Integer totalCartons,countedCartons,allocatedCartons,discrepancyCartons,expectedPalletCount,version; }
@@ -931,6 +931,12 @@ public class SmartLoadingService {
if ("SEALED_PALLET".equals(candidate.unitType())) {
if (candidate.palletId() == null || !visitedPallets.add(candidate.palletId())
|| !Boolean.TRUE.equals(candidate.canAssign())) continue;
List<com.baiyue.firstleg.mapper.DropshipPalletizationMapper.PalletLine> currentPalletLines =
dropshipPallets.sealedPalletLines(candidate.palletId());
if (currentPalletLines.isEmpty()
|| currentPalletLines.stream().anyMatch(line -> !"SEALED".equals(line.getPalletStatus()))) {
continue;
}
int fitting = fittingBoxes(booking, repository.items(planId), candidate.availablePackageCount(),
candidate.averageUnitVolumeCbm(), candidate.unitGrossWeightKg());
if (fitting != candidate.availablePackageCount()) continue;