From 39a729e911ca4e5fb1c629fabf71cc3cf02dade8 Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期六, 12 十月 2024 16:37:19 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java |  165 ++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 116 insertions(+), 49 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java
index 19e3251..56f00c1 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/NyShuttleThread.java
@@ -9,6 +9,7 @@
 import com.zy.asrs.framework.common.SpringUtils;
 import com.zy.asrs.framework.exception.CoolException;
 import com.zy.asrs.wcs.common.ExecuteSupport;
+import com.zy.asrs.wcs.core.action.ShuttleAction;
 import com.zy.asrs.wcs.core.domain.param.ShuttleMoveLocParam;
 import com.zy.asrs.wcs.core.entity.BasShuttle;
 import com.zy.asrs.wcs.core.entity.Loc;
@@ -62,6 +63,9 @@
 
     private List<JSONObject> socketResults = new ArrayList<>();
 
+    //鍘熷璁惧鏁版嵁
+    private Object originDeviceData;
+
     public NyShuttleThread(Device device, RedisUtil redisUtil) {
         this.device = device;
         this.redisUtil = redisUtil;
@@ -75,18 +79,118 @@
         //鐩戝惉娑堟伅骞跺瓨鍌�
         Thread innerThread = new Thread(() -> {
             while (true) {
-                listenSocketMessage();
+                try {
+                    listenSocketMessage();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
             }
         });
         innerThread.start();
 
-        while (true) {
-            try {
-                read();
-                Thread.sleep(500);
-            } catch (Exception e) {
-                log.error("ShuttleThread Fail", e);
+        //璁惧璇诲彇
+        Thread readThread = new Thread(() -> {
+            while (true) {
+                try {
+                    read();
+                    Thread.sleep(50);
+                } catch (Exception e) {
+                    log.error("ShuttleThread Fail", e);
+                }
             }
+        });
+        readThread.start();
+
+        //璁惧鎵ц
+        Thread executeThread = new Thread(() -> {
+            while (true) {
+                try {
+                    ShuttleAction shuttleAction = SpringUtils.getBean(ShuttleAction.class);
+                    if (shuttleAction == null) {
+                        continue;
+                    }
+
+                    Object object = redisUtil.get(DeviceRedisConstant.SHUTTLE_FLAG + device.getDeviceNo());
+                    if (object == null) {
+                        continue;
+                    }
+
+                    Integer taskNo = Integer.valueOf(String.valueOf(object));
+                    if (taskNo != 0) {
+                        //瀛樺湪浠诲姟闇�瑕佹墽琛�
+                        boolean result = shuttleAction.executeWork(device, taskNo);
+                    }
+
+                    //灏忚溅绌洪棽涓旀湁璺戝簱绋嬪簭
+                    shuttleAction.moveLoc(device);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        });
+        executeThread.start();
+
+        //鍏朵粬浠诲姟
+        Thread otherThread = new Thread(() -> {
+            while (true) {
+                try {
+                    listenInit();//鐩戝惉鍒濆鍖栦簨浠�
+                    saveLog();//淇濆瓨鏁版嵁
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        });
+        otherThread.start();
+    }
+
+    private void saveLog() {
+        if (shuttleProtocol == null) {
+            return;
+        }
+
+        if (System.currentTimeMillis() - shuttleProtocol.getDeviceDataLog() > 1000 * 5) {
+            if (this.originDeviceData != null) {
+                //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰�
+                //淇濆瓨鏁版嵁璁板綍
+                DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class);
+                DeviceDataLog deviceDataLog = new DeviceDataLog();
+                deviceDataLog.setOriginData(JSON.toJSONString(this.originDeviceData));
+                deviceDataLog.setWcsData(JSON.toJSONString(shuttleProtocol));
+                deviceDataLog.setType(String.valueOf(SlaveType.Shuttle));
+                deviceDataLog.setDeviceNo(String.valueOf(shuttleProtocol.getShuttleNo()));
+                deviceDataLog.setCreateTime(new Date());
+                deviceDataLog.setHostId(device.getHostId());
+                deviceDataLogService.save(deviceDataLog);
+
+                //鏇存柊閲囬泦鏃堕棿
+                shuttleProtocol.setDeviceDataLog(System.currentTimeMillis());
+            }
+        }
+
+        //灏嗗洓鍚戠┛姊溅鐘舵�佷繚瀛樿嚦鏁版嵁搴�
+        BasShuttleService shuttleService = SpringUtils.getBean(BasShuttleService.class);
+        BasShuttle basShuttle = shuttleService.getOne(new LambdaQueryWrapper<BasShuttle>()
+                .eq(BasShuttle::getShuttleNo, device.getDeviceNo())
+                .eq(BasShuttle::getHostId, device.getHostId()));
+        if (basShuttle == null) {
+            basShuttle = new BasShuttle();
+            //鍥涘悜绌挎杞﹀彿
+            basShuttle.setShuttleNo(Integer.valueOf(device.getDeviceNo()));
+            basShuttle.setStatus(1);
+            basShuttle.setDeleted(0);
+            basShuttle.setHostId(device.getHostId());
+            basShuttle.setDeviceId(device.getId().intValue());
+            shuttleService.save(basShuttle);
+        }
+        //浠诲姟鍙�
+        basShuttle.setTaskNo(shuttleProtocol.getTaskNo().intValue());
+        //淇敼鏃堕棿
+        basShuttle.setUpdateTime(new Date());
+        //璁惧鐘舵��
+        basShuttle.setProtocol(JSON.toJSONString(shuttleProtocol));
+        if (shuttleService.updateById(basShuttle)) {
+            OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), device.getDeviceNo()));
         }
     }
 
@@ -167,7 +271,6 @@
                 this.connect();
             }
             readStatus();
-            listenInit();//鐩戝惉鍒濆鍖栦簨浠�
         } catch (Exception e) {
             e.printStackTrace();
             OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戣鍙栧洓鍚戠┛姊溅鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), device.getId(), device.getIp(), device.getPort()));
@@ -246,47 +349,9 @@
                     shuttleProtocol.setProtocolStatusType(ShuttleProtocolStatusType.IDLE);
                 }
 
-                if (System.currentTimeMillis() - shuttleProtocol.getDeviceDataLog() > 1000 * 5) {
-                    //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰�
-                    //淇濆瓨鏁版嵁璁板綍
-                    DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class);
-                    DeviceDataLog deviceDataLog = new DeviceDataLog();
-                    deviceDataLog.setOriginData(JSON.toJSONString(data));
-                    deviceDataLog.setWcsData(JSON.toJSONString(shuttleProtocol));
-                    deviceDataLog.setType(String.valueOf(SlaveType.Shuttle));
-                    deviceDataLog.setDeviceNo(String.valueOf(shuttleProtocol.getShuttleNo()));
-                    deviceDataLog.setCreateTime(new Date());
-                    deviceDataLog.setHostId(device.getHostId());
-                    deviceDataLogService.save(deviceDataLog);
+                this.originDeviceData = data;
 
-                    //鏇存柊閲囬泦鏃堕棿
-                    shuttleProtocol.setDeviceDataLog(System.currentTimeMillis());
-                }
-
-                //灏嗗洓鍚戠┛姊溅鐘舵�佷繚瀛樿嚦鏁版嵁搴�
-                BasShuttleService shuttleService = SpringUtils.getBean(BasShuttleService.class);
-                BasShuttle basShuttle = shuttleService.getOne(new LambdaQueryWrapper<BasShuttle>()
-                        .eq(BasShuttle::getShuttleNo, device.getDeviceNo())
-                        .eq(BasShuttle::getHostId, device.getHostId()));
-                if (basShuttle == null) {
-                    basShuttle = new BasShuttle();
-                    //鍥涘悜绌挎杞﹀彿
-                    basShuttle.setShuttleNo(Integer.valueOf(device.getDeviceNo()));
-                    basShuttle.setStatus(1);
-                    basShuttle.setDeleted(0);
-                    basShuttle.setHostId(device.getHostId());
-                    basShuttle.setDeviceId(device.getId().intValue());
-                    shuttleService.save(basShuttle);
-                }
-                //浠诲姟鍙�
-                basShuttle.setTaskNo(shuttleProtocol.getTaskNo().intValue());
-                //淇敼鏃堕棿
-                basShuttle.setUpdateTime(new Date());
-                //璁惧鐘舵��
-                basShuttle.setProtocol(JSON.toJSONString(shuttleProtocol));
-                if (shuttleService.updateById(basShuttle)) {
-                    OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), device.getDeviceNo()));
-                }
+                OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), device.getDeviceNo()));
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -323,7 +388,6 @@
                 Integer requestId = resultHeader.getInteger("requestId");
                 if (requestType.equals("init")) {
                     Integer code = resultBody.getInteger("code");
-                    OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戣溅澶嶄綅涓婃姤 ===>> [code:{1}] [ip:{2}] [port:{3}]", code, device.getId(), device.getIp(), device.getPort()));
                     //灏忚溅澶嶄綅璇锋眰
                     ShuttleCommand initCommand = getInitCommand(requestId, code);
                     //鍙戝嚭璇锋眰
@@ -331,6 +395,9 @@
                     JSONObject requestResult = requestCommand(httpCommand);
 
                     removeIdx = i;//姝ゆ暟鎹凡缁忓鐞嗭紝浠庣粨鏋滈泦涓墧闄�
+
+                    log.info(MessageFormat.format("銆恵0}銆戝洓鍚戣溅澶嶄綅涓婃姤 ===>> [code:{1}] [ip:{2}] [port:{3}]", device.getId(), code, device.getIp(), device.getPort()));
+                    OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戣溅澶嶄綅涓婃姤 ===>> [code:{1}] [ip:{2}] [port:{3}]", device.getId(), code, device.getIp(), device.getPort()));
                     break;
                 }
             }

--
Gitblit v1.9.1