From 105d6b807d69eb95b3426f5cf6e87a8ff7b0611c Mon Sep 17 00:00:00 2001
From: 吴健 <14790700720@163.com>
Date: 星期三, 14 五月 2025 10:34:45 +0800
Subject: [PATCH] first-add

---
 billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscription.java |  178 +++++++++++++++++++++++++++++++++--------------------------
 1 files changed, 99 insertions(+), 79 deletions(-)

diff --git a/billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscription.java b/billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscription.java
index 5deb902..cb8d83f 100644
--- a/billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscription.java
+++ b/billion-main/src/main/java/com/billion/main/plc/sub/OPCUaSubscription.java
@@ -2,18 +2,24 @@
 
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.http.HttpRequest;
 import cn.hutool.http.HttpResponse;
 import cn.hutool.json.JSONUtil;
+import com.alibaba.druid.sql.visitor.functions.Substring;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.billion.main.api.domain.StationST180;
 import com.billion.main.da.domain.DaParamCollection;
+import com.billion.main.da.domain.DaStationCollection;
 import com.billion.main.da.service.IDaParamCollectionService;
 import com.billion.main.da.service.IDaStationCollectionService;
 import com.billion.main.plc.constant.Constants;
 import com.billion.main.sc.domain.ScCollectionParamConf;
 import com.billion.main.sc.service.IScCollectionParamConfService;
+import com.billion.system.domain.SysNotice;
+import com.billion.system.service.impl.SysNoticeServiceImpl;
 import com.kangaroohy.milo.model.ReadWriteEntity;
 import com.kangaroohy.milo.runner.subscription.SubscriptionCallback;
 import com.kangaroohy.milo.service.MiloService;
@@ -38,19 +44,23 @@
     public static IDaParamCollectionService paramCollectionService;
     public static IDaStationCollectionService stationCollectionService;
 
+    public static SysNoticeServiceImpl sysNoticeService;
+
     public OPCUaSubscription(MiloService miloService, IScCollectionParamConfService collectionParamConfService
-            ,IDaParamCollectionService paramCollectionService,IDaStationCollectionService stationCollectionService) {
+            ,IDaParamCollectionService paramCollectionService,IDaStationCollectionService stationCollectionService,SysNoticeServiceImpl sysNoticeService) {
         OPCUaSubscription.miloService = miloService;
         OPCUaSubscription.collectionParamConfService = collectionParamConfService;
         OPCUaSubscription.paramCollectionService = paramCollectionService;
         OPCUaSubscription.stationCollectionService = stationCollectionService;
+        OPCUaSubscription.sysNoticeService = sysNoticeService;
+
     }
 
     @Override
     public void onSubscribe(String identifier, Object value) {
         log.info("鍦板潃锛�"+identifier+"鍊硷細"+value);
         try {
-            if(null != value && !Constants.ZERO.equals(value.toString())) {
+            if(ObjUtil.isNotNull(value) && !Constants.ZERO.equals(value.toString())) {
                 String[] nodes = identifier.split("[.]");
                 String thoroughfare = nodes[0];//閫氶亾
                 String device = nodes[1];//璁惧
@@ -71,12 +81,66 @@
         try{
             //鐩戝惉recordData
             if(tab.equals(Constants.RECORD_DATA)){
-                //濡傛灉鏄�2鍋氬嚭绔欏鐞�
-                if(valueString.equals(Constants.TWO)){
+                if(valueString.equals(Constants.ONE)){
+//                    Object StationStatusObject = miloService.readFromOpcUa(thoroughfare + "." + device + ".StationStatus").getValue();
+//                    if (ObjUtil.isNotNull(StationStatusObject)){
+//                        String StationStatus = StationStatusObject.toString();
+//                        if (!Constants.ONE.equals(StationStatus)){
+//                            miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(Constants.INTEGER_ONE_TWO).build());
+//                        } else {
+//                            miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(Constants.INTEGER_ONE_ONE).build());
+//                        }
+//                    }
+
+                    miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(Constants.INTEGER_ONE_ONE).build());
+
+                } else if(valueString.equals(Constants.TWO)){
+                    //濡傛灉鏄�2鍋氬嚭绔欏鐞�
+                    Object SNCodeObject = miloService.readFromOpcUa(thoroughfare + "." + device + ".SNCode").getValue();
+                    if (ObjUtil.isNotNull(SNCodeObject)){
+                        String SnCode = SNCodeObject.toString();
+                        if (StrUtil.isNotBlank(SnCode)){
+                            savePassingStation(thoroughfare,device,"snCode");
+                            saveParamCollection(device, "snCode", "stationStatus");
+                        }
+                    }
                     Integer result = Constants.INTEGER_TWO_ONE;
-                    result = saveParamCollection(device, "snCode", "stationStatus");
                     miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(result).build());
                 }
+            } else if (tab.startsWith("OP")){
+                //澶勭悊璁惧鎶ヨ
+                if (Constants.FIVE.equals(valueString)){
+                    //閲嶇疆
+                    List<SysNotice> list = sysNoticeService.list(new LambdaQueryWrapper<SysNotice>()
+                            .eq(SysNotice::getNoticeTitle, tab)
+                            .eq(SysNotice::getStatus, Constants.ONE)
+                            .eq(SysNotice::getNoticeType,valueString));
+                    if (CollUtil.isNotEmpty(list)){
+                       list.forEach(x ->{
+                           x.setStatus(Constants.ZERO);
+                       });
+                       sysNoticeService.updateBatchById(list);
+                    }
+                } else {
+                    SysNotice sysNotice = new SysNotice();
+                    sysNotice.setNoticeTitle(tab);
+                    sysNotice.setNoticeType(valueString);
+                    String type = "";
+                    if (Constants.ONE.equals(valueString)){
+                        type = "缂烘枡";
+                    } else if (Constants.TWO.equals(valueString)){
+                        type = "鏁呴殰";
+                    } else if (Constants.THREE.equals(valueString)){
+                        type = "璁惧";
+                    } else if (Constants.FOUR.equals(valueString)){
+                        type = "鎬ュ仠";
+                    }
+                    String content = tab + "宸ヤ綅" +type+ "鎶ヨ";
+                    sysNotice.setNoticeContent(content);
+                    sysNotice.setStatus(Constants.ONE);
+                    sysNoticeService.insertNotice(sysNotice);
+                }
+
             }
         }catch (Exception e) {
             log.error(e.getMessage());
@@ -91,16 +155,23 @@
      * @return Integer
      * @throws Exception e
      */
-    private static Integer savePassingStation(String device, String snCode,String stationStatus){
-        Integer result = 21;
+    private static void savePassingStation(String thoroughfare, String device, String snCode){
         try {
-
-
+            DaStationCollection daStationCollection = new DaStationCollection();
+            daStationCollection.setSfcCode(snCode);
+            daStationCollection.setLocationCode(device);
+            daStationCollection.setInboundTime(new Date());
+            daStationCollection.setOutboundTime(new Date());
+            Object StationStatusObject = miloService.readFromOpcUa(thoroughfare + "." + device + ".StationStatus").getValue();
+            if (ObjUtil.isNotNull(StationStatusObject)){
+                String StationStatus = StationStatusObject.toString();
+                daStationCollection.setStatus(StationStatus);
+            }
+            daStationCollection.setCollectTime(new Date());
+            stationCollectionService.insertDaStationCollection(daStationCollection);
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
-
-        return result;
     }
 
     /**
@@ -111,8 +182,7 @@
      * @return result
      * @throws Exception e
      */
-    private static Integer saveParamCollection(String device, String snCode, String stationStatus) {
-        Integer result = Constants.INTEGER_TWO_ONE;
+    private static void saveParamCollection(String device, String snCode, String stationStatus) {
         try {
             // 鏌ヨ鍙傛暟閰嶇疆琛�
             List<ScCollectionParamConf> list = collectionParamConfService.list(new LambdaQueryWrapper<ScCollectionParamConf>()
@@ -120,37 +190,36 @@
                     .eq(ScCollectionParamConf::getSubscribe, Constants.ONE)
                     .orderByDesc(ScCollectionParamConf::getOrderNum)
             );
-            
+
             if (CollUtil.isNotEmpty(list)) {
                 // 鑾峰彇鍙傛暟鍊�
                 List<String> collect = list.stream()
                         .map(ScCollectionParamConf::getNode)
                         .collect(Collectors.toList());
                 List<ReadWriteEntity> readWriteEntityList = miloService.readFromOpcUa(collect);
-                
+
                 // 淇濆瓨閲囬泦鏁版嵁
                 saveCollectionData(device, snCode, list, readWriteEntityList);
-                
-                // 鍒涘缓宸ヤ綅瀵硅薄骞惰祴鍊�
-                Object stationObject = createStationObject(device, list, readWriteEntityList);
-                if (stationObject != null) {
-                    System.out.println("宸ヤ綅" + device + "瀵硅薄鍒涘缓鎴愬姛锛�" + stationObject);
-                    // 杩欓噷鍙互瀵瑰垱寤虹殑瀵硅薄杩涜杩涗竴姝ュ鐞�
-                    handleMesRequest(stationObject, device);
-                }
+
+//                // 鍒涘缓宸ヤ綅瀵硅薄骞惰祴鍊�
+//                Object stationObject = createStationObject(device, list, readWriteEntityList);
+//                if (stationObject != null) {
+//                    System.out.println("宸ヤ綅" + device + "瀵硅薄鍒涘缓鎴愬姛锛�" + stationObject);
+//                    // 杩欓噷鍙互瀵瑰垱寤虹殑瀵硅薄杩涜杩涗竴姝ュ鐞�
+//
+//                }
             }
 
         } catch (Exception e) {
             log.error("淇濆瓨鏁版嵁寮傚父", e);
-            throw new RuntimeException("淇濆瓨鏁版嵁鍙戦�佸伐鍘侻ES寮傚父");
+            throw new RuntimeException("淇濆瓨鏁版嵁寮傚父");
         }
-        return result;
     }
 
     /**
      * 淇濆瓨閲囬泦鏁版嵁
      */
-    private static void saveCollectionData(String device, String snCode, 
+    private static void saveCollectionData(String device, String snCode,
             List<ScCollectionParamConf> list, List<ReadWriteEntity> readWriteEntityList) {
         ArrayList<DaParamCollection> collectionList = new ArrayList<>();
         for (int i = 0; i < readWriteEntityList.size(); i++) {
@@ -169,7 +238,7 @@
     /**
      * 鍒涘缓宸ヤ綅瀵硅薄骞惰祴鍊�
      */
-    private static Object createStationObject(String device, 
+    private static Object createStationObject(String device,
             List<ScCollectionParamConf> list, List<ReadWriteEntity> readWriteEntityList) {
         try {
             // 鏋勫缓瀹屾暣鐨勭被鍚�
@@ -179,11 +248,11 @@
 
             // 鑾峰彇鎵�鏈夊睘鎬�
             Field[] fields = stationClass.getDeclaredFields();
-            
+
             // 鍒涘缓鍙傛暟鍊糓ap锛屾柟渚挎煡鎵�
             Map<String, String> paramValueMap = new HashMap<>();
             for (int i = 0; i < list.size(); i++) {
-                paramValueMap.put(list.get(i).getParamCode(), 
+                paramValueMap.put(list.get(i).getParamCode(),
                     readWriteEntityList.get(i).getValue().toString());
             }
 
@@ -192,7 +261,7 @@
                 field.setAccessible(true);
                 String paramCode = field.getName(); // 鍋囪灞炴�у悕涓庡弬鏁扮紪鐮佷竴鑷�
                 String value = paramValueMap.get(paramCode);
-                
+
                 if (value != null) {
                     // 鏍规嵁瀛楁绫诲瀷杞崲鍊�
                     Object convertedValue = convertValue(value, field.getType());
@@ -232,55 +301,6 @@
             }
         }
         return value;
-    }
-
-    private static void handleMesRequest(Object stationObject, String device) {
-        try {
-            // 鍙戦�丠TTP璇锋眰
-            HttpResponse response = HttpRequest.post(Constants.SY_MES_URL)
-                    .body(JSONUtil.toJsonStr(stationObject))
-                    .timeout(5000) // 璁剧疆瓒呮椂鏃堕棿
-                    .execute();
-
-            // 瑙f瀽鍝嶅簲
-            if (response.isOk()) { // 璇锋眰鎴愬姛
-                JSONObject jsonResponse = JSONUtil.parseObj(response.body());
-                String message = jsonResponse.getStr("message");
-                
-                if (!"ok".equals(message)) {
-                    // 鍝嶅簲涓嶆槸ok锛屼繚瀛樺け璐ヨ褰�
-                    saveMesFailRecord(stationObject, device, "鍝嶅簲寮傚父锛�" + message);
-                }
-            } else {
-                // HTTP璇锋眰澶辫触锛屼繚瀛樺け璐ヨ褰�
-                saveMesFailRecord(stationObject, device, "HTTP鐘舵�佺爜锛�" + response.getStatus());
-            }
-        } catch (Exception e) {
-            // 鍙戠敓寮傚父锛堟瘮濡傝繛鎺ヨ秴鏃躲�佹湇鍔′笉鍙敤绛夛級锛屼繚瀛樺け璐ヨ褰�
-            saveMesFailRecord(stationObject, device, "璇锋眰寮傚父锛�" + e.getMessage());
-        }
-    }
-
-    /**
-     * 淇濆瓨MES鎺ㄩ�佸け璐ヨ褰�
-     */
-    private static void saveMesFailRecord(Object stationObject, String device, String errorMsg) {
-        try {
-            MesFailRecord failRecord = new MesFailRecord();
-            failRecord.setDeviceCode(device);
-            failRecord.setRequestData(JSONUtil.toJsonStr(stationObject));
-            failRecord.setErrorMsg(errorMsg);
-            failRecord.setCreateTime(new Date());
-            failRecord.setStatus(0); // 0:鏈鐞� 1:宸插鐞�
-            failRecord.setRetryCount(0); // 閲嶈瘯娆℃暟
-            
-            // 淇濆瓨鍒版暟鎹簱
-            mesFailRecordService.save(failRecord);
-            
-            log.error("MES鎺ㄩ�佸け璐ワ紝宸蹭繚瀛樺け璐ヨ褰曘�傝澶囷細{}锛岄敊璇細{}", device, errorMsg);
-        } catch (Exception e) {
-            log.error("淇濆瓨MES澶辫触璁板綍鏃跺彂鐢熼敊璇�", e);
-        }
     }
 
 }

--
Gitblit v1.9.3