This commit is contained in:
2026-08-07 16:02:42 +08:00
parent 3f597677fe
commit ba5bad4429
6 changed files with 224 additions and 9 deletions
@@ -25,7 +25,7 @@ import java.util.Set;
/** 首次生成后不可变的箱号分配;重打和测量解析只读取该映射。 */
@Service
public class InboundCartonLabelService {
public class InboundCartonLabelService implements CartonLabelBindingResolver {
private static final int MAX_LABELS = 2000;
private static final int MAX_QR_CODE_POINTS = 34;
private static final Set<String> ALLOCATABLE_STATUSES = Set.of("WAIT_MEASURE", "MEASURING");
@@ -82,16 +82,29 @@ public class InboundCartonLabelService {
batch.totalCount(), labels);
}
public InboundCartonLabels.Resolution resolveByBoxCode(long tenantId, String boxCode) {
@Override
public CartonLabelBindingResolver.Binding resolveByBoxCode(long tenantId, String boxCode) {
InboundCartonLabelEntity label = requireByBoxCode(tenantId, boxCode);
return new CartonLabelBindingResolver.Binding(label.getInboundId(), label.getInboundDetailId(),
label.getInboundCode(), label.getCartonIndex(), label.getTotalCartonCount(),
label.getBoxSpecification());
}
public InboundCartonLabels.Resolution resolveDetailsByBoxCode(long tenantId, String boxCode) {
InboundCartonLabelEntity label = requireByBoxCode(tenantId, boxCode);
return new InboundCartonLabels.Resolution(label.getInboundId(), label.getOrderId(),
label.getInboundDetailId(), label.getBoxCode(), label.getTotalCartonCount(),
label.getCartonIndex(), label.getCargoItemNo(), label.getCargoName(),
label.getBoxSpecification());
}
private InboundCartonLabelEntity requireByBoxCode(long tenantId, String boxCode) {
if (tenantId <= 0 || !StringUtils.hasText(boxCode)) {
throw new BizException(ResultCode.BAD_REQUEST, "客户ID和箱号不能为空");
}
InboundCartonLabelEntity label = repository.findByBoxCode(tenantId, boxCode.trim());
if (label == null) throw new BizException(ResultCode.NOT_FOUND, "箱号不存在");
return new InboundCartonLabels.Resolution(label.getInboundId(), label.getOrderId(),
label.getInboundDetailId(), label.getBoxCode(), label.getTotalCartonCount(),
label.getCartonIndex(), label.getCargoItemNo(), label.getCargoName(),
label.getBoxSpecification());
return label;
}
private List<OrderCargoClient.CargoLabelBinding> loadCargoes(InboundOrderEntity inbound) {
@@ -105,8 +118,10 @@ public class InboundCartonLabelService {
throw new BizException(ResultCode.VALIDATION_FAILED, "订单没有可生成唛头的货物明细");
}
return response.data().stream()
.sorted(java.util.Comparator.comparing(OrderCargoClient.CargoLabelBinding::itemNo)
.thenComparing(OrderCargoClient.CargoLabelBinding::cargoId))
.sorted(java.util.Comparator.comparing(OrderCargoClient.CargoLabelBinding::itemNo,
java.util.Comparator.nullsLast(Integer::compareTo))
.thenComparing(OrderCargoClient.CargoLabelBinding::cargoId,
java.util.Comparator.nullsLast(Long::compareTo)))
.toList();
} catch (FeignException exception) {
throw new BizException(ResultCode.SERVICE_UNAVAILABLE, "订单服务暂不可用,无法生成唛头");