From 5c79d2221f27d384b97e0808e18d32fd29326dc5 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期五, 15 十一月 2024 14:48:40 +0800 Subject: [PATCH] # --- /dev/null | 37 ------------ zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java | 31 ++++++++- zy-acs-manager/src/main/java/com/zy/acs/manager/fake/AgvSimulatorTask.java | 7 +- zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java | 4 + zy-acs-manager/src/main/resources/mapper/manager/JamMapper.xml | 18 ++++++ zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java | 10 +-- zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/JamServiceImpl.java | 9 +++ zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/JamMapper.java | 5 + zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Jam.java | 6 ++ zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/JamService.java | 2 10 files changed, 76 insertions(+), 53 deletions(-) diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java index a28cb5b..7131104 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java @@ -31,6 +31,8 @@ @Component public class MapDataWsScheduler { + public static final int WEBSOCKET_BROADCAST_INTERVAL = 500; + private ExecutorService singleThreadExecutor; @Autowired @@ -54,7 +56,7 @@ MapWsVo mapWsVo = new MapWsVo(); mapWsVo.setAgvVos(syncAgv()); MapWebSocket.broadcast(GsonUtils.toJson(mapWsVo)); - try { Thread.sleep(500); } catch (InterruptedException ignore) {} + try { Thread.sleep(WEBSOCKET_BROADCAST_INTERVAL); } catch (InterruptedException ignore) {} } }); } diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MockService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MockService.java deleted file mode 100644 index de2f583..0000000 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MockService.java +++ /dev/null @@ -1,281 +0,0 @@ -package com.zy.acs.manager.core.service; - -import com.zy.acs.framework.common.Cools; -import com.zy.acs.common.utils.RedisSupport; -import com.zy.acs.manager.common.domain.MockAgvDto; -import com.zy.acs.manager.common.domain.MockDto; -import com.zy.acs.manager.common.domain.MockStepDto; -import com.zy.acs.manager.common.domain.MockVo; -import com.zy.acs.manager.common.exception.BusinessException; -import com.zy.acs.manager.core.domain.AgvMockDto; -import com.zy.acs.manager.core.domain.TaskPosDto; -import com.zy.acs.manager.core.service.astart.AStarNavigateService; -import com.zy.acs.manager.core.service.astart.MapDataDispatcher; -import com.zy.acs.manager.manager.entity.Agv; -import com.zy.acs.manager.manager.entity.AgvDetail; -import com.zy.acs.manager.manager.entity.Code; -import com.zy.acs.manager.manager.entity.CodeGap; -import com.zy.acs.manager.manager.service.AgvDetailService; -import com.zy.acs.manager.manager.service.AgvService; -import com.zy.acs.manager.manager.service.CodeGapService; -import com.zy.acs.manager.manager.service.CodeService; -import com.zy.acs.manager.system.service.ConfigService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; - -/** - * Created by vincent on 2023/7/29 - */ -@Slf4j -@Service -public class MockService { - - private final RedisSupport redis = RedisSupport.defaultRedisSupport; - - @Autowired - private MapService mapService; - @Autowired - private AgvService agvService; - @Autowired - private AgvDetailService agvDetailService; - @Autowired - private CodeService codeService; - @Autowired - private CodeGapService codeGapService; - @Autowired - private MapDataDispatcher mapDataDispatcher; - @Autowired - private AStarNavigateService aStarNavigateService; - @Autowired - private ConfigService configService; - - public void astarMock() { - Code startCode = codeService.selectByData("00000028"); - Code endCode = codeService.selectByData("00000057"); - - List<String> strings = mapService.checkoutPath("1", startCode, endCode, false); - - List<String> pathList = mapService.validFeasibility(startCode, endCode); - - System.out.println("end"); - } - - @Transactional - public List<MockVo> submit(List<MockAgvDto> agvList, List<MockDto> taskList) { - final String sameGroupXy = configService.getVal("sameGroupXy", String.class); - List<MockVo> result = new ArrayList<>(); - - if (Cools.isEmpty(taskList)) { - throw new BusinessException("璇锋坊鍔� MOCK 浠诲姟"); - } - taskList.sort((o1, o2) -> o2.getPriority() - o1.getPriority()); - - // 浠� agv 鍒嗙粍 - List<AgvMockDto> taskDtos = new ArrayList<>(); - for (MockDto task : taskList) { - AgvMockDto taskDto = new AgvMockDto(task.getAgv(), task); - if (AgvMockDto.has(taskDtos, taskDto)) { - AgvMockDto dto = AgvMockDto.find(taskDtos, taskDto); - assert dto != null; - dto.getTaskList().add(task); - } else { - taskDtos.add(taskDto); - } - } - - // 閲嶇粍褰撳墠 agv 鐨勬墍鏈変换鍔� - for (AgvMockDto taskDto : taskDtos) { - - /** - * key锛歽 鍧愭爣 + 浠诲姟绫诲埆锛堣揣鏋跺彇璐с�佺珯鐐瑰彇璐с�佽揣鏋舵斁璐с�佺珯鐐规斁璐э級 - * val锛氫换鍔d + 浠诲姟鍧愭爣 + 鏉$爜 + 浠诲姟绫诲埆 - */ - Map<String, List<TaskPosDto>> groups = new HashMap<>(); - - for (MockDto mockDto : taskDto.getTaskList()) { - Code startCode = codeService.selectByData(mockDto.getStart()); - Code endCode = codeService.selectByData(mockDto.getEnd()); - - TaskPosDto.packagePosGroup(groups, null, startCode, TaskPosDto.PosType.ORI_LOC, sameGroupXy); - TaskPosDto.packagePosGroup(groups, null, endCode, TaskPosDto.PosType.DEST_LOC, sameGroupXy); - } - - // 浜岀淮鏁扮粍 锛� 姣忕粍鐨� y鍧愭爣 鍜� 浠诲姟绫诲埆 涓�鑷达級 - ArrayList<List<TaskPosDto>> list = new ArrayList<>(groups.values()); - // 浜屼綅鏁扮粍 瀛愭暟缁� 宸茬粡鑳界‘瀹� y鍧愭爣涓轰竴鑷淬�傛墍鏈� get(0).xy[1] 涓烘帓搴忥紙灏辨槸涓�鎺掍竴鎺掍换鍔¤繘琛屾帓搴忥級锛屽 涓�鎺掓帓浠诲姟浠� y鍧愭爣 灏辫闄嶅簭鎺掑簭 - list.sort((o1, o2) -> { - double o1CompVal = (o1.get(0).getFirstWeight(sameGroupXy) * 100) + o1.get(0).getPosType().compOffset; - double o2CompVal = (o2.get(0).getFirstWeight(sameGroupXy) * 100) + o2.get(0).getPosType().compOffset; - return (int) (o1CompVal - o2CompVal); - }); - - // 瀵逛竴鎺掍换鍔¤繘琛� x鍧愭爣 椤哄簭鎺掑簭锛岄槻姝㈡潵鍥炶蛋琛� - for (List<TaskPosDto> taskPosDtoList : list) { - taskPosDtoList.sort((o1, o2) -> (int) (o1.getSecondWeight(sameGroupXy) * 100 - o2.getSecondWeight(sameGroupXy) * 100)); - } - - // 涓婁竴娆$殑 code锛� 绗竴娆′负 agv 褰撳墠code - String lastCodeData = this.getPosCode(agvList, taskDto.getAgvId()); - if (Cools.isEmpty(lastCodeData)) { - throw new BusinessException(taskDto.getAgvId() + "鍙� agv 涓嶅湪鏉$爜瀹氫綅涓婏紒"); - } - Code lastCode = codeService.selectByData(lastCodeData); - - // 璧拌璺緞闆嗗悎 - List<MockStepDto> stepList = new ArrayList<>(); - stepList.add(new MockStepDto(lastCodeData, Boolean.FALSE)); - - for (List<TaskPosDto> taskPosDtoList : list) { - - for (TaskPosDto dto : taskPosDtoList) { - - // 鐩爣 code - Code code = codeService.getById(dto.getCodeId()); - - if (!lastCode.getData().equals(code.getData())) { - - // 璁$畻璺緞鑺傜偣 - List<String> pathList = mapService.checkoutPath(taskDto.getAgvId(), lastCode, code, true); - mapDataDispatcher.clearDynamicMatrixByCodeList(null, pathList); -// List<String> pathList = mapService.validFeasibility(lastCode, code); - - if (Cools.isEmpty(pathList)) { - throw new BusinessException(lastCode.getData() + " 鑷� " + code.getData() + "娌℃湁璺緞锛�"); - } - - // 绗竴涓妭鐐逛负鏈韩锛� 鎵�浠ヤ粠 涓嬫爣1 寮�濮� - for (int i = 1; i < pathList.size(); i++) { - - String next = pathList.get(i); - Code nextCode = codeService.selectByData(next); - - boolean pause = nextCode.getId().equals(dto.getCodeId()); - String action = ""; - if (pause) { - switch (dto.getPosType()){ - case ORI_LOC: - case ORI_STA: - action = "PICK"; - break; - case DEST_LOC: - case DEST_STA: - action = "DROP"; - break; - default: - break; - } - } - - stepList.add(new MockStepDto(nextCode.getData(), pause, action)); - - lastCode = nextCode; - } - - } - } - } - - result.add(new MockVo(taskDto.getAgvId(), stepList)); - } - - plusData(result); - - - - for (MockVo mockVo : result) { -// redis.setObject("PATH", mockVo.getAgv(), mockVo.getStepList().stream().map(MockStepDto::getCode).collect(Collectors.toList())); - } - - return result; - } - - - private String getPosCode(List<MockAgvDto> agvList, String agv) { - for (MockAgvDto agvDto : agvList) { - if (agv.equals(agvDto.getAgv())) { - return agvDto.getPos(); - } - } - return null; - } - - private void plusData(List<MockVo> result) { - for (MockVo mockVo : result) { - int size = mockVo.getStepList().size(); - int time = size * 500; - - Code lastCode = null; - double totalDistance = 0; - for (MockStepDto stepDto : mockVo.getStepList()) { - Code code = codeService.selectByData(stepDto.getCode()); - - if (null != lastCode) { - CodeGap gap = codeGapService.findByCodeOfBoth(code.getId(), lastCode.getId()); - if (null != gap) { - totalDistance += gap.getDistance(); - stepDto.setDistance(gap.getDistance()); - } - } - - lastCode = code; - } - - for (MockStepDto stepDto : mockVo.getStepList()) { - if (null != stepDto.getDistance()) { - double rate = stepDto.getDistance() / totalDistance; - stepDto.setTime((int)(rate * time)); - } - } - - - } - - - } - - - - public List<MockVo> imitate() { - Agv agv = agvService.selectByUuid("1"); - AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId()); - MockAgvDto mockAgvDto = new MockAgvDto(); - mockAgvDto.setAgv(agv.getUuid()); - mockAgvDto.setPos(codeService.getById(agvDetail.getCode()).getData()); - List<MockAgvDto> mockAgvDtos = new ArrayList<>(); - mockAgvDtos.add(mockAgvDto); - - List<MockDto> taskList = new ArrayList<>(); - List<Code> codeList = codeService.list(); - Random random = new Random(); - List<Integer> exitCodes = new ArrayList<>(); - for (int i = 0; i < agv.getStage(); i++) { - MockDto mockDto = new MockDto(); - mockDto.setAgv(agv.getUuid()); - - int startIdx; - do { - startIdx = random.nextInt(codeList.size()); - } while (exitCodes.contains(startIdx)); - exitCodes.add(startIdx); - Code startCode = codeList.get(startIdx); - - int endIdx; - do { - endIdx = random.nextInt(codeList.size()); - } while (exitCodes.contains(endIdx)); - exitCodes.add(endIdx); - Code endCode = codeList.get(endIdx); - - mockDto.setStart(startCode.getData()); - mockDto.setEnd(endCode.getData()); - taskList.add(mockDto); - } - return this.submit(mockAgvDtos, taskList); - } - - -} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java index 8a5d41f..6ec43b9 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java @@ -1,6 +1,7 @@ package com.zy.acs.manager.core.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.zy.acs.common.utils.GsonUtils; import com.zy.acs.common.utils.RedisSupport; import com.zy.acs.framework.common.Cools; import com.zy.acs.framework.common.SnowflakeIdWorker; @@ -98,6 +99,8 @@ } } } + + // dead lane if (jamService.count(new LambdaQueryWrapper<Jam>() .eq(Jam::getJamAgv, agv.getId()) .eq(Jam::getJamSeg, segment.getId()) @@ -196,14 +199,17 @@ String agvNo = agv.getUuid(); Date now = new Date(); Jam jam = jamService.getJam(agv.getId(), startCode.getId(), segment.getId()); + // judge avoid of jam + List<Jam> unfinishedOriginJamByCurrAgv = jamService.hasUnfinishedOriginJamByAvo(agv.getId(), startCode.getId(), segment.getId()); + List<String> blackPath = this.getBlackPathList(unfinishedOriginJamByCurrAgv); // 缁撴灉闆� List<String> pathList = new ArrayList<>(); // 鏃犻殰纰嶈В - List<String> unlockPathList = mapService.checkoutPath(agvNo, startCode, endCode, false); + List<String> unlockPathList = mapService.checkoutPath(agvNo, startCode, endCode, false, blackPath); // 閬胯瑙� - List<String> lockPathList = mapService.checkoutPath(agvNo, startCode, endCode, true); + List<String> lockPathList = mapService.checkoutPath(agvNo, startCode, endCode, true, blackPath); if (!Cools.isEmpty(lockPathList) && // 瀛樺湪閬胯瑙� Math.abs(lockPathList.size() - unlockPathList.size()) <= Arrays.stream(mapDataDispatcher.getCodeMatrix(lev)).mapToInt(row -> row.length).sum() / 10 @@ -246,7 +252,8 @@ Integer maxJamTimeoutFactor = null; // persist jam data - jam = this.createOrUpdateJam(agv, startCode, segment, jam); + ArrayList<String> jamPath = new ArrayList<>(unlockPathList); + jam = this.createOrUpdateJam(agv, startCode, segment, jam, jamPath); // ? has unAvoidable block vehicles if (blockVehicleList.stream().anyMatch(blockVehicleDto -> !blockVehicleDto.isAvoidable())) { @@ -290,7 +297,7 @@ } // notify block vehicle to avoid - if (this.notifyVehicleAvoid(blockAgvNo, blockAgvCode, unlockPathList, agvNo, jam)) { + if (this.notifyVehicleAvoid(blockAgvNo, blockAgvCode, jamPath, agvNo, jam)) { if (jam.getCycleAvo() == 1) { jam.setCycleCode(endCode.getId()); } @@ -465,13 +472,14 @@ return true; } - private Jam createOrUpdateJam(Agv agv, Code startCode, Segment segment, Jam jam) { + private Jam createOrUpdateJam(Agv agv, Code startCode, Segment segment, Jam jam, List<String> jamPath) { if (jam == null) { jam = new Jam(); jam.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3)); jam.setJamAgv(agv.getId()); jam.setJamCode(startCode.getId()); jam.setJamSeg(segment.getId()); + jam.setJamPath(GsonUtils.toJson(jamPath)); jam.setStartTime(new Date()); jam.setState(JamStateType.RUNNING.toString()); if (!jamService.save(jam)) { @@ -487,4 +495,17 @@ return jam; } + private List<String> getBlackPathList(List<Jam> unfinishedOriginJamByCurrAgv) { + List<String> blackPathList = new ArrayList<>(); + if (!Cools.isEmpty(unfinishedOriginJamByCurrAgv)) { + for (Jam jam : unfinishedOriginJamByCurrAgv) { + if (!Cools.isEmpty(jam.getJamPath())) { + List<String> list = GsonUtils.fromJsonToList(jam.getJamPath(), String.class); + blackPathList.addAll(list); + } + } + } + return blackPathList.stream().distinct().collect(Collectors.toList()); + } + } diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java index adf32a6..37109bb 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java @@ -83,6 +83,10 @@ // } // } + if (!Cools.isEmpty(blackList) && blackList.contains(node.getCodeData())) { + continue; + } + // 鑺傜偣琚崰鐢� DynamicNode dynamicNode = dynamicMatrix[node.getX()][node.getY()]; String vehicle = dynamicNode.getVehicle(); @@ -90,9 +94,6 @@ if (!vehicle.equals(DynamicNodeType.ACCESS.val)) { if (!vehicle.equals(agvNo)) { - if (!Cools.isEmpty(blackList) && blackList.contains(vehicle)) { - continue; - } if (lock) { continue; } @@ -107,9 +108,6 @@ List<String> otherWaveList = MapDataUtils.hasOtherWave(waveNodeList, agvNo); if (!Cools.isEmpty(otherWaveList)) { - if (!Cools.isEmpty(blackList) && 0 < Cools.getIntersection(otherWaveList, blackList).size()) { - continue; - } if (lock) { continue; diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/fake/AgvSimulatorTask.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/fake/AgvSimulatorTask.java index cd9b2aa..a19aff2 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/fake/AgvSimulatorTask.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/fake/AgvSimulatorTask.java @@ -5,6 +5,7 @@ import com.zy.acs.common.domain.protocol.AGV_11_UP; import com.zy.acs.common.enums.AgvCompleteType; import com.zy.acs.common.utils.RedisSupport; +import com.zy.acs.manager.core.scheduler.MapDataWsScheduler; import com.zy.acs.manager.core.service.MapService; import com.zy.acs.manager.manager.entity.Action; import com.zy.acs.manager.manager.entity.Agv; @@ -26,8 +27,6 @@ */ @Slf4j public class AgvSimulatorTask implements Runnable { - - public static final int ACTION_DURING_TIME = 500; private final Agv agv; private final AgvDetailService agvDetailService; @@ -116,7 +115,7 @@ // 妯℃嫙鐢甸噺娑堣�� // agvDetail.setVol(agvDetail.getVol() - 0.1 * distanceToMove); // 鏍规嵁璺濈娑堣�楃數閲� - Thread.sleep(ACTION_DURING_TIME); + Thread.sleep(MapDataWsScheduler.WEBSOCKET_BROADCAST_INTERVAL); agvDetailService.updateById(agvDetail); @@ -140,7 +139,7 @@ // 妯℃嫙鐢甸噺娑堣��? // agvDetail.setVol(agvDetail.getVol() - 0.05 * (angleToRotate / 15.0)); // 鏍规嵁瑙掑害娑堣�楃數閲� - Thread.sleep(ACTION_DURING_TIME); + Thread.sleep(MapDataWsScheduler.WEBSOCKET_BROADCAST_INTERVAL); agvDetailService.updateById(agvDetail); action.setActionSts(ActionStsType.FINISH.val()); actionService.updateById(action); diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/MockController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/MockController.java deleted file mode 100644 index 8b0df67..0000000 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/MockController.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.zy.acs.manager.manager.controller; - -import com.zy.acs.framework.common.R; -import com.zy.acs.manager.system.controller.BaseController; -import com.zy.acs.manager.core.service.MockService; -import com.zy.acs.manager.manager.controller.param.MockSubmitParam; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - - -/** - * Created by vincent on 2023/7/29 - */ -@RestController -@RequestMapping("/api/mock") -public class MockController extends BaseController { - - @Autowired - private MockService mockService; - -// @PreAuthorize("hasAuthority('map:save')") - @PostMapping("/submit") - public R save(@RequestBody MockSubmitParam param) { - return R.ok().add(mockService.submit(param.getAgvList(), param.getTaskList())); - } - - @GetMapping("/imitate") - public R imitate() { - return R.ok().add((mockService.imitate())); - } - - @GetMapping("/astar") - public R astar() { - mockService.astarMock(); - return R.ok(); - } -} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Jam.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Jam.java index 722578e..cb0f80c 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Jam.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Jam.java @@ -58,6 +58,12 @@ private Long jamSeg; /** + * 闃诲璺緞 + */ + @ApiModelProperty(value= "闃诲璺緞") + private String jamPath; + + /** * 閬胯杞﹁締 */ @ApiModelProperty(value= "閬胯杞﹁締") diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/JamMapper.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/JamMapper.java index a72d9b4..e3e14e9 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/JamMapper.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/JamMapper.java @@ -2,7 +2,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.zy.acs.manager.manager.entity.Jam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface JamMapper extends BaseMapper<Jam> { + List<Jam> selectUnfinishedJamByAvo(@Param("avoAgv")Long avoAgv, @Param("currCode")Long currCode, @Param("currSeg")Long currSeg); + } diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/JamService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/JamService.java index ce8407c..2e1014a 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/JamService.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/JamService.java @@ -10,6 +10,8 @@ Jam getJam(Long agvId, Long jamCode, Long jamSeg); + List<Jam> hasUnfinishedOriginJamByAvo(Long avoAgv, Long currCode, Long currSeg); + Jam getCycleJam(Long jamAgv, Long jamSeg, String avoAgvNo); List<Jam> queryByAvoid(Long avoAgv, JamStateType jamState); diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/JamServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/JamServiceImpl.java index af8c23b..4dd476f 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/JamServiceImpl.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/JamServiceImpl.java @@ -40,6 +40,15 @@ return null; } + /** + * 鍥犱负浣犺�岄樆濉炵殑杞�,鐜板湪浣犲凡缁忓湪閬胯鐐逛簡 + * 浣犵殑涓嬩竴涓猻egment鏄笉鏄張浼氬鑷撮樆濉� + */ + @Override + public List<Jam> hasUnfinishedOriginJamByAvo(Long avoAgv, Long currCode, Long currSeg) { + return this.baseMapper.selectUnfinishedJamByAvo(avoAgv, null, null); + } + @Override public Jam getCycleJam(Long jamAgv, Long jamSeg, String avoAgvNo) { List<Jam> jams = this.list(new LambdaQueryWrapper<Jam>() diff --git a/zy-acs-manager/src/main/resources/mapper/manager/JamMapper.xml b/zy-acs-manager/src/main/resources/mapper/manager/JamMapper.xml index 3c00fa1..72d732b 100644 --- a/zy-acs-manager/src/main/resources/mapper/manager/JamMapper.xml +++ b/zy-acs-manager/src/main/resources/mapper/manager/JamMapper.xml @@ -23,4 +23,22 @@ </where> </sql> + <select id="selectUnfinishedJamByAvo" resultType="com.zy.acs.manager.manager.entity.Jam"> + SELECT + mj.* + FROM man_jam mj + LEFT JOIN man_segment jam_seg ON mj.jam_seg = jam_seg.id + LEFT JOIN man_segment avo_seg ON mj.avo_seg = avo_seg.id + WHERE 1=1 + AND jam_seg.state in ('INIT', 'WAITING') + AND avo_seg.state not in ('INIT', 'WAITING') + AND mj.avo_agv = #{avoAgv} + <if test="currSeg != null"> + AND mj.avo_seg = #{currSeg} + </if> + <if test="currCode != null"> + AND mj.avo_code = #{currCode} + </if> + </select> + </mapper> -- Gitblit v1.9.1