| | |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.zy.acs.common.constant.RedisConstant; |
| | | import com.zy.acs.common.domain.AgvAction; |
| | | import com.zy.acs.common.domain.AgvActionItem; |
| | |
| | | ); |
| | | // load segment |
| | | Segment currSeg = segmentService.getRollerWaiting(agvId, sta.getCode(), TaskPosDto.PosType.ORI_STA); |
| | | currSeg.setState(SegmentStateType.INIT.toString()); |
| | | currSeg.setUpdateTime(now); |
| | | if (!segmentService.updateById(currSeg)) { |
| | | log.error("Segment [{}] failed to update !!!", currSeg.getGroupId() + " - " + currSeg.getSerial()); |
| | | } |
| | | |
| | | |
| | | // new oriSta seg |
| | | Segment loadSeg = new Segment(); |
| | | loadSeg.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3)); |
| | | loadSeg.setTravelId(currSeg.getTravelId()); |
| | | loadSeg.setAgvId(agvId); |
| | | loadSeg.setTaskId(task.getId()); |
| | | loadSeg.setSerial(currSeg.getSerial() - 1); |
| | | loadSeg.setEndNode(sta.getCode()); |
| | | loadSeg.setPosType(TaskPosDto.PosType.ORI_STA.toString()); |
| | | loadSeg.setState(SegmentStateType.WAITING.toString()); |
| | | if (!segmentService.save(loadSeg)) { |
| | | log.error("Segment [{}] failed to save !!!", loadSeg.getTravelId() + " - " + loadSeg.getSerial()); |
| | | } |
| | | |
| | | // place segment |
| | | TaskTypeType taskType = Objects.requireNonNull(TaskTypeType.get(task.getTaskTypeEl())); |
| | | TaskPosDto.PosType posType = null; |
| | | switch (taskType) { |
| | | case STA_TO_LOC: |
| | | posType = TaskPosDto.PosType.DEST_LOC; |
| | | break; |
| | | case STA_TO_STA: |
| | | posType = TaskPosDto.PosType.DEST_STA; |
| | | break; |
| | | default: |
| | | throw new BusinessException("[Agv: " + agvNo + "]allocate inbound failed to find travel"); |
| | | } |
| | | |
| | | Segment placeSeg = new Segment(); |
| | | placeSeg.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3)); |
| | | placeSeg.setTravelId(currSeg.getTravelId()); |
| | | placeSeg.setAgvId(agvId); |
| | | placeSeg.setTaskId(task.getId()); |
| | | placeSeg.setSerial(currSeg.getSerial() - 1); |
| | | placeSeg.setEndNode(sta.getCode()); |
| | | placeSeg.setPosType(posType.toString()); |
| | | placeSeg.setState(SegmentStateType.INIT.toString()); |
| | | if (!segmentService.save(placeSeg)) { |
| | | log.error("Segment [{}] failed to save !!!", placeSeg.getTravelId() + " - " + placeSeg.getSerial()); |
| | | } |
| | | |
| | | task.setAgvId(agvId); |
| | | task.setTaskSts(TaskStsType.ASSIGN.val()); |
| | |
| | | List<Action> newActionList = actionSorter.optimizeSort(actionList); |
| | | String groupId = String.valueOf(snowflakeIdWorker.nextId()).substring(3); |
| | | |
| | | // update segment |
| | | for (Segment item : segmentList) { |
| | | LambdaUpdateWrapper<Segment> uw = new LambdaUpdateWrapper<Segment>() |
| | | .eq(Segment::getId, item.getId()) |
| | | .eq(Segment::getState, item.getState()) |
| | | .set(Segment::getGroupId, groupId) |
| | | .set(Segment::getState, SegmentStateType.RUNNING.toString()) |
| | | .set(Segment::getStartTime, now) |
| | | .set(Segment::getUpdateTime, now); |
| | | if (algoStartTime != null) { |
| | | uw.set(Segment::getAlgoTime, (int) (now.getTime() - algoStartTime.getTime())); |
| | | } |
| | | if (!segmentService.update(uw)) { |
| | | // segment 原子性保证 |
| | | throw new CoolException("更新Segment失败: segmentId=" + item.getId() + " state not WAITING"); |
| | | } |
| | | } |
| | | |
| | | // update segment |
| | | // for (Segment item : segmentList) { |
| | | // item.setGroupId(groupId); |
| | | // item.setState(SegmentStateType.RUNNING.toString()); |
| | | // item.setStartTime(now); |
| | | // item.setUpdateTime(now); |
| | | // if (null != algoStartTime) { |
| | | // item.setAlgoTime((int) (now.getTime() - algoStartTime.getTime())); |
| | | // } |
| | | // if (!segmentService.updateById(item)) { |
| | | // throw new CoolException("更新Segment失败"); |
| | | // } |
| | | // } |
| | | |
| | | // save action |
| | | int i = newActionList.size(); |
| | | for (Action action : newActionList) { |
| | |
| | | } |
| | | if (!actionService.saveBatch(newActionList)) { |
| | | throw new BusinessException("group[" + groupId + "] 动作保存失败"); |
| | | } |
| | | |
| | | // update segment |
| | | for (Segment item : segmentList) { |
| | | item.setGroupId(groupId); |
| | | item.setState(SegmentStateType.RUNNING.toString()); |
| | | item.setStartTime(now); |
| | | item.setUpdateTime(now); |
| | | if (null != algoStartTime) { |
| | | item.setAlgoTime((int) (now.getTime() - algoStartTime.getTime())); |
| | | } |
| | | if (!segmentService.updateById(item)) { |
| | | throw new CoolException("更新Segment失败"); |
| | | } |
| | | } |
| | | |
| | | log.info("{}号Agv动作组装完成,指令数量:{}", agvNo, newActionList.size()); |