From 54b4f53323d0833cbac86fd18932c5fa5a5447a8 Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期一, 17 二月 2025 14:19:17 +0800
Subject: [PATCH] #移库任务
---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/MainProcess.java | 2
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java | 35 +++++++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/MotionTimer.java | 67 +++++++++++++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java | 85 +++++++++++++++++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskMapper.java | 5 +
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/OpenUtils.java | 48 +++++++++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskService.java | 5 +
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskServiceImpl.java | 14 ++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/TaskStsType.java | 5 +
zy-asrs-wcs/src/main/resources/mapper/core/TaskMapper.xml | 16 +++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/TaskTimer.java | 3
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java | 6 +
12 files changed, 290 insertions(+), 1 deletions(-)
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/MainProcess.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/MainProcess.java
index 6f0c851..934ccfd 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/MainProcess.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/MainProcess.java
@@ -55,6 +55,8 @@
mainService.analyzeInBoundTask();
// 瑙f瀽灏忚溅绉诲姩宸ヤ綔妗�
mainService.analyzeMoveTask();
+ // 瑙f瀽灏忚溅杞借揣绉诲姩宸ヤ綔妗�
+ mainService.analyzeLadenMoveTask();
// 鍑哄簱 ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
mainService.ledExecute();
// 鍏朵粬 ===>> LED鏄剧ず鍣ㄥ浣嶏紝鏄剧ず榛樿淇℃伅
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java
index bb0d670..455181d 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java
@@ -39,6 +39,12 @@
return openUtils.createManualTakeTask(param);
}
+ //鐢熸垚杞借揣绉诲姩浠诲姟
+ @PostMapping("/createLadenMoveTakeTask")
+ public R createLadenMoveTakeTask(@RequestBody CreateManualTakeTaskParam param) {
+ return openUtils.createLadenMoveTakeTask(param);
+ }
+
//鐢熸垚灏忚溅绉诲姩浠诲姟
@PostMapping("/createMoveTask")
public R createMoveTask(@RequestBody CreateMoveTaskParam param) {
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
index e645221..a04b0ba 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
@@ -1605,4 +1605,89 @@
return motionList;
}
+ /**
+ * 鐢熸垚灏忚溅杞借揣杩佺Щ鍔ㄤ綔
+ */
+ public List<Motion> generateShuttleLadenMoveMotion(Task task) {
+ List<Motion> motionList = new ArrayList<>();
+ if (task.getTaskSts() != TaskStsType.NEW_LADEN_MOVE.sts) {
+ return motionList;
+ }
+ //originLoc 婧愬簱浣�
+ String originLoc = task.getOriginLoc();
+ // locNo 鐩爣搴撲綅
+ String locNo = task.getDestLoc();
+
+ Device shuttleDevice = deviceService.getOne(new LambdaQueryWrapper<Device>()
+ .eq(Device::getDeviceNo, task.getShuttleNo())
+ .eq(Device::getDeviceType, DeviceCtgType.SHUTTLE.val())
+ .eq(Device::getHostId, task.getHostId())
+ .eq(Device::getStatus, 1));
+ if (shuttleDevice == null) {
+ return motionList;
+ }
+
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleDevice.getId().intValue());
+ if (shuttleThread == null) {
+ return motionList;
+ }
+
+ ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+ if (shuttleProtocol == null || shuttleProtocol.getShuttleNo() == null) {
+ return motionList;
+ }
+
+ String shuttleLocNo = shuttleProtocol.getCurrentLocNo();
+
+ // 鍒ゆ柇绌挎杞︽槸鍚﹀湪鐩爣灞�
+ if (Utils.getLev(shuttleLocNo) == Utils.getLev(locNo)) {
+
+ if (!shuttleLocNo.equals(locNo)) {//灏忚溅涓嶅湪鐩爣搴撲綅
+ // 绌挎杞﹁蛋琛岃嚦婧愬簱浣�
+ motionList.addAll(kernelService.shuttleMove(
+ MotionDto.build((dto -> {
+ dto.setShuttleNo(shuttleDevice.getId().intValue());
+ dto.setLocNo(shuttleLocNo);
+ })),
+ MotionDto.build((dto -> {
+ dto.setShuttleNo(shuttleDevice.getId().intValue());
+ dto.setLocNo(originLoc);
+ })),
+ MotionCtgType.SHUTTLE_MOVE
+ ));
+
+ // 绌挎杞﹂《鍗�
+ motionList.add(Motion.build(motion -> {
+ motion.setDeviceCtg(DeviceCtgType.SHUTTLE.val());
+ motion.setDevice(String.valueOf(shuttleDevice.getId()));
+ motion.setMotionCtg(MotionCtgType.SHUTTLE_PALLET_LIFT.val());
+ }));
+
+ // 绌挎杞﹁蛋琛岃嚦鐩爣搴撲綅
+ motionList.addAll(kernelService.shuttleMove(
+ MotionDto.build((dto -> {
+ dto.setShuttleNo(shuttleDevice.getId().intValue());
+ dto.setLocNo(originLoc);
+ })),
+ MotionDto.build((dto -> {
+ dto.setShuttleNo(shuttleDevice.getId().intValue());
+ dto.setLocNo(locNo);
+ })),
+ MotionCtgType.SHUTTLE_MOVE
+ ));
+
+ //绌挎杞︽墭鐩樹笅闄�
+ motionList.add(Motion.build(motion -> {
+ motion.setDeviceCtg(DeviceCtgType.SHUTTLE.val());
+ motion.setDevice(String.valueOf(shuttleDevice.getId()));
+ motion.setMotionCtg(MotionCtgType.SHUTTLE_PALLET_DOWN.val());
+ }));
+
+ }
+
+ } else {
+ //灏忚溅璺ㄥ眰
+ }
+ return motionList;
+ }
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskMapper.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskMapper.java
index ec0fd46..8a99bf8 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskMapper.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskMapper.java
@@ -48,4 +48,9 @@
Task selectChargeWorking(Integer shuttleNo);
+ List<Task> selectWaitAnalyzeLadenMoveTask();
+
+ List<Task> selectLadenMoveByAnalyzeSts();
+
+ List<Task> selectLadenMoveByExecuteSts();
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/TaskStsType.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/TaskStsType.java
index 405119c..697ba67 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/TaskStsType.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/TaskStsType.java
@@ -31,6 +31,11 @@
ANALYZE_MANUAL(402, "鎵嬪姩浠诲姟瑙f瀽"),
EXECUTE_MANUAL(403, "鎵ц鎵嬪姩浠诲姟"),
COMPLETE_MANUAL(410, "鎵嬪姩浠诲姟瀹屾垚"),
+
+ NEW_LADEN_MOVE(501,"鐢熸垚绉诲簱浠诲姟"),
+ ANALYZE_LADEN_MOVE(502, "绉诲簱浠诲姟瑙f瀽"),
+ EXECUTE_LADEN_MOVE(503, "鎵ц绉诲簱浠诲姟"),
+ COMPLETE_LADEN_MOVE(504, "绉诲簱浠诲姟瀹屾垚"),
;
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskService.java
index fbdde05..0e7fdda 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskService.java
@@ -46,4 +46,9 @@
Task selectChargeWorking(Integer shuttleNo);
+ List<Task> selectWaitAnalyzeLadenMoveTask();
+
+ List<Task> selectLadenMoveByAnalyzeSts();
+
+ List<Task> selectLadenMoveByExecuteSts();
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
index 2b00511..a0abfe3 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
@@ -1290,4 +1290,39 @@
}
}
+ // 瑙f瀽灏忚溅杞借揣绉诲姩宸ヤ綔妗�
+ public synchronized void analyzeLadenMoveTask() {
+ for (Task task : taskService.selectWaitAnalyzeLadenMoveTask()) {
+ if (Cools.isEmpty(task.getShuttleNo())) {
+ //鍒嗛厤灏忚溅
+ //鎼滅储绌洪棽杞�
+ ShuttleThread shuttleThread = shuttleDispatcher.searchIdleShuttle(task);
+ if (shuttleThread == null) {
+ News.info("{}浠诲姟鏈壘鍒扮┖闂茬┛姊溅", task.getTaskNo());
+ continue;
+ }
+
+ task.setShuttleNo(Integer.valueOf(shuttleThread.getDevice().getDeviceNo()));//淇濆瓨绌挎杞﹀彿
+ task.setUpdateTime(new Date());
+ if (!taskService.updateById(task)) {
+ News.info("{}浠诲姟鏇存柊绌挎杞﹀彿澶辫触", task.getTaskNo());
+ }
+ continue;
+ }
+
+ // generate motion list
+ List<Motion> motionList = analyzeService.generateShuttleLadenMoveMotion(task);
+ if (motionList.isEmpty()) {
+ continue;
+ }
+ motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()), task.getHostId());
+
+ // 鏇存柊宸ヤ綔涓绘。
+ task.setTaskSts(TaskStsType.ANALYZE_LADEN_MOVE.sts); // 宸ヤ綔鐘舵��
+ task.setUpdateTime(new Date());
+ if (!taskService.updateById(task)) {
+ News.error("鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", task.getTaskNo());
+ }
+ }
+ }
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskServiceImpl.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskServiceImpl.java
index 89b2b24..bc13c7f 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskServiceImpl.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskServiceImpl.java
@@ -140,4 +140,18 @@
public Task selectChargeWorking(Integer shuttleNo) {
return this.baseMapper.selectChargeWorking(shuttleNo);
}
+ @Override
+ public List<Task> selectWaitAnalyzeLadenMoveTask() {
+ return this.baseMapper.selectWaitAnalyzeLadenMoveTask();
+ }
+
+ @Override
+ public List<Task> selectLadenMoveByAnalyzeSts() {
+ return this.baseMapper.selectLadenMoveByAnalyzeSts();
+ }
+
+ @Override
+ public List<Task> selectLadenMoveByExecuteSts() {
+ return this.baseMapper.selectLadenMoveByExecuteSts();
+ }
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/MotionTimer.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/MotionTimer.java
index d81e150..f7ac1cb 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/MotionTimer.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/MotionTimer.java
@@ -245,6 +245,73 @@
}
@Scheduled(cron = "0/1 * * * * ? ")
+ public synchronized void executeLadenMoveTask() {
+ Date now = new Date();
+ // ANALYZE_CHARGE
+ for (Task taskCharge : taskService.selectLadenMoveByAnalyzeSts()) {
+ Motion executingMotion = motionService.selectOfTop1(taskCharge.getUuid(), MotionStsType.EXECUTING.val(), taskCharge.getHostId());
+ if (executingMotion != null) {//瀛樺湪姝e湪鎵ц鐨刴otion
+ if (executingMotion.getSync() == 1) {//褰撳墠鎵ц涓殑鍔ㄤ綔鏄悓姝ュ姩浣滐紝绛夊緟鎵ц瀹屾垚鍚庡啀鎵ц涓嬩竴涓姩浣�
+ continue;
+ }
+
+ //寮傛鍔ㄤ綔锛屽彧鍏佽涓嬩竴鏉″姩浣滆鎵ц
+ Motion nextMotion = motionService.getOne(new LambdaQueryWrapper<Motion>().eq(Motion::getUuid, executingMotion.getUuid()).eq(Motion::getPriority, executingMotion.getPriority() - 1));
+ if (nextMotion != null) {
+ if (!(nextMotion.getMotionSts() == MotionStsType.INIT.val() || nextMotion.getMotionSts() == MotionStsType.WAITING.val())) {
+ continue;//涓嬩竴鏉″姩浣滃凡缁忚鎵ц锛屼笉鍏佽鍐嶆墽琛屽悗缁姩浣�
+ }
+ }
+ }
+
+ Motion motion = motionService.selectOfTop1(taskCharge.getUuid(), MotionStsType.INIT.val(), taskCharge.getHostId());
+ if (null != motion) {
+ boolean result = this.executeMotion(motion);
+ if (!result) {
+ continue;
+ }
+ // 鏇存柊Task
+ switch (TaskStsType.query(taskCharge.getTaskSts())) {
+ case ANALYZE_LADEN_MOVE:
+ taskCharge.setTaskSts(TaskStsType.EXECUTE_LADEN_MOVE.sts);
+ break;
+ }
+ taskCharge.setUpdateTime(now);
+ if (!taskService.updateById(taskCharge)) {
+ log.error("{}鍏朵粬宸ヤ綔妗f洿鏂扮姸鎬佸け璐ワ紒", taskCharge.getTaskNo());
+ }
+ }
+ }
+ // EXECUTE_CHARGE
+ for (Task taskCharge : taskService.selectLadenMoveByExecuteSts()) {
+ if (!motionService.hasRunningMotion(taskCharge.getUuid(), taskCharge.getHostId())) {
+ Motion motion = motionService.selectOfTop1(taskCharge.getUuid(), MotionStsType.WAITING.val(), taskCharge.getHostId());
+ if (null != motion) {
+ boolean result = this.executeMotion(motion);
+ if (!result) {
+ continue;
+ }
+ } else {
+ if (motionService.selectOfTop1(taskCharge.getUuid(), MotionStsType.EXECUTING.val(), taskCharge.getHostId()) != null) {
+ continue;
+ }
+
+ // 鏇存柊Task
+ switch (TaskStsType.query(taskCharge.getTaskSts())) {
+ case EXECUTE_LADEN_MOVE:
+ taskCharge.setTaskSts(TaskStsType.COMPLETE_LADEN_MOVE.sts);
+ break;
+ }
+ taskCharge.setUpdateTime(now);
+ if (!taskService.updateById(taskCharge)) {
+ log.error("{}浠栧伐浣滄。鏇存柊鐘舵�佸け璐ワ紒", taskCharge.getTaskNo());
+ }
+ }
+ }
+ }
+ }
+
+ @Scheduled(cron = "0/1 * * * * ? ")
public synchronized void executeMoveTask() {
Date now = new Date();
// ANALYZE_MOVE
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/TaskTimer.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/TaskTimer.java
index bd25e79..487a6b8 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/TaskTimer.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/timer/TaskTimer.java
@@ -74,7 +74,8 @@
taskSts.add(TaskStsType.COMPLETE_OUTBOUND.sts);
// taskSts.add(TaskStsType.COMPLETE_CHARGE.sts);
// taskSts.add(TaskStsType.COMPLETE_MOVE.sts);
- taskSts.add(TaskStsType.COMPLETE_MANUAL.sts);
+// taskSts.add(TaskStsType.COMPLETE_MANUAL.sts);
+ taskSts.add(TaskStsType.COMPLETE_LADEN_MOVE.sts);
Dict reportWms = dictService.getOne(new LambdaQueryWrapper<Dict>().eq(Dict::getFlag, "reportWms"));
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/OpenUtils.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/OpenUtils.java
index a666960..e5b014c 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/OpenUtils.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/OpenUtils.java
@@ -435,4 +435,52 @@
return R.ok();
}
+ public R createLadenMoveTakeTask(CreateManualTakeTaskParam param) {
+ //鑾峰彇鎵嬪姩浠诲姟绫诲瀷
+ TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>()
+ .eq(TaskCtg::getFlag, String.valueOf(TaskCtgType.MOVE))
+ .eq(TaskCtg::getStatus, 1));
+ if (taskCtg == null) {
+ return R.error("浠诲姟绫诲瀷寮傚父");
+ }
+
+ Task one = taskService.getOne(new LambdaQueryWrapper<Task>()
+ .eq(Task::getTaskCtg, taskCtg.getId())
+ .eq(Task::getOriginLoc, param.getOriginLoc())
+ .eq(Task::getDestLoc, param.getDestLoc()));
+ if (one != null) {
+ return R.error("浠诲姟宸插瓨鍦�");
+ }
+
+ //浼樺厛绾�
+ Integer priority = 10;
+ if (param.getPriority() != null) {
+ priority = param.getPriority();
+ }
+
+ Task task = new Task();
+ task.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
+ task.setTaskNo(String.valueOf(Utils.getTaskNo("OUT")));
+ task.setWmsTaskNo(param.getTaskNo());
+ task.setTaskSts(TaskStsType.NEW_LADEN_MOVE.sts);
+ task.setTaskCtg(taskCtg.getId());
+ task.setPriority(priority);
+ task.setOriginSite(null);
+ task.setOriginLoc(param.getOriginLoc());//婧愬簱浣�
+ task.setDestSite(null);
+ task.setDestLoc(param.getDestLoc());//鐩爣搴撲綅
+ task.setIoTime(new Date());
+ task.setStartTime(new Date());
+ task.setStatus(1);
+ task.setMemo("");
+ task.setShuttleNo(null);//绛夊緟涓荤嚎绋嬪垎閰嶅皬杞�
+ task.setRecordLoc(param.getRecord() ? "Y" : "N");//璁板綍搴撳瓨淇℃伅
+ task.setHostId(1L);//涓存椂鎺у埗鍙厑璁竓ost涓�1
+
+ boolean result = taskService.save(task);
+ if (!result) {
+ return R.error("鐢熸垚鎵嬪姩鍙栨斁璐т换鍔″け璐ワ紒");
+ }
+ return R.ok();
+ }
}
diff --git a/zy-asrs-wcs/src/main/resources/mapper/core/TaskMapper.xml b/zy-asrs-wcs/src/main/resources/mapper/core/TaskMapper.xml
index 33b6eef..75256bc 100644
--- a/zy-asrs-wcs/src/main/resources/mapper/core/TaskMapper.xml
+++ b/zy-asrs-wcs/src/main/resources/mapper/core/TaskMapper.xml
@@ -129,5 +129,21 @@
and shuttle_no = #{shuttleNo}
order by priority desc,start_time,task_no asc
</select>
+ <select id="selectWaitAnalyzeLadenMoveTask" resultType="com.zy.asrs.wcs.core.entity.Task">
+ select * from wcs_task where task_sts = 501
+ order by priority desc,start_time,task_no asc
+ </select>
+ <select id="selectLadenMoveByAnalyzeSts" resultType="com.zy.asrs.wcs.core.entity.Task">
+ select * from wcs_task
+ where 1=1
+ and task_sts in (502)
+ order by priority desc,start_time,task_no asc
+ </select>
+ <select id="selectLadenMoveByExecuteSts" resultType="com.zy.asrs.wcs.core.entity.Task">
+ select * from wcs_task
+ where 1=1
+ and task_sts in (503)
+ order by priority desc,start_time,task_no asc
+ </select>
</mapper>
--
Gitblit v1.9.1