From 656aa4f953eb52502a6414965e46642c31b6e8ee Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期二, 29 四月 2025 15:33:09 +0800
Subject: [PATCH] 设备会在多种功能码上报数据中携带报警与状态数据,这样数据库保存设备报警与状态数据可能很多,为此修改逻辑,当前实现为一设备一个小时内只保存一条报警与状态数据。

---
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealLoss.java |  171 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 171 insertions(+), 0 deletions(-)

diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealLoss.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealLoss.java
new file mode 100644
index 0000000..42b3242
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V1/TkDealLoss.java
@@ -0,0 +1,171 @@
+package com.dy.rtuMw.server.rtuData.p206V1;
+
+import com.dy.pipIrrGlobal.pojoRm.RmLossDay;
+import com.dy.pipIrrGlobal.pojoRm.RmLossDayLast;
+import com.dy.rtuMw.server.rtuData.TaskSurpport;
+import com.dy.rtuMw.server.rtuData.dbSv.DbSv;
+import com.dy.common.mw.protocol.Data;
+import com.dy.common.mw.protocol.p206V1.upVos.DataCdC0Vo;
+import com.dy.common.mw.protocol.p206V1.DataV1;
+import com.dy.common.util.DateTime;
+import com.dy.pipIrrGlobal.pojoPr.PrController;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.util.Date;
+
+/**
+ * @Author liurunyu
+ * @Date 2024/2/28 16:31
+ * @LastEditTime 2024/2/28 16:31
+ * @Description 鍙栨按鍙f紡鎹熺粺璁�
+ */
+public class TkDealLoss extends TaskSurpport {
+
+    private static final Logger log = LogManager.getLogger(TkDealLoss.class.getName());
+
+    //绫籌D锛屼竴瀹氫笌Tree.xml閰嶇疆鏂囦欢涓厤缃竴鑷�
+    public static final String taskId = "TkDealLoss";
+
+    /**
+     * 鎵ц鑺傜偣浠诲姟: 澶勭悊鎺у埗鍣ㄦ紡鎹熺粺璁�
+     *
+     * @param data 闇�瑕佸鐞嗙殑鏁版嵁
+     */
+    @Override
+    public void execute(Object data) {
+        Data d = (Data) data;
+        DataV1 dV1 = (DataV1) d.getSubData();//鍓嶉潰浠诲姟宸茬粡鍒ゆ柇涓嶄负null
+        Object cdObj = dV1.subData;
+        if (cdObj != null && cdObj instanceof DataCdC0Vo){
+            Object[] objs = this.getTaskResults(TkPreGenObjs.taskId) ;
+            DbSv sv = (DbSv)objs[0] ;
+            PrController controller = (PrController)objs[1] ;
+            try{
+                this.doDeal(sv, controller, d.getRtuAddr(), dV1, (DataCdC0Vo)cdObj);
+            }catch (Exception e){
+                log.error("淇濆瓨鍙栨按鍙f紡鎹熺粺璁℃暟鎹椂鍙戠敓寮傚父", e);
+            }
+        }
+    }
+
+    /**
+     * 涓氬姟澶勭悊
+     * @param sv             鏈嶅姟
+     * @param controller     鎺у埗鍣ㄥ璞�
+     * @param rtuAddr        鎺у埗鍣ㄥ湴鍧�
+     * @param dV1        涓婃姤鏁版嵁
+     * @param dataCdC0Vo 寮�闃�涓婃姤鏁版嵁瀵硅薄
+     */
+    private void doDeal(DbSv sv, PrController controller, String rtuAddr, DataV1 dV1, DataCdC0Vo dataCdC0Vo) throws Exception {
+        Date operateDt = controller.getOperateDt() ;//鍙栨按涓笂缁戝畾姝ゆ帶鍒跺櫒鐨勬棩鏈熶笌鏃堕棿
+        if(operateDt != null){
+            String operateDtStr = DateTime.yyyy_MM_dd(operateDt) ;
+            if(operateDtStr.equals(DateTime.yyyy_MM_dd())){
+                //褰撳ぉ鍙戠幇锛堝苟缁戝畾锛夋帶鍒跺櫒锛屾帶鍒跺櫒璁$畻鐨勬紡鎹熼噺涓�瀹氫笉姝g‘锛屽己鍒惰缃垚0
+                dataCdC0Vo.lossAmount = 0.0 ;
+            }
+        }
+
+        RmLossDayLast poLast = sv.getRmLossLast(controller.getIntakeId());
+        if (poLast == null) {
+            //鏁版嵁搴撲腑涓嶅瓨鍦ㄨ鍙栨按鍙g殑婕忔崯鏁版嵁
+            //棣栧厛鐢熸垚鏈�鏂版暟鎹強鍘嗗彶鏁版嵁锛屽苟鍏堜繚瀛�
+            poLast = this.newRmLossLast(controller, rtuAddr, dV1, dataCdC0Vo);
+            this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV1, dataCdC0Vo, poLast);
+            sv.saveRmLossLast(poLast);
+        } else {
+            if(DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCdC0Vo.rtuDt).equals(poLast.dtRtu)){
+                //鏃堕棿涓�鑷达紝閲嶅涓婃姤鏁版嵁锛屼笉杩涜浠讳綍澶勭悊
+            }else{
+                RmLossDay poHistory = null ;
+                if(poLast.lastHistoryId != null){
+                    poHistory = sv.getRmLossHistory(poLast.lastHistoryId) ;
+                }
+                if(poHistory == null){
+                    poHistory = this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV1, dataCdC0Vo, poLast);
+                }
+                if(DateTime.dateFrom_yyyy_MM_dd1(dV1.dt).equals(poLast.dt)){
+                    //鍚屼竴澶╂暟鎹�
+                    poLast.lossAmount = dataCdC0Vo.lossAmount ;
+                    poLast.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV1.dt) ;
+                    poLast.dtRtu = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCdC0Vo.rtuDt) ;
+                    sv.updateRmLossLast(poLast);
+
+                    poHistory.lossAmount = dataCdC0Vo.lossAmount ;
+                    poHistory.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV1.dt) ;
+                    poHistory.dtRtu = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCdC0Vo.rtuDt) ;
+                    sv.updateRmLossHistory(poHistory);
+                }else if(DateTime.dateFrom_yyyy_MM_dd1(dV1.dt).after(poLast.dt)){
+                    //鏂扮殑鏃ユ湡
+                    poLast.lossAmount = dataCdC0Vo.lossAmount ;
+                    poLast.dt = DateTime.dateFrom_yyyy_MM_dd1(dataCdC0Vo.rtuDt);
+                    poLast.dtLast = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dV1.dt) ;
+                    poLast.dtRtu = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(dataCdC0Vo.rtuDt) ;
+                    this.newAndSaveHistoryDataDeal(sv, controller, rtuAddr, dV1, dataCdC0Vo, poLast);
+                    sv.updateRmLossLast(poLast);
+                }else{
+                    //杩欑鎯呭喌涓嶅瓨鍦紙RTU鏃堕挓鏃╀簬鏈湴璁板綍涓殑RTU鏃堕挓锛圧TU绌胯秺鍥炶繃鍘讳簡锛屽彲鑳芥椂閽熼噸缃簡锛夛紝姝ょ鎯呭喌涓嶅鐞嗭級
+                }
+            }
+            sv.updateRmLossLast(poLast);
+        }
+    }
+
+    /**
+     * 鐢熸垚鏂扮殑鎺у埗鍣ㄦ紡鎹熸棩缁熻鏈�鏂拌褰�
+     * @param controller
+     * @param rtuAddr
+     * @param dV1
+     * @param cdData
+     * @return
+     * @throws Exception
+     */
+    private RmLossDayLast newRmLossLast(PrController controller, String rtuAddr, DataV1 dV1, DataCdC0Vo cdData)throws Exception {
+        RmLossDayLast po = new RmLossDayLast() ;
+        po.controllerId = controller==null?null:controller.getId();
+        po.intakeId = controller==null?null:controller.getIntakeId();
+        po.rtuAddr = rtuAddr;
+        po.valueFrom(dV1, cdData) ;
+        return po ;
+    }
+
+    /**
+     * 鐢熸垚鏂扮殑鎺у埗鍣ㄦ紡鎹熸棩缁熻鍘嗗彶璁板綍
+     * @param controller
+     * @param rtuAddr
+     * @param dV1
+     * @param cdData
+     * @return
+     * @throws Exception
+     */
+    private RmLossDay newRmLossHistory(PrController controller, String rtuAddr, DataV1 dV1, DataCdC0Vo cdData)throws Exception {
+        RmLossDay po = new RmLossDay() ;
+        po.controllerId = controller==null?null:controller.getId();
+        po.intakeId = controller==null?null:controller.getIntakeId();
+        po.rtuAddr = rtuAddr;
+        po.valueFrom(dV1, cdData);
+        return po ;
+    }
+
+
+    /**
+     * 淇濆瓨鏂扮殑寮�闃�涓婃姤鍘嗗彶鏁版嵁璁板綍锛屽苟鎶奍D璧嬪�肩粰鏈�鏂拌褰曠殑 lastHistoryId
+     * @param sv
+     * @param controller
+     * @param rtuAddr
+     * @param dV1
+     * @param dataCdC0Vo
+     * @param poLast
+     * @throws Exception
+     * @return RmLossHistory
+     */
+    private RmLossDay newAndSaveHistoryDataDeal(DbSv sv, PrController controller, String rtuAddr, DataV1 dV1, DataCdC0Vo dataCdC0Vo, RmLossDayLast poLast)throws Exception {
+        RmLossDay poHistory = this.newRmLossHistory(controller, rtuAddr, dV1, dataCdC0Vo) ;
+        sv.saveRmLossHistory(poHistory);
+        //鐢辨渶鏂版暟鎹寔鏈夊巻鍙叉暟鎹腑鐨勬渶鏂拌褰旾D锛屼互鏂逛究蹇�熸煡璇�
+        poLast.lastHistoryId = poHistory == null ? null: poHistory.id ;
+        return poHistory ;
+    }
+
+}

--
Gitblit v1.8.0