From 059083082a6d284821b70eb7bb6805763014c402 Mon Sep 17 00:00:00 2001
From: wujian <14790700720@163.com>
Date: 星期六, 16 三月 2024 10:54:46 +0800
Subject: [PATCH] add PLC连接通信 add 扫码数据推送到前端

---
 jcdm-main/src/main/java/com/jcdm/main/plcserver/conf/OPCElement.java                                                      |    8 
 jcdm-main/pom.xml                                                                                                         |   11 
 jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/mapper/DaPassingStationCollectionMapper.java            |    3 
 jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/IDaPassingStationCollectionService.java         |    2 
 jcdm-main/src/main/java/com/jcdm/main/websocket/WebSocketServer.java                                                      |  158 ++++++++++++
 jcdm-main/src/main/java/com/jcdm/main/plcserver/CustomRunner.java                                                         |   43 ++
 jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/controller/DaPassingStationCollectionController.java    |   49 ++-
 jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/impl/DaPassingStationCollectionServiceImpl.java |   59 ++-
 jcdm-main/src/main/java/com/jcdm/main/websocket/WebSocketConfig.java                                                      |   16 +
 jcdm-main/src/main/resources/mapper/da/passingStationCollection/DaPassingStationCollectionMapper.xml                      |   10 
 jcdm-framework/src/main/java/com/jcdm/framework/config/SecurityConfig.java                                                |    1 
 jcdm-main/src/main/java/com/jcdm/main/websocket/SystemController.java                                                     |   44 +++
 jcdm-ui/src/utils/WebsocketTool.js                                                                                        |  105 ++++++++
 jcdm-ui/src/views/main/kb/engineCheck/index.vue                                                                           |   92 ++++++
 jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java                                                |  136 +++++++++-
 jcdm-admin/src/main/java/com/jcdm/MesApplication.java                                                                     |    4 
 16 files changed, 667 insertions(+), 74 deletions(-)

diff --git a/jcdm-admin/src/main/java/com/jcdm/MesApplication.java b/jcdm-admin/src/main/java/com/jcdm/MesApplication.java
index 83c6e00..9e69293 100644
--- a/jcdm-admin/src/main/java/com/jcdm/MesApplication.java
+++ b/jcdm-admin/src/main/java/com/jcdm/MesApplication.java
@@ -3,6 +3,8 @@
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.web.servlet.ServletComponentScan;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
 /**
  * 鍚姩绋嬪簭
@@ -11,6 +13,8 @@
  */
 
 
+@EnableScheduling //瀹氭椂浠诲姟
+@ServletComponentScan //webSocket
 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
 public class MesApplication
 {
diff --git a/jcdm-framework/src/main/java/com/jcdm/framework/config/SecurityConfig.java b/jcdm-framework/src/main/java/com/jcdm/framework/config/SecurityConfig.java
index 353fda4..f7c1c83 100644
--- a/jcdm-framework/src/main/java/com/jcdm/framework/config/SecurityConfig.java
+++ b/jcdm-framework/src/main/java/com/jcdm/framework/config/SecurityConfig.java
@@ -115,6 +115,7 @@
                 // 闈欐�佽祫婧愶紝鍙尶鍚嶈闂�
                 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                 .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
+                .antMatchers("/websocket/**").anonymous()
                 // 闄や笂闈㈠鐨勬墍鏈夎姹傚叏閮ㄩ渶瑕侀壌鏉冭璇�
                 .anyRequest().authenticated()
                 .and()
diff --git a/jcdm-main/pom.xml b/jcdm-main/pom.xml
index 3e9eefe..2681c44 100644
--- a/jcdm-main/pom.xml
+++ b/jcdm-main/pom.xml
@@ -80,6 +80,17 @@
             <artifactId>milo-spring-boot-starter</artifactId>
             <version>3.0.5</version>
         </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-websocket</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>2.0.22</version>
+        </dependency>
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/controller/DaPassingStationCollectionController.java b/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/controller/DaPassingStationCollectionController.java
index 8405255..0e23230 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/controller/DaPassingStationCollectionController.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/controller/DaPassingStationCollectionController.java
@@ -1,30 +1,24 @@
 package com.jcdm.main.da.passingStationCollection.controller;
 
-import java.util.List;
-import javax.servlet.http.HttpServletResponse;
-
-import com.jcdm.common.core.domain.R;
-import com.jcdm.common.utils.DateUtils;
-import com.jcdm.main.bs.orderScheduling.domain.BsOrderScheduling;
-import com.jcdm.main.da.passingStationCollection.domain.DaPassingStationCollection;
-import com.jcdm.main.da.passingStationCollection.service.IDaPassingStationCollectionService;
-import com.jcdm.main.da.passingStationCollection.vo.DaPassingStationVO;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 import com.jcdm.common.annotation.Log;
 import com.jcdm.common.core.controller.BaseController;
 import com.jcdm.common.core.domain.AjaxResult;
-import com.jcdm.common.enums.BusinessType;
-import com.jcdm.common.utils.poi.ExcelUtil;
+import com.jcdm.common.core.domain.R;
 import com.jcdm.common.core.page.TableDataInfo;
+import com.jcdm.common.enums.BusinessType;
+import com.jcdm.common.utils.DateUtils;
+import com.jcdm.common.utils.poi.ExcelUtil;
+import com.jcdm.main.da.passingStationCollection.domain.DaPassingStationCollection;
+import com.jcdm.main.da.passingStationCollection.service.IDaPassingStationCollectionService;
+import com.jcdm.main.da.passingStationCollection.service.impl.DaPassingStationCollectionServiceImpl;
+import com.jcdm.main.da.passingStationCollection.vo.DaPassingStationVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 
 /**
  * 浜у搧杩囩珯閲囬泦Controller
@@ -38,6 +32,9 @@
 {
     @Autowired
     private IDaPassingStationCollectionService daPassingStationCollectionService;
+
+    @Resource
+    private DaPassingStationCollectionServiceImpl passingStationCollectionServiceImpl;
 
     /**
      * 鏌ヨ浜у搧杩囩珯閲囬泦鍒楄〃
@@ -147,4 +144,14 @@
     {
         return toAjax(daPassingStationCollectionService.deleteDaPassingStationCollectionByIds(ids));
     }
+
+    //璁剧疆瀹氭椂鍗佺涓�娆�
+//    @Scheduled(cron = "0/10 * * * * ?")
+//    @PostMapping("/send")
+//    public String sendMessage(String message) throws Exception {
+//        if (StringUtils.isEmpty(message)){
+//            message = "TESTMESSAGE";
+//        }
+//        return passingStationCollectionServiceImpl.sendMessage(message);
+//    }
 }
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/mapper/DaPassingStationCollectionMapper.java b/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/mapper/DaPassingStationCollectionMapper.java
index 10b4fe5..a6b0321 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/mapper/DaPassingStationCollectionMapper.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/mapper/DaPassingStationCollectionMapper.java
@@ -4,6 +4,7 @@
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 浜у搧杩囩珯閲囬泦Mapper鎺ュ彛
@@ -62,4 +63,6 @@
      * @return 缁撴灉
      */
     public int deleteDaPassingStationCollectionByIds(Long[] ids);
+
+    public String SelectSN(Map<String, Object> map);
 }
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/IDaPassingStationCollectionService.java b/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/IDaPassingStationCollectionService.java
index d0e0301..44733b3 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/IDaPassingStationCollectionService.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/IDaPassingStationCollectionService.java
@@ -79,5 +79,5 @@
      * @param SNcode 浜у搧SN
      * @return 缁撴灉
      */
-    public String SelectSN(String SNcode);
+    public String SelectSN(String SNcode,String node);
 }
diff --git a/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/impl/DaPassingStationCollectionServiceImpl.java b/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/impl/DaPassingStationCollectionServiceImpl.java
index fe4d082..de56bec 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/impl/DaPassingStationCollectionServiceImpl.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/impl/DaPassingStationCollectionServiceImpl.java
@@ -1,15 +1,7 @@
 package com.jcdm.main.da.passingStationCollection.service.impl;
 
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.*;
-import java.util.stream.Collectors;
-
 import cn.hutool.core.collection.CollUtil;
-import com.jcdm.common.constant.Constants;
+import com.alibaba.fastjson2.JSONObject;
 import com.jcdm.common.utils.DateUtils;
 import com.jcdm.common.utils.StringUtils;
 import com.jcdm.main.bs.orderScheduling.domain.BsOrderScheduling;
@@ -21,9 +13,17 @@
 import com.jcdm.main.da.passingStationCollection.vo.DaPassingStationVO;
 import com.jcdm.main.rm.repairRecord.domain.RmRepairRecord;
 import com.jcdm.main.rm.repairRecord.mapper.RmRepairRecordMapper;
+import com.jcdm.main.websocket.WebSocketServer;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 浜у搧杩囩珯閲囬泦Service涓氬姟灞傚鐞�
@@ -223,19 +223,32 @@
         }
     }
     @Override
-    public String SelectSN(String SNcode){
-        return "1";
+    public String SelectSN(String SNcode,String node) {
+        try {
+            Map<String, Object> params = new HashMap<>();
+            params.put("SNcode",SNcode);
+            params.put("node",node);
+            params.put("Success","");
+            daPassingStationCollectionMapper.SelectSN(params);
+            return (String)params.get("Success");
+        } catch (Exception e) {
+            return "鏁版嵁鏌ヨ澶辫触锛�";
+        }
+    }
 
-//        --璁㈠崟鎺掍骇
-//        select * from bs_order_scheduling where engine_no='2V91Y-F RA182118'
-//
-//        --宸ヨ壓璺嚎瀛愯〃淇℃伅
-//        select * from bs_technology_route_child_info where route_code='H_191S'
-//
-//        --杩斾慨鏁版嵁
-//        select * from rm_repair_record where box_code='2V91Y-F RA182118'
-//
-//        --杩囩珯閲囬泦
-//        select * from da_passing_station_collection --where sfc_code='2V91Y-F RA182118'
+    public String sendMessage(String message) throws Exception{
+        Map<String,Object> map = new HashMap<>();
+
+        // 鑾峰彇褰撳墠鏃ユ湡鍜屾椂闂�
+        LocalDateTime nowDateTime = LocalDateTime.now();
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        System.out.println(dateTimeFormatter.format(nowDateTime));
+        map.put("server_time",dateTimeFormatter.format(nowDateTime));
+        map.put("server_code","200");
+
+        map.put("server_message",message);
+        JSONObject jsonObject =  new JSONObject(map);
+        WebSocketServer.sendAllMessage(jsonObject.toString());
+        return jsonObject.toString();
     }
 }
diff --git a/jcdm-main/src/main/java/com/jcdm/main/plcserver/CustomRunner.java b/jcdm-main/src/main/java/com/jcdm/main/plcserver/CustomRunner.java
index bbb8144..970139d 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/plcserver/CustomRunner.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/plcserver/CustomRunner.java
@@ -2,8 +2,10 @@
 
 
 import com.jcdm.main.da.collectionParamConf.service.IDaCollectionParamConfService;
+import com.jcdm.main.da.opcuaconfig.domain.DaOpcuaConfig;
+import com.jcdm.main.da.opcuaconfig.service.IDaOpcuaConfigService;
 import com.jcdm.main.da.paramCollection.service.IDaParamCollectionService;
-import com.jcdm.main.plcserver.conf.OPCElement;
+import com.jcdm.main.da.passingStationCollection.service.impl.DaPassingStationCollectionServiceImpl;
 import com.jcdm.main.plcserver.sub.OPCUaSubscription;
 import com.kangaroohy.milo.service.MiloService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -11,8 +13,9 @@
 import org.springframework.boot.ApplicationRunner;
 import org.springframework.stereotype.Component;
 
-import java.util.ArrayList;
+import javax.annotation.Resource;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Component
 public class CustomRunner implements ApplicationRunner {
@@ -26,28 +29,46 @@
     @Autowired
     public IDaParamCollectionService daParamCollectionService;
 
+    @Resource
+    private DaPassingStationCollectionServiceImpl passingStationCollectionServiceImpl;
+
+    @Resource
+    private IDaOpcuaConfigService iDaOpcuaConfigService;
+
     @Override
     public void run(ApplicationArguments args) throws Exception {
 
+        List<DaOpcuaConfig> lists = getSubList();
+        List<String> collect = lists.stream().map(DaOpcuaConfig::getNode).collect(Collectors.toList());
         OPCUaSubscription opcUaSubscription = new OPCUaSubscription(
                 miloService,
                 collectionParamConfService,
-                daParamCollectionService);
+                daParamCollectionService
+        ,passingStationCollectionServiceImpl,
+                lists);
 
-        List<String> lists = getSubList();
-        miloService.subscriptionFromOpcUa(lists,opcUaSubscription);
+
+        miloService.subscriptionFromOpcUa(collect,opcUaSubscription);
 
     }
 
     /**
      * 璁㈤槄鍐呭
      */
-    public List<String> getSubList(){
-        List<String> lists = new ArrayList<>();
-        lists.add(OPCElement.OP010_SaveRequest);//璇锋眰淇濆瓨
-        lists.add(OPCElement.OP010_CodeCheck);//璇锋眰妫�绱㈡潯鐮�
-        lists.add(OPCElement.OP020_SaveRequest);//璇锋眰淇濆瓨
-        return lists;
+    public List<DaOpcuaConfig> getSubList(){
+        DaOpcuaConfig config = new DaOpcuaConfig();
+        List<DaOpcuaConfig> list = iDaOpcuaConfigService.selectDaOpcuaConfigList(config);
+//        List<String> lists = new ArrayList<>();
+//        if (CollUtil.isNotEmpty(list)){
+//            lists = list.stream().map(DaOpcuaConfig::getNode).distinct().collect(Collectors.toList());
+//        }
+//        List<String> lists = new ArrayList<>();
+////        lists.add(OPCElement.OP010_SaveRequest);//璇锋眰淇濆瓨
+////        lists.add(OPCElement.OP010_CodeCheck);//璇锋眰妫�绱㈡潯鐮�
+////        lists.add(OPCElement.OP020_SaveRequest);//璇锋眰淇濆瓨
+//        lists.add(OPCElement.OP120_SaveRequestLast);//璇锋眰淇濆瓨
+//        lists.add(OPCElement.OP120_ZZ_CODE_CHECK);//璇锋眰淇濆瓨
+        return list;
     }
 }
 
diff --git a/jcdm-main/src/main/java/com/jcdm/main/plcserver/conf/OPCElement.java b/jcdm-main/src/main/java/com/jcdm/main/plcserver/conf/OPCElement.java
index 1641e9e..39298a7 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/plcserver/conf/OPCElement.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/plcserver/conf/OPCElement.java
@@ -20,9 +20,17 @@
      * OP100
      */
     private static final String OP020_ITEM = "OP.OP100.";//
+    private static final String OP120_ITEM_HX = "CFL4HX.OP120.";//
+    private static final String OP120_ITEM_ZZ = "CFL4ZZ.OP120.";//
     public static final String OP020_SaveRequest = OP020_ITEM + "SaveRequest";//璇锋眰淇濆瓨
+    public static final String OP120_SaveRequestLast = OP120_ITEM_HX + "SaveRequestLast";//璇锋眰淇濆瓨
     public static final String OP020_MesSaveFeed = OP020_ITEM + "MesSaveFeed";//Mes淇濆瓨瀹屾垚
 
+    public static final String OP120_ZZ_CODE_CHECK = OP120_ITEM_ZZ + "CodeCheck";//璇锋眰淇濆瓨
+
+    public static final String SN_CHECK = "SNRetrieval";
+    public static final String SAVE_DATA = "saveData";
+
 
 
 }
\ No newline at end of file
diff --git a/jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java b/jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java
index 2dd7941..f7313b2 100644
--- a/jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java
+++ b/jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java
@@ -3,20 +3,27 @@
 
 import com.jcdm.main.da.collectionParamConf.domain.DaCollectionParamConf;
 import com.jcdm.main.da.collectionParamConf.service.IDaCollectionParamConfService;
+import com.jcdm.main.da.opcuaconfig.domain.DaOpcuaConfig;
 import com.jcdm.main.da.paramCollection.domain.DaParamCollection;
 import com.jcdm.main.da.paramCollection.service.IDaParamCollectionService;
+import com.jcdm.main.da.passingStationCollection.domain.DaPassingStationCollection;
+import com.jcdm.main.da.passingStationCollection.service.impl.DaPassingStationCollectionServiceImpl;
 import com.jcdm.main.plcserver.conf.OPCElement;
 import com.kangaroohy.milo.model.ReadWriteEntity;
 import com.kangaroohy.milo.runner.subscription.SubscriptionCallback;
 import com.kangaroohy.milo.service.MiloService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
+import java.text.Format;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.stream.Collectors;
 
 
+@Slf4j
 @Component
 public class OPCUaSubscription implements SubscriptionCallback {
 
@@ -26,12 +33,23 @@
 
     public IDaParamCollectionService daParamCollectionService;
 
+    public DaPassingStationCollectionServiceImpl passingStationCollectionServiceImpl;
+
+    public List<DaOpcuaConfig> lists;
+
+    public static final HashMap<String,Integer> map = new HashMap<>();
+
     public OPCUaSubscription(MiloService miloService,
                              IDaCollectionParamConfService collectionParamConfService,
-                             IDaParamCollectionService daParamCollectionService) {
+                             IDaParamCollectionService daParamCollectionService,
+                             DaPassingStationCollectionServiceImpl passingStationCollectionServiceImpl,
+                             List<DaOpcuaConfig> lists) {
         OPCUaSubscription.miloService = miloService;
         this.collectionParamConfService = collectionParamConfService;
         this.daParamCollectionService = daParamCollectionService;
+        this.passingStationCollectionServiceImpl = passingStationCollectionServiceImpl;
+        this.lists = lists;
+
 
     }
 
@@ -41,20 +59,82 @@
         String ecpStr = "";//寮傚父璁板綍鏍囪
         try {
             if(null != value) {
+                //1銆佹绱N鍙�
+                //2銆佽繃绔欏弬鏁伴噰闆�
+                //3銆佹壂鐮佹灙鏁版嵁鍥炰紶
+                List<String> collect1 = lists.stream().filter(x -> OPCElement.SN_CHECK.equals(x.getrFunction()))
+                        .map(DaOpcuaConfig::getNode).collect(Collectors.toList());
+                List<String> collect2 = lists.stream().filter(x -> OPCElement.SAVE_DATA.equals(x.getrFunction()))
+                        .map(DaOpcuaConfig::getNode).collect(Collectors.toList());
+                if (collect1.contains(identifier)){
+                    //sn
+                    this.SNRetrieval(identifier,value.toString());
+                    if (identifier.equals(OPCElement.OP120_ZZ_CODE_CHECK) && "1".equals(value.toString())){
+                        //鎬昏涓婄嚎鎵爜浼犺緭鏁版嵁
+                        log.info("-------鐩戝惉鍒�,{}鐨勬壂鐮佹灙鎵爜鐨凜ODE_CHECK鐨勪俊鍙�",identifier);
+                        Integer i = map.getOrDefault(identifier + "鐨勬壂鐮佹灙鎵爜鐨凜ODE_CHECK鐨勪俊鍙�",0);
+                        if (0==i){
+                            map.put(identifier + "鐨勬壂鐮佹灙鎵爜鐨凜ODE_CHECK鐨勪俊鍙�",i+1);
+                        }
+                        String[] parts = OPCElement.OP120_ZZ_CODE_CHECK.split("[.]");
+                        Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code1").getValue();
+                        if (null != SNCodeObject){
+                            String SNCode = SNCodeObject.toString();
+                            passingStationCollectionServiceImpl.sendMessage(SNCode);
+                        }
+                    }
+                }
+                else if (collect2.contains(identifier)){
+                    //save
+                    this.SaveData(identifier);
+                    //杩斿洖plc淇濆瓨鎴愬姛
+                    String[] parts = identifier.split("[.]");
+                    if (parts.length==3){
+                        if ("SaveRequest".equals(parts[2])){
+                            ReadWriteEntity entity = new ReadWriteEntity(parts[0] + "." + parts[1] + ".SaveFeed", 1);
+                            log.info("-------鐩戝惉鍒�,{}鐨剆aveRequest鐨勪俊鍙�",identifier);
+                            Integer i = map.getOrDefault(identifier + "鐨剆aveRequest鐨勪俊鍙�",0);
+                            if (0==i){
+                                map.put(identifier + "鐨剆aveRequest鐨勪俊鍙�",i+1);
+                            }
+//                            miloService.writeToOpcByte(entity);
+                        }else if ("SaveRequestLast".equals(parts[2])){
+                            ReadWriteEntity entity = new ReadWriteEntity(parts[0] + "." + parts[1] + ".SaveFeedLast", 1);
+                            log.info("-------鐩戝惉鍒�,{}鐨凷aveRequestLast鐨勪俊鍙�",identifier);
+                            Integer i = map.getOrDefault(identifier + "鐨凷aveRequestLast鐨勪俊鍙�",0);
+                            if (0==i){
+                                map.put(identifier + "鐨凷aveRequestLast鐨勪俊鍙�",i+1);
+                            }
+//                            miloService.writeToOpcByte(entity);
+                        }
+                    }
+
+
+                }
 
                 //OP010淇濆瓨璇锋眰
-                if (identifier.equals(OPCElement.OP010_SaveRequest) && "1".equals(value.toString())) {
-                    //1銆佹洿鏂板伐鍗曟暟鎹�
-                    //2銆佷繚瀛樿繃绔欓噰闆嗘暟鎹�
-                    //3銆佷繚瀛樺弬鏁伴噰闆嗘暟鎹�
-                    ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP010_MesSaveFeed, 1);
-                    miloService.writeToOpcByte(entity);
-                }
-                //OP010璇锋眰妫�绱㈡潯鐮�
-                else if (identifier.equals(OPCElement.OP010_CodeCheck) && "1".equals(value.toString())) {
-                    ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP010_MesCodeCheckFeed, 1);
-                    miloService.writeToOpcByte(entity);
-                }
+//                if (identifier.equals(OPCElement.OP120_SaveRequestLast) && "1".equals(value.toString())) {
+//                    this.SaveData(OPCElement.OP120_SaveRequestLast);
+//                    //1銆佹洿鏂板伐鍗曟暟鎹�
+//                    //2銆佷繚瀛樿繃绔欓噰闆嗘暟鎹�
+//                    //3銆佷繚瀛樺弬鏁伴噰闆嗘暟鎹�
+//                    ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP010_MesSaveFeed, 1);
+//                    miloService.writeToOpcByte(entity);
+//                }
+//                else if (identifier.equals(OPCElement.OP120_ZZ_CODE_CHECK) && "1".equals(value.toString())){
+//                    //鎬昏涓婄嚎鎵爜浼犺緭鏁版嵁
+//                    String[] parts = OPCElement.OP120_ZZ_CODE_CHECK.split("[.]");
+//                    Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code1").getValue();
+//                    if (null != SNCodeObject){
+//                        String SNCode = SNCodeObject.toString();
+//                        passingStationCollectionServiceImpl.sendMessage(SNCode);
+//                    }
+//                }
+//                //OP010璇锋眰妫�绱㈡潯鐮�
+//                else if (identifier.equals(OPCElement.OP010_CodeCheck) && "1".equals(value.toString())) {
+//                    ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP010_MesCodeCheckFeed, 1);
+//                    miloService.writeToOpcByte(entity);
+//                }
             }
 
 
@@ -69,8 +149,34 @@
         }
     }
 
+    public void SNRetrieval(String Node, String value) throws Exception {
+        String[] parts = Node.split("[.]");
+        if(value.equals("1")) {
+            //SN鍙锋绱�
+            Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code").getValue();
+            if(null != SNCodeObject) {
+                String SNCode=SNCodeObject.toString();
+                String a=passingStationCollectionServiceImpl.SelectSN(SNCode,parts[1]);
+                // 1:OK鍙敓浜� 2:NG涓嶅彲鐢熶骇 3:NG鍙繑宸� 4:PC妫�绱㈠け璐ワ紙鏃犺褰曪級5:PC妫�绱㈠け璐ワ紙杞欢锛�
+                ReadWriteEntity entity = new ReadWriteEntity(parts[0]+"."+parts[1]+".CodeCheckFeed", a);
+                log.info("-------鐩戝惉鍒�,{}鐨凜odeCheck鐨勪俊鍙�",Node);
+                Integer i = map.getOrDefault(Node + "鐨凜odeCheck鐨勪俊鍙�",0);
+                if (0==i){
+                    map.put(Node + "鐨凜odeCheck鐨勪俊鍙�",i+1);
+                }
+//                miloService.writeToOpcByte(entity);
+                DaPassingStationCollection PassingStationCollection=new DaPassingStationCollection();
+                PassingStationCollection.setSfcCode(SNCode);
+                PassingStationCollection.setLocationCode(parts[1]);
+                PassingStationCollection.setInboundTime(new Date());
+                passingStationCollectionServiceImpl.insertDaPassingStationCollection(PassingStationCollection);
+            }
+        }
+    }
+
+
     public void SaveData(String Node) throws Exception {
-        /*String[] parts = Node.split("[.]");
+        String[] parts = Node.split("[.]");
         Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code1").getValue();
 
         if(null != SNCodeObject)
@@ -108,6 +214,6 @@
                 }
                 daParamCollectionService.saveBeachDaParamCollection(daParamCollectionlist);
             }
-        }*/
+        }
     }
 }
diff --git a/jcdm-main/src/main/java/com/jcdm/main/websocket/SystemController.java b/jcdm-main/src/main/java/com/jcdm/main/websocket/SystemController.java
new file mode 100644
index 0000000..e20672c
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/websocket/SystemController.java
@@ -0,0 +1,44 @@
+package com.jcdm.main.websocket;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.ModelAndView;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+@Controller("web_Scoket_system")
+@RequestMapping("/api/socket")
+public class SystemController {
+
+    //椤甸潰璇锋眰
+    @GetMapping("/index/{userId}")
+    public ModelAndView socket(@PathVariable String userId) {
+        ModelAndView mav = new ModelAndView("/socket1");
+        mav.addObject("userId", userId);
+        return mav;
+    }
+
+    //鎺ㄩ�佹暟鎹帴鍙�
+    @ResponseBody
+    @RequestMapping("/socket/push/{cid}")
+    public Map pushToWeb(@PathVariable String cid, String message) {
+        Map<String,Object> result = new HashMap<>();
+        try {
+            WebSocketServer.sendInfo(message, cid);
+            result.put("code", cid);
+            result.put("msg", message);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+
+
+
+}
diff --git a/jcdm-main/src/main/java/com/jcdm/main/websocket/WebSocketConfig.java b/jcdm-main/src/main/java/com/jcdm/main/websocket/WebSocketConfig.java
new file mode 100644
index 0000000..822cb37
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/websocket/WebSocketConfig.java
@@ -0,0 +1,16 @@
+package com.jcdm.main.websocket;
+
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+@Configuration
+public class WebSocketConfig {
+
+
+    @Bean
+    public ServerEndpointExporter serverEndpointExporter() {
+        return new ServerEndpointExporter();
+    }
+}
diff --git a/jcdm-main/src/main/java/com/jcdm/main/websocket/WebSocketServer.java b/jcdm-main/src/main/java/com/jcdm/main/websocket/WebSocketServer.java
new file mode 100644
index 0000000..d6360e6
--- /dev/null
+++ b/jcdm-main/src/main/java/com/jcdm/main/websocket/WebSocketServer.java
@@ -0,0 +1,158 @@
+package com.jcdm.main.websocket;
+
+
+import cn.hutool.log.Log;
+import cn.hutool.log.LogFactory;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.concurrent.ConcurrentHashMap;
+
+
+
+@Component
+@Service
+@ServerEndpoint("/websocket/{userId}")
+public class WebSocketServer {
+    static Log log = LogFactory.get(WebSocketServer.class);
+    /**
+     * 闈欐�佸彉閲忥紝鐢ㄦ潵璁板綍褰撳墠鍦ㄧ嚎杩炴帴鏁般�傚簲璇ユ妸瀹冭璁℃垚绾跨▼瀹夊叏鐨勩��
+     */
+    private static int onlineCount = 0;
+    /**
+     * concurrent鍖呯殑绾跨▼瀹夊叏Set锛岀敤鏉ュ瓨鏀炬瘡涓鎴风瀵瑰簲鐨凪yWebSocket瀵硅薄銆�
+     */
+    private static ConcurrentHashMap<String, WebSocketServer> webSocketMap = new ConcurrentHashMap<>();
+    /**
+     * 涓庢煇涓鎴风鐨勮繛鎺ヤ細璇濓紝闇�瑕侀�氳繃瀹冩潵缁欏鎴风鍙戦�佹暟鎹�
+     */
+    private Session session;
+    /**
+     * 鎺ユ敹userId
+     */
+    private String userId = "";
+
+    /**
+     * 杩炴帴寤虹珛鎴愬姛璋冪敤鐨勬柟娉�
+     */
+    @OnOpen
+    public void onOpen(Session session, @PathParam("userId") String userId) {
+        this.session = session;
+        this.userId = userId;
+        if (webSocketMap.containsKey(userId)) {
+            webSocketMap.remove(userId);
+            webSocketMap.put(userId, this);
+            //鍔犲叆set涓�
+        } else {
+            webSocketMap.put(userId, this);
+            //鍔犲叆set涓�
+            addOnlineCount();
+            //鍦ㄧ嚎鏁板姞1
+        }
+
+        log.info("鐢ㄦ埛杩炴帴:" + userId + ",褰撳墠鍦ㄧ嚎浜烘暟涓�:" + getOnlineCount());
+
+        try {
+            sendMessage("杩炴帴鎴愬姛");
+        } catch (IOException e) {
+            log.error("鐢ㄦ埛:" + userId + ",缃戠粶寮傚父!!!!!!");
+        }
+    }
+
+    /**
+     * 杩炴帴鍏抽棴璋冪敤鐨勬柟娉�
+     */
+    @OnClose
+    public void onClose() {
+        if (webSocketMap.containsKey(userId)) {
+            webSocketMap.remove(userId);
+            //浠巗et涓垹闄�
+            subOnlineCount();
+        }
+        log.info("鐢ㄦ埛閫�鍑�:" + userId + ",褰撳墠鍦ㄧ嚎浜烘暟涓�:" + getOnlineCount());
+    }
+
+    /**
+     * 鏀跺埌瀹㈡埛绔秷鎭悗璋冪敤鐨勬柟娉�
+     *
+     * @param message 瀹㈡埛绔彂閫佽繃鏉ョ殑娑堟伅
+     */
+    @OnMessage
+    public void onMessage(String message, Session session) {
+        log.info("鐢ㄦ埛娑堟伅:" + userId + ",鎶ユ枃:" + message);
+        //鍙互缇ゅ彂娑堟伅
+        //娑堟伅淇濆瓨鍒版暟鎹簱銆乺edis
+
+        if (! StringUtils.isEmpty(message)) {
+            try {
+                //瑙f瀽鍙戦�佺殑鎶ユ枃
+                JSONObject jsonObject = JSON.parseObject(message);
+
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * @param session
+     * @param error
+     */
+    @OnError
+    public void onError(Session session, Throwable error) {
+        log.error("鐢ㄦ埛閿欒:" + this.userId + ",鍘熷洜:" + error.getMessage());
+        error.printStackTrace();
+    }
+
+    /**
+     * 瀹炵幇鏈嶅姟鍣ㄤ富鍔ㄦ帹閫�
+     */
+    public void sendMessage(String message) throws IOException {
+        this.session.getBasicRemote().sendText(message);
+    }
+
+
+    /**
+     * 瀹炵幇鏈嶅姟鍣ㄤ富鍔ㄦ帹閫�
+     */
+    public static void sendAllMessage(String message) throws IOException {
+        log.info("鍙戦�佹秷鎭�:" + message);
+        ConcurrentHashMap.KeySetView<String, WebSocketServer> userIds = webSocketMap.keySet();
+        for (String userId : userIds) {
+            WebSocketServer webSocketServer = webSocketMap.get(userId);
+            webSocketServer.session.getBasicRemote().sendText(message);
+            System.out.println("webSocket瀹炵幇鏈嶅姟鍣ㄤ富鍔ㄦ帹閫佹垚鍔焨serIds====" + userIds);
+        }
+    }
+
+    /**
+     * 鍙戦�佽嚜瀹氫箟娑堟伅
+     */
+    public static void sendInfo(String message, @PathParam("userId") String userId) throws IOException {
+        log.info("鍙戦�佹秷鎭埌:" + userId + "锛屾姤鏂�:" + message);
+        if (!StringUtils.isEmpty(message) && webSocketMap.containsKey(userId)) {
+            webSocketMap.get(userId).sendMessage(message);
+        } else {
+            log.error("鐢ㄦ埛" + userId + ",涓嶅湪绾匡紒");
+        }
+    }
+
+    public static synchronized int getOnlineCount() {
+        return onlineCount;
+    }
+
+    public static synchronized void addOnlineCount() {
+        WebSocketServer.onlineCount++;
+    }
+
+    public static synchronized void subOnlineCount() {
+        WebSocketServer.onlineCount--;
+    }
+}
diff --git a/jcdm-main/src/main/resources/mapper/da/passingStationCollection/DaPassingStationCollectionMapper.xml b/jcdm-main/src/main/resources/mapper/da/passingStationCollection/DaPassingStationCollectionMapper.xml
index d38a3dd..bec913f 100644
--- a/jcdm-main/src/main/resources/mapper/da/passingStationCollection/DaPassingStationCollectionMapper.xml
+++ b/jcdm-main/src/main/resources/mapper/da/passingStationCollection/DaPassingStationCollectionMapper.xml
@@ -150,4 +150,14 @@
             #{id}
         </foreach>
     </delete>
+
+    <select id="SelectSN" parameterType="java.util.Map" statementType="CALLABLE" resultType="java.lang.String">
+        {
+            call SNRetrieval(
+                #{SN_CODE,mode=IN,jdbcType=VARCHAR},
+                #{Node,mode=IN,jdbcType=VARCHAR},
+                #{Success,mode=OUT,jdbcType=VARCHAR}
+                 )
+            }
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/jcdm-ui/src/utils/WebsocketTool.js b/jcdm-ui/src/utils/WebsocketTool.js
new file mode 100644
index 0000000..711e2f4
--- /dev/null
+++ b/jcdm-ui/src/utils/WebsocketTool.js
@@ -0,0 +1,105 @@
+//闇�姹傦細鍦↗avaScript涓疄鐜癢ebSocket杩炴帴澶辫触鍚�3鍒嗛挓鍐呭皾璇曢噸杩�3娆$殑鍔熻兘锛屼綘鍙互璁剧疆涓�涓噸杩炵瓥鐣ワ紝
+//     鍖呮嫭閲嶈繛鐨勯棿闅旀椂闂淬�佸皾璇曟鏁颁互鍙婃�绘椂闂撮檺鍒躲��
+
+/**
+ * @param {string} url  Url to connect
+ * @param {number} maxReconnectAttempts Maximum number of times
+ * @param {number} reconnect Timeout
+ * @param {number} reconnectTimeout Timeout
+ *
+ */
+class WebSocketReconnect {
+
+  constructor(url, maxReconnectAttempts = 3, reconnectInterval = 20000, maxReconnectTime = 180000) {
+    this.url = url
+    this.maxReconnectAttempts = maxReconnectAttempts
+    this.reconnectInterval = reconnectInterval
+    this.maxReconnectTime = maxReconnectTime
+    this.reconnectCount = 0
+    this.reconnectTimeout = null
+    this.startTime = null
+    this.socket = null
+
+    this.connect()
+  }
+
+  //杩炴帴鎿嶄綔
+  connect() {
+    console.log('connecting...')
+    this.socket = new WebSocket(this.url)
+
+    //杩炴帴鎴愬姛寤虹珛鐨勫洖璋冩柟娉�
+    this.socket.OnOpen = () => {
+      console.log('WebSocket Connection Opened!')
+      this.clearReconnectTimeout()
+      this.reconnectCount = 0
+    }
+    //杩炴帴鍏抽棴鐨勫洖璋冩柟娉�
+    this.socket.OnClose = (event) => {
+      console.log('WebSocket Connection Closed:', event)
+      this.handleClose()
+    }
+    //杩炴帴鍙戠敓閿欒鐨勫洖璋冩柟娉�
+    this.socket.OnError = (error) => {
+      console.error('WebSocket Connection Error:', error)
+      this.handleClose() //閲嶈繛
+    }
+  }
+
+  //鏂嚎閲嶈繛鎿嶄綔
+  handleClose() {
+    if (this.reconnectCount < this.maxReconnectAttempts && (this.startTime === null ||
+      Date.now() - this.startTime < this.maxReconnectTime)) {
+      this.reconnectCount++
+      console.log(`姝e湪灏濊瘯閲嶈繛 (${this.reconnectCount}/${this.maxReconnectAttempts})娆�...`)
+      this.reconnectTimeout = setTimeout(() => {
+        this.connect()
+      }, this.reconnectInterval)
+
+      if (this.startTime === null) {
+        this.startTime = Date.now()
+      }
+    } else {
+      console.log('瓒呰繃鏈�澶ч噸杩炴鏁版垨閲嶈繛鏃堕棿瓒呮椂锛屽凡鏀惧純杩炴帴锛丮ax reconnect attempts reached or exceeded max reconnect time. Giving up.')
+      this.reconnectCount = 0 // 閲嶇疆杩炴帴娆℃暟0
+      this.startTime = null // 閲嶇疆寮�濮嬫椂闂�
+    }
+  }
+
+  //娓呴櫎閲嶈繛瀹氭椂鍣�
+  clearReconnectTimeout() {
+    if (this.reconnectTimeout) {
+      clearTimeout(this.reconnectTimeout)
+      this.reconnectTimeout = null
+    }
+  }
+
+  //鍏抽棴杩炴帴
+  close() {
+    if (this.socket && this.socket.readyState === WebSocket.OPEN) {
+      this.socket.close()
+    }
+    this.clearReconnectTimeout()
+    this.reconnectCount = 0
+    this.startTime = null
+  }
+}
+
+// WebSocketReconnect 绫诲皝瑁呬簡WebSocket鐨勮繛鎺ャ�侀噸杩為�昏緫銆�
+// maxReconnectAttempts 鏄渶澶ч噸杩炲皾璇曟鏁般��
+// reconnectInterval 鏄瘡娆¢噸杩炲皾璇曚箣闂寸殑闂撮殧鏃堕棿銆�
+// maxReconnectTime 鏄�荤殑閲嶈繛鏃堕棿闄愬埗锛岃秴杩囪繖涓椂闂村悗涓嶅啀灏濊瘯閲嶈繛銆�
+// reconnectCount 鐢ㄤ簬璁板綍宸茬粡灏濊瘯鐨勯噸杩炴鏁般��
+// startTime 鐢ㄤ簬璁板綍寮�濮嬮噸杩炵殑鏃堕棿銆�
+// connect 鏂规硶鐢ㄤ簬寤虹珛WebSocket杩炴帴锛屽苟璁剧疆鐩稿簲鐨勪簨浠剁洃鍚櫒銆�
+// handleClose 鏂规硶鍦╓ebSocket杩炴帴鍏抽棴鎴栧彂鐢熼敊璇椂琚皟鐢紝鏍规嵁鏉′欢鍐冲畾鏄惁灏濊瘯閲嶈繛銆�
+// clearReconnectTimeout 鏂规硶鐢ㄤ簬娓呴櫎涔嬪墠璁剧疆鐨勯噸杩炲畾鏃跺櫒銆�
+// close 鏂规硶鐢ㄤ簬鍏抽棴WebSocket杩炴帴锛屽苟娓呴櫎閲嶈繛鐩稿叧鐨勭姸鎬併��
+
+// 浣跨敤绀轰緥
+// const webSocketReconnect = new WebSocketReconnect('ws://your-websocket-url')
+// 褰撲笉鍐嶉渶瑕乄ebSocket杩炴帴鏃讹紝鍙互璋冪敤close鏂规硶
+// webSocketReconnect.close();
+
+export default WebSocketReconnect
+
diff --git a/jcdm-ui/src/views/main/kb/engineCheck/index.vue b/jcdm-ui/src/views/main/kb/engineCheck/index.vue
index a3b2be1..2e2ac99 100644
--- a/jcdm-ui/src/views/main/kb/engineCheck/index.vue
+++ b/jcdm-ui/src/views/main/kb/engineCheck/index.vue
@@ -44,7 +44,7 @@
 
          <el-row :gutter="10" class="mb8" type="flex" justify="center"  style="text-align: center">
            <el-col :span="1.5">
-             <el-button plain  :disabled="buttondisabled" type="primary" style="width:400px;height:160px" v-hasPermi="['bs:formula:add']" @click="forceOnline">
+             <el-button plain  :disabled="buttondisabled" type="primary" style="width:400px;height:160px" v-hasPermi="['bs:formula:add']">
                <span   class="el-icon-thumb"   style="font-size:40px;color:black"></span>
                <span style="font-size:45px;color:black"><strong>寮哄埗涓婄嚎</strong></span>
              </el-button>
@@ -77,6 +77,41 @@
 import { listOrderScheduling, getOrderScheduling, delOrderScheduling, addOrderScheduling, updateOrderScheduling } from "@/api/main/bs/orderScheduling/orderScheduling";
 import { listPassingStationCollection, getPassingStationCollection, delPassingStationCollection, addPassingStationCollection, updatePassingStationCollection } from "@/api/main/da/passingStationCollection/passingStationCollection";
 import {listLineInfo} from "@/api/main/bs/lineInfo/lineInfo";
+import WebSocketReconnect from "@/utils/WebsocketTool";
+
+// let websocket = null
+// //鍒ゆ柇褰撳墠娴忚鍣ㄦ槸鍚︽敮鎸乄ebSocket
+// if ('WebSocket' in window) {
+//   //杩炴帴WebSocket鑺傜偣
+//   websocket = new WebSocketReconnect('ws://127.0.0.1:8086/websocket/111122')
+// } else {
+//   alert('娴忚鍣ㄤ笉鏀寔webSocket')
+// }
+// //鎺ユ敹鍒版秷鎭殑鍥炶皟鏂规硶
+// websocket.socket.onmessage = function (event) {
+//   let data = event.data
+//   console.log('鍚庣浼犻�掔殑鏁版嵁:' + data)
+//   if (data != null && data !== ''){
+//     this.result = JSON.parse(data)
+//     console.log('this.result',this.result)
+//     // this.form.engineNo = this.result.server_message
+//     this.transEngineNo = this.result.server_message
+//     console.log('this.transEngineNo11111111111',this.transEngineNo)
+//   }
+//
+// }
+// //鐩戝惉绐楀彛鍏抽棴浜嬩欢锛屽綋绐楀彛鍏抽棴鏃讹紝涓诲姩鍘诲叧闂瓀ebsocket杩炴帴锛岄槻姝㈣繛鎺ヨ繕娌℃柇寮�灏卞叧闂獥鍙o紝server绔細鎶涘紓甯搞��
+// window.onbeforeunload = function () {
+//   websocket.close()
+// }
+// //鍏抽棴杩炴帴
+// function closeWebSocket() {
+//   websocket.close()
+// }
+// //鍙戦�佹秷鎭�
+// function send() {
+//   websocket.socket.send({ kk: 123 })
+// }
 
 export default {
   components: { },
@@ -84,11 +119,15 @@
   props: [],
   data() {
     return {
+      websocket: null,
+      result: {},
+      transEngineNo: '',
       options: [],
       total: 0,
       engineCheckList:[],
       showFlag:false,
       buttondisabled:true,
+      mess:'',
       // 鏌ヨ鍙傛暟
       queryParams: {
         pageNum: 1,
@@ -115,10 +154,57 @@
     };
   },
   computed: {},
-  watch: {},
+  watch: {
+    // transEngineNo:{
+    //   handler(newVal,oldVal) {
+    //     console.log('newVal',newVal)
+    //     console.log('oldVal',oldVal)
+    //     this.form.engineNo = newVal
+    //     console.log('11111111111111')
+    //     console.log('this.form.engineNo',this.form.engineNo)
+    //   },
+    //   immediate:true
+    // }
+  },
   created() {},
-  mounted() {},
+  mounted() {
+    this.initWebSocket()
+  },
   methods: {
+    initWebSocket: function (){
+      //鍒ゆ柇褰撳墠娴忚鍣ㄦ槸鍚︽敮鎸乄ebSocket
+      if ('WebSocket' in window) {
+        //杩炴帴WebSocket鑺傜偣
+        this.websocket = new WebSocketReconnect('ws://127.0.0.1:8086/websocket/111122')
+
+        //鎺ユ敹鍒版秷鎭殑鍥炶皟鏂规硶
+        this.websocket.socket.onmessage = (event) => {
+          let data = event.data
+          console.log('鍚庣浼犻�掔殑鏁版嵁:' + data)
+          if (data != null && data !== ''){
+            this.result = JSON.parse(data)
+            console.log('this.result',this.result)
+            this.form.engineNo = this.result.server_message
+            // this.transEngineNo = this.result.server_message
+            console.log('this.transEngineNo11111111111',this.transEngineNo)
+          }
+        }
+//鐩戝惉绐楀彛鍏抽棴浜嬩欢锛屽綋绐楀彛鍏抽棴鏃讹紝涓诲姩鍘诲叧闂瓀ebsocket杩炴帴锛岄槻姝㈣繛鎺ヨ繕娌℃柇寮�灏卞叧闂獥鍙o紝server绔細鎶涘紓甯搞��
+        window.onbeforeunload = function () {
+          this.websocket.close()
+        }
+//鍏抽棴杩炴帴
+        function closeWebSocket() {
+          this.websocket.close()
+        }
+//鍙戦�佹秷鎭�
+        function send() {
+          this.websocket.socket.send({ kk: 123 })
+        }
+      } else {
+        alert('娴忚鍣ㄤ笉鏀寔webSocket')
+      }
+    },
     reset() {
       this.form = {
         engineNo:null,

--
Gitblit v1.9.3