| | |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.entity.BasShuttle; |
| | | import com.zy.asrs.entity.BasShuttleOpt; |
| | | import com.zy.asrs.mapper.BasShuttleMapper; |
| | | import com.zy.asrs.service.BasShuttleOptService; |
| | | import com.zy.asrs.service.BasShuttleService; |
| | | import com.zy.common.model.NavigateNode; |
| | |
| | | shuttleProtocol.setPakMk(true); |
| | | } |
| | | |
| | | //四向穿梭车空闲、有任务且标记为true,需要执行任务的下一条指令 |
| | | if (shuttleProtocol.getBusyStatusType() == ShuttleStatusType.IDLE && shuttleProtocol.getTaskNo() != 0 && shuttleProtocol.getPakMk()) { |
| | | //四向穿梭车空闲、有任务、标记为true、存在任务指令,需要执行任务的下一条指令 |
| | | if (shuttleProtocol.getBusyStatusType() == ShuttleStatusType.IDLE |
| | | && shuttleProtocol.getTaskNo() != 0 |
| | | && shuttleProtocol.getPakMk() |
| | | && shuttleProtocol.getAssignCommand() != null) { |
| | | //执行下一步指令 |
| | | executeWork(shuttleProtocol.getAssignCommand()); |
| | | } |
| | |
| | | //将此map存入redis中 |
| | | HashMap<String, Object> map = new HashMap<>(); |
| | | |
| | | if (assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_IN.id.shortValue() |
| | | || assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_OUT.id.shortValue()) { |
| | | //入库或出库模式,计算路径 |
| | | //计算路径 |
| | | List<NavigateNode> calc = NavigateUtils.calc(assignCommand.getSourceLocNo(), assignCommand.getLocNo(), assignCommand.getTaskMode().intValue()); |
| | | if (calc != null) { |
| | |
| | | throw new Exception("未能找到运行路径"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | //四向穿梭车号 |
| | | map.put("shuttle_no", assignCommand.getShuttleNo()); |
| | |
| | | map.put("assignCommand", assignCommand); |
| | | shuttleProtocol.setTaskNo(assignCommand.getTaskNo()); |
| | | shuttleProtocol.setAssignCommand(assignCommand); |
| | | shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING); |
| | | //任务数据保存到redis |
| | | redisUtil.set("wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(map)); |
| | | //执行下发任务 |
| | |
| | | if (assignCommand == null) { |
| | | return false; |
| | | } |
| | | |
| | | //将标记置为false(防止重发) |
| | | shuttleProtocol.setPakMk(false); |
| | | |
| | | Object o = redisUtil.get("wrk_no_" + assignCommand.getTaskNo()); |
| | | if (o == null) { |
| | | return false; |
| | | } |
| | | HashMap map = JSON.parseObject(o.toString(), HashMap.class); |
| | | //当前步序 |
| | | int commandStep = Integer.parseInt(map.get("commandStep").toString()); |
| | |
| | | shuttleProtocol.setTaskNo((short) 0); |
| | | //标记复位 |
| | | shuttleProtocol.setPakMk(true); |
| | | //任务指令清零 |
| | | shuttleProtocol.setAssignCommand(null); |
| | | break; |
| | | default: |
| | | } |
| | |
| | | return false; |
| | | } else { |
| | | News.info("四向穿梭车命令下发成功,穿梭车号={},任务数据={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); |
| | | |
| | | //将标记置为false(防止重发) |
| | | shuttleProtocol.setPakMk(false); |
| | | |
| | | //判断数据是否执行完成 |
| | | if (commandStep < size - 1) { |
| | |
| | | null, |
| | | null, |
| | | null, |
| | | JSON.toJSONString(command) |
| | | JSON.toJSONString(assignCommand) |
| | | ); |
| | | shuttleOptService.insert(opt); |
| | | } |
| | | //删除redis |
| | | redisUtil.del("wrk_no_" + map.get("wrk_no").toString()); |
| | | |
| | | if (!assignCommand.getAuto()) { |
| | | //手动模式不抛出等待状态,直接复位 |
| | | News.info("四向穿梭车手动任务执行完成,穿梭车号={},任务数据={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); |
| | | }else { |
| | | //对主线程抛出等待确认状态waiting |
| | | shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING); |
| | | |
| | | News.info("四向穿梭车任务执行完成等待确认中,穿梭车号={},任务数据={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | return true; |
| | | } |
| | | |