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