diff --git a/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java b/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java index 6fcd493..bf1ae97 100644 --- a/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java +++ b/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java @@ -381,9 +381,10 @@ public class WorkServiceImplements implements IWorkService { * @param model 机型 */ private void findWorks(String workStation, List workFlows, String model, LocalDate currentWorkDate) { + String modelStr = Objects.equals(model, "MWL") ? "装载机" : "平地机"; //开始时间: LocalDateTime startTime = LocalDateTime.now(); - System.out.println("开始时间:" + startTime); + System.out.println("分析当日" + modelStr + "工作流,开始时间:" + startTime); // 查到当前站台所有的小工位 LambdaQueryWrapper stationConfigQueryWrapper = new LambdaQueryWrapper() .eq(StringUtils.isNotEmpty(workStation), WorkStationConfig::getWorkStation, workStation); @@ -496,9 +497,10 @@ public class WorkServiceImplements implements IWorkService { } //结束时间 LocalDateTime endTime = LocalDateTime.now(); + System.out.println("分析当日" + modelStr + "工作流,结束时间:" + endTime); // 用时 long duration = Duration.between(startTime, endTime).toMillis(); - logger.info("生成当天工作流耗时:{}ms", duration); + logger.info("分析当日{}工作流耗时:{}ms", modelStr, duration); } @@ -538,6 +540,7 @@ public class WorkServiceImplements implements IWorkService { public void createTempWorkFlows() { LocalDate currentWorkDate = getCurrentWorkDate(); if (!localWorkDateList.contains(currentWorkDate)) { + logger.info("非工作日,不创建工作流。"); return; } // 查找所有未锁定的拣选站台 @@ -547,6 +550,7 @@ public class WorkServiceImplements implements IWorkService { for (Stand stand : usableStands) { if (stand.getStandStatus() == 0) { // 存在站台处于可用状态,不创建工作流 + logger.info("存在站台处于可用状态,不创建工作流。"); return; } } @@ -617,10 +621,10 @@ public class WorkServiceImplements implements IWorkService { .in(KateDBS::getWorkOrder, workOrderList) .eq(KateDBS::getDbsStatus, 0)); } - logger.info("createTempWorkFlows 成功"); + logger.info("创建工作流成功,此次创建{}条。", finalWorkFlows.size()); } } else { - logger.info("createTempWorkFlows 为空"); + logger.info("未创建新的工作流。"); } } @@ -738,6 +742,7 @@ public class WorkServiceImplements implements IWorkService { List finalELocationConfigsOfFirst = new ArrayList<>();// 标签库位分配 // 下面开始分配首选工作 if (!needDistributeWorksOfFirst.isEmpty() && !firstWorkStandIds.isEmpty()) { + logger.info("开始分配首选机型。"); // 获取大盒子-订单的map Map> workFlowsByBigBoxMapOfFirst = new HashMap<>(); for (WorkFlow workFlow : needDistributeWorksOfFirst) { @@ -755,7 +760,7 @@ public class WorkServiceImplements implements IWorkService { bigBoxToGoodsTypeQtyMap.put(bigBox, goodsTypeQty); } // 根据物料种类数量对大盒子进行排序 - List sortedBoxedByGoodsTypeQty = bigBoxToGoodsTypeQtyMap.entrySet().stream().sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())).map(Map.Entry::getKey).toList(); + List sortedBoxesByGoodsTypeQty = bigBoxToGoodsTypeQtyMap.entrySet().stream().sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())).map(Map.Entry::getKey).toList(); // 每个站台包含的物料种类数量 Map> stationToGoodsTypeQtyMap = new HashMap<>(); // 每个站台分配的电子标签 @@ -782,14 +787,14 @@ public class WorkServiceImplements implements IWorkService { // 物料种类总数---这里存在一个分歧,大盒子之间的共通物料种类是否需要重复计算---CONFUSION int totalGoodsTypeQty = needDistributeWorksOfFirst.stream().map(WorkFlow::getGoodsId).distinct().toList().size(); // 物料种类数量平均值 - int goodsTypeQtyAverage = (int) Math.ceil(totalGoodsTypeQty / (double) standIds.size()); + int goodsTypeQtyAverage = (int) Math.ceil(totalGoodsTypeQty / (double) firstWorkStandIds.size()); // 查询出需要分配的工单的dbs List kateDBSS = kateDBSService.list(new LambdaQueryWrapper() .in(KateDBS::getWorkOrder, needDistributeWorksOfFirst.stream().map(WorkFlow::getWorkOrder).distinct().toList())); // 将这个工单的顺序号进行一个map Map workOrderToSequenceMap = kateDBSS.stream().collect(Collectors.toMap(KateDBS::getWorkOrder, KateDBS::getWorkSequence)); - for (String bigBox : sortedBoxedByGoodsTypeQty) { - // 找出这个站台下的工作流 + for (String bigBox : sortedBoxesByGoodsTypeQty) { + // 找出这个大盒子下的工作流 List thisBoxWorkFlows = workFlowsByBigBoxMapOfFirst.get(bigBox); if (thisBoxWorkFlows.isEmpty()) { // 当前大盒子没有工作流,跳过 @@ -897,12 +902,15 @@ public class WorkServiceImplements implements IWorkService { for (String standId : stationToELocationConfigsMap.keySet()) { finalELocationConfigsOfFirst.addAll(stationToELocationConfigsMap.get(standId)); } + } else { + logger.info("无法分配首选机型,可能是没有工作流或可用站台。"); } // 次选工作存储的信息 List finalGoodsToStationsOfNext = new ArrayList<>();// 物料分配 List finalELocationConfigsOfNext = new ArrayList<>();// 标签库位分配 // 处理次选工作 TODO 需要考虑一下优先分配和首选工作存在相同物料种类的大盒子 if (!needDistributeWorksOfNext.isEmpty() && !nextWorkStandIds.isEmpty()) { + logger.info("开始分配次选机型。"); // 获取大盒子-订单的map Map> workFlowsByBigBoxMapOfNext = new HashMap<>(); for (WorkFlow workFlow : needDistributeWorksOfNext) { @@ -920,7 +928,7 @@ public class WorkServiceImplements implements IWorkService { bigBoxToGoodsTypeQtyMap.put(bigBox, goodsTypeQty); } // 根据物料种类数量对大盒子进行排序 - List sortedBoxedByGoodsTypeQty = bigBoxToGoodsTypeQtyMap.entrySet().stream().sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())).map(Map.Entry::getKey).toList(); + List sortedBoxesByGoodsTypeQty = bigBoxToGoodsTypeQtyMap.entrySet().stream().sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())).map(Map.Entry::getKey).toList(); // 每个站台包含的物料种类数量 Map> stationToGoodsTypeQtyMap = new HashMap<>(); // 每个站台分配的电子标签 @@ -947,14 +955,14 @@ public class WorkServiceImplements implements IWorkService { // 物料种类总数---这里存在一个分歧,大盒子之间的共通物料种类是否需要重复计算---CONFUSION int totalGoodsTypeQty = needDistributeWorksOfNext.stream().map(WorkFlow::getGoodsId).distinct().toList().size(); // 物料种类数量平均值 - int goodsTypeQtyAverage = (int) Math.ceil(totalGoodsTypeQty / (double) standIds.size()); + int goodsTypeQtyAverage = (int) Math.ceil(totalGoodsTypeQty / (double) nextWorkStandIds.size()); // 查询出需要分配的工单的dbs List kateDBSS = kateDBSService.list(new LambdaQueryWrapper() .in(KateDBS::getWorkOrder, needDistributeWorksOfNext.stream().map(WorkFlow::getWorkOrder).distinct().toList())); // 将这个工单的顺序号进行一个map Map workOrderToSequenceMap = kateDBSS.stream().collect(Collectors.toMap(KateDBS::getWorkOrder, KateDBS::getWorkSequence)); - for (String bigBox : sortedBoxedByGoodsTypeQty) { - // 找出这个站台下的工作流 + for (String bigBox : sortedBoxesByGoodsTypeQty) { + // 找出这个大盒子下的工作流 List thisBoxWorkFlows = workFlowsByBigBoxMapOfNext.get(bigBox); if (thisBoxWorkFlows.isEmpty()) { // 当前大盒子没有工作流,跳过 @@ -1053,15 +1061,17 @@ public class WorkServiceImplements implements IWorkService { } // 替换 stationToGoodsToStationsMap.put(thisStandId, oldGoodsStationsMap.values().stream().toList()); - // 以下更新物料需求 - for (String standId : stationToGoodsToStationsMap.keySet()) { - finalGoodsToStationsOfNext.addAll(stationToGoodsToStationsMap.get(standId)); - } - // 以下更新电子标签配置 - for (String standId : stationToELocationConfigsMap.keySet()) { - finalELocationConfigsOfNext.addAll(stationToELocationConfigsMap.get(standId)); - } } + // 以下更新物料需求 + for (String standId : stationToGoodsToStationsMap.keySet()) { + finalGoodsToStationsOfNext.addAll(stationToGoodsToStationsMap.get(standId)); + } + // 以下更新电子标签配置 + for (String standId : stationToELocationConfigsMap.keySet()) { + finalELocationConfigsOfNext.addAll(stationToELocationConfigsMap.get(standId)); + } + } else { + logger.info("无法分配次选机型,可能是没有工作流或可用站台。"); } // 最终存储数据 @@ -1077,6 +1087,9 @@ public class WorkServiceImplements implements IWorkService { // 更新物料需求数据库 if (!finalGoodsToStations.isEmpty()) { goodsToStationService.saveOrUpdateBatch(finalGoodsToStations); + logger.info("添加新的站台物料需求成功。"); + } else { + logger.info("没有新的站台物料需求。"); } // 电子标签配置 if (!finalELocationConfigsOfFirst.isEmpty()) { @@ -1088,12 +1101,17 @@ public class WorkServiceImplements implements IWorkService { // 添加标签配置数据库 if (!finalELocationConfigs.isEmpty()) { eLocationConfigService.saveBatch(finalELocationConfigs); + logger.info("添加新的灯光配置成功。"); + } else { + logger.info("没有新的灯光配置。"); } // 更新工作流数据 if (!thisTimeDistributeWorkFlows.isEmpty()) { workFlowService.updateBatchById(thisTimeDistributeWorkFlows); + logger.info("分配工作完成,此次分配{}条。", thisTimeDistributeWorkFlows.size()); + } else { + logger.info("此次未执行分配。"); } - logger.info("分配工作完成"); } catch (Exception e) { logger.error("分配工作发生异常:{}", JSON.toJSONString(e)); // 回滚事务