From 6548c75a24d8d0c23c8167980465831128abf579 Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期三, 06 十一月 2024 13:05:49 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/jx-gt-crn-wcs' into jx-gt-crn-wcs

---
 src/main/java/com/zy/common/config/WebSocketServer.java     |  116 +++++++++++++++++++
 src/main/java/com/zy/common/config/WebSocketConfig.java     |   17 ++
 src/main/java/com/zy/core/thread/SiemensCrnThread.java      |    2 
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |   25 ---
 src/main/java/com/zy/common/config/WebConfig.java           |    1 
 src/main/java/com/zy/Boot.java                              |    2 
 pom.xml                                                     |    9 +
 src/main/java/com/zy/core/thread/SiemensDevpThread.java     |    2 
 src/main/java/com/zy/asrs/timer/LedWebsocket.java           |  175 +++++++++++++++++++++++++++++
 9 files changed, 325 insertions(+), 24 deletions(-)

diff --git a/pom.xml b/pom.xml
index 443049b..7b01f83 100644
--- a/pom.xml
+++ b/pom.xml
@@ -103,6 +103,15 @@
             <artifactId>okhttp</artifactId>
             <version>3.10.0</version>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-websocket</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.26</version>
+        </dependency>
 
         <!-- led sdk -->
         <dependency>
diff --git a/src/main/java/com/zy/Boot.java b/src/main/java/com/zy/Boot.java
index f25a356..8f04113 100644
--- a/src/main/java/com/zy/Boot.java
+++ b/src/main/java/com/zy/Boot.java
@@ -5,7 +5,9 @@
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
 import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
+@EnableScheduling
 @EnableAsync
 @SpringBootApplication
 public class Boot extends SpringBootServletInitializer {
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index d3bc141..4f29197 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -116,9 +116,7 @@
         for (DevpSlave devp : slaveProperties.getDevp()) {
             // 閬嶅巻鍏ュ簱鍙�
             for (DevpSlave.Sta inSta : devp.getInSta()) {
-                // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-                BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
-                BarcodeThread barcodeThreadMat = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcodeMat());
+
                 LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed());
                 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                 StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
@@ -127,15 +125,6 @@
                 } else {
                     staProtocol = staProtocol.clone();
                 }
-
-                if (barcodeThread == null) {
-                    continue;
-                }
-
-                if (barcodeThreadMat == null) {
-                    continue;
-                }
-
                 // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
                 if (staProtocol.stateType == DevpStateType.AUTO //鑷姩
                         && staProtocol.workType == DevpWorkType.BUSY //蹇欑
@@ -157,7 +146,6 @@
                             }
                             continue;
                         }
-                        barcodeThread.setBarcode("");
                         staProtocol.setWorkNo(wrkMast.getWrkNo());
                         staProtocol.setStaNo(RouteUtils.SouStaEnd(null,wrkMast.getSourceStaNo()));
                         devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -198,7 +186,6 @@
                         JSONObject jsonObject = JSON.parseObject(response);
                         if (jsonObject.getInteger("code").equals(200)) {
                             StartupDto dto = jsonObject.getObject("data", StartupDto.class);
-                            barcodeThread.setBarcode("");
                             staProtocol.setWorkNo(dto.getWorkNo());
                             staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo()));
                             devpThread.setPakMk(staProtocol.getSiteId(), false);
@@ -214,12 +201,6 @@
                                 throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
                             }
                         }else {
-                            staProtocol.setWorkNo(wrkNo);
-                            wrkNo++;
-                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
-                            devpThread.setPakMk(staProtocol.getSiteId(), false);
-                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
-//
 //                            if (ledThread != null) {
                                 String errorMsg = jsonObject.getString("msg");
                                 if (!Cools.isEmpty(errorMsg)) {
@@ -427,7 +408,7 @@
 
                     // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
                     staProtocol.setWorkNo(wrkMast.getWrkNo());
-                    staProtocol.setStaNo((short) 161);
+                    staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                     devpThread.setPakMk(staProtocol.getSiteId(), false);
                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                     log.error("杈撻�佺嚎涓嬪彂5锛�"+wrkMast.getWrkNo()+","+wrkMast.getStaNo());
@@ -2115,7 +2096,7 @@
                 } else {
                     staProtocol = staProtocol.clone();
                 }
-                if (!(staProtocol.stateType == DevpStateType.AUTO && staProtocol.requestType == DevpRequestType.OUT)){
+                if (!(staProtocol.stateType == DevpStateType.AUTO)){
                     continue;
                 }
                 if (staProtocol.getWorkNo() == 0){
diff --git a/src/main/java/com/zy/asrs/timer/LedWebsocket.java b/src/main/java/com/zy/asrs/timer/LedWebsocket.java
new file mode 100644
index 0000000..3de5acb
--- /dev/null
+++ b/src/main/java/com/zy/asrs/timer/LedWebsocket.java
@@ -0,0 +1,175 @@
+package com.zy.asrs.timer;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.Arith;
+import com.core.common.Cools;
+import com.zy.asrs.domain.dto.AxisBean;
+import com.zy.asrs.domain.dto.WorkChartAxis;
+import com.zy.asrs.domain.vo.LocChartPie;
+import com.zy.asrs.entity.LocDetl;
+import com.zy.asrs.mapper.ReportQueryMapper;
+import com.zy.asrs.service.LocDetlService;
+import com.zy.common.config.WebSocketServer;
+import com.zy.common.service.CommonService;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.LedSlave;
+import com.zy.core.model.command.LedCommand;
+import com.zy.core.properties.SlaveProperties;
+import com.zy.core.thread.LedThread;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Component
+@Slf4j
+public class LedWebsocket {
+
+    private static final String[] WEEK = {"鏄熸湡鏃�","鏄熸湡涓�","鏄熸湡浜�","鏄熸湡涓�","鏄熸湡鍥�","鏄熸湡浜�","鏄熸湡鍏�"};
+
+    @Autowired
+    private ReportQueryMapper reportQueryMapper;
+    @Autowired
+    private SlaveProperties slaveProperties;
+    @Autowired
+    private WebSocketServer webSocketServer;
+    @Autowired
+    private LocDetlService locDetlService;
+
+    @Scheduled(cron = "0/2 * * * * ? ")
+    private void send() {
+
+        //楗煎浘
+        List<Map<String, Object>> pie = new ArrayList<>();
+        LocChartPie locUseRate = reportQueryMapper.getLocUseRate();
+        if(locUseRate!=null) {
+            Map<String, Object> map = new HashMap<>();
+            map.put("name", "鍦ㄥ簱");
+            map.put("value", locUseRate.getFqty());
+            pie.add(map);
+
+            Map<String, Object> map1 = new HashMap<>();
+            map1.put("name", "绌�");
+            map1.put("value", locUseRate.getOqty());
+            pie.add(map1);
+
+            Map<String, Object> map2 = new HashMap<>();
+            map2.put("name", "浣跨敤");
+            map2.put("value", locUseRate.getUqty());
+            pie.add(map2);
+
+            Map<String, Object> map3 = new HashMap<>();
+            map3.put("name", "绂佺敤");
+            map3.put("value", locUseRate.getXqty());
+            pie.add(map3);
+        }
+        // 鎬诲簱浣嶆暟
+        Integer total = (int) Arith.add(0, locUseRate.getFqty(), locUseRate.getOqty(), locUseRate.getUqty(), locUseRate.getXqty());
+        // 浣跨敤涓�
+        Integer used = locUseRate.getFqty() + locUseRate.getUqty();
+        // 搴撲綅浣跨敤鐜�
+        double usedDivides = Arith.divides(3, used, total);
+        double usedPr = Arith.multiplys(1, usedDivides, 100);
+
+        //鎶樼嚎鍥�
+        Map<String,Object> map=new HashMap<String, Object>();
+        List<AxisBean> list = new ArrayList<AxisBean>();
+        List<WorkChartAxis> listChart = reportQueryMapper.getChartAxis();
+
+        if(listChart!=null) {
+            ArrayList<Integer> data1 = new ArrayList<Integer>();
+            ArrayList<Integer> data2 = new ArrayList<Integer>();
+
+            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
+            Calendar calendar = Calendar.getInstance();
+            calendar.add(Calendar.DATE, -12);
+            for(int i=0;i<12;i++) {
+                boolean flag = true;
+                calendar.add(Calendar.DATE, 1);
+                String str = sf.format(calendar.getTime());
+                for(WorkChartAxis workChart : listChart) {
+                    if(str.equals(workChart.getYmd())) {
+                        data1.add(workChart.getInqty());
+                        data2.add(workChart.getOutqty());
+                        flag = false;
+                        break;
+                    }
+                }
+                if(flag) {
+                    data1.add(0);
+                    data2.add(0);
+                }
+            }
+            AxisBean inqty = new AxisBean();
+            inqty.setName("鍏ュ簱鏁伴噺");
+            Integer[] array1 = new Integer[data1.size()];
+            inqty.setData(data1.toArray(array1));
+            list.add(inqty);
+            AxisBean outqty = new AxisBean();
+            outqty.setName("鍑哄簱鏁伴噺");
+            Integer[] array2 = new Integer[data2.size()];
+            outqty.setData(data2.toArray(array2));
+            list.add(outqty);
+        }
+        //浠撳簱鏁版嵁
+        EntityWrapper<LocDetl> locDetlEntityWrapper = new EntityWrapper<>();
+        locDetlEntityWrapper.setSqlSelect("matnr,COUNT(*) as matnrCount").groupBy("matnr");
+        List<Map<String, Object>>  selectMap = locDetlService.selectMaps(locDetlEntityWrapper);
+
+        Date now = new Date();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(now);
+//         Map<String, Object> map = new HashMap<>();
+         map.put("to","all");
+         map.put("message", Cools.add("type", "default").add("pie", pie)
+                 .add("stockCunt", locUseRate.getFqty())
+                 .add("emptyCount", locUseRate.getOqty())
+                 .add("noneCount", locUseRate.getXqty())
+                 .add("total", total)
+                 .add("used", used)
+                 .add("usedPr", usedPr)
+                 .add("rows",list)
+                 .add("year", calendar.get(Calendar.YEAR))
+                 .add("month", CommonService.zerofill(String.valueOf(calendar.get(Calendar.MONTH)+1), 2))
+                 .add("day", CommonService.zerofill(String.valueOf(calendar.get(Calendar.DATE)), 2))
+                 .add("hour", CommonService.zerofill(String.valueOf(calendar.get(Calendar.HOUR_OF_DAY)), 2))
+                 .add("minute", CommonService.zerofill(String.valueOf(calendar.get(Calendar.MINUTE)), 2))
+                 .add("second", CommonService.zerofill(String.valueOf(calendar.get(Calendar.SECOND)) , 2))
+                 .add("week", WEEK[calendar.get(Calendar.DAY_OF_WEEK)-1])
+                 .add("inventoryData",selectMap));
+        webSocketServer.onMessage(JSONObject.toJSONString(map),null,"all");
+
+    }
+    @Scheduled(cron = "0/2 * * * * ? ")
+    private void errorSend(){
+        Map<String,Object> map=new HashMap<String, Object>();
+        for (LedSlave slave : slaveProperties.getLed()) {
+                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, slave.getId());
+                if (null != ledThread) {
+                    map.put("to",slave.getStaArr().get(0).toString());
+                    map.put("message",Cools.add("type", "error").add("errMsg",ledThread.getErrorMsg().toString()));
+                    webSocketServer.onMessage(JSONObject.toJSONString(map),null,slave.getStaArr().get(0).toString());
+                }
+
+        }
+    }
+
+    @Scheduled(cron = "0/2 * * * * ? ")
+    private void TaskSend(){
+        Map<String,Object> map=new HashMap<String, Object>();
+        List<LedCommand> commandList = null;
+        for (LedSlave slave : slaveProperties.getLed()) {
+                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, slave.getId());
+                if (null != ledThread) {
+                    map.put("to",slave.getStaArr().get(0).toString());
+                    map.put("message",Cools.add("type", "task").add("taskList",ledThread.getCommandList()));
+                }
+
+        }
+    }
+}
diff --git a/src/main/java/com/zy/common/config/WebConfig.java b/src/main/java/com/zy/common/config/WebConfig.java
index 11bb6b2..ace211e 100644
--- a/src/main/java/com/zy/common/config/WebConfig.java
+++ b/src/main/java/com/zy/common/config/WebConfig.java
@@ -18,6 +18,7 @@
     public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(adminInterceptor)
                 .addPathPatterns("/**")
+                .excludePathPatterns("/imserver/**")
                 ;
     }
 
diff --git a/src/main/java/com/zy/common/config/WebSocketConfig.java b/src/main/java/com/zy/common/config/WebSocketConfig.java
new file mode 100644
index 0000000..7b5667a
--- /dev/null
+++ b/src/main/java/com/zy/common/config/WebSocketConfig.java
@@ -0,0 +1,17 @@
+package com.zy.common.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+@Configuration
+public class WebSocketConfig {
+    /**
+     * 娉ㄥ叆涓�涓猄erverEndpointExporter,璇ean浼氳嚜鍔ㄦ敞鍐屼娇鐢ˊServerEndpoint娉ㄨВ鐢虫槑鐨剋ebsocket endpoint
+     */
+    @Bean
+    public ServerEndpointExporter serverEndpointExporter() {
+        return new ServerEndpointExporter();
+    }
+}
+
diff --git a/src/main/java/com/zy/common/config/WebSocketServer.java b/src/main/java/com/zy/common/config/WebSocketServer.java
new file mode 100644
index 0000000..393fc16
--- /dev/null
+++ b/src/main/java/com/zy/common/config/WebSocketServer.java
@@ -0,0 +1,116 @@
+package com.zy.common.config;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+@ServerEndpoint(value = "/led/{username}")
+@Component
+@Service
+public class WebSocketServer {
+    private static final Logger log = LoggerFactory.getLogger(WebSocketServer.class);
+    /**
+     * 璁板綍褰撳墠鍦ㄧ嚎杩炴帴鏁�
+     */
+    public static final Map<String, Session> sessionMap = new ConcurrentHashMap<>();
+    /**
+     * 杩炴帴寤虹珛鎴愬姛璋冪敤鐨勬柟娉�
+     */
+    @OnOpen
+    public void onOpen(Session session, @PathParam("username") String username) {
+        sessionMap.put(username, session);
+        log.info("鏈夋柊鐢ㄦ埛鍔犲叆锛寀sername={}, 褰撳墠鍦ㄧ嚎浜烘暟涓猴細{}", username, sessionMap.size());
+        JSONObject result = new JSONObject();
+        JSONArray array = new JSONArray();
+        result.set("users", array);
+        for (Object key : sessionMap.keySet()) {
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.set("username", key);
+            // {"username", "zhang", "username": "admin"}
+            array.add(jsonObject);
+        }
+//        {"users": [{"username": "zhang"},{ "username": "admin"}]}
+        sendAllMessage(JSONUtil.toJsonStr(result));  // 鍚庡彴鍙戦�佹秷鎭粰鎵�鏈夌殑瀹㈡埛绔�
+    }
+    /**
+     * 杩炴帴鍏抽棴璋冪敤鐨勬柟娉�
+     */
+    @OnClose
+    public void onClose(Session session, @PathParam("username") String username) {
+        sessionMap.remove(username);
+        log.info("鏈変竴杩炴帴鍏抽棴锛岀Щ闄sername={}鐨勭敤鎴穝ession, 褰撳墠鍦ㄧ嚎浜烘暟涓猴細{}", username, sessionMap.size());
+    }
+    /**
+     * 鏀跺埌瀹㈡埛绔秷鎭悗璋冪敤鐨勬柟娉�
+     * 鍚庡彴鏀跺埌瀹㈡埛绔彂閫佽繃鏉ョ殑娑堟伅
+     * onMessage 鏄竴涓秷鎭殑涓浆绔�
+     * 鎺ュ彈 娴忚鍣ㄧ socket.send 鍙戦�佽繃鏉ョ殑 json鏁版嵁
+     * @param message 瀹㈡埛绔彂閫佽繃鏉ョ殑娑堟伅
+     */
+    @OnMessage
+    public void onMessage(String message, Session session, @PathParam("username") String username) {
+//        log.info("鏈嶅姟绔敹鍒扮敤鎴穟sername={}鐨勬秷鎭�:{}", username, message);
+        JSONObject obj = JSONUtil.parseObj(message);
+        String toUsername = obj.getStr("to"); // to琛ㄧず鍙戦�佺粰鍝釜鐢ㄦ埛锛屾瘮濡� admin
+        String text = obj.getStr("message"); // 鍙戦�佺殑娑堟伅鏂囨湰  hello
+        // {"to": "admin", "text": "鑱婂ぉ鏂囨湰"}
+        if ("heartBeat".equals(toUsername)) {
+            log.info("蹇冭烦");
+        }else if ("all".equals(toUsername)) {
+            sendAllMessage(text);
+        }else {
+            Session toSession = sessionMap.get(toUsername); // 鏍规嵁 to鐢ㄦ埛鍚嶆潵鑾峰彇 session锛屽啀閫氳繃session鍙戦�佹秷鎭枃鏈�
+            if (toSession != null) {
+                // 鏈嶅姟鍣ㄧ 鍐嶆妸娑堟伅缁勮涓�涓嬶紝缁勮鍚庣殑娑堟伅鍖呭惈鍙戦�佷汉鍜屽彂閫佺殑鏂囨湰鍐呭
+                // {"from": "zhang", "text": "hello"}
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.set("from", username);  // from 鏄� zhang
+                jsonObject.set("text", text);  // text 鍚屼笂闈㈢殑text
+                this.sendMessage(text, toSession);
+//            log.info("鍙戦�佺粰鐢ㄦ埛username={}锛屾秷鎭細{}", toUsername, jsonObject.toString());
+            } else {
+//                log.info("鍙戦�佸け璐ワ紝鏈壘鍒扮敤鎴穟sername={}鐨剆ession", toUsername);
+            }
+        }
+
+    }
+    @OnError
+    public void onError(Session session, Throwable error) {
+        log.error("鍙戠敓閿欒");
+        error.printStackTrace();
+    }
+    /**
+     * 鏈嶅姟绔彂閫佹秷鎭粰瀹㈡埛绔�
+     */
+    private void sendMessage(String message, Session toSession) {
+        try {
+//            log.info("鏈嶅姟绔粰瀹㈡埛绔痆{}]鍙戦�佹秷鎭瘂}", toSession.getId(), message);
+            toSession.getBasicRemote().sendText(message);
+        } catch (Exception e) {
+            log.error("鏈嶅姟绔彂閫佹秷鎭粰瀹㈡埛绔け璐�", e);
+        }
+    }
+    /**
+     * 鏈嶅姟绔彂閫佹秷鎭粰鎵�鏈夊鎴风
+     */
+    private void sendAllMessage(String message) {
+        try {
+            for (Session session : sessionMap.values()) {
+//                log.info("鏈嶅姟绔粰瀹㈡埛绔痆{}]鍙戦�佹秷鎭瘂}", session.getId(), message);
+                session.getBasicRemote().sendText(message);
+            }
+        } catch (Exception e) {
+            log.error("鏈嶅姟绔彂閫佹秷鎭粰瀹㈡埛绔け璐�", e);
+        }
+    }
+}
diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
index adb5ad2..d4b171d 100644
--- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -157,8 +157,8 @@
             if (result.IsSuccess) {
                 if (null == crnProtocol) {
                     crnProtocol = new CrnProtocol();
-                    crnProtocol.setCrnNo(slave.getId());
                 }
+                crnProtocol.setCrnNo(slave.getId());
                 crnProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 0));
                 crnProtocol.setTaskNo(siemensNet.getByteTransform().TransInt16(result.Content, 2));
                 crnProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 4));
diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
index 8939e1d..eebeca5 100644
--- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -223,9 +223,9 @@
                 StaProtocol staProtocol = station.get(siteId);
                 if (null == staProtocol) {
                     staProtocol = new StaProtocol();
-                    staProtocol.setSiteId(siteId);
                     station.put(siteId, staProtocol);
                 }
+                staProtocol.setSiteId(siteId);
                 staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result.Content, i*66 + 8));     // 宸ヤ綔鍙�
                 staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*66 + 12));   // 鐩爣绔�
                 staProtocol.setState(siemensS7Net.getByteTransform().TransInt16(result.Content, i*66 + 14));  // 妯″紡鐘舵�� 0鍋滄満锛�=1鎵嬪姩锛�=2鑷姩锛�=3鏁呴殰

--
Gitblit v1.9.1