| | |
| | | */ |
| | | @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()); |
| | |
| | | * 充电 回待机位任务 |
| | | * zc 新增了是否强制,强制说明由用户发起,小车在超过低电量就可以做移动充电去待机位 |
| | | */ |
| | | @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,boolean force) { |
| | | if (Cools.isEmpty(agvId, taskType)) { return false; } |
| | | if (Cools.isEmpty(agvId, taskType)) { |
| | | return false; |
| | | } |
| | | try { |
| | | String agvNo = agvService.getAgvNo(agvId); |
| | | if (!agvService.judgeEnable(agvId,false, force)) { |
| | |
| | | } |
| | | |
| | | // generate segment |
| | | int segSerial = 0; segSerial ++; |
| | | int segSerial = 0; |
| | | segSerial++; |
| | | List<Segment> segmentList = new ArrayList<>(); |
| | | |
| | | String posType = ""; |
| | |
| | | @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); |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | @Transactional |
| | | public void publishAction(String actionGroupId) { |
| | | try { |
| | |
| | | String agvNo = agvService.getAgvNo(agvId); |
| | | if (!agvService.judgeOnline(agvId)) { |
| | | return; |
| | | } |
| | | |
| | | int lastActionIndex = actionSorter.findLastActionIndex(actionList, ActionTypeType.ReadyReleaseToAgvSite.val()); |
| | | if (lastActionIndex != -1) { |
| | | List<Action> sortedList = new ArrayList<>(actionList.size()); |
| | | for (int i = 0; i < actionList.size(); i++) { |
| | | // 跳过动作本身 |
| | | if (i != lastActionIndex) { |
| | | sortedList.add(actionList.get(i)); |
| | | } |
| | | } |
| | | actionList = sortedList; |
| | | } |
| | | |
| | | Action shang = actionService.getOne(new LambdaQueryWrapper<Action>().eq(Action::getAgvId, agvId).eq(Action::getActionSts, ActionStsType.PREPARE.val()).eq(Action::getActionType, ActionTypeType.ReadyReleaseToAgvSite.val()).orderByDesc(Action::getId)); |
| | | if (shang != null) { |
| | | int turnCornerIdx = actionSorter.findFirstActionIndex(actionList, ActionTypeType.TurnCorner.val()); |
| | | if (turnCornerIdx == -1) { |
| | | actionList.add(0, shang); |
| | | } else { |
| | | actionList.add(turnCornerIdx, shang); |
| | | } |
| | | } |
| | | |
| | | long actionIssuedSts = ActionStsType.ISSUED.val(); |
| | |
| | | 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)) { |