From 7f70cb15d035f0c233b9e62b9e43aa985317c908 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期一, 04 十一月 2024 10:22:45 +0800 Subject: [PATCH] # --- zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/MissionServiceImpl.java | 144 +++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 123 insertions(+), 21 deletions(-) diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/MissionServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/MissionServiceImpl.java index 9a1959f..69a38e9 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/MissionServiceImpl.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/MissionServiceImpl.java @@ -2,18 +2,20 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.zy.acs.framework.common.Cools; +import com.zy.acs.manager.common.exception.BusinessException; import com.zy.acs.manager.manager.controller.result.MissionVo; -import com.zy.acs.manager.manager.entity.Action; -import com.zy.acs.manager.manager.entity.AgvDetail; -import com.zy.acs.manager.manager.entity.Code; -import com.zy.acs.manager.manager.entity.Segment; +import com.zy.acs.manager.manager.entity.*; +import com.zy.acs.manager.manager.enums.ActionStsType; +import com.zy.acs.manager.manager.enums.BusStsType; import com.zy.acs.manager.manager.enums.SegmentStateType; +import com.zy.acs.manager.manager.enums.TaskStsType; import com.zy.acs.manager.manager.service.*; +import org.apache.ibatis.session.SqlSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -30,13 +32,19 @@ private CodeService codeService; @Autowired private AgvDetailService agvDetailService; + @Autowired + private TaskService taskService; + @Autowired + private BusService busService; + @Autowired + private SqlSession sqlSession; @Override public List<MissionVo> getList(Long agvId, String groupNo) { List<MissionVo> result = new ArrayList<>(); List<String> runningGroupNos = segmentService.getGroupNo(SegmentStateType.RUNNING, agvId, groupNo); for (String runningGroupNo : runningGroupNos) { - MissionVo vo = generate(runningGroupNo); + MissionVo vo = generateVo(runningGroupNo); if (null != vo) { result.add(vo); } @@ -45,12 +53,32 @@ return result; } - public MissionVo generate(String groupNo) { + @Override + public MissionVo generateVo(String groupNo) { + if (Cools.isEmpty(groupNo)) { + return null; + } + // segment ------------------------------- List<Segment> list = segmentService.list(new LambdaQueryWrapper<Segment>().eq(Segment::getGroupId, groupNo).orderByAsc(Segment::getSerial)); if (Cools.isEmpty(list)) { return null; } Segment segment = list.get(0); + + // agv ------------------------------- + AgvDetail agvDetail = agvDetailService.selectByAgvId(segment.getAgvId()); + Long recentCode = agvDetail.getRecentCode(); + String currCode = null; + if (null != recentCode) { + currCode = codeService.getById(recentCode).getData(); + } + + // action ------------------------------- + List<Action> actionList = actionService.list(new LambdaQueryWrapper<Action>() + .eq(Action::getGroupId, groupNo).ne(Action::getActionSts, ActionStsType.EXPIRED.val()).orderByDesc(Action::getPriority)); + if (Cools.isEmpty(actionList)) { + return null; + } MissionVo vo = new MissionVo(); vo.setGroupNo(groupNo); @@ -60,32 +88,106 @@ vo.setTaskNos(list.stream().map(Segment::getTaskId$).collect(Collectors.toList())); vo.setBackpack(segment.getBackpack()); vo.setDestCode(segment.getEndNode$()); - vo.setProgress(calcProgress(groupNo)); + vo.setCurrCode(currCode); + vo.setProgress(calcProgress(currCode, actionList)); return vo; } - public Double calcProgress(String groupNo) { - double progress = 0D; + @Override + public MissionVo generateVoMoreInfo(String groupNo) { + MissionVo vo = generateVo(groupNo); + if (null == vo) { + return vo; + } + List<Segment> list = segmentService.list(new LambdaQueryWrapper<Segment>().eq(Segment::getGroupId, groupNo).orderByAsc(Segment::getSerial)); + if (Cools.isEmpty(list)) { + return null; + } List<Action> actionList = actionService.list(new LambdaQueryWrapper<Action>() - .eq(Action::getGroupId, groupNo). - orderByDesc(Action::getPriority)); - + .eq(Action::getGroupId, groupNo).ne(Action::getActionSts, ActionStsType.EXPIRED.val()).orderByDesc(Action::getPriority)); if (Cools.isEmpty(actionList)) { - return progress; + return null; } + Segment segment = list.get(0); Action action = actionList.get(0); - AgvDetail agvDetail = agvDetailService.selectByAgvId(action.getAgvId()); - Long recentCode = agvDetail.getRecentCode(); - if (null == recentCode) { + Task task = taskService.getById(segment.getTaskId()); +// vo.setSendTime(action.getStartTime()); + vo.setBusNo(task.getBusId$()); + vo.setActionCount(actionList.size()); + vo.setTaskIds(list.stream().map(Segment::getTaskId).collect(Collectors.toList())); + vo.setCodeList(actionList.stream().map(Action::getCode).distinct().collect(Collectors.toList())); + vo.setActionIds(actionList.stream().map(Action::getId).collect(Collectors.toList())); + return vo; + } + + @Override + @Transactional + public Boolean resend(List<Action> actionList) { + if (Cools.isEmpty(actionList)) { + return Boolean.FALSE; + } + List<Long> actionIds = actionList.stream().map(Action::getId).collect(Collectors.toList()); + + String actionGroupId = actionService.getById(actionIds.get(0)).getGroupId(); + actionService.updateStsByGroupId(actionGroupId, ActionStsType.EXPIRED.val()); + + List<Action> newActionList = new ArrayList<>(); + Date now = new Date(); + for (Long actionId : actionIds) { + sqlSession.clearCache(); + Action action = actionService.getById(actionId); + action.setActionSts(ActionStsType.PREPARE.val()); + action.setIoTime(now); + action.setUpdateTime(now); + newActionList.add(action); + } + int i = newActionList.size(); + for (Action action : newActionList) { + action.setPriority(i); + if (!actionService.save(action)) { + throw new BusinessException(action.getName() + " Action Update Fail!"); + } + i -= 1; + } + + Set<Long> busIds = new HashSet<>(); + List<Long> taskIds = actionService.selectTaskIdsByGroupId(actionGroupId); + for (Long taskId : taskIds) { + Task task = taskService.getById(taskId); + if (null != task) { + task.setTaskSts(TaskStsType.ASSIGN.val()); + task.setUpdateTime(now); + task.setIoTime(now); + if (!taskService.updateById(task)) { + throw new BusinessException(task.getUuid() + " Task Update Fail!"); + } + busIds.add(task.getBusId()); + } + } + for (Long busId : busIds) { + Bus bus = busService.getById(busId); + if (null != bus) { + bus.setBusSts(BusStsType.PROGRESS.val()); + bus.setUpdateTime(now); + if (!busService.updateById(bus)) { + throw new BusinessException(bus.getUuid() + " Bus Update Fail!"); + } + } + } + return Boolean.TRUE; + } + + public Double calcProgress(String currCode, List<Action> actionList) { + double progress = 0D; + if (Cools.isEmpty(actionList, currCode)) { return progress; } - Code code = codeService.getById(recentCode); - List<String> codeList = actionList.stream().map(Action::getCode).collect(Collectors.toList()); + List<String> codeList = actionList.stream().map(Action::getCode).distinct().collect(Collectors.toList()); int totalCodes = codeList.size(); - int currentIndex = codeList.indexOf(code.getData()); + int currentIndex = codeList.indexOf(currCode); if (currentIndex >= 0) { progress = (currentIndex + 1) * 100.0 / totalCodes; -- Gitblit v1.9.1