| | |
| | | import com.zy.acs.common.domain.protocol.*; |
| | | import com.zy.acs.common.domain.protocol.action.*; |
| | | import com.zy.acs.common.enums.*; |
| | | import com.zy.acs.common.utils.Base62; |
| | | import com.zy.acs.common.utils.GsonUtils; |
| | | import com.zy.acs.common.utils.RedisSupport; |
| | | import com.zy.acs.common.utils.Utils; |
| | | import com.zy.acs.common.utils.*; |
| | | import com.zy.acs.framework.common.Cools; |
| | | import com.zy.acs.framework.common.SnowflakeIdWorker; |
| | | import com.zy.acs.framework.exception.CoolException; |
| | |
| | | import org.springframework.transaction.annotation.Propagation; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.transaction.interceptor.TransactionAspectSupport; |
| | | import com.zy.acs.common.utils.News; |
| | | |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | |
| | | bus.setBusSts(BusStsType.PROGRESS.val()); |
| | | bus.setUpdateTime(now); |
| | | if (!busService.updateById(bus)) { |
| | | log.error("Bus [{}] failed to Update !!!", bus.getUuid()); |
| | | News.error("Bus [{}] failed to Update !!!", bus.getUuid()); |
| | | } |
| | | } |
| | | return; |
| | |
| | | currSeg.setState(SegmentStateType.INIT.toString()); |
| | | currSeg.setUpdateTime(now); |
| | | if (!segmentService.updateById(currSeg)) { |
| | | // log.error("Segment [{}] failed to update !!!", currSeg.getGroupId() + " - " + currSeg.getSerial()); |
| | | // News.error("Segment [{}] failed to update !!!", currSeg.getGroupId() + " - " + currSeg.getSerial()); |
| | | throw new CoolException("failed to update segment [" + currSeg.getGroupId() + "-" + currSeg.getSerial() + "] failed"); |
| | | } |
| | | |
| | |
| | | loadSeg.setCreateTime(now); |
| | | loadSeg.setUpdateTime(now); |
| | | if (!segmentService.save(loadSeg)) { |
| | | // log.error("Segment [{}] failed to save !!!", loadSeg.getTravelId() + " - " + loadSeg.getSerial()); |
| | | // News.error("Segment [{}] failed to save !!!", loadSeg.getTravelId() + " - " + loadSeg.getSerial()); |
| | | throw new CoolException("failed to save segment [" + loadSeg.getGroupId() + "-" + loadSeg.getSerial() + "] failed"); |
| | | } |
| | | |
| | |
| | | placeSeg.setCreateTime(now); |
| | | placeSeg.setUpdateTime(now); |
| | | if (!segmentService.save(placeSeg)) { |
| | | // log.error("Segment [{}] failed to save !!!", placeSeg.getTravelId() + " - " + placeSeg.getSerial()); |
| | | // News.error("Segment [{}] failed to save !!!", placeSeg.getTravelId() + " - " + placeSeg.getSerial()); |
| | | throw new CoolException("failed to save segment [" + placeSeg.getGroupId() + "-" + placeSeg.getSerial() + "] failed"); |
| | | } |
| | | |
| | |
| | | staReserveService.allocateCallBack(task, agvId); |
| | | }); |
| | | // if (Cools.isEmpty(agvNo)) { |
| | | //// log.warn("Task[{}] has an issue, because it failed to check out agv which is idle...", task.getSeqNum()); |
| | | //// News.warn("Task[{}] has an issue, because it failed to check out agv which is idle...", task.getSeqNum()); |
| | | // continue; |
| | | // } |
| | | // task.setAgvId(agvService.getAgvId(agvNo)); |
| | |
| | | // } |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("mainService.infuseAgvForTask", e); |
| | | News.error("mainService.infuseAgvForTask", e); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | } |
| | | } |
| | |
| | | dropGroups.add(group); |
| | | } else { |
| | | // import tip: the list must only contain ORIGIN and DESTINATION |
| | | log.error("the list must only contain ORIGIN and DESTINATION"); |
| | | News.error("the list must only contain ORIGIN and DESTINATION"); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | } catch (Exception e) { |
| | | |
| | | log.error("mainService.buildMajorTask[task]", e); |
| | | News.error("mainService.buildMajorTask[task]", e); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | } |
| | | } |
| | |
| | | endCode = codeService.getCacheById(funcSta.getCode()); |
| | | } |
| | | if (null == endCode) { |
| | | log.warn("AGV[{}] failed to search destination,there hadn't any idle funSta,TaskTypeType:{}", agvNo, taskType.toString()); |
| | | News.warn("AGV[{}] failed to search destination,there hadn't any idle funSta,TaskTypeType:{}", agvNo, taskType.toString()); |
| | | } |
| | | break; |
| | | case MOVE: |
| | |
| | | destFuncSta.setState(FuncStaStateType.OCCUPIED.toString()); |
| | | destFuncSta.setUpdateTime(now); |
| | | if (!funcStaService.updateById(destFuncSta)) { |
| | | log.error("FuncSta [{}] failed to update !!!", destFuncSta.getName()); |
| | | News.error("FuncSta [{}] failed to update !!!", destFuncSta.getName()); |
| | | } |
| | | break; |
| | | case MOVE: |
| | |
| | | |
| | | return true; |
| | | } catch (Exception e) { |
| | | log.error("mainService.buildMinorTask[task]", e); |
| | | News.error("mainService.buildMinorTask[task]", e); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | |
| | | return false; |
| | |
| | | throw new BusinessException("group[" + groupId + "] 动作保存失败"); |
| | | } |
| | | |
| | | log.info("{}号Agv动作组装完成,指令数量:{}", agvNo, newActionList.size()); |
| | | News.info("{}号Agv动作组装完成,指令数量:{}", agvNo, newActionList.size()); |
| | | return pathTrace; |
| | | } catch (Exception e) { |
| | | log.error("mainService.generateAction", e); |
| | | News.error("mainService.generateAction", e); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | |
| | | if (!Cools.isEmpty(pathList)) { |
| | |
| | | task.setUpdateTime(now); |
| | | if (!taskService.updateById(task)) { |
| | | throw new BusinessException(task.getSeqNum() + "任务更新失败"); |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | AgvAction agvAction = new AgvAction(agvNo, actionGroupId); |
| | |
| | | |
| | | BaseResult<?> result = agvCmdService.executeAgvActionCmd(agvAction); |
| | | if (result.success()) { |
| | | log.info("任务组 [{}] 动作指令已下发 ===>> 指令数量:{}", actionGroupId, actionList.size()); |
| | | News.info("任务组 [{}] 动作指令已下发 ===>> 指令数量:{}", actionGroupId, actionList.size()); |
| | | } else { |
| | | log.error("任务组 [{}] 动作指令下发失败 !!!", actionGroupId); |
| | | News.error("任务组 [{}] 动作指令下发失败 !!!", actionGroupId); |
| | | throw new CoolException("任务组 [{" + actionGroupId + "}] 动作指令下发失败 !!!"); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("mainService.publishAction", e); |
| | | News.error("mainService.publishAction", e); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | } |
| | | |
| | |
| | | |
| | | Agv agv = agvService.selectByUuid(protocol.getAgvNo()); |
| | | if (null == agv) { |
| | | log.warn("Agv [{}] 尚未鉴权 !!!", protocol.getAgvNo()); |
| | | News.warn("Agv [{}] 尚未鉴权 !!!", protocol.getAgvNo()); |
| | | return; |
| | | } |
| | | |
| | |
| | | AGV_11_UP agv_11_up = (AGV_11_UP) msgBody; |
| | | String serialNo = agv_11_up.getSerialNo(); |
| | | |
| | | log.info("Agv [{}] 动作完成包 ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_11_up)); |
| | | News.info("Agv [{}] 动作完成包 ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_11_up)); |
| | | |
| | | // 入库放货 |
| | | if (agv_11_up.getCompleteType().equals(AgvCompleteType.RELEASE_FROM_SHELVES_COMPLETE)) { |
| | |
| | | |
| | | Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, String.valueOf(Integer.parseInt(agv_11_up.getLocCode())))); |
| | | if (null == loc) { |
| | | log.warn("Agv [{}] 上报往货架放货完成时,库位码[{}]无效。", protocol.getAgvNo(), agv_11_up.getLocCode()); |
| | | News.warn("Agv [{}] 上报往货架放货完成时,库位码[{}]无效。", protocol.getAgvNo(), agv_11_up.getLocCode()); |
| | | } else { |
| | | List<Long> taskIds = actionService.selectTaskIdsByGroupId(serialNo); |
| | | for (Long taskId : taskIds) { |
| | |
| | | action.setEndTime(now); |
| | | action.setUpdateTime(now); |
| | | if (!actionService.updateById(action)) { |
| | | log.error("Action [{}] 更新失败 !!!", action.getPriority() + " - " + action.getName()); |
| | | News.error("Action [{}] 更新失败 !!!", action.getPriority() + " - " + action.getName()); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, String.valueOf(Integer.parseInt(agv_11_up.getLocCode())))); |
| | | if (null == loc) { |
| | | log.warn("Agv [{}] 上报从货架取货完成,库位码[{}]无效。", protocol.getAgvNo(), agv_11_up.getLocCode()); |
| | | News.warn("Agv [{}] 上报从货架取货完成,库位码[{}]无效。", protocol.getAgvNo(), agv_11_up.getLocCode()); |
| | | } else { |
| | | |
| | | List<Long> taskIds = actionService.selectTaskIdsByGroupId(serialNo); |
| | |
| | | action.setEndTime(now); |
| | | action.setUpdateTime(now); |
| | | if (!actionService.updateById(action)) { |
| | | log.error("Action [{}] 更新失败 !!!", action.getPriority() + " - " + action.getName()); |
| | | News.error("Action [{}] 更新失败 !!!", action.getPriority() + " - " + action.getName()); |
| | | } |
| | | } |
| | | } |
| | |
| | | // settlement |
| | | this.settleSegmentList(segmentList, serialNo); |
| | | |
| | | log.info("Agv [{}] {}作业完毕 ==========>> ", protocol.getAgvNo(), serialNo); |
| | | News.info("Agv [{}] {} 路径作业已完成", protocol.getAgvNo(), serialNo); |
| | | |
| | | } |
| | | } |
| | |
| | | // 取放货请求包 |
| | | if (msgBody instanceof AGV_06_UP) { |
| | | AGV_06_UP agv_06_up = (AGV_06_UP) msgBody; |
| | | log.info("Agv [{}] 取放货请求包 ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_06_up)); |
| | | News.info("Agv [{}] 取放货请求包 ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_06_up)); |
| | | |
| | | boolean success = false; |
| | | |
| | |
| | | // query current segment |
| | | Segment currSeg = segmentService.getCurrRunningSeg(null, agv.getId(), code.getId()); |
| | | if (null == currSeg) { |
| | | log.error("failed to find curr segment [{}]", agv.getUuid()); |
| | | News.error("failed to find curr segment [{}]", agv.getUuid()); |
| | | } else { |
| | | |
| | | // query current task |
| | | Task currTask = taskService.getById(currSeg.getTaskId()); |
| | | if (currTask == null || !currTask.getTaskSts().equals(TaskStsType.PROGRESS.val())) { |
| | | |
| | | log.error("agv[{}] task invalid, task={}", protocol.getAgvNo(), currSeg.getTaskId()); |
| | | News.error("agv[{}] task invalid, task={}", protocol.getAgvNo(), currSeg.getTaskId()); |
| | | } else { |
| | | |
| | | Sta sta; |
| | |
| | | staReserveService.rollbackWaitingToReserved(sta, currTask, StaReserveType.OUT); |
| | | break; |
| | | } |
| | | log.info("AGV [{}] load permitted at conveyor station [{}]", protocol.getAgvNo(), sta.getStaNo()); |
| | | News.info("AGV [{}] load permitted at conveyor station [{}]", protocol.getAgvNo(), sta.getStaNo()); |
| | | success = true; |
| | | break; |
| | | case DEST_STA: |
| | |
| | | staReserveService.rollbackWaitingToReserved(sta, currTask, StaReserveType.IN); |
| | | break; |
| | | } |
| | | log.info("AGV [{}] unload permitted at conveyor station [{}]", protocol.getAgvNo(), sta.getStaNo()); |
| | | News.info("AGV [{}] unload permitted at conveyor station [{}]", protocol.getAgvNo(), sta.getStaNo()); |
| | | success = true; |
| | | break; |
| | | default: |
| | | log.error("AGV [{}] has wrong posType [{}], segment [{}]", protocol.getAgvNo(), posType.toString(), currSeg.getId()); |
| | | News.error("AGV [{}] has wrong posType [{}], segment [{}]", protocol.getAgvNo(), posType.toString(), currSeg.getId()); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | log.error("agv[{}] failed to deal with action request, qrCode={}", agv.getUuid(), agv_06_up.getVal(), e); |
| | | News.error("agv[{}] failed to deal with action request, qrCode={}", agv.getUuid(), agv_06_up.getVal(), e); |
| | | } |
| | | |
| | | AGV_06_DOWN agv_06_down = new AGV_06_DOWN(); |
| | |
| | | if (msgBody instanceof AGV_70_UP) { |
| | | AGV_70_UP agv_70_up = (AGV_70_UP) msgBody; |
| | | |
| | | log.info("Agv [{}] 料仓信息包 ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_70_up)); |
| | | News.info("Agv [{}] 料仓信息包 ===>> {}", protocol.getAgvNo(), JSON.toJSONString(agv_70_up)); |
| | | } |
| | | } |
| | | |
| | |
| | | task.setEndTime(now); |
| | | task.setUpdateTime(now); |
| | | if (!taskService.updateById(task)) { |
| | | log.error("Task [{}] 更新失败 !!!", task.getSeqNum()); |
| | | News.error("Task [{}] 更新失败 !!!", task.getSeqNum()); |
| | | } else { |
| | | taskService.maintainLocAndSta(task); |
| | | log.info("Task [{}] 作业完毕 ==========>> ", task.getSeqNum()); |
| | | News.info("Task [{}] 任务运行完成.", task.getSeqNum()); |
| | | } |
| | | |
| | | } |
| | |
| | | action.setEndTime(now); |
| | | action.setUpdateTime(now); |
| | | if (!actionService.updateById(action)) { |
| | | log.error("Action [{}] 更新失败 !!!", action.getPriority() + " - " + action.getName()); |
| | | News.error("Action [{}] 更新失败 !!!", action.getPriority() + " - " + action.getName()); |
| | | } |
| | | } |
| | | } |
| | |
| | | segment.setEndTime(now); |
| | | segment.setUpdateTime(now); |
| | | if (!segmentService.updateById(segment)) { |
| | | log.error("Segment [{}] 更新失败 !!!", segment.getGroupId() + " - " + segment.getSerial()); |
| | | News.error("Segment [{}] 更新失败 !!!", segment.getGroupId() + " - " + segment.getSerial()); |
| | | } |
| | | } |
| | | |
| | |
| | | segmentService.processNext(segmentList); |
| | | } |
| | | |
| | | } |
| | | } |