From 371462edc6b3ee1de97c235d4a019b544badda0d Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期六, 14 二月 2026 22:09:37 +0800
Subject: [PATCH] AGV工作档界面和逻辑调整

---
 src/main/java/com/zy/asrs/task/handler/AgvHandler.java |  109 ++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 72 insertions(+), 37 deletions(-)

diff --git a/src/main/java/com/zy/asrs/task/handler/AgvHandler.java b/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
index d475681..1a0006c 100644
--- a/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/AgvHandler.java
@@ -3,27 +3,20 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.core.common.Cools;
-import com.zy.asrs.entity.Task;
-import com.zy.asrs.entity.TaskLog;
-import com.zy.asrs.entity.WrkMast;
-import com.zy.asrs.entity.BasDevp;
-import com.zy.asrs.entity.LocCache;
+import com.zy.asrs.entity.*;
 import com.zy.asrs.mapper.BasDevpMapper;
 import com.zy.asrs.mapper.BasStationMapper;
 import com.zy.asrs.mapper.WrkMastMapper;
-import com.zy.asrs.service.ApiLogService;
-import com.zy.asrs.service.LocCacheService;
-import com.zy.asrs.service.TaskLogService;
-import com.zy.asrs.service.TaskService;
-import com.zy.asrs.service.WrkMastService;
-import com.zy.asrs.service.WrkMastLogService;
-import com.zy.asrs.entity.WrkMastLog;
+import com.zy.asrs.service.*;
 import com.zy.common.constant.ApiInterfaceConstant;
 import com.zy.common.properties.AgvProperties;
+import com.zy.common.utils.AgvUtils;
 import com.zy.common.utils.HttpHandler;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -71,7 +64,8 @@
 
     @Resource
     private WrkMastLogService wrkMastLogService;
-
+    @Resource
+    private LocMastService locMastService;
     /**
      * 绔欑偣杞璁℃暟鍣紝鐢ㄤ簬骞冲潎鍒嗛厤绔欑偣
      * Key: 绔欑偣缁勬爣璇嗭紙濡� "east" 鎴� "west"锛夛紝Value: 褰撳墠杞绱㈠紩
@@ -90,6 +84,7 @@
      * @param taskList 浠诲姟鍒楄〃锛堥�氬父鍙寘鍚竴涓换鍔★級
      * @return 鏄惁鎴愬姛澶勭悊浜嗕换鍔★紙鎴愬姛鍛煎彨AGV锛岀姸鎬佷粠7鍙樹负8锛�
      */
+    @Transactional(rollbackFor = Exception.class)
     public boolean callAgv(List<Task> taskList) {
         // 璁板綍璋冪敤鍫嗘爤锛岀‘淇濆彧鑳戒粠瀹氭椂浠诲姟璋冪敤
         StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
@@ -514,24 +509,36 @@
             WrkMast wrkMast = null;
             if (agvTask.getWrkNo() != null) {
                 wrkMast = wrkMastService.selectOne(
-                        new EntityWrapper<WrkMast>().eq("wrk_no", agvTask.getWrkNo())
+                        new EntityWrapper<WrkMast>()
+                                .eq("barcode", agvTask.getBarcode())
                 );
             }
 
             // 妫�鏌ュ巻鍙叉。鏄惁瀛樺湪
             WrkMastLog wrkMastLog = null;
-            if (agvTask.getWrkNo() != null) {
-                wrkMastLog = wrkMastLogService.selectOne(
-                        new EntityWrapper<WrkMastLog>().eq("wrk_no", agvTask.getWrkNo())
+            if (agvTask.getBarcode() != null) {
+                Wrapper<WrkMastLog> wrkMastLogMapper = new EntityWrapper<WrkMastLog>()
+                        .eq("barcode", agvTask.getBarcode());
+                if (agvTask.getAppeTime() != null) {
+                    // 璁$畻AGV鍒涘缓鏃堕棿涔嬪悗6灏忔椂鐨勬椂闂�
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(agvTask.getAppeTime());
+                    calendar.add(Calendar.HOUR_OF_DAY, 6); // 鍔�6灏忔椂
+                    Date endTime = calendar.getTime();
+                    // 鏌ヨ鏉′欢锛氬巻鍙叉。鍒涘缓鏃堕棿 >= AGV璁㈠崟鍒涘缓鏃堕棿 涓� <= AGV鍒涘缓鏃堕棿涔嬪悗6灏忔椂
+                    wrkMastLogMapper = wrkMastLogMapper.ge("appe_time", agvTask.getAppeTime())
+                            .le("appe_time", endTime).eq("barcode", agvTask.getBarcode()).orderBy("appe_time DESC");
+                }
+                List<WrkMastLog> wrkMastLogList = wrkMastLogService.selectList(
+                        wrkMastLogMapper
                 );
-            }
-            // 濡傛灉閫氳繃wrk_no娌℃壘鍒帮紝涓旀湁鏉$爜锛屽垯閫氳繃鏉$爜鏌ヨ
-            if (wrkMastLog == null && !Cools.isEmpty(agvTask.getBarcode())) {
-                List<WrkMastLog> logList = wrkMastLogService.selectList(
-                        new EntityWrapper<WrkMastLog>().eq("barcode", agvTask.getBarcode())
-                );
-                if (!logList.isEmpty()) {
-                    wrkMastLog = logList.get(0);
+                if(wrkMastLogList.size()==1){
+                    wrkMastLog=wrkMastLogList.get(0);
+                }else if(wrkMastLogList.size()>1){
+                    int locmastCount = locMastService.selectCount(new EntityWrapper<LocMast>().eq("loc_sts", "F").eq("barcode", agvTask.getBarcode()));
+                        if(locmastCount>0){
+                            wrkMastLog=wrkMastLogList.get(0);
+                        }
                 }
             }
 
@@ -669,14 +676,26 @@
         return result;
     }
 
+
     /**
      * 鏋勯�犺姹傚唴瀹癸紙浠欏伐M4鏍煎紡锛�
      */
     public String getRequest(Task task, String nameSpace) {
         JSONObject object = new JSONObject();
-        // taskId浣跨敤宸ヤ綔鍙凤紙wrk_no锛夛紝鏍煎紡锛歍 + 宸ヤ綔鍙�
-        // 濡傛灉宸ヤ綔鍙蜂负绌猴紝鍒欎娇鐢ㄤ换鍔D浣滀负澶囬��
-        String taskIdValue = (task.getWrkNo() != null) ? "T" + task.getWrkNo() : "T" + task.getId();
+        // taskId浣跨敤agvWrkNo瀛楁锛屽鏋滀负绌哄垯鐢熸垚鏂扮殑agvWrkNo
+        String taskIdValue = task.getAgvWrkNo();
+        if (taskIdValue == null || taskIdValue.isEmpty()) {
+            // 濡傛灉agvWrkNo涓虹┖锛岀敓鎴愭柊鐨刟gvWrkNo
+            if (task.getWrkNo() != null) {
+                taskIdValue = AgvUtils.generateAgvWrkNo(task.getWrkNo());
+                // 鏇存柊浠诲姟鐨刟gvWrkNo瀛楁
+                task.setAgvWrkNo(taskIdValue);
+                taskService.updateById(task);
+            } else {
+                // 濡傛灉宸ヤ綔鍙蜂篃涓虹┖锛屼娇鐢ㄤ换鍔D浣滀负澶囬�夛紙鍚戝悗鍏煎锛�
+                taskIdValue = "T" + task.getId();
+            }
+        }
         object.put("taskId", taskIdValue);
         // fromBin浣跨敤婧愬簱浣嶇紪鍙凤紙sourceLocNo锛夛紝濡傛灉涓虹┖鍒欎娇鐢ㄦ簮绔欑偣缂栧彿锛坰ourceStaNo锛変綔涓哄閫�
         String fromBin = task.getSourceLocNo();
@@ -1042,8 +1061,12 @@
             // todo 璁$畻agv鐩爣鏆傚瓨浣�
             int endSite = 2004;
 
+            // 鐢熸垚AGV宸ヤ綔鍙�
+            String agvWrkNo = AgvUtils.generateAgvWrkNo(wrkMast.getWrkNo());
+            
             // 鎻掑叆agv浠诲姟
             Task task = new Task(wrkMast.getWrkNo(), 7L, wrkMast.getIoType(), String.valueOf(wrkMast.getStaNo()), String.valueOf(endSite), null, wrkMast.getBarcode());
+            task.setAgvWrkNo(agvWrkNo); // 璁剧疆AGV宸ヤ綔鍙�
             taskService.insert(task);
             // 鏇存柊浠诲姟妗gv鎼繍鏍囪瘑
             wrkMast.setCallAgv(2);
@@ -1058,16 +1081,16 @@
      * 鍙栨秷AGV浠诲姟锛堜粰宸4鎺ュ彛锛�
      *
      * @param task 浠诲姟瀵硅薄
-     * @return 鏄惁鎴愬姛
+     * @return 鎴愬姛杩斿洖 null锛屽け璐ヨ繑鍥為敊璇師鍥�
      */
-    public boolean cancelAgvTask(Task task) {
+    public String cancelAgvTask(Task task) {
         if (!agvProperties.isSendTask()) {
-            return false;
+            return "鏈惎鐢ˋGV浠诲姟涓嬪彂";
         }
 
         if (task == null || task.getId() == null) {
             log.error("鍙栨秷AGV浠诲姟澶辫触锛氫换鍔℃垨浠诲姟ID涓虹┖");
-            return false;
+            return "浠诲姟鎴栦换鍔D涓虹┖";
         }
 
         String response = "";
@@ -1102,10 +1125,16 @@
 
         // 鏋勯�犲彇娑堜换鍔¤姹�
         JSONObject cancelRequest = new JSONObject();
-        // taskId浣跨敤宸ヤ綔鍙凤紙wrk_no锛夛紝鏍煎紡锛歍 + 宸ヤ綔鍙�
-        // 濡傛灉宸ヤ綔鍙蜂负绌猴紝鍒欎娇鐢ㄤ换鍔D浣滀负澶囬��
-        String taskIdValue = (task.getWrkNo() != null) ? "T" + task.getWrkNo() : "T" + task.getId();
-        cancelRequest.put("taskId", taskIdValue);
+        // taskId浣跨敤agvWrkNo瀛楁锛屽鏋滀负绌哄垯浣跨敤宸ヤ綔鍙锋垨浠诲姟ID浣滀负澶囬��
+        String taskIdValue = task.getAgvWrkNo();
+        if (taskIdValue == null || taskIdValue.isEmpty()) {
+            if (task.getWrkNo() != null) {
+                taskIdValue = AgvUtils.generateAgvWrkNo(task.getWrkNo());
+            } else {
+                taskIdValue = "T" + task.getId();
+            }
+        }
+        cancelRequest.put("taskId", task.getAgvWrkNo());
         cancelRequest.put("kind", kind);
         String body = cancelRequest.toJSONString();
 
@@ -1124,10 +1153,16 @@
                 String displayTaskId = (task.getWrkNo() != null) ? String.valueOf(task.getWrkNo()) : String.valueOf(task.getId());
                 log.info(namespace + "鍙栨秷AGV浠诲姟鎴愬姛锛歿}", displayTaskId);
             } else {
+                String errMsg = jsonObject.getString("message");
+                if (errMsg == null || errMsg.isEmpty()) {
+                    errMsg = "response: " + response;
+                }
                 log.error(namespace + "鍙栨秷AGV浠诲姟澶辫触锛侊紒锛乽rl锛歿}锛況equest锛歿}锛況esponse锛歿}", url, body, response);
+                return errMsg;
             }
         } catch (Exception e) {
             log.error(namespace + "鍙栨秷AGV浠诲姟寮傚父", e);
+            return e.getMessage() != null ? e.getMessage() : "鍙栨秷AGV浠诲姟寮傚父";
         } finally {
             try {
                 // 淇濆瓨鎺ュ彛鏃ュ織
@@ -1145,6 +1180,6 @@
             }
         }
 
-        return success;
+        return success ? null : "鍙栨秷AGV浠诲姟澶辫触";
     }
 }

--
Gitblit v1.9.1