From ee711d38f66222915bc81332c98af677fa5cd96c Mon Sep 17 00:00:00 2001 From: Administrator <zhubaomin> Date: 星期二, 16 七月 2024 22:17:02 +0800 Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV --- pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml | 3 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkPreGenObjs.java | 20 + pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/PipIrrMwTestRtuApplication.java | 37 ++ pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpClUnit.java | 124 ++++++++ pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Open.java | 79 +++++ pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/说明.txt | 1 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Close.java | 109 +++++++ pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/说明.txt | 1 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealClientAmountDay.java | 2 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpClUnitConfigVo.java | 1 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpData.java | 51 +++ pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/resources/Config.xml | 9 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpHandler.java | 15 + pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealIntakeAmountDay.java | 22 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkFindP206V202404.java | 13 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/ServerProperties.java | 12 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpHeartBeat.java | 52 +++ pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpConstant.java | 47 +++ pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/LocalEncoder.java | 2 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/RtuDataNode.java | 3 pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtil.java | 31 + pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealControllerNoTrampV202404.java | 18 + pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtilUnsigned.java | 2 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealControllerNoTramp.java | 17 + pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/Server.java | 116 +++++++ pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkFindP206V1_0_0.java | 13 pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/p206V1_0_0/RtuP206V1_0_0Ctrl.java | 49 +++ 27 files changed, 793 insertions(+), 56 deletions(-) diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtil.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtil.java index d0f7034..6819327 100644 --- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtil.java +++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtil.java @@ -511,9 +511,9 @@ for (int i = 0; i < 4; i++) { bs[from + i] = Integer.valueOf(value & 0xff).byteValue();// 灏嗘渶浣庝綅淇濆瓨鍦ㄤ綆瀛楄妭 value = value >> 8; // 鍚戝彸绉�8浣� - if(value == 0){ - break ; - } + if(value == 0){ + break ; + } } } else { throw new Exception("int2Bytes鏃舵暟缁勮秺鐣�"); @@ -1210,6 +1210,31 @@ } /** + * 灏忕妯″紡銆婃暟鎹綆浣嶅湪鏁扮粍浣庡瓧鑺傘�� + * 鏁村舰杞垚BCD缂栫爜锛屽瓧鑺傞『搴忔槸鍊掔殑 + * @param i + * @param bs + * @param from + * @return 杩斿洖 + */ + public static void int2BCD_LE(int i, byte[] bs, int from)throws Exception { + String str = "" + i; + byte[] b = null; + if (str.length() % 2 == 0) { + b = new byte[str.length() / 2]; + } else { + b = new byte[(str.length() / 2) + 1]; + } + encodeBCD_LE(str, b, 0, b.length); + + int len = bs.length ; + int bLen = b.length ; + for(int j = 0; (j < len && j < bLen); j++){ + bs[from + j] = b[j] ; + } + } + + /** * 澶х妯″紡銆婃暟鎹綆浣嶅湪鏁扮粍楂樺瓧鑺傘�� * 闀挎暣褰㈣浆鎴怋CD缂栫爜 * @param l diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtilUnsigned.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtilUnsigned.java index f66c2ad..1a127c0 100644 --- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtilUnsigned.java +++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/util/ByteUtilUnsigned.java @@ -60,7 +60,7 @@ } boolean b = isOutOfArrLength(bs.length, (from - 1) + len); if (!b) { - for (int i = 0; i > len ; i++) { + for (int i = 0; i <= len ; i++) { bs[from + i] = Integer.valueOf(temp & 0xff).byteValue();// 灏嗘渶浣庝綅淇濆瓨鍦ㄤ綆瀛楄妭 temp = temp >> 8; // 鍚戝彸绉�8浣� } diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/RtuDataNode.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/RtuDataNode.java index bbb3e89..0e8aeeb 100644 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/RtuDataNode.java +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/RtuDataNode.java @@ -34,8 +34,9 @@ log.error("鏈緱鍒癛TU涓诲姩涓婃姤鏁版嵁澶勭悊浠诲姟锛�"); } }catch(Exception e){ + log.error("涓婅鏁版嵁浠诲姟姹犲鐞嗘暟鎹椂鍙戠敓寮傚父", e); + }finally { if(task != null){ - //褰撴湁寮傚父鏃讹紝try catch涓殑浠g爜鍙病鏈夋墽琛宖reeAndCleanTask TaskPool.freeAndCleanTask(task); } } diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealClientAmountDay.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealClientAmountDay.java index 1260bd9..1752409 100644 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealClientAmountDay.java +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealClientAmountDay.java @@ -108,12 +108,10 @@ poHistory = this.updateRmClientAmountBySameDateNewData(clientVo, poHistory, poLast, dV1_0_1, cdData); sv.updateRmClientAmountDay(poHistory); } - sv.saveRmClientAmountLast(poLast); }else if(upYmd.after(poLast.dt)){ //鏂扮殑鏃ユ湡 poLast = this.updateRmClientAmountLastByNewDateNewData(clientVo, dV1_0_1, cdData, poLast); this.newAndSaveHistoryDataDeal(sv, clientVo, dV1_0_1, cdData, poLast); - sv.saveRmClientAmountLast(poLast); }else{ //杩欑鎯呭喌涓嶅瓨鍦� } diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealControllerNoTramp.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealControllerNoTramp.java index c67631e..b3ae43a 100644 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealControllerNoTramp.java +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealControllerNoTramp.java @@ -1,8 +1,10 @@ package com.dy.rtuMw.server.rtuData.p206V1_0_0; +import com.dy.common.mw.protocol.Data; +import com.dy.common.mw.protocol.p206V1_0_0.DataV1_0_1; +import com.dy.common.mw.protocol.p206V1_0_0.upVos.DataCd02Vo; import com.dy.pipIrrGlobal.pojoPr.PrControllerTramp; import com.dy.rtuMw.server.rtuData.TaskSurpport; -import com.dy.rtuMw.server.rtuData.dbSv.DbSv; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -26,10 +28,21 @@ */ @Override public void execute(Object data) { + Data d = (Data)data ; Object[] objs = this.getTaskResults(TkPreGenObjs.taskId) ; PrControllerTramp tramp = (PrControllerTramp)objs[2] ; if(tramp == null){ - this.toNextTasks(data); + boolean toNext = true ; + if(d.getSubData() != null) { + DataV1_0_1 dataV1_0_1 = (DataV1_0_1)d.getSubData() ; + if(dataV1_0_1 != null && dataV1_0_1.subData != null && dataV1_0_1.subData instanceof DataCd02Vo){ + //杩囨护鎺夊績璺虫暟鎹� + toNext = false ; + } + } + if(toNext){ + this.toNextTasks(data); + } } } } diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealIntakeAmountDay.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealIntakeAmountDay.java index 0f1af39..290a31e 100644 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealIntakeAmountDay.java +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkDealIntakeAmountDay.java @@ -107,7 +107,6 @@ poLast = this.updateRmIntakeAmountLastByControllerChange(poLast, controller, rtuAddr, dV1_0_1, dataVo); this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV1_0_1, dataVo, poLast); } - sv.saveRmIntakeAmountLast(poLast); }else{ //鏈洿鎹㈡帶鍒跺櫒 if(DateTime.dateFrom_yyyy_MM_dd1(dV1_0_1.dt).equals(poLast.dt)){ @@ -123,12 +122,10 @@ poHistory = this.updateRmIntakeAmountBySameDateNewData(poHistory, poLast, controller, rtuAddr, dV1_0_1, dataVo); sv.updateRmIntakeAmountDay(poHistory); } - sv.saveRmIntakeAmountLast(poLast); }else if(DateTime.dateFrom_yyyy_MM_dd1(dV1_0_1.dt).after(poLast.dt)){ //鏂扮殑鏃ユ湡 poLast = this.updateRmIntakeAmountLastByNewDateNewData(poLast, controller, rtuAddr, dV1_0_1, dataVo); this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV1_0_1, dataVo, poLast); - sv.saveRmIntakeAmountLast(poLast); }else{ //杩欑鎯呭喌涓嶅瓨鍦� } @@ -245,9 +242,13 @@ //lastPo.dt = DateTime.dateFrom_yyyy_MM_dd1(dV1_0_1.dt);//鏃ユ湡娌″彉 lastPo.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV1_0_1.dt); lastPo.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.rtuDt); - Double difference = cdData.totalAmount - lastPo.totalAmountLast ; - if(difference > 0){ - lastPo.amount = difference; + Double added = cdData.totalAmount - lastPo.totalAmountLast ; + if(added > 0){ + if(lastPo.amount == null){ + lastPo.amount = added ; + }else{ + lastPo.amount += added ; + } }else{ //po.amount = po.amount ; //鏃ョ疮璁″彇姘撮噺涓嶅彉 } @@ -271,9 +272,10 @@ lastPo.dt = DateTime.dateFrom_yyyy_MM_dd1(dV1_0_1.dt);//鏃ユ湡鍙樹簡 lastPo.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV1_0_1.dt); lastPo.rtuDtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(cdData.rtuDt); - Double difference = cdData.totalAmount - lastPo.totalAmountLast ; - if(difference > 0){ - lastPo.amount = difference; + Double added = cdData.totalAmount - lastPo.totalAmountLast ; + if(added > 0){ + //鏂扮殑涓�澶╃殑澶勭悊鏂瑰紡涓庡悓涓�澶╃殑澶勭悊鏂瑰紡涓嶄竴鏍� + lastPo.amount = added; }else{ lastPo.amount = 0.0D; //鏃ョ疮璁℃按閲忓綊0 } @@ -321,7 +323,7 @@ po.dtLast = lastPo.dtLast; po.rtuDtLast = lastPo.rtuDtLast; - po.amount = lastPo.amount ; + po.amount = lastPo.amount ;//姝ゆ椂lastPo.amount宸茬粡澧炲姞涓婁簡澧為噺 po.totalAmountLast = lastPo.totalAmountLast ; return po ; diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkFindP206V1_0_0.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkFindP206V1_0_0.java index c4ced6b..4a4e9a4 100644 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkFindP206V1_0_0.java +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkFindP206V1_0_0.java @@ -21,18 +21,7 @@ Data d = (Data)data ; if(d.getProtocol() != null && d.getProtocol().equals(ProtocolConstantV206V1_0_0.protocolName)){ //璇嗗埆鍑烘槸P206V1.0.0鍗忚鏁版嵁 - //鏃犲懡浠D - boolean toNext = true ; - if(d.getSubData() != null) { - DataV1_0_1 dataV1_0_1 = (DataV1_0_1)d.getSubData() ; - if(dataV1_0_1 != null && dataV1_0_1.subData != null && dataV1_0_1.subData instanceof DataCd02Vo){ - //杩囨护鎺夊績璺虫暟鎹� - toNext = false ; - } - } - if(toNext){ - this.toNextTasks(data); - } + this.toNextTasks(data); }else{ //涓嶆槸鏈崗璁殑鏁版嵁 } diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkPreGenObjs.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkPreGenObjs.java index 536a3db..8c39b08 100644 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkPreGenObjs.java +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1_0_0/TkPreGenObjs.java @@ -20,8 +20,12 @@ import java.text.ParseException; import java.util.Date; +import java.util.HashMap; +import java.util.Map; public class TkPreGenObjs extends TaskSurpport { + + private static final Map<String, Boolean> onceUpDataRtus = new HashMap<>(); private static final Logger log = LogManager.getLogger(TkPreGenObjs.class.getName()) ; @@ -36,6 +40,19 @@ public void execute(Object data) throws ParseException { Data d = (Data)data ; String rtuAddr = d.getRtuAddr() ;//TkRtuData閲屽垽鏂簡rtuAddr涓虹┖ + if(d.subData != null && d.subData instanceof DataV1_0_1){ + DataV1_0_1 dataV1_0_1 = (DataV1_0_1)d.subData ; + if(dataV1_0_1.subData != null && dataV1_0_1.subData instanceof DataCd02Vo){ + //杩囨护鎺夊績璺虫暟鎹� + if(onceUpDataRtus.containsKey(rtuAddr)){ + return ; + } + } + } + if(!onceUpDataRtus.containsKey(rtuAddr)){ + onceUpDataRtus.put(rtuAddr, true) ; + } + DbSv sv = (DbSv)SpringContextUtil.getBean(DbSv.class) ; if(sv != null){ PrController controller = sv.getControllersByRtuAddrAndIntakeNotNull(rtuAddr) ; @@ -53,8 +70,7 @@ } }else{ if(d.subData != null && d.subData instanceof DataV1_0_1){ - DataV1_0_1 d1 = (DataV1_0_1)d.subData ; - clientVo = this.getClient(sv, d1); + clientVo = this.getClient(sv, (DataV1_0_1)d.subData); } } //涓嶈鏄惁涓烘祦娴帶鍒跺櫒锛圧TU瀹炰綋锛夛紝閮借杩涜涓嬫宸ヤ綔锛岃褰曞叾涓婃姤鐨勪竴浜涙暟鎹紝褰撶粦瀹氭帶鍒跺櫒鍚庯紝鏁版嵁鑷姩鏈変簡褰掑睘 diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealControllerNoTrampV202404.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealControllerNoTrampV202404.java index 33c8cb4..2ea92e3 100644 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealControllerNoTrampV202404.java +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealControllerNoTrampV202404.java @@ -1,8 +1,10 @@ package com.dy.rtuMw.server.rtuData.p206V202404; +import com.dy.common.mw.protocol.Data; +import com.dy.common.mw.protocol.p206V202404.DataV202404; +import com.dy.common.mw.protocol.p206V202404.upVos.DataCd02Vo; import com.dy.pipIrrGlobal.pojoPr.PrControllerTramp; import com.dy.rtuMw.server.rtuData.TaskSurpport; -import com.dy.rtuMw.server.rtuData.dbSv.DbSv; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -26,10 +28,22 @@ */ @Override public void execute(Object data) { + Data d = (Data)data ; Object[] objs = this.getTaskResults(TkPreGenObjsV202404.taskId) ; PrControllerTramp tramp = (PrControllerTramp)objs[2] ; if(tramp == null){ - this.toNextTasks(data); + //鏃犲懡浠D + boolean toNext = true ; + if(d.getSubData() != null) { + DataV202404 dataV202404 = (DataV202404)d.getSubData() ; + if(dataV202404 != null && dataV202404.subData != null && dataV202404.subData instanceof DataCd02Vo){ + //杩囨护鎺夊績璺虫暟鎹� + toNext = false ; + } + } + if(toNext){ + this.toNextTasks(data); + } } } } diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkFindP206V202404.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkFindP206V202404.java index f196071..917fedf 100644 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkFindP206V202404.java +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkFindP206V202404.java @@ -23,18 +23,7 @@ Data d = (Data)data ; if(d.getProtocol() != null && d.getProtocol().equals(ProtocolConstantV206V202404.protocolName)){ //璇嗗埆鍑烘槸P206V202404鍗忚鏁版嵁 - //鏃犲懡浠D - boolean toNext = true ; - if(d.getSubData() != null) { - DataV202404 dataV202404 = (DataV202404)d.getSubData() ; - if(dataV202404 != null && dataV202404.subData != null && dataV202404.subData instanceof DataCd02Vo){ - //杩囨护鎺夊績璺虫暟鎹� - toNext = false ; - } - } - if(toNext){ - this.toNextTasks(data); - } + this.toNextTasks(data); }else{ //涓嶆槸鏈崗璁殑鏁版嵁 } diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml index 1f1db97..9fe739a 100644 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/application-database.yml @@ -4,8 +4,7 @@ type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver # url: jdbc:mysql://192.168.40.166:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull - url: jdbc:mysql://127.0.0.1:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull -# url: jdbc:mysql://8.140.179.55:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull + url: jdbc:mysql://192.168.40.166:3306/pipIrr_ym?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull username: root password: dysql,;.abc!@# druid: diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/PipIrrMwTestRtuApplication.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/PipIrrMwTestRtuApplication.java index 98c4ab9..5391201 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/PipIrrMwTestRtuApplication.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/PipIrrMwTestRtuApplication.java @@ -1,5 +1,7 @@ package com.dy.pipIrrMwTestRtu; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; @@ -24,10 +26,43 @@ }) } ) -public class PipIrrMwTestRtuApplication{ +public class PipIrrMwTestRtuApplication implements CommandLineRunner { public static void main(String[] args) { SpringApplication.run(PipIrrMwTestRtuApplication.class, args); } + + /** + * Spring瀹瑰櫒鍚姩瀹屾垚鍚庯紝鎵ц涓嬮潰鏂规硶 + * @param args 鍙傛暟 + * @throws Exception 寮傚父 + */ + @Override + public void run(String... args) throws Exception { + try{ + //绛夊緟涓�涓� + Thread.sleep(500L); + }catch (Exception e){ + e.printStackTrace(); + } + finally { + this.startMwSv() ; + } + } + + private void startMwSv(){ + if(sv != null){ + sv.startServer(); + } + } + + + private Server sv ; + + @Autowired + public void setSv(Server sv){ + this.sv = sv ; + } } + diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/Server.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/Server.java new file mode 100644 index 0000000..a7da4eb --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/Server.java @@ -0,0 +1,116 @@ +package com.dy.pipIrrMwTestRtu; + +import com.dy.common.mw.UnitInterface; +import com.dy.common.util.ConfigXml; +import com.dy.pipIrrMwTestRtu.tcpClient.TcpClUnit; +import com.dy.pipIrrMwTestRtu.tcpClient.TcpClUnitConfigVo; +import org.jdom2.Document; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: liurunyu + * @Date: 2024/7/12 8:50 + * @Description + */ + +@Component +public class Server { + + private ConfigXml conf = null ; + private Document doc = null ; + private boolean showStartInfo = false ; + + private String mwServerUrl ; + + private List<UnitInterface> units = new ArrayList<UnitInterface>() ; + + /* + * @param args 鍙傛暟 + public static void main(String[] args) { + new Server().startServer(); + } + */ + /** + * 鍚姩鏈嶅姟 + */ + public void startServer(){ + long start = System.currentTimeMillis() ; + try { + //ConfigProperties.init(this.getClass().getResourceAsStream("/config/config.properties"), false); + + this.conf = new ConfigXml() ; + this.doc = this.conf.createDom(this.getClass(), "config.xml") ; + //////////////// + //鏈嶅姟 閰嶇疆 + this.showStartInfo = this.conf.getSetAttrBoolean(this.doc, "config.server", "showStartInfo", null, null) ; + + this.startUnits() ; + + String svName ; + try{ + svName = this.conf.getSetAttrTxt(this.doc, "config.server", "name", null, false, null) ; + }catch(Exception e){ + svName = "" ; + } + + String company ; + try{ + company = this.conf.getSetAttrTxt(this.doc, "config.server", "company", null, true, null) ; + }catch(Exception e){ + company = "" ; + } + System.out.println("OOOOOOOOOO OOOOOOOO OOOOOOOO") ; + System.out.println("@@@@@@@@@@@@@@@@#O $@@@@@@@@& @@@@@@@@#") ; + System.out.println("@@@@@@@@@@@@@@@@@@@# @@@@@@@@# $@@@@@@@@&") ; + System.out.println("@@@@@@@@@@@@@@@@@@@@@# #@@@@@@@@@@@@@@@@O") ; + System.out.println("@@@@@@@@@@@@@@@@@@@@@@@ &@@@@@@@@@@@@@@") ; + System.out.println("@@@@@@$ $@@@@@@@@@& O@@@@@@@@@@@#") ; + System.out.println("@@@@@@$ @@@@@@@@@ @@@@@@@@@& " + svName ) ; + System.out.println("@@@@@@$ O@@@@@@@@@ &@@@@@@@@") ; + + if(this.mwServerUrl != null){ + System.out.println("@@@@@@$ O@@@@@@@@@ &@@@@@@@@ 涓棿浠舵湇鍔$ " + this.mwServerUrl ) ; + }else{ + System.out.println("@@@@@@$ O@@@@@@@@@ &@@@@@@@@") ; + } + System.out.println("@@@@@@$ #@@@@@@@@@$ &@@@@@@@@" ) ; + System.out.println("@@@@@@@@@@@@@@@@@@@@@@# &@@@@@@@@ Runing in standalone mode" ) ; + System.out.println("@@@@@@@@@@@@@@@@@@@@@& &@@@@@@@@ Startup in " + (System.currentTimeMillis() - start) + " MS" ) ; + System.out.println("@@@@@@@@@@@@@@@@@@@# &@@@@@@@@ " + company) ; + System.out.println("@@@@@@@@@@@@@@@@#O &@@@@@@@@") ; + + }catch(Exception e){ + e.printStackTrace(); + } + } + private void startUnits() { + try { + + // /////////////// + // 鍩虹閰嶇疆 + ServerProperties.rtuAddr = conf.getSetAttrTxt(doc, "config.base", "rtuAddr", null, false, null); + ServerProperties.icCardAddr = conf.getSetAttrTxt(doc, "config.base", "icCardAddr", null, false, null); + ServerProperties.icCardNo = conf.getSetAttrTxt(doc, "config.base", "icCardNo", null, false, null); + + // /////////////// + // TCP 妯″潡 + TcpClUnitConfigVo tcpVo = new TcpClUnitConfigVo(); + tcpVo.mwServerIp = conf.getSetAttrTxt(doc, "config.tcpCl", "mwServerIp", null, false, null); + tcpVo.mwServerPort = conf.getSetAttrPlusInt(doc, "config.tcpCl", "mwServerPort", null, 100, 65535, null); + tcpVo.connectTimeout = conf.getSetAttrPlusInt(doc, "config.tcpCl", "connectTimeout", null, 1000, 10000, null); + this.mwServerUrl = tcpVo.mwServerIp + ":" + tcpVo.mwServerPort ; + AdapterImp_TcpClUnit tcpAdap = new AdapterImp_TcpClUnit(); + tcpAdap.setConfig(tcpVo); + TcpClUnit tcpUnit = TcpClUnit.getInstance(); + tcpUnit.setAdapter(tcpAdap); + tcpUnit.start(obj -> { + }); + units.add(tcpUnit) ; + }catch (Exception e){ + e.printStackTrace(); + } + } +} diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/ServerProperties.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/ServerProperties.java new file mode 100644 index 0000000..229a7c7 --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/ServerProperties.java @@ -0,0 +1,12 @@ +package com.dy.pipIrrMwTestRtu; + +/** + * @Author: liurunyu + * @Date: 2024/7/12 8:19 + * @Description + */ +public class ServerProperties { + public static String rtuAddr ; + public static String icCardAddr ; + public static String icCardNo ; +} diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/p206V1_0_0/RtuP206V1_0_0Ctrl.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/p206V1_0_0/RtuP206V1_0_0Ctrl.java new file mode 100644 index 0000000..4550f5a --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/p206V1_0_0/RtuP206V1_0_0Ctrl.java @@ -0,0 +1,49 @@ +package com.dy.pipIrrMwTestRtu.p206V1_0_0; + +import com.dy.common.webUtil.BaseResponse; +import com.dy.pipIrrMwTestRtu.tcpClient.upData.UpCd83Close; +import com.dy.pipIrrMwTestRtu.tcpClient.upData.UpCd83Open; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Author: liurunyu + * @Date: 2024/6/29 6:46 + * @Description + */ +@Slf4j +@RestController +@RequestMapping(path="rtuP206V1_0_0") +@SuppressWarnings("unchecked")//java鐗堟湰瓒婇珮锛屽娉涘瀷绾︽潫瓒婁弗锛屾墍浠ラ厤缃甋uppressWarnings("unchecked") +public class RtuP206V1_0_0Ctrl { + + @GetMapping(path = "test") + public BaseResponse<String> test(String com) { + if(com.equals("83Open")){ + this.cd83Open() ; + }else if(com.equals("83Close")){ + this.cd83Close() ; + } + BaseResponse<String> rt = new BaseResponse<String>() ; + rt.setCode("001") ; + rt.setMsg("宸茬粡涓婃姤鏁版嵁") ; + rt.setSuccess(true) ; + return rt ; + } + + + private void cd83Open(){ + UpCd83Open.upCd83Data(); + } + + + private void cd83Close(){ + UpCd83Close.upCd83Data(); + } + + + +} + diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/LocalEncoder.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/LocalEncoder.java index a030b2d..38c0359 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/LocalEncoder.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/LocalEncoder.java @@ -19,7 +19,7 @@ */ public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws IOException, Exception{ byte[] data = (byte[])message; - log.info("涓嬭鏁版嵁锛�" + ByteUtil.bytes2Hex(data, true)); + //log.info("涓婅鏁版嵁锛�" + ByteUtil.bytes2Hex(data, true)); out.write(IoBuffer.allocate((data==null?0:data.length), false).put(data).flip()); } diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpClUnit.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpClUnit.java new file mode 100644 index 0000000..d698a66 --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpClUnit.java @@ -0,0 +1,124 @@ +package com.dy.pipIrrMwTestRtu.tcpClient; + +import com.dy.common.mw.UnitAdapterInterface; +import com.dy.common.mw.UnitInterface; +import com.dy.common.mw.UnitStartedCallbackInterface; +import com.dy.common.util.Callback; +import com.dy.pipIrrMwTestRtu.ServerProperties; +import com.dy.pipIrrMwTestRtu.tcpClient.upData.UpData; +import com.dy.pipIrrMwTestRtu.tcpClient.upData.UpHeartBeat; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.mina.core.session.IoSession; + + +public class TcpClUnit implements UnitInterface { + + private static final Logger log = LogManager.getLogger(TcpClUnit.class) ; + + private static TcpClUnit instance = new TcpClUnit() ; + + public static TcpClUnitAdapter adapter ; + public static TcpClUnitConfigVo confVo ; + + public static IoSession session ; + + private TcpClUnit(){} ; + + public static TcpClUnit getInstance(){ + return instance ; + } + + @Override + public void setAdapter(UnitAdapterInterface adapter) throws Exception { + if(adapter == null){ + throw new Exception("Tcp Client妯″潡閫傞厤鍣ㄥ璞′笉鑳戒负绌猴紒") ; + } + TcpClUnit.adapter = (TcpClUnitAdapter)adapter ; + TcpClUnit.confVo = TcpClUnit.adapter.getConfig() ; + if(TcpClUnit.confVo == null){ + throw new Exception("Tcp Client妯″潡閰嶇疆瀵硅薄涓嶈兘涓虹┖锛�") ; + } + } + + @Override + public void start(UnitStartedCallbackInterface callback) throws Exception { + System.out.println("Tcp Client妯″潡鎴愬姛鍚姩"); + this.doStart(); + callback.call(null) ; + } + + @Override + public void stop(UnitStartedCallbackInterface callback) throws Exception { + callback.call(null); + } + + private void doStart(){ + new Thread(new Runnable(){ + @Override + public void run() { + Exception ex = null ; + while(true){ + ex = null ; + try { + new TcpConnect().createSession( + confVo.mwServerIp, + confVo.mwServerPort, + confVo.connectTimeout, + new TcpHandler(), + new Callback() { + @Override + public void call(Object obj) { + if (obj == null) { + log.error("鍒涘缓缃戠粶浼氳瘽杩斿洖涓簄ull"); + } else { + TcpClUnit.session = (IoSession) obj; + log.info("鎴愬姛鍒涘缓涓庨�氫俊涓棿浠剁殑缃戠粶杩炴帴"); + UpData.setSession(TcpClUnit.session); + heartBeat() ; + } + } + + @Override + public void call(Object... objs) { + } + + @Override + public void exception(Exception e) { + } + }); + }catch (Exception e){ + ex = e ; + } + if(ex == null){ + break ; + }else{ + try{ + Thread.sleep(100); + }catch (Exception e){ + } + } + } + } + }).start(); + } + + + private void heartBeat(){ + new Thread(new Runnable(){ + @Override + public void run() { + while(true){ + try { + UpHeartBeat.upCd02Data(ServerProperties.rtuAddr); + Thread.sleep(30000L); + //Thread.sleep(30000000L); + }catch (Exception e){ + continue; + } + } + } + }).start(); + } + +} diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpClUnitConfigVo.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpClUnitConfigVo.java index 96f34d8..3359576 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpClUnitConfigVo.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpClUnitConfigVo.java @@ -3,4 +3,5 @@ public class TcpClUnitConfigVo { public String mwServerIp ; public Integer mwServerPort ; + public Integer connectTimeout ; } diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpHandler.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpHandler.java index 01c4a53..c8882d0 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpHandler.java +++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/TcpHandler.java @@ -1,5 +1,6 @@ package com.dy.pipIrrMwTestRtu.tcpClient; +import com.dy.common.util.ByteUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.mina.core.service.IoHandlerAdapter; @@ -16,6 +17,7 @@ */ @Override public void sessionCreated(IoSession session) throws Exception { + super.sessionCreated(session); } /** @@ -23,6 +25,7 @@ */ @Override public void sessionOpened(IoSession session) throws Exception { + super.sessionOpened(session); } /** @@ -30,6 +33,7 @@ */ @Override public void sessionClosed(IoSession session) throws Exception { + super.sessionClosed(session); } /** @@ -37,6 +41,7 @@ */ @Override public void sessionIdle(IoSession session, IdleStatus status) throws Exception { + super.sessionIdle(session, status); } /** @@ -51,6 +56,10 @@ */ @Override public void messageReceived(IoSession session, Object message) throws Exception { + if(message != null){ + byte[] bs = (byte[])message ; + log.info("鏀跺埌涓棿浠舵暟鎹細" + ByteUtil.bytes2Hex(bs, true)); + } } /** @@ -58,6 +67,12 @@ */ @Override public void messageSent(IoSession session, Object message) throws Exception { + log.info("缃戠粶鍙戦�佷簡鏁版嵁锛�" + + (session==null?"":(session.getRemoteAddress() != null?("涓棿浠剁綉鍧�鏄細" + session.getRemoteAddress().toString()):"")) ); + if(message != null){ + byte[] bs = (byte[])message ; + log.info("缃戠粶鍙戦�佷簡鏁版嵁锛�" + ByteUtil.bytes2Hex(bs, true)); + } } /** diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Close.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Close.java new file mode 100644 index 0000000..9a82f4c --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Close.java @@ -0,0 +1,109 @@ +package com.dy.pipIrrMwTestRtu.tcpClient.upData; + +import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate; +import com.dy.common.util.ByteUtil; +import com.dy.common.util.ByteUtilUnsigned; +import com.dy.pipIrrMwTestRtu.ServerProperties; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +/** + * @Author: liurunyu + * @Date: 2024/7/15 14:58 + * @Description + */ +public class UpCd83Close extends UpData { + + private static final Logger log = LogManager.getLogger(UpCd83Close.class); + + public static void upCd83Data() { + try { + if (UpData.session != null && UpData.session.isConnected()) { + byte[] bs = createData(ServerProperties.rtuAddr); + UpData.upSend(bs); + } else { + log.error("鏈繛鎺ラ�氫俊涓棿浠讹紝涓嶈兘鍙戦�佹暟鎹�"); + } + } catch (Exception e) { + log.error("鍚戦�氫俊涓棿浠跺彂閫佹暟鎹骇鐢熷紓甯�", e); + } + } + + + /** + * 鏋勯�犲績璺虫暟鎹� + * + * @return 瀛楄妭鏁扮粍 + * @throws Exception 寮傚父 + */ + private static byte[] createData(String rtuAddr) throws Exception { + UpConstant.closeValve(); + byte[] bytes = creatHead(rtuAddr, "83", (byte)0xB0); + + byte[] bs = new byte[1] ; + bs[0] = (byte)0x02 ;//鍒峰崱鍏抽榾 + + bytes = ByteUtil.bytesMerge(bytes, bs) ; + + bs = new byte[5] ;//绱娴侀噺 + ByteUtil.int2BCD_LE(UpConstant.totalAmount, bs, 0); + bytes = ByteUtil.bytesMerge(bytes, bs) ; + + bs = new byte[8] ;//IC鍗$紪鍙� + GlCreate.createIcCardNo(ServerProperties.icCardNo, bs, 0); + bytes = ByteUtil.bytesMerge(bytes, bs) ; + + bs = new byte[4] ;//IC鍗″湴鍧� + ByteUtil.hex2Bytes_LE(ServerProperties.icCardAddr, bs, 0); + bytes = ByteUtil.bytesMerge(bytes, bs) ; + + bs = new byte[4] ;//鐢ㄦ按鎴蜂綑棰� + ByteUtil.int2BCD_LE(UpConstant.remainMoney, bs, 0); + bytes = ByteUtil.bytesMerge(bytes, bs) ; + + bs = new byte[6] ;//寮�闃�鏃堕棿 + GlCreate.createTp(UpConstant.openValveDt(), bs, 0); + bytes = ByteUtil.bytesMerge(bytes, bs) ; + UpConstant.clearOpenValveDt();//娓呯┖寮�闃�鏃堕棿 + + bs = new byte[6] ;//鍏抽榾鏃堕棿 + GlCreate.createTp(UpConstant.closeValveDt(), bs, 0); + bytes = ByteUtil.bytesMerge(bytes, bs) ; + + bs = new byte[5] ;//鐢ㄦ按鎴锋湰娆$敤姘撮噺 + ByteUtil.int2BCD_LE(UpConstant.thisAmount, bs, 0); + bytes = ByteUtil.bytesMerge(bytes, bs) ; + + bs = new byte[4] ;//鐢ㄦ按鎴锋湰娆℃秷璐归噾棰� + ByteUtil.int2BCD_LE(UpConstant.thisMoney, bs, 0); + bytes = ByteUtil.bytesMerge(bytes, bs) ; + + bs = new byte[2] ;//鐢ㄦ按鎴锋湰娆$敤姘存椂闀� + ByteUtil.int2BCD_LE(UpConstant.thisTime, bs, 0); + bytes = ByteUtil.bytesMerge(bytes, bs) ; + + bs = new byte[1] ;//姘翠环绫诲瀷 + bs[0] = ByteUtil.int2BCD_LE (1)[0] ; + bytes = ByteUtil.bytesMerge(bytes, bs) ; + + bs = new byte[2] ;//姘翠环 + ByteUtil.int2BCD_LE(UpConstant.thisPrice, bs, 0); + bytes = ByteUtil.bytesMerge(bytes, bs) ; + + bs = new byte[1] ;//鍗$被鍨� + bs[0] = ByteUtil.int2BCD_LE (1)[0] ; + bytes = ByteUtil.bytesMerge(bytes, bs) ; + + bs = new byte[6] ;//鎺у埗鍣ㄦ椂閽� + GlCreate.createTp(bs, 0); + bytes = ByteUtil.bytesMerge(bytes, bs) ; + + GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑 + + byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓� + + bytes = ByteUtil.bytesMerge(bytes, bsTail) ; + + return bytes ; + } +} diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Open.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Open.java new file mode 100644 index 0000000..9273b94 --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpCd83Open.java @@ -0,0 +1,79 @@ +package com.dy.pipIrrMwTestRtu.tcpClient.upData; + +import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate; +import com.dy.common.util.ByteUtil; +import com.dy.common.util.ByteUtilUnsigned; +import com.dy.pipIrrMwTestRtu.ServerProperties; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +/** + * @Author: liurunyu + * @Date: 2024/7/15 14:58 + * @Description + */ +public class UpCd83Open extends UpData { + + private static final Logger log = LogManager.getLogger(UpCd83Open.class); + + public static void upCd83Data() { + try { + if (UpData.session != null && UpData.session.isConnected()) { + byte[] bs = createData(ServerProperties.rtuAddr); + UpData.upSend(bs); + } else { + log.error("鏈繛鎺ラ�氫俊涓棿浠讹紝涓嶈兘鍙戦�佹暟鎹�"); + } + } catch (Exception e) { + log.error("鍚戦�氫俊涓棿浠跺彂閫佹暟鎹骇鐢熷紓甯�", e); + } + } + + + /** + * 鏋勯�犲績璺虫暟鎹� + * + * @return 瀛楄妭鏁扮粍 + * @throws Exception 寮傚父 + */ + private static byte[] createData(String rtuAddr) throws Exception { + byte[] bytes = creatHead(rtuAddr, "83", (byte)0xB0); + + byte[] bs = new byte[1] ; + bs[0] = (byte)0x01 ;//鍒峰崱寮�闃� + + bytes = ByteUtil.bytesMerge(bytes, bs) ; + + bs = new byte[5] ;//绱娴侀噺 + ByteUtil.int2BCD_LE(UpConstant.totalAmount, bs, 0); + bytes = ByteUtil.bytesMerge(bytes, bs) ; + + bs = new byte[8] ;//IC鍗$紪鍙� + GlCreate.createIcCardNo(ServerProperties.icCardNo, bs, 0); + bytes = ByteUtil.bytesMerge(bytes, bs) ; + + bs = new byte[4] ;//IC鍗″湴鍧� + ByteUtil.hex2Bytes_LE(ServerProperties.icCardAddr, bs, 0); + bytes = ByteUtil.bytesMerge(bytes, bs) ; + + bs = new byte[4] ;//鐢ㄦ按鎴蜂綑棰� + ByteUtil.int2BCD_LE(UpConstant.remainMoney, bs, 0); + bytes = ByteUtil.bytesMerge(bytes, bs) ; + + bs = new byte[6] ;//寮�闃�鏃堕棿 + GlCreate.createTp(UpConstant.openValveDt(), bs, 0); + bytes = ByteUtil.bytesMerge(bytes, bs) ; + + bs = new byte[6] ;//鎺у埗鍣ㄦ椂閽� + GlCreate.createTp(bs, 0); + bytes = ByteUtil.bytesMerge(bytes, bs) ; + + GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑 + + byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓� + + bytes = ByteUtil.bytesMerge(bytes, bsTail) ; + + return bytes ; + } +} diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpConstant.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpConstant.java new file mode 100644 index 0000000..ce2ba66 --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpConstant.java @@ -0,0 +1,47 @@ +package com.dy.pipIrrMwTestRtu.tcpClient.upData; + +import java.text.SimpleDateFormat; +import java.util.Locale; + +/** + * @Author: liurunyu + * @Date: 2024/7/15 15:02 + * @Description + */ +public class UpConstant { + + private static String openValveDt ; + private static String closeValveDt ; + + public static Integer totalAmount = 1234567;//瀹炰负12345.67 + public static Integer remainMoney = 56789;//瀹炰负567.89 + public static Integer thisAmount = 1000;//瀹炰负10.00 + public static Integer thisMoney = 1000;//瀹炰负10.00 + public static Integer thisTime = 10;//瀹炰负10 + public static Integer thisPrice = 100;//瀹炰负1.00 + + public static Integer perAmount = thisAmount; + public static Integer perMoney = thisMoney; + + + public static void clearOpenValveDt(){ + openValveDt = null ; + } + + public static String openValveDt(){ + if(openValveDt == null){ + openValveDt = new SimpleDateFormat("yyMMddHHmmss", Locale.CHINA).format(System.currentTimeMillis()); + } + return openValveDt ; + } + + public static String closeValveDt(){ + closeValveDt = new SimpleDateFormat("yyMMddHHmmss", Locale.CHINA).format(System.currentTimeMillis()); + return closeValveDt ; + } + + public static void closeValve(){ + totalAmount = totalAmount + perAmount ; + remainMoney = remainMoney - perMoney ; + } +} diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpData.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpData.java new file mode 100644 index 0000000..f18558b --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpData.java @@ -0,0 +1,51 @@ +package com.dy.pipIrrMwTestRtu.tcpClient.upData; + +import com.dy.common.mw.protocol.p206V1_0_0.ProtocolConstantV206V1_0_0; +import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate; +import com.dy.common.util.ByteUtil; +import org.apache.mina.core.session.IoSession; + +/** + * @Author: liurunyu + * @Date: 2024/7/15 14:20 + * @Description + */ +public class UpData { + + protected static IoSession session ; + + private static Object synObj = new Object() ; + + public static void setSession(IoSession session){ + UpData.session = session ; + } + + protected static void upSend(byte[] bs) throws Exception{ + synchronized (synObj){ + session.write(bs) ; + } + } + + protected static byte[] creatHead(String rtuAddr, String code, byte ctrl)throws Exception { + byte[] bsHead = new byte[ProtocolConstantV206V1_0_0.lenHead2Code] ; + byte index = 0 ; + bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ; + + index++ ; + bsHead[index] = 0 ;//甯ч暱搴� + + index++ ; + bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ; + + index++ ; + bsHead[index] = ctrl; //鎺у埗鍩熷姛鑳界爜 + + index++ ; + GlCreate.createRtuAddr(rtuAddr, bsHead, index); + index += 5 ; + + ByteUtil.hex2Bytes(code, bsHead, index) ; + + return bsHead ; + } +} diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpHeartBeat.java b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpHeartBeat.java new file mode 100644 index 0000000..8f7b38f --- /dev/null +++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/java/com/dy/pipIrrMwTestRtu/tcpClient/upData/UpHeartBeat.java @@ -0,0 +1,52 @@ +package com.dy.pipIrrMwTestRtu.tcpClient.upData; + +import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate; +import com.dy.common.util.ByteUtil; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +/** + * @Author: liurunyu + * @Date: 2024/7/15 14:18 + * @Description + */ +public class UpHeartBeat extends UpData { + + private static final Logger log = LogManager.getLogger(UpHeartBeat.class) ; + + public static void upCd02Data(String rtuAddr){ + try{ + if(UpData.session != null && UpData.session.isConnected()){ + byte[] bs = createData(rtuAddr) ; + UpData.upSend(bs) ; + }else{ + log.error("鏈繛鎺ラ�氫俊涓棿浠讹紝涓嶈兘鍙戦�佹暟鎹�"); + } + }catch (Exception e){ + log.error("鍚戦�氫俊涓棿浠跺彂閫佹暟鎹骇鐢熷紓甯�", e); + } + } + + + /** + * 鏋勯�犲績璺虫暟鎹� + * @return 瀛楄妭鏁扮粍 + * @throws Exception 寮傚父 + */ + private static byte[] createData(String rtuAddr) throws Exception { + byte[] bytes = creatHead(rtuAddr, "02", (byte)0xB0); + + byte[] bs = new byte[1] ; + bs[0] = (byte)0xF2 ;//鏁版嵁鍩燂細 1 涓瓧鑺傦紝F0 鐧诲綍锛� F1 閫�鍑虹櫥褰曪紝F2 鍦ㄧ嚎淇濇寔銆� + + bytes = ByteUtil.bytesMerge(bytes, bs) ; + + GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑 + + byte[] bsTail = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓� + + bytes = ByteUtil.bytesMerge(bytes, bsTail) ; + + return bytes ; + } +} diff --git a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/resources/Config.xml b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/resources/Config.xml index b35e39d..d2541cf 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/resources/Config.xml +++ b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/src/main/resources/Config.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <config> - <server name="RTU妯℃嫙" showStartInfo="true" company="http://www.dyjs.com"/> + <server name="RTU妯℃嫙鍣�" showStartInfo="true" company="http://www.dyjs.com"/> - <!-- - enable:鏄惁鍚姩 - --> - <tcpCl mwServerIp="127.0.0.1" mwServerPort="60000" /> + <base rtuAddr="532328059995" icCardAddr="3B7D1E1A" icCardNo="61181622830147821"></base> + <!-- --> + <tcpCl mwServerIp="127.0.0.1" mwServerPort="60000" connectTimeout="3000" /> </config> \ No newline at end of file diff --git "a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/\350\257\264\346\230\216.txt" "b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/\350\257\264\346\230\216.txt" new file mode 100644 index 0000000..dae77e1 --- /dev/null +++ "b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-rtu/\350\257\264\346\230\216.txt" @@ -0,0 +1 @@ +RTU妯℃嫙鍣� \ No newline at end of file diff --git "a/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/\350\257\264\346\230\216.txt" "b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/\350\257\264\346\230\216.txt" new file mode 100644 index 0000000..fef05cb --- /dev/null +++ "b/pipIrr-platform/pipIrr-web/pipIrr-mwTest-web/\350\257\264\346\230\216.txt" @@ -0,0 +1 @@ +妯℃嫙web绔悜閫氫俊涓棿浠朵笅鍙戝懡浠� \ No newline at end of file -- Gitblit v1.8.0