From 4e005e4936039fca16bfd1679942daa416a21986 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 20 十一月 2025 14:27:47 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/thread/impl/ZyStationThread.java |  137 +++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 125 insertions(+), 12 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/impl/ZyStationThread.java b/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
index 4fe5127..68cbd91 100644
--- a/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
@@ -1,13 +1,31 @@
 package com.zy.core.thread.impl;
 
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.entity.BasDevp;
+import com.zy.asrs.service.BasDevpService;
+import com.zy.core.network.DeviceConnectPool;
 import com.zy.core.thread.StationThread;
+import com.alibaba.fastjson.JSON;
+import com.core.common.DateUtils;
+import com.core.common.SpringUtils;
 import com.zy.asrs.entity.DeviceConfig;
+import com.zy.asrs.entity.DeviceDataLog;
 import com.zy.common.utils.RedisUtil;
 import com.zy.core.network.ZyStationConnectDriver;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.OutputQueue;
+import com.zy.core.enums.RedisKeyType;
+import com.zy.core.enums.SlaveType;
 import com.zy.core.model.CommandResponse;
+import com.zy.core.model.Task;
 import com.zy.core.model.command.StationCommand;
+import com.zy.core.model.protocol.StationProtocol;
 import com.zy.core.network.entity.ZyStationStatusEntity;
-import java.util.Collections;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 import lombok.Data;
@@ -20,9 +38,11 @@
 @Slf4j
 public class ZyStationThread implements Runnable, StationThread {
 
+    private List<StationProtocol> statusList = new ArrayList<>();
     private DeviceConfig deviceConfig;
     private RedisUtil redisUtil;
     private ZyStationConnectDriver zyStationConnectDriver;
+    private long deviceDataLogTime = System.currentTimeMillis();
 
     public ZyStationThread(DeviceConfig deviceConfig, RedisUtil redisUtil) {
         this.deviceConfig = deviceConfig;
@@ -30,7 +50,100 @@
     }
 
     @Override
+    @SuppressWarnings("InfiniteLoopStatement")
+    public void run() {
+        this.connect();
+        while (true) {
+            try {
+                int step = 1;
+                Task task = MessageQueue.poll(SlaveType.Devp, deviceConfig.getDeviceNo());
+                if (task != null) {
+                    step = task.getStep();
+                }
+                switch (step) {
+                    // 璇绘暟鎹�
+                    case 1:
+                        readStatus();
+                        break;
+                    case 2:
+                        sendCommand((StationCommand) task.getData());
+                        break;
+                    default:
+                        break;
+                }
+                Thread.sleep(200);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    private void readStatus() {
+        if (zyStationConnectDriver == null) {
+            return;
+        }
+
+        if(statusList.isEmpty()) {
+            BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class);
+            if (basDevpService == null) {
+                return;
+            }
+
+            BasDevp basDevp = basDevpService
+                    .selectOne(new EntityWrapper<BasDevp>().eq("devp_no", deviceConfig.getDeviceNo()));
+            if (basDevp == null) {
+                return;
+            }
+
+            List<ZyStationStatusEntity> list = JSONObject.parseArray(basDevp.getStationList(), ZyStationStatusEntity.class);
+            for (ZyStationStatusEntity entity : list) {
+                StationProtocol stationProtocol = new StationProtocol();
+                stationProtocol.setStationId(entity.getStationId());
+                statusList.add(stationProtocol);
+            }
+        }
+
+        List<ZyStationStatusEntity> zyStationStatusEntities = zyStationConnectDriver.getStatus();
+        for (ZyStationStatusEntity statusEntity : zyStationStatusEntities) {
+            for (StationProtocol stationProtocol : statusList) {
+                if(stationProtocol.getStationId().equals(statusEntity.getStationId())) {
+                    stationProtocol.setTaskNo(statusEntity.getTaskNo());
+                    stationProtocol.setTargetStaNo(statusEntity.getTargetStaNo());
+                    stationProtocol.setAutoing(statusEntity.isAutoing());
+                    stationProtocol.setLoading(statusEntity.isLoading());
+                    stationProtocol.setInEnable(statusEntity.isInEnable());
+                    stationProtocol.setOutEnable(statusEntity.isOutEnable());
+                    stationProtocol.setEmptyMk(statusEntity.isEmptyMk());
+                    stationProtocol.setFullPlt(statusEntity.isFullPlt());
+                    stationProtocol.setPalletHeight(statusEntity.getPalletHeight());
+                    stationProtocol.setError(statusEntity.getError());
+                    stationProtocol.setBarcode(statusEntity.getBarcode());
+                }
+            }
+        }
+
+        OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), deviceConfig.getDeviceNo()));
+
+        if (System.currentTimeMillis() - deviceDataLogTime > 1000 * 1) {
+            //淇濆瓨鏁版嵁璁板綍
+            DeviceDataLog deviceDataLog = new DeviceDataLog();
+            deviceDataLog.setOriginData(JSON.toJSONString(zyStationStatusEntities));
+            deviceDataLog.setWcsData(JSON.toJSONString(statusList));
+            deviceDataLog.setType(String.valueOf(SlaveType.Devp));
+            deviceDataLog.setDeviceNo(deviceConfig.getDeviceNo());
+            deviceDataLog.setCreateTime(new Date());
+
+            redisUtil.set(RedisKeyType.DEVICE_LOG_KEY.key + System.currentTimeMillis(), deviceDataLog, 60 * 60 * 24);
+            //鏇存柊閲囬泦鏃堕棿
+            deviceDataLogTime = System.currentTimeMillis();
+        }
+    }
+
+    @Override
     public boolean connect() {
+        zyStationConnectDriver = new ZyStationConnectDriver(deviceConfig);
+        new Thread(zyStationConnectDriver).start();
+        DeviceConnectPool.put(SlaveType.Devp, deviceConfig.getDeviceNo(), zyStationConnectDriver);
         return true;
     }
 
@@ -39,24 +152,24 @@
     }
 
     @Override
-    public List<ZyStationStatusEntity> getStatus() {
-        if (zyStationConnectDriver == null) {
-            return Collections.emptyList();
-        }
-        return zyStationConnectDriver.getStatus();
+    public List<StationProtocol> getStatus() {
+        return statusList;
     }
 
     @Override
-    public StationCommand getMoveCommand() {
-        return null;
+    public StationCommand getMoveCommand(Integer taskNo, Integer stationId, Integer targetStationId, Integer palletSize) {
+        StationCommand stationCommand = new StationCommand();
+        stationCommand.setTaskNo(taskNo);
+        stationCommand.setStationId(stationId);
+        stationCommand.setTargetStaNo(targetStationId);
+        stationCommand.setPalletSize(palletSize);
+        return stationCommand;
     }
 
     @Override
     public CommandResponse sendCommand(StationCommand command) {
-        return new CommandResponse(true);
+       CommandResponse commandResponse = zyStationConnectDriver.sendCommand(command);
+       return commandResponse;
     }
 
-    @Override
-    public void run() {
-    }
 }

--
Gitblit v1.9.1