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