From 2ae8d909b139ffecdad54e6d56d4576e38a79ebf Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期二, 17 三月 2026 16:12:22 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/plugin/NormalProcess.java    |   64 ++++++++++++++++++++++++++++++--
 src/main/java/com/zy/core/enums/RedisKeyType.java      |    3 +
 src/main/java/com/zy/common/service/CommonService.java |   20 ++++++---
 3 files changed, 76 insertions(+), 11 deletions(-)

diff --git a/src/main/java/com/zy/common/service/CommonService.java b/src/main/java/com/zy/common/service/CommonService.java
index ea206af..d8d455e 100644
--- a/src/main/java/com/zy/common/service/CommonService.java
+++ b/src/main/java/com/zy/common/service/CommonService.java
@@ -1,5 +1,6 @@
 package com.zy.common.service;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
@@ -12,21 +13,17 @@
 import com.zy.common.utils.NavigateUtils;
 import com.zy.common.utils.RedisUtil;
 import com.zy.core.News;
-import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.SlaveConnection;
 import com.zy.core.enums.*;
 import com.zy.core.model.StationObjModel;
-import com.zy.core.model.Task;
 import com.zy.core.model.command.StationCommand;
+import com.zy.core.model.protocol.StationProtocol;
 import com.zy.core.thread.StationThread;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Random;
+import java.util.*;
 
 @Slf4j
 @Service
@@ -271,7 +268,16 @@
         StationCommand command = stationThread.getCommand(StationCommandType.WRITE_INFO,
                 wrkMast.getWrkNo(), Integer.valueOf(param.getSourceStaNo()), Integer.valueOf(param.getSourceStaNo()), 0);
 
-        MessageQueue.offer(SlaveType.Devp, 1, new Task(2, command));
+        Map<Integer, StationProtocol> statusMap = stationThread.getStatusMap();
+        StationProtocol stationProtocol = statusMap.get(command.getStationId());
+
+        JSONObject data = new JSONObject();
+        data.put("oldTaskNo", wrkMast.getWrkNo());
+        data.put("newTaskNo", stationProtocol.getTaskNo());
+        data.put("command", command);
+        data.put("stationId", command.getStationId());
+        data.put("deviceNo", 1);
+        redisUtil.set(RedisKeyType.RECEIVE_IN_TASK_CHANGE_STATION_TASK.key + command.getStationId(), JSONObject.toJSONString(data), 60 * 5);
 
         if (findCrnResult.getCrnType().equals(SlaveType.Crn)) {
             wrkMast.setCrnNo(findCrnResult.getCrnNo());
diff --git a/src/main/java/com/zy/core/enums/RedisKeyType.java b/src/main/java/com/zy/core/enums/RedisKeyType.java
index 01de1e1..aade0c5 100644
--- a/src/main/java/com/zy/core/enums/RedisKeyType.java
+++ b/src/main/java/com/zy/core/enums/RedisKeyType.java
@@ -57,6 +57,9 @@
     AI_CHAT_META("ai_chat_meta_"),
     MAIN_PROCESS_PSEUDOCODE("main_process_pseudocode"),
     PLANNER_SCHEDULE("planner_schedule_"),
+
+    RECEIVE_IN_TASK_CHANGE_STATION_TASK("receive_in_task_change_station_task_"),
+    RECEIVE_IN_TASK_CHANGE_STATION_TASK_SEND_LIMIT("receive_in_task_change_station_task_send_limit_"),
     ;
 
     public String key;
diff --git a/src/main/java/com/zy/core/plugin/NormalProcess.java b/src/main/java/com/zy/core/plugin/NormalProcess.java
index ebc4bdf..5973403 100644
--- a/src/main/java/com/zy/core/plugin/NormalProcess.java
+++ b/src/main/java/com/zy/core/plugin/NormalProcess.java
@@ -34,10 +34,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Slf4j
 @Component
@@ -85,6 +82,8 @@
 
         //涓婃姤鍫嗗灈鏈篋B110鐘舵�佹暟鎹�
         reportDb110();
+        //璺ㄥ尯鍏ュ簱浠诲姟涓嬪彂锛屼慨鏀圭珯鐐逛换鍔″彿涓哄叆搴撲换鍔″彿
+        taskToNewAreaInTaskStationSend();
     }
 
     /**
@@ -317,4 +316,61 @@
         }
     }
 
+    //璺ㄥ尯鍏ュ簱浠诲姟涓嬪彂锛屼慨鏀圭珯鐐逛换鍔″彿涓哄叆搴撲换鍔″彿
+    public synchronized void taskToNewAreaInTaskStationSend() {
+        Set<String> list = redisUtil.searchKeys(RedisKeyType.RECEIVE_IN_TASK_CHANGE_STATION_TASK.key);
+        for (String key : list) {
+            Object dataStr = redisUtil.get(key);
+            if (dataStr == null) {
+                continue;
+            }
+
+            JSONObject data = JSON.parseObject(dataStr.toString());
+            Integer oldTaskNo = data.getInteger("oldTaskNo");
+            Integer newTaskNo = data.getInteger("newTaskNo");
+            StationCommand command = data.getObject("command", StationCommand.class);
+            Integer stationId = data.getInteger("stationId");
+            Integer deviceNo = data.getInteger("deviceNo");
+
+            Object lock = redisUtil.get(RedisKeyType.RECEIVE_IN_TASK_CHANGE_STATION_TASK_SEND_LIMIT.key + stationId);
+            if(lock != null){
+                continue;
+            }
+
+            StationThread stationThread = (StationThread) SlaveConnection.get(SlaveType.Devp, deviceNo);
+            if(stationThread == null){
+                continue;
+            }
+
+            Map<Integer, StationProtocol> statusMap = stationThread.getStatusMap();
+            StationProtocol stationProtocol = statusMap.get(stationId);
+            if(stationProtocol == null){
+                continue;
+            }
+
+            if (!stationProtocol.isAutoing()) {
+                continue;
+            }
+
+            if (!stationProtocol.isLoading()) {
+                continue;
+            }
+
+            if (stationProtocol.getTaskNo() == 0) {
+                continue;
+            }
+
+            if (!stationProtocol.getTaskNo().equals(oldTaskNo)) {
+                //鍜岀紦瀛樺懡浠や笉鐩稿悓鍒犻櫎
+                redisUtil.del(key);
+                continue;
+            }
+
+            //缂撳瓨鍛戒护鐩稿悓锛屼笅鍙戝懡浠ゆ敼鍙樺叆搴撲换鍔″彿淇℃伅
+            MessageQueue.offer(SlaveType.Devp, deviceNo, new Task(2, command));
+            redisUtil.set(RedisKeyType.RECEIVE_IN_TASK_CHANGE_STATION_TASK_SEND_LIMIT.key + stationId, "lock", 5);
+        }
+
+    }
+
 }

--
Gitblit v1.9.1