From 3ce75be2e677235149e6d9b2f3141bfde7395dbd Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期六, 08 六月 2024 10:51:40 +0800
Subject: [PATCH] #
---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/MainProcess.java | 4
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java | 39 +++++++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskMapper.java | 2
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/param/CreateOutTaskParam.java | 17 +++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskService.java | 2
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskServiceImpl.java | 5 +
zy-asrs-wcs/src/main/resources/mapper/core/TaskMapper.xml | 5 +
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/param/CreateManualTakeTaskParam.java | 17 +++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java | 173 ++++++++++++++++++++++++++++++++++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/param/CreateMoveTaskParam.java | 14 ++
10 files changed, 276 insertions(+), 2 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 dfe6aa0..f4c1a03 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
@@ -48,9 +48,11 @@
// 鍏ュ簱 ===>> 鍏ュ簱绔欏埌鍫嗗灈鏈虹珯锛屾牴鎹潯鐮佹壂鎻忕敓鎴愬叆搴撳伐浣滄。
mainService.generateInboundWrk(); // 缁勬墭
// 瑙f瀽鍑哄簱宸ヤ綔妗�
- mainService.generateOutboundWrkMast();
+ mainService.analyzeOutBoundTask();
// 瑙f瀽鍏ュ簱宸ヤ綔妗�
mainService.analyzeInBoundTask();
+ // 瑙f瀽灏忚溅绉诲姩宸ヤ綔妗�
+ mainService.analyzeMoveTask();
// 鍑哄簱 ===>> 宸ヤ綔妗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
new file mode 100644
index 0000000..4399599
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/OpenController.java
@@ -0,0 +1,173 @@
+package com.zy.asrs.wcs.core.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.framework.common.R;
+import com.zy.asrs.framework.common.SnowflakeIdWorker;
+import com.zy.asrs.wcs.core.domain.param.CreateManualTakeTaskParam;
+import com.zy.asrs.wcs.core.domain.param.CreateMoveTaskParam;
+import com.zy.asrs.wcs.core.domain.param.CreateOutTaskParam;
+import com.zy.asrs.wcs.core.entity.Task;
+import com.zy.asrs.wcs.core.entity.TaskCtg;
+import com.zy.asrs.wcs.core.model.enums.DeviceCtgType;
+import com.zy.asrs.wcs.core.model.enums.TaskStsType;
+import com.zy.asrs.wcs.core.service.TaskCtgService;
+import com.zy.asrs.wcs.core.service.TaskService;
+import com.zy.asrs.wcs.core.utils.Utils;
+import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
+import com.zy.asrs.wcs.rcs.entity.Device;
+import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
+import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
+import com.zy.asrs.wcs.rcs.service.DeviceService;
+import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
+import com.zy.asrs.wcs.system.controller.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+
+/**
+ * 瀵瑰鏆撮湶鎺ュ彛
+ * 鎻愪緵浠诲姟鐢熸垚銆佽澶囪繍鍔ㄧ瓑鎺ュ彛
+ */
+@RestController
+@RequestMapping("/openapi")
+public class OpenController extends BaseController {
+
+ @Autowired
+ private SnowflakeIdWorker snowflakeIdWorker;
+ @Autowired
+ private TaskCtgService taskCtgService;
+ @Autowired
+ private TaskService taskService;
+ @Autowired
+ private DeviceService deviceService;
+
+ //鐢熸垚鍑哄簱浠诲姟
+ @PostMapping("/createOutTask")
+ public R createOutTask(@RequestBody CreateOutTaskParam param) {
+ //鑾峰彇鍑哄簱浠诲姟绫诲瀷
+ TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>()
+ .eq(TaskCtg::getFlag, "OUT")
+ .eq(TaskCtg::getStatus, 1));
+ if (taskCtg == null) {
+ return R.error("浠诲姟绫诲瀷寮傚父");
+ }
+
+ Task task = new Task();
+ task.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
+ task.setTaskNo(String.valueOf(Utils.getTaskNo("OUT")));
+ task.setTaskSts(TaskStsType.NEW_OUTBOUND.sts);
+ task.setTaskCtg(taskCtg.getId());
+ task.setPriority(10);
+ task.setOriginSite(param.getOriginSite());
+ task.setOriginLoc(param.getOriginLoc());
+ task.setDestSite(param.getDestSite());
+ task.setDestLoc(null);
+ task.setIoTime(new Date());
+ task.setStartTime(new Date());
+ task.setStatus(1);
+ task.setMemo("");
+ task.setShuttleNo(null);//绛夊緟涓荤嚎绋嬪垎閰嶅皬杞�
+ task.setRecordLoc("Y");//璁板綍搴撳瓨淇℃伅
+ task.setHostId(1L);//涓存椂鎺у埗鍙厑璁竓ost涓�1
+
+ boolean result = taskService.save(task);
+ if (!result) {
+ return R.error("鐢熸垚鍑哄簱浠诲姟澶辫触锛�");
+ }
+ return R.ok();
+ }
+
+ //鐢熸垚鎵嬪姩鍙栨斁璐т换鍔�
+ @PostMapping("/createManualTakeTask")
+ public R createManualTakeTask(@RequestBody CreateManualTakeTaskParam param) {
+ //鑾峰彇鎵嬪姩浠诲姟绫诲瀷
+ TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>()
+ .eq(TaskCtg::getFlag, "MANUAL")
+ .eq(TaskCtg::getStatus, 1));
+ if (taskCtg == null) {
+ return R.error("浠诲姟绫诲瀷寮傚父");
+ }
+
+ Task task = new Task();
+ task.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
+ task.setTaskNo(String.valueOf(Utils.getTaskNo("OUT")));
+ task.setTaskSts(TaskStsType.NEW_MANUAL.sts);
+ task.setTaskCtg(taskCtg.getId());
+ task.setPriority(10);
+ 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();
+ }
+
+ //鐢熸垚灏忚溅绉诲姩浠诲姟
+ @PostMapping("/createMoveTask")
+ public R createMoveTask(@RequestBody CreateMoveTaskParam param) {
+ //鑾峰彇鍑哄簱浠诲姟绫诲瀷
+ TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>()
+ .eq(TaskCtg::getFlag, "MOVE")
+ .eq(TaskCtg::getStatus, 1));
+ if (taskCtg == null) {
+ return R.error("浠诲姟绫诲瀷寮傚父");
+ }
+
+ Device device = deviceService.getOne(new LambdaQueryWrapper<Device>()
+ .eq(Device::getDeviceType, DeviceCtgType.SHUTTLE.val())
+ .eq(Device::getDeviceNo, param.getShuttleNo())
+ .eq(Device::getHostId, 1)
+ .eq(Device::getStatus, 1));
+ if (device == null) {
+ return R.error("绌挎杞︿笉瀛樺湪");
+ }
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue());
+ if (shuttleThread == null) {
+ return R.error("绌挎杞︿笉鍦ㄧ嚎");
+ }
+ ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+ if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != Utils.getLev(param.getDestSite())) {
+ return R.error("绌挎杞﹀拰鐩爣浣嶇疆涓嶅湪鍚屼竴妤煎眰");
+ }
+
+ Task task = new Task();
+ task.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
+ task.setTaskNo(String.valueOf(Utils.getTaskNo("OUT")));
+ task.setTaskSts(TaskStsType.NEW_MOVE.sts);
+ task.setTaskCtg(taskCtg.getId());
+ task.setPriority(10);
+ task.setOriginSite(null);
+ task.setOriginLoc(null);
+ task.setDestSite(param.getDestSite());
+ task.setDestLoc(null);
+ task.setIoTime(new Date());
+ task.setStartTime(new Date());
+ task.setStatus(1);
+ task.setMemo("");
+ task.setShuttleNo(param.getShuttleNo());
+ task.setRecordLoc("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/java/com/zy/asrs/wcs/core/domain/param/CreateManualTakeTaskParam.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/param/CreateManualTakeTaskParam.java
new file mode 100644
index 0000000..96fc209
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/param/CreateManualTakeTaskParam.java
@@ -0,0 +1,17 @@
+package com.zy.asrs.wcs.core.domain.param;
+
+import lombok.Data;
+
+@Data
+public class CreateManualTakeTaskParam {
+
+ //婧愬簱浣�
+ private String originLoc;
+
+ //鐩爣搴撲綅
+ private String destLoc;
+
+ //鏄惁璁板綍搴撳瓨淇℃伅
+ private Boolean record;
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/param/CreateMoveTaskParam.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/param/CreateMoveTaskParam.java
new file mode 100644
index 0000000..76c45cc
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/param/CreateMoveTaskParam.java
@@ -0,0 +1,14 @@
+package com.zy.asrs.wcs.core.domain.param;
+
+import lombok.Data;
+
+@Data
+public class CreateMoveTaskParam {
+
+ //灏忚溅鍙�
+ private Integer shuttleNo;
+
+ //鐩爣搴撲綅
+ private String destSite;
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/param/CreateOutTaskParam.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/param/CreateOutTaskParam.java
new file mode 100644
index 0000000..49285ab
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/param/CreateOutTaskParam.java
@@ -0,0 +1,17 @@
+package com.zy.asrs.wcs.core.domain.param;
+
+import lombok.Data;
+
+@Data
+public class CreateOutTaskParam {
+
+ //鍑哄簱搴撲綅
+ private String originLoc;
+
+ //婧愮珯
+ private String originSite;
+
+ //鐩爣绔�
+ private String destSite;
+
+}
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 46318d6..0601b8d 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
@@ -34,6 +34,8 @@
List<Task> selectPakOut();
+ List<Task> selectWaitAnalyzeMoveTask();
+
List<Task> hasChargeInLoc(String locNo);
Task selectMoveWorking(Integer shuttleNo);
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 38ba46e..a39dbe7 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
@@ -32,6 +32,8 @@
List<Task> selectPakOut();
+ List<Task> selectWaitAnalyzeMoveTask();
+
List<Task> hasChargeInLoc(String locNo);
Task selectMoveWorking(Integer shuttleNo);
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 5b7672b..c4cb96a 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
@@ -9,6 +9,7 @@
import com.zy.asrs.common.utils.HttpHandler;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.SnowflakeIdWorker;
+import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wcs.core.domain.dto.MatDto;
import com.zy.asrs.wcs.core.domain.dto.RedisMapDto;
import com.zy.asrs.wcs.core.domain.dto.StaDto;
@@ -440,7 +441,7 @@
/**
* 鍑哄簱 ====>> 鍚屼竴鏃堕棿涓�鍙扮┛姊溅鍙兘鏈変竴涓嚭搴撲换鍔�
*/
- public synchronized void generateOutboundWrkMast() {
+ public synchronized void analyzeOutBoundTask() {
List<Task> tasks = taskService.selectPakOut();
if (tasks.isEmpty()) {
return;
@@ -476,6 +477,23 @@
// continue;//娴呭簱浣嶅瓨鍦ㄦ湭鎵ц浠诲姟
// }
+ 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.generateMotion(task);
if (Cools.isEmpty(motionList)) {
@@ -495,6 +513,25 @@
}
}
+ // 瑙f瀽灏忚溅绉诲姩宸ヤ綔妗�
+ public synchronized void analyzeMoveTask() {
+ for (Task task : taskService.selectWaitAnalyzeMoveTask()) {
+ // generate motion list
+ List<Motion> motionList = analyzeService.generateMotion(task);
+ if (motionList.isEmpty()) {
+ continue;
+ }
+ motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()));
+
+ // 鏇存柊宸ヤ綔涓绘。
+ task.setTaskSts(TaskStsType.ANALYZE_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 cb3a328..9eeecf4 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
@@ -107,6 +107,11 @@
}
@Override
+ public List<Task> selectWaitAnalyzeMoveTask() {
+ return this.baseMapper.selectWaitAnalyzeMoveTask();
+ }
+
+ @Override
public List<Task> hasChargeInLoc(String locNo) {
return this.baseMapper.hasChargeInLoc(locNo);
}
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 9d0fbc2..40cd790 100644
--- a/zy-asrs-wcs/src/main/resources/mapper/core/TaskMapper.xml
+++ b/zy-asrs-wcs/src/main/resources/mapper/core/TaskMapper.xml
@@ -78,6 +78,11 @@
order by priority desc,start_time,task_no asc
</select>
+ <select id="selectWaitAnalyzeMoveTask" resultType="com.zy.asrs.wcs.core.entity.Task">
+ select * from wcs_task where task_sts = 301
+ order by priority desc,start_time,task_no asc
+ </select>
+
<select id="hasChargeInLoc" resultType="com.zy.asrs.wcs.core.entity.Task">
select * from wcs_task
where task_sts in (201,202,203,204)
--
Gitblit v1.9.1