From a64e6867aad1bb3fc5c8955cd30741dc3d8d8806 Mon Sep 17 00:00:00 2001 From: liurunyu <lry9898@163.com> Date: 星期六, 12 七月 2025 11:45:50 +0800 Subject: [PATCH] 水肥机上报数据,当有状态变化时,即时进行历史数据存储,无变化时进行间隔最小时间历史数据存储。 --- pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/pSdV1/TkPreGenObjs4ManureSdV1.java | 39 +++++++++++++------ pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/ManureVo.java | 25 ++++++++++++ 2 files changed, 51 insertions(+), 13 deletions(-) diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/ManureVo.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/ManureVo.java index 98acc81..ce4ba44 100644 --- a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/ManureVo.java +++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/ManureVo.java @@ -105,6 +105,31 @@ } } + public boolean stateIsChanged(ManureVo compareVo){ + if(this.stirRunning1 != null && compareVo.stirRunning1 != null && this.stirRunning1.byteValue() != compareVo.stirRunning1.byteValue()){ + return true ; + } + if(this.stirRunning2 != null && compareVo.stirRunning2 != null && this.stirRunning2.byteValue() != compareVo.stirRunning2.byteValue()){ + return true ; + } + if(this.stirRunning3 != null && compareVo.stirRunning3 != null && this.stirRunning3.byteValue() != compareVo.stirRunning3.byteValue()){ + return true ; + } + if(this.stirRunning4 != null && compareVo.stirRunning4 != null && this.stirRunning4.byteValue() != compareVo.stirRunning4.byteValue()){ + return true ; + } + if(this.injectRunning != null && compareVo.injectRunning != null && this.injectRunning.byteValue() != compareVo.injectRunning.byteValue()){ + return true ; + } + if(this.irrRunning != null && compareVo.irrRunning != null && this.irrRunning.byteValue() != compareVo.irrRunning.byteValue()){ + return true ; + } + if(this.alarm != null && compareVo.alarm != null && this.alarm.byteValue() != compareVo.alarm.byteValue()){ + return true ; + } + return false ; + } + @Override public String toString(){ StringBuilder sb = new StringBuilder(); diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/pSdV1/TkPreGenObjs4ManureSdV1.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/pSdV1/TkPreGenObjs4ManureSdV1.java index 0890f30..28ddede 100644 --- a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/pSdV1/TkPreGenObjs4ManureSdV1.java +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/pSdV1/TkPreGenObjs4ManureSdV1.java @@ -27,6 +27,7 @@ //澶勭悊涓婃潯鏁版嵁鐨勬椂鍒� private static final Map<String, Long> dealDataAtDateTime = new HashMap<>(); + private static final Map<String, ManureVo> lastUpManureData = new HashMap<>(); /** * 鎵ц鑺傜偣浠诲姟 @@ -38,22 +39,34 @@ MqttSubMsg msg = (MqttSubMsg)data ; if(msg.vo4Up != null && msg.vo4Up instanceof ManureVo){ //姘磋偉鏁版嵁 - ManureVo stVo = (ManureVo)msg.vo4Up ; - Long lastAt = dealDataAtDateTime.get(msg.deviceId + stVo.no); + ManureVo nowVo = (ManureVo)msg.vo4Up ; + ManureVo lastVo = lastUpManureData.get(msg.deviceId + nowVo.no) ; Long now = System.currentTimeMillis() ; - if(lastAt == null || ((now - lastAt) >= ServerProperties.mqttAcceptDataMinInterval)){ - dealDataAtDateTime.put(msg.deviceId + stVo.no, now); - DbSv sv = SpringContextUtil.getBean(DbSv.class) ; - if(sv != null){ - PrStManure stPo = sv.getStManureByFBoxIdAndNo(msg.deviceId, stVo.no) ; - if(stPo != null){ - this.taskResult = new Object[]{sv, stPo} ; - this.toNextTasks(data); - } - }else{ - log.error("涓ラ噸閿欒锛屾湭鑳藉緱鍒癉bSv瀵硅薄"); + if(lastVo != null && nowVo.stateIsChanged(lastVo)){ + //鐘舵�佹湁鍙樺寲 + this.deal(data, msg, nowVo, now); + }else{ + //鐘舵�佹棤鍙樺寲 + Long lastAt = dealDataAtDateTime.get(msg.deviceId + nowVo.no); + if(lastAt == null || ((now - lastAt) >= ServerProperties.mqttAcceptDataMinInterval)){ + //瓒呰繃鏈�灏忔椂闂撮棿闅� + this.deal(data, msg, nowVo, now); } } + lastUpManureData.put(msg.deviceId + nowVo.no, nowVo); + } + } + private void deal(Object data, MqttSubMsg msg, ManureVo stVo, Long now){ + dealDataAtDateTime.put(msg.deviceId + stVo.no, now); + DbSv sv = SpringContextUtil.getBean(DbSv.class) ; + if(sv != null){ + PrStManure stPo = sv.getStManureByFBoxIdAndNo(msg.deviceId, stVo.no) ; + if(stPo != null){ + this.taskResult = new Object[]{sv, stPo} ; + this.toNextTasks(data); + } + }else{ + log.error("涓ラ噸閿欒锛屾湭鑳藉緱鍒癉bSv瀵硅薄"); } } } -- Gitblit v1.8.0