diff --git a/youchain-system/src/main/java/com/youchain/appupdate/service/impl/BydAppServiceImpl.java b/youchain-system/src/main/java/com/youchain/appupdate/service/impl/BydAppServiceImpl.java index 154d9f2..df4ce78 100644 --- a/youchain-system/src/main/java/com/youchain/appupdate/service/impl/BydAppServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/appupdate/service/impl/BydAppServiceImpl.java @@ -434,11 +434,11 @@ public class BydAppServiceImpl implements BydAppService { throw new BadRequestException(dstStockCode + "目标托盘没有在" + areaName); } - if (BizStatus.XJ.equals(task.getItemKey().getItem().getGoodType())) { +/* if (BizStatus.XJ.equals(task.getItemKey().getItem().getGoodType())) { if (!dstStockCode.equals(pick.getStock())) { throw new BadRequestException(pick.getGdCode() + "工单只能放入同一个货架! 请放入" + pick.getCode() + "货架!"); } - } + }*/ return dstStock; } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java b/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java index 99c759d..799e11e 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java @@ -128,6 +128,16 @@ public interface AgvTaskService { */ Boolean findByEndSlotCode(String endSlotCode, String type, String jobType); + /** + * 根据终点查询是否有重复任务 + * + * @param endSlotCode 点位 + * @param type 任务类型 + * @param jobType 作业类型 + */ + Boolean isByFxEndSlotCode(String endSlotCode, String type, String jobType); + + /** * 叉车任务一个一个下发 * diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java index c8fb55a..eca6dc2 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java @@ -166,6 +166,18 @@ public class AgvTaskServiceImpl implements AgvTaskService { return agvTaskList.isEmpty(); } + @Override + public Boolean isByFxEndSlotCode(String endSlotCode, String type, String jobType) { + String hql = "select COUNT(agv.id) from AgvTask agv " + + " where agv.endSlotCode='" + endSlotCode + "' " + + " and agv.type='" + type + "' " + + " and agv.jobType='" + jobType + "' " + + " and agv.status not in ('OPEN','FINISH','CANCEL') "; + Query query = entityMapper.createQuery(hql); + Long count = (Long) query.getSingleResult(); + return count<2; + } + @Override public Boolean findByCcEndSlotCode(String endSlotCode, String type, String jobType) { String hql = " from AgvTask agv " + diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/KMReServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/KMReServiceImpl.java index d9ef157..c3203fa 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/KMReServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/KMReServiceImpl.java @@ -773,24 +773,29 @@ public class KMReServiceImpl implements KMReService { */ private void handleJl(Stock stock, Point endPoint, AgvTask agvTask) { + // 查询与当前 AGV 任务关联的任务列表 List taskList = taskService.findTaskByCallAgvTask(agvTask.getId()); + + // 根据任务中的物料类型,确定对应的区域名称列表 List areaNames = taskList.stream() - .map(task -> task.getItemKey().getItem()) - .map(item -> BizStatus.XJ.equals(item.getGoodType()) ? AreaNameDic.XJFBCQ : AreaNameDic.DJFBCQ) + .map(task -> { + Item item = task.getItemKey().getItem(); + return BizStatus.XJ.equals(item.getGoodType()) ? AreaNameDic.XJFBCQ : AreaNameDic.DJFBCQ; + }) .collect(Collectors.toList()); - List allInventories = new ArrayList<>(); - for (String areaName : areaNames) { - List inventoryList = inventoryRepository.queryInventory(stock.getId(), null, null, areaName, stock.getDept().getId()); - allInventories.addAll(inventoryList); - } - // 删除所有查询到的库存 + + // 查询所有区域的库存列表 + List allInventories = areaNames.stream() + .flatMap(areaName -> inventoryRepository.queryInventory(stock.getId(), null, null, areaName, stock.getDept().getId()).stream()) + .collect(Collectors.toList()); + + // 如果库存列表不为空,删除所有库存记录 if (!allInventories.isEmpty()) { inventoryRepository.deleteAll(allInventories); } - for (Task task : taskList) { - //回传MES - pickService.returnPickByTask(task); - } + + // 回传 MES + taskList.forEach(pickService::returnPickByTask); //点位占用 pointService.usedPoint(endPoint); @@ -798,26 +803,43 @@ public class KMReServiceImpl implements KMReService { //容器占用 stockService.usedStock(stock, endPoint, BaseStatus.USED); + // 根据叫料单号查找 Pick 对象 Pick pick = pickService.findByPickCode(agvTask.getLineSlotCode()); + + // 刷新 Pick 对象的状态 pickService.refreshPickStatus(pick); //清空叫料点,等待下一次叫料 + updateCallPoint(pick, endPoint); + + } + + /** + * 更新 Pick 对象的叫料点信息 + * + * @param pick Pick 对象 + * @param endPoint 结束点位 + */ + private void updateCallPoint(Pick pick, Point endPoint) { + // 将叫料点字符串拆分为集合 Set endPointList = new HashSet<>(Arrays.asList(pick.getCallPoint().split(","))); + // 移除结束点位的代码 boolean isRemoved = endPointList.remove(endPoint.getCode()); if (isRemoved) { - String result = endPointList.stream().collect(Collectors.joining(", ")); + // 将剩余的叫料点代码用逗号连接成字符串 + String result = endPointList.stream().collect(Collectors.joining(",")); if (!result.isEmpty()) { + // 更新叫料点信息,设置为还有叫料 pick.setCallPoint(result); pick.setIsCall(true); - pickService.update(pick); } else { + // 清空叫料点信息,设置为无叫料 pick.setCallPoint(null); pick.setIsCall(false); - pickService.update(pick); } - + // 更新 Pick 对象 + pickService.update(pick); } - } /** diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MesServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MesServiceImpl.java index c2c5deb..c35caab 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MesServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MesServiceImpl.java @@ -360,10 +360,6 @@ public class MesServiceImpl implements MesService { return srcPointCode + "点位不存在,请核实!"; } - // 验证终点是否有任务 - if (!agvTaskService.isEndPointAvailable(dstPointCode, BizStatus.Fx_Off_Line, "ROLLER_MOVE")) { - return dstPointCode + "点位有任务,请稍后再试!"; - } // 生成任务 AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Fx_Off_Line, null, srcPointCode, dstPointCode, "ROLLER_MOVE"); diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/TaskServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/TaskServiceImpl.java index 5038c8d..13501be 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/TaskServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/TaskServiceImpl.java @@ -279,6 +279,7 @@ public class TaskServiceImpl implements TaskService { agvTask.setLineSlotCode(pick.getCode()); agvTaskService.update(agvTask);*/ List endPoints = getValuesFromMap(endPointList, pointMap); + int taskCount = 0; for (Task task : taskList) { for (String endPointCode : endPoints) { if (agvTaskService.isEndPointAvailable(endPointCode, BizStatus.CALL_PICK, "RACK_MOVE")) { @@ -288,9 +289,17 @@ public class TaskServiceImpl implements TaskService { task.setCallAgvTaskId(agvTask.getId()); taskRepository.save(task); } + taskCount++; + if (taskCount >= taskList.size()) { + break; // 当处理的任务数量达到 taskList 的长度时,跳出内层循环 + } + } + if (taskCount >= taskList.size()) { + break; // 当处理的任务数量达到 taskList 的长度时,跳出外层循环 } } + } public static List getValuesFromMap(Set endPointList, Map map) { diff --git a/youchain-system/src/main/java/com/youchain/modules/quartz/task/fxTask.java b/youchain-system/src/main/java/com/youchain/modules/quartz/task/fxTask.java index 7afa7f2..a5ff6f8 100644 --- a/youchain-system/src/main/java/com/youchain/modules/quartz/task/fxTask.java +++ b/youchain-system/src/main/java/com/youchain/modules/quartz/task/fxTask.java @@ -50,6 +50,11 @@ public class fxTask { } private void processAgvTask(AgvTask agvTask) { - kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskGtJson(agvTask)); + if(agvTaskService.isByFxEndSlotCode(agvTask.getEndSlotCode(), BizStatus.Fx_Off_Line,"ROLLER_MOVE")){ + kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskGtJson(agvTask)); + }else{ + throw new BadRequestException("任务排队中"); + } + } } diff --git a/youchain-system/src/main/java/com/youchain/modules/quartz/task/pickTask.java b/youchain-system/src/main/java/com/youchain/modules/quartz/task/pickTask.java index 8e19485..0761598 100644 --- a/youchain-system/src/main/java/com/youchain/modules/quartz/task/pickTask.java +++ b/youchain-system/src/main/java/com/youchain/modules/quartz/task/pickTask.java @@ -49,7 +49,7 @@ public class pickTask { */ public void allocatePick() { List statuses = Arrays.asList(BizStatus.OPEN, BizStatus.ASSIGN, BizStatus.PICKUP); - List pickList = pickService.findByPickStatus(statuses, null); + List pickList = pickService.findByPickStatus(statuses, true); if (pickList.isEmpty()) { throw new BadRequestException("无待分配的成品出库单,分配失败!"); } diff --git a/youchain-system/src/test/java/com/youchain/EladminSystemApplicationTests.java b/youchain-system/src/test/java/com/youchain/EladminSystemApplicationTests.java index 2f14806..15a5035 100644 --- a/youchain-system/src/test/java/com/youchain/EladminSystemApplicationTests.java +++ b/youchain-system/src/test/java/com/youchain/EladminSystemApplicationTests.java @@ -26,7 +26,7 @@ public class EladminSystemApplicationTests { // 创建一个 HashSet 实例 Set hashSet = new HashSet<>(); // 向集合中添加元素 - hashSet.add("QXJL001"); + hashSet.add("QXJL002"); hashSet.add("QXJL002"); // 打印原始集合