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