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 06555ed..9ee43ee 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 @@ -108,6 +108,14 @@ public interface AgvTaskService { */ List findRepeat(String stockCode, String srcPointCode, String endPointCode); + /** + * 根据终点查询是否有重复任务 + * @param stockCode 容器 + */ + Boolean findByEndSlotCode(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 dee7056..c653174 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 @@ -34,6 +34,8 @@ import org.springframework.data.domain.Pageable; import java.util.*; import java.io.IOException; import java.util.stream.Collectors; +import javax.persistence.EntityManager; +import javax.persistence.Query; import javax.servlet.http.HttpServletResponse; @@ -50,6 +52,7 @@ public class AgvTaskServiceImpl implements AgvTaskService { private final AgvTaskRepository agvTaskRepository; private final AgvTaskMapper agvTaskMapper; + private final EntityManager entityMapper; @Override public Map queryAll(AgvTaskQueryCriteria criteria, Pageable pageable) { @@ -139,6 +142,21 @@ public class AgvTaskServiceImpl implements AgvTaskService { return agvTaskRepository.findRepeat(stockCode, srcPointCode, endPointCode); } + @Override + public Boolean findByEndSlotCode(String endSlotCode, String type, String jobType) { + String hql = " from AgvTask agv " + + " where agv.endSlotCode='" + endSlotCode + "' " + + " and agv.type='" + type + "' " + + " and agv.jobType='" + jobType + "' " + + " and agv.status in ('ATCALL','UP_CONTAINER') "; + Query query = entityMapper.createQuery(hql); + List agvTaskList = query.getResultList(); + if (agvTaskList.isEmpty()) { + return true; + } + return false; + } + @Override public List findOpenByAgvTask() { return agvTaskRepository.findOpenByAgvTask(); 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 6b9130a..0a5b32d 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 @@ -266,18 +266,20 @@ public class MesServiceImpl implements MesService { Point endPoint = pointService.validatePoint(pointCode);//终点 - // 创建并下发任务 - List agvTaskList = agvTaskService.findRepeat(emptyStock.getCode(),srcPoint.getCode(),endPoint.getCode()); - if (agvTaskList.isEmpty()) { - //生成任务 - AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Up, emptyStock, srcPoint, endPoint, "RACK_MOVE"); - - // 更新点位状态 - pointService.usedPoint(endPoint); - - //下发任务 - kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskHjJson(agvTask)); + if (!agvTaskService.findByEndSlotCode(endPoint.getCode(), BizStatus.Cp_Off_Up, "RACK_MOVE")) { + // 直接在条件判断为false时抛出异常,表示该点位有任务 + throw new BadRequestException(endPoint.getCode() + "点位有任务,请稍后再试!"); } + + //生成任务 + AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Up, emptyStock, srcPoint, endPoint, "RACK_MOVE"); + + // 更新点位状态 + pointService.usedPoint(endPoint); + + //下发任务 + kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskHjJson(agvTask)); + } private synchronized void moveCpOffLine(TransTask transTask) { @@ -291,22 +293,20 @@ public class MesServiceImpl implements MesService { throw new BadRequestException("成品入库区没有空闲点位!"); } Point endPoint = endPointList.get(0); - // 创建并下发任务 - List agvTaskList = agvTaskService.findRepeat(stock.getCode(),srcPoint.getCode(),endPoint.getCode()); - if (agvTaskList.isEmpty()) { - AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Line, stock, srcPoint, endPoint, "RACK_MOVE"); - //占用容器 - stockService.usedStock(stock, srcPoint, BaseStatus.USED); - - // 更新点位状态 - pointService.usedPoint(endPoint); - - //下发任务 - kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskHjJson(agvTask)); + if (!agvTaskService.findByEndSlotCode(endPoint.getCode(), BizStatus.Cp_Off_Line, "RACK_MOVE")) { + // 直接在条件判断为false时抛出异常,表示该点位有任务 + throw new BadRequestException(endPoint.getCode() + "点位有任务,请稍后再试!"); } - + //创建并下发任务 + AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Line, stock, srcPoint, endPoint, "RACK_MOVE"); + // 更新点位状态 + pointService.usedPoint(endPoint); + //占用容器 + stockService.usedStock(stock, srcPoint, BaseStatus.USED); + //下发任务 + kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskHjJson(agvTask)); } private void moveFxOffLine(TransTask transTask) {