diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IOrderBoxServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IOrderBoxServiceImpl.java index 55184527..00925ccc 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IOrderBoxServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/IOrderBoxServiceImpl.java @@ -1050,10 +1050,7 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { // 计算总重量 & 查询订单列表 BigDecimal totalWeight = calculateOrderCardNoTotalWeight(cardNoList); - List orderList = yieldOrderService.list( - Wrappers.lambdaQuery(YieldOrder.class) - .in(YieldOrder::getCardNo, cardNoList) - ); + List orderList = queryYieldOrders(cardNoList); // 组装返回对象 BoxbarcodeDetailsVO detailsVO = new BoxbarcodeDetailsVO(); @@ -1071,10 +1068,26 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { //判断是否是镀后库作业中心 if (DistinguishRegionsEnum.includeByWcName(workCenter.getWcName())) { List yieldOrderList = yieldOrderService.list(new LambdaQueryWrapper().eq(YieldOrder::getCardNo, orderList.get(0).getCardNo())); - String code = DistinguishRegionsEnum.wcNameByCode(workCenter.getWcName()); - String logisticsAnagementRegion = DictCache.getValue(code, yieldOrderList.get(0).getUseDept()); - detailsVO.setStationRegion(logisticsAnagementRegion); - return R.data(detailsVO); + if (yieldOrderList!=null&&yieldOrderList.size()!=0) { + String code = DistinguishRegionsEnum.wcNameByCode(workCenter.getWcName()); + String logisticsAnagementRegion = DictCache.getValue(code, yieldOrderList.get(0).getUseDept()); + if (!logisticsAnagementRegion.isEmpty()) { + detailsVO.setStationRegion(logisticsAnagementRegion); + return R.data(detailsVO); + } + + } + List yieldOrderList1 = prYieldOrderService.list(new LambdaQueryWrapper().eq(PrYieldOrder::getCardNo, orderList.get(0).getCardNo())); + if (yieldOrderList1!=null&&yieldOrderList1.size()!=0) { + String code = DistinguishRegionsEnum.wcNameByCode(workCenter.getWcName()); + String logisticsAnagementRegion = DictCache.getValue(code, yieldOrderList1.get(0).getUseDept()); + if (!logisticsAnagementRegion.isEmpty()) { + detailsVO.setStationRegion(logisticsAnagementRegion); + return R.data(detailsVO); + } + + } + } // 设置工位区域 List stationCenterList = stationCenterService.list( @@ -1096,6 +1109,64 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { return R.data(detailsVO); } + /** + * 查询订单列表:先查YieldOrder,查不到的再去查PrYieldOrder并转换 + * + * @param cardNoList 流程卡号列表 + * @return 合并后的YieldOrder列表 + */ + private List queryYieldOrders(List cardNoList) { + // 1. 查询YieldOrder + List yieldOrderList = yieldOrderService.list( + Wrappers.lambdaQuery(YieldOrder.class) + .in(YieldOrder::getCardNo, cardNoList) + ); + + // 2. 找到未查询到的cardNo + Set foundCardNos = yieldOrderList.stream() + .map(YieldOrder::getCardNo) + .collect(Collectors.toSet()); + List missingCardNos = cardNoList.stream() + .filter(cardNo -> !foundCardNos.contains(cardNo)) + .collect(Collectors.toList()); + + // 3. 如果有缺失的,查询PrYieldOrder并转换 + if (!missingCardNos.isEmpty()) { + List prYieldOrderList = prYieldOrderService.list( + Wrappers.lambdaQuery(PrYieldOrder.class) + .in(PrYieldOrder::getCardNo, missingCardNos) + ); + + // 转换为YieldOrder + List convertedList = prYieldOrderList.stream() + .map(this::convertToYieldOrder) + .collect(Collectors.toList()); + + // 4. 合并结果 + yieldOrderList.addAll(convertedList); + } + + return yieldOrderList; + } + + /** + * 将PrYieldOrder转换为YieldOrder + * + * @param prYieldOrder 生产报工订单 + * @return YieldOrder + */ + private YieldOrder convertToYieldOrder(PrYieldOrder prYieldOrder) { + YieldOrder yieldOrder = new YieldOrder(); + // 映射字段:流程卡号、车间订单号、零件号、零件名称 + yieldOrder.setCardNo(prYieldOrder.getCardNo()); + yieldOrder.setYoCode(prYieldOrder.getYoCode()); + yieldOrder.setPartCode(prYieldOrder.getPartCode()); + yieldOrder.setPartName(prYieldOrder.getPartName()); + yieldOrder.setActualWeighing(new BigDecimal(0)); + // 其他字段保持默认null + return yieldOrder; + } + @Override public R getStationNameBoxBarcode(String stationCode) { R stationR = stationService.getStationName(stationCode);