| | |
| | | private LaneService laneService; |
| | | @Autowired |
| | | private ActionSorter actionSorter; |
| | | @Autowired |
| | | private TaskReportService taskReportService; |
| | | @Autowired |
| | | private AgvDurationService agvDurationService; |
| | | |
| | | @SuppressWarnings("all") |
| | | @Transactional |
| | |
| | | */ |
| | | @Transactional(propagation = Propagation.REQUIRES_NEW) |
| | | public void buildMajorTask(Long agvId, List<Task> taskList) { |
| | | if (Cools.isEmpty(agvId, taskList)) { return; } |
| | | if (Cools.isEmpty(agvId, taskList)) { |
| | | return; |
| | | } |
| | | try { |
| | | // valid ----------------------------------------------- |
| | | Agv agv = agvService.getById(agvId); |
| | |
| | | backpackLev ++; |
| | | Code startCode = null; |
| | | Code endCode = null; |
| | | Loc oriLoc = null; Loc destLoc = null; |
| | | Sta oriSta = null; Sta destSta = null; |
| | | Loc oriLoc = null; |
| | | Loc destLoc = null; |
| | | Sta oriSta = null; |
| | | Sta destSta = null; |
| | | switch (Objects.requireNonNull(TaskTypeType.get(task.getTaskTypeEl()))) { |
| | | case LOC_TO_LOC: |
| | | oriLoc = locService.getById(task.getOriLoc()); |
| | |
| | | /** |
| | | * 充电 回待机位任务 |
| | | */ |
| | | @Transactional(propagation = Propagation.REQUIRES_NEW) // although there is a Transactional here that the lock is isolated, but we can't join the caller's Transactional |
| | | @Transactional(propagation = Propagation.REQUIRES_NEW) |
| | | // although there is a Transactional here that the lock is isolated, but we can't join the caller's Transactional |
| | | public boolean buildMinorTask(Long agvId, TaskTypeType taskType, String destination, Jam jam) { |
| | | if (Cools.isEmpty(agvId, taskType)) { return false; } |
| | | if (Cools.isEmpty(agvId, taskType)) { |
| | | return false; |
| | | } |
| | | try { |
| | | String agvNo = agvService.getAgvNo(agvId); |
| | | if (!agvService.judgeEnable(agvId)) { |
| | |
| | | throw new BusinessException(task.getSeqNum() + " failed to save"); |
| | | } |
| | | |
| | | |
| | | // generate travel |
| | | Travel travel = new Travel(); |
| | | travel.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3)); |
| | |
| | | } |
| | | |
| | | // generate segment |
| | | int segSerial = 0; segSerial ++; |
| | | int segSerial = 0; |
| | | segSerial++; |
| | | List<Segment> segmentList = new ArrayList<>(); |
| | | |
| | | String posType = ""; |
| | | switch (taskType){ |
| | | case TO_CHARGE: |
| | | posType = TaskPosDto.PosType.TO_CHARGE.toString(); |
| | | //插入充电任务 |
| | | AgvDuration agvDuration = new AgvDuration(); |
| | | agvDuration.setHappenTime(now); |
| | | agvDuration.setAgvId(agvId); |
| | | agvDuration.setTaskNo(task.getId()); |
| | | agvDurationService.save(agvDuration); |
| | | break; |
| | | case TO_STANDBY: |
| | | posType = TaskPosDto.PosType.TO_STANDBY.toString(); |
| | |
| | | @Transactional |
| | | public synchronized void generateAction(Long agvId, List<Segment> segmentList, List<String> pathList, Date algoStartTime) { |
| | | try { |
| | | if (Cools.isEmpty(agvId, segmentList)) { return; } |
| | | if (Cools.isEmpty(agvId, segmentList)) { |
| | | return; |
| | | } |
| | | Date now = new Date(); |
| | | long actionPrepareSts = ActionStsType.PREPARE.val(); |
| | | // JSONObject storeDirection = configService.getVal("storeDirection", JSONObject.class); |
| | |
| | | List<String> pathListPart = pathList.subList(pathList.indexOf(lastCode.getData()), pathList.indexOf(code.getData()) + 1); |
| | | |
| | | for (int i = 0; i < pathListPart.size(); i++) { |
| | | if (i == 0) { continue; } |
| | | if (i == 0) { |
| | | continue; |
| | | } |
| | | |
| | | String next = pathListPart.get(i); |
| | | |
| | |
| | | for (Segment segment : segmentList) { |
| | | boolean taskComplete = false; |
| | | |
| | | Task task = taskService.getById(segment.getTaskId()); assert null != task; |
| | | TaskTypeType typeType = TaskTypeType.get(task.getTaskTypeEl()); assert null != typeType; |
| | | Task task = taskService.getById(segment.getTaskId()); |
| | | assert null != task; |
| | | TaskTypeType typeType = TaskTypeType.get(task.getTaskTypeEl()); |
| | | assert null != typeType; |
| | | |
| | | TaskPosDto.PosType posType = TaskPosDto.queryPosType(segment.getPosType()); |
| | | switch (Objects.requireNonNull(posType)) { |
| | |
| | | log.error("Task [{}] 更新失败 !!!", task.getSeqNum()); |
| | | } else { |
| | | log.info("Task [{}] 作业完毕 ==========>> ", task.getSeqNum()); |
| | | // TODO 插入一条上报记录 |
| | | TaskReport taskReport = new TaskReport(); |
| | | taskReport.setAgvId(task.getAgvId()); |
| | | taskReport.setBusNo(task.getBusId$()); |
| | | taskReport.setCreateTime(new Date()); |
| | | taskReport.setDestLoc(task.getDestLoc()); |
| | | taskReport.setDestSta(task.getDestSta()); |
| | | taskReport.setSeqNum(task.getSeqNum()); |
| | | taskReport.setTaskSts(task.getTaskSts()); |
| | | taskReport.setOriLoc(task.getOriLoc()); |
| | | taskReport.setOriSta(task.getOriSta()); |
| | | taskReport.setZpallet(task.getZpallet()); |
| | | if (!taskReportService.save(taskReport)) { |
| | | log.info("TaskReport [{}] 插入失败 ==========>> ", JSON.toJSONString(taskReport)); |
| | | } |
| | | } |
| | | |
| | | } |