From 959dcca95276888cd9c092d93d276ef9aa580aef Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期三, 30 四月 2025 16:26:19 +0800
Subject: [PATCH] 1、增加远程透传命令; 2、表阀一体机协议优化;

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

diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealAlarmStatusV202404.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealAlarmStatusV202404.java
new file mode 100644
index 0000000..c9d63e0
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/p206V202404/TkDealAlarmStatusV202404.java
@@ -0,0 +1,320 @@
+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.*;
+import com.dy.common.util.DateTime;
+import com.dy.pipIrrGlobal.pojoPr.PrController;
+import com.dy.pipIrrGlobal.pojoRm.RmAlarmStateHistory;
+import com.dy.pipIrrGlobal.pojoRm.RmAlarmStateLast;
+import com.dy.rtuMw.server.msCenter.MsCenterUnit;
+import com.dy.rtuMw.server.msCenter.MsObj;
+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;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Author liurunyu
+ * @Date 2024/5/8 14:18
+ */
+public class TkDealAlarmStatusV202404 extends TaskSurpport {
+
+    private static final Logger log = LogManager.getLogger(TkDealAlarmStatusV202404.class.getName()) ;
+
+    //绫籌D锛屼竴瀹氫笌Tree.xml閰嶇疆鏂囦欢涓厤缃竴鑷�
+    public static final String taskId = "TkDealAlarmStatusV202404" ;
+
+    //鏄惁鍦ㄦ煇涓椂鍒伙紙骞存湀鏃ユ椂锛変繚瀛樹簡鎶ヨ鐘舵�佹暟鎹�
+    private static final Map<String, Long> onceSaveAlarmData4Rtus = new HashMap<>();
+
+    /**
+     * 鎵ц鑺傜偣浠诲姟锛氭姤璀﹀強鐘舵��
+     * @param data 闇�瑕佸鐞嗙殑鏁版嵁
+     */
+    @Override
+    public void execute(Object data) {
+        Data d = (Data)data ;
+        DataV202404 dV202404 = (DataV202404)d.getSubData() ;
+        Object cdObj = dV202404.subData ;
+        //鍓嶉潰浠诲姟宸茬粡鍒ゆ柇cdObj涓嶄负null
+        boolean toNext = false ;
+        try{
+            Object[] objs = this.getTaskResults(TkPreGenObjsV202404.taskId) ;
+            DbSv sv = (DbSv)objs[0] ;
+            PrController controller = (PrController)objs[1] ;
+            if(cdObj instanceof DataCd81Vo){
+                //璁惧缁堢闅忔満鑷姤
+                if(this.needSave2Db( d.getRtuAddr())) {
+                    //鍦ㄤ竴涓皬鏃跺唴娌℃湁瀛樺偍鎶ヨ鏁版嵁
+                    DataCd81Vo cdData = (DataCd81Vo)(cdObj) ;
+                    this.toMsCenter(controller, d.getRtuAddr(), dV202404, cdData, dV202404.dt);
+                    this.saveOrUpdateLast(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ;
+                    this.saveHistory(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ;
+                    this.cacheSaveTime(d.getRtuAddr());
+                    if(cdData.statePump != null && cdData.statePump.byteValue() == AlarmVo.DevCloseState){
+                        if(controller != null && controller.getIntakeId() != null){
+                            this.taskResult = new Object[]{controller.getIntakeId(), AlarmVo.DevCloseState} ;
+                            toNext = true ;
+                        }
+                    }
+                }
+            }else if(cdObj instanceof DataCd80_5BVo){
+                //璁惧缁堢宸ヤ綔涓婃姤 + 鏌ヨ璁惧缁堢瀹炴椂鍊�
+                if(this.needSave2Db( d.getRtuAddr())) {
+                    //鍦ㄤ竴涓皬鏃跺唴娌℃湁瀛樺偍鎶ヨ鏁版嵁
+                    DataCd80_5BVo cdData = (DataCd80_5BVo)(cdObj) ;
+                    this.toMsCenter(controller, d.getRtuAddr(), dV202404, cdData, dV202404.dt);
+                    this.saveOrUpdateLast(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ;
+                    this.saveHistory(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ;
+                    this.cacheSaveTime(d.getRtuAddr());
+                    if(cdData.statePump != null && cdData.statePump.byteValue() == AlarmVo.DevCloseState){
+                        if(controller != null && controller.getIntakeId() != null){
+                            this.taskResult = new Object[]{controller.getIntakeId(), AlarmVo.DevCloseState} ;
+                            toNext = true ;
+                        }
+                    }
+                }
+            }else if(cdObj instanceof DataCd93_A3Vo){
+                //骞冲彴/APP杩滅▼鍏抽棴姘存车/闃�闂�   +  鍒峰崱鍏虫车/闃�涓婃姤
+                if(this.needSave2Db( d.getRtuAddr())) {
+                    //鍦ㄤ竴涓皬鏃跺唴娌℃湁瀛樺偍鎶ヨ鏁版嵁
+                    DataCd93_A3Vo cdData = (DataCd93_A3Vo)(cdObj) ;
+                    this.toMsCenter(controller, d.getRtuAddr(), dV202404, cdData, dV202404.dt);
+                    this.saveOrUpdateLast(sv, controller, d.getRtuAddr(), cdData.endDt, cdData, dV202404.dt) ;
+                    this.saveHistory(sv, controller, d.getRtuAddr(), cdData.endDt, cdData, dV202404.dt) ;
+                    this.cacheSaveTime(d.getRtuAddr());
+                    if(cdData.statePump != null && cdData.statePump.byteValue() == AlarmVo.DevCloseState){
+                        if(controller != null && controller.getIntakeId() != null){
+                            this.taskResult = new Object[]{controller.getIntakeId(), AlarmVo.DevCloseState} ;
+                            toNext = true ;
+                        }
+                    }
+                }
+            }else if(cdObj instanceof DataCd84Vo){
+                //璁惧缁堢鍒峰崱寮�娉�/闃�涓婃姤
+                if(this.needSave2Db( d.getRtuAddr())) {
+                    //鍦ㄤ竴涓皬鏃跺唴娌℃湁瀛樺偍鎶ヨ鏁版嵁
+                    DataCd84Vo cdData = (DataCd84Vo)(cdObj) ;
+                    this.toMsCenter(controller, d.getRtuAddr(), dV202404, cdData, dV202404.dt);
+                    this.saveOrUpdateLast(sv, controller, d.getRtuAddr(), cdData.openDt, cdData, dV202404.dt) ;
+                    this.saveHistory(sv, controller, d.getRtuAddr(), cdData.openDt, cdData, dV202404.dt) ;
+                    this.cacheSaveTime(d.getRtuAddr());
+                    if(cdData.statePump != null && cdData.statePump.byteValue() == AlarmVo.DevCloseState){
+                        if(controller != null && controller.getIntakeId() != null){
+                            this.taskResult = new Object[]{controller.getIntakeId(), AlarmVo.DevCloseState} ;
+                            toNext = true ;
+                        }
+                    }
+                }
+            }else if(cdObj instanceof DataCdC2Vo){
+                //璁惧缁堢寮�鍏虫按娉�/闃�闂ㄦ垚鍔�/澶辫触涓婃姤
+                if(this.needSave2Db( d.getRtuAddr())) {
+                    //鍦ㄤ竴涓皬鏃跺唴娌℃湁瀛樺偍鎶ヨ鏁版嵁
+                    DataCdC2Vo cdData = (DataCdC2Vo)(cdObj) ;
+                    this.toMsCenter(controller, d.getRtuAddr(), dV202404, cdData, dV202404.dt);
+                    this.saveOrUpdateLast(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ;
+                    this.saveHistory(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ;
+                    this.cacheSaveTime(d.getRtuAddr());
+                    if(cdData.statePump != null && cdData.statePump.byteValue() == AlarmVo.DevCloseState){
+                        if(controller != null && controller.getIntakeId() != null){
+                            this.taskResult = new Object[]{controller.getIntakeId(), AlarmVo.DevCloseState} ;
+                            toNext = true ;
+                        }
+                    }
+                }
+            }
+        }catch (Exception e){
+            log.error("淇濆瓨鎺у埗鍣ㄦ姤璀﹀拰鐘舵�佹暟鎹椂鍙戠敓寮傚父", e);
+        }
+        if(toNext){
+            this.toNextTasks(d);
+        }
+    }
+
+    private boolean needSave2Db(String rtuAddr){
+        if(!onceSaveAlarmData4Rtus.containsKey(rtuAddr)){
+            return true ;
+        }else{
+            Long time = onceSaveAlarmData4Rtus.get(rtuAddr) ;
+            Long ymdh = Long.parseLong(DateTime.yyyyMMddHH()) ;
+            if(ymdh.longValue() == time.longValue()){
+                //鍚屼竴涓皬鏃跺唴
+                return false ;
+            }else{
+                return true ;
+            }
+        }
+    }
+    private void cacheSaveTime(String rtuAddr){
+        onceSaveAlarmData4Rtus.put(rtuAddr, Long.parseLong(DateTime.yyyyMMddHH()));
+    }
+    /**
+     * 鎶ヨ鐘舵�佹暟鎹瓨鍏ユ秷鎭腑蹇�
+     * @param controller 鎺у埗鍣ㄥ璞�
+     * @param rtuAddr 鎺у埗鍣ㄥ湴鍧�
+     * @param dataV202404 鏁版嵁瀵硅薄
+     * @param alarmVo 鎶ヨ+鐘舵�佸璞�
+     */
+    private void toMsCenter(PrController controller, String rtuAddr, DataV202404 dataV202404,  AlarmVo alarmVo, String dt){
+        if(alarmVo != null && controller != null){
+            if(alarmVo.hasAlarm()){
+                MsObj msObj = new MsObj() ;
+                msObj.put("name", "鎶ヨ");
+                msObj.put("rtuAddr", rtuAddr);
+                msObj.put("intakeId", controller.getIntakeId());
+                msObj.put("state", alarmVo.alarmContent());
+                msObj.put("dt", dt);
+                MsCenterUnit.getInstance().pushMs(msObj);
+            }
+            if(alarmVo.statePump != null){
+                MsObj msObj = new MsObj() ;
+                msObj.put("name", "闃�鎬�");
+                msObj.put("rtuAddr", rtuAddr);
+                msObj.put("intakeId", controller.getIntakeId());
+                msObj.put("state", alarmVo.statePump);
+                msObj.put("stateName", alarmVo.statePump==1?"寮�":"鍏�");
+                msObj.put("dt", dt);
+                MsCenterUnit.getInstance().pushMs(msObj);
+            }
+        }
+    }
+
+    /**
+     * 淇濆瓨鎶ヨ鐘舵�佹渶鏂版暟鎹�
+     * @param sv 鏈嶅姟
+     * @param controller 鎺у埗鍣ㄥ璞�
+     * @param rtuAddr 鎺у埗鍣ㄥ湴鍧�
+     * @param rtuDt 鎺у埗鍣ㄦ椂閽�
+     * @param alarmVo  鎶ヨ鍙婄姸鎬佹暟鎹�
+     * @param receiveDt 鎺ユ敹鏁版嵁鏃舵湰鍦版椂閽�
+     */
+    private void saveOrUpdateLast(DbSv sv,
+                                  PrController controller,
+                                  String rtuAddr,
+                                  String rtuDt,
+                                  AlarmVo alarmVo,
+                                  String receiveDt) throws Exception {
+        RmAlarmStateLast po = sv.getRmAlarmStateLast(controller.getIntakeId()) ;
+        if(po == null){
+            po = new RmAlarmStateLast(null,
+                    controller==null?null:controller.getId(),
+                    controller==null?null:controller.getIntakeId(),
+                    rtuAddr,
+                    DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(receiveDt),
+                    DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(rtuDt),
+                    alarmVo==null?null:alarmVo.statePump,
+                    alarmVo==null?null:alarmVo.alarmWaterRemain,
+                    alarmVo==null?null:alarmVo.alarm0WaterRemain,
+                    alarmVo==null?null:alarmVo.alarmExceedYear,
+                    alarmVo==null?null:alarmVo.alarmWaterMeterFault,
+                    alarmVo==null?null:alarmVo.alarmSteal,
+                    alarmVo==null?null:alarmVo.alarmWaterMeterBreak,
+                    alarmVo==null?null:alarmVo.alarmEleMeterFault,
+                    alarmVo==null?null:alarmVo.alarm0MoneyRemain,
+                    alarmVo==null?null:alarmVo.alarmDoor,
+                    alarmVo==null?null:alarmVo.alarmDoor,//2025-02-19鏈虹澶栭棬鎶ヨ椤规敼涓虹數姹犵數鍘嬩簡
+                    alarmVo==null?null:alarmVo.alarmEleMiss,
+                    alarmVo==null?null:alarmVo.alarmEleExceed,
+                    alarmVo==null?null:alarmVo.alarmEleLowVolt,
+                    alarmVo==null?null:alarmVo.stateIcEnable,
+                    alarmVo==null?null:alarmVo.alarmBatteryVolt,//鐢垫睜鐢靛帇(1锛氭姤璀︼紝0锛氭甯�)
+                    alarmVo==null?null:alarmVo.alarmBlockValve,//闃�闂ㄥ牭杞姤璀�(1锛氭姤璀︼紝0锛氭甯�)
+                    (byte)0,//渚涚數鏂瑰紡锛�0: 220V锛�1锛氳搫鐢垫睜锛�
+                    System.currentTimeMillis()
+            ) ;
+            sv.saveRmAlarmStateLast(po) ;
+        }else{
+            po = this.update(po, controller, rtuDt, alarmVo, receiveDt) ;
+            sv.updateRmAlarmStateLast(po);
+        }
+    }
+
+    /**
+     * 淇濆瓨鎶ヨ鐘舵�佸巻鍙茶褰�
+     * @param sv 鏈嶅姟
+     * @param controller 鎺у埗鍣ㄥ璞�
+     * @param rtuAddr 鎺у埗鍣ㄥ湴鍧�
+     * @param rtuDt 鎺у埗鍣ㄦ椂閽�
+     * @param alarmVo 鎶ヨ鍙婄姸鎬佹暟鎹�
+     * @param receiveDt 鎺ユ敹鏁版嵁鏃舵湰鍦版椂閽�
+     */
+    private void saveHistory(DbSv sv,
+                             PrController controller,
+                             String rtuAddr,
+                             String rtuDt,
+                             AlarmVo alarmVo,
+                             String receiveDt) throws Exception {
+        RmAlarmStateHistory po = new RmAlarmStateHistory(null,
+                controller==null?null:controller.getId(),
+                controller==null?null:controller.getIntakeId(),
+                rtuAddr,
+                DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(receiveDt),
+                DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(rtuDt),
+                alarmVo==null?null:alarmVo.statePump,
+                alarmVo==null?null:alarmVo.alarmWaterRemain,
+                alarmVo==null?null:alarmVo.alarm0WaterRemain,
+                alarmVo==null?null:alarmVo.alarmExceedYear,
+                alarmVo==null?null:alarmVo.alarmWaterMeterFault,
+                alarmVo==null?null:alarmVo.alarmSteal,
+                alarmVo==null?null:alarmVo.alarmWaterMeterBreak,
+                alarmVo==null?null:alarmVo.alarmEleMeterFault,
+                alarmVo==null?null:alarmVo.alarm0MoneyRemain,
+                alarmVo==null?null:alarmVo.alarmDoor,
+                alarmVo==null?null:alarmVo.alarmDoor,//2025-02-19鏈虹澶栭棬鎶ヨ椤规敼涓虹數姹犵數鍘嬩簡
+                alarmVo==null?null:alarmVo.alarmEleMiss,
+                alarmVo==null?null:alarmVo.alarmEleExceed,
+                alarmVo==null?null:alarmVo.alarmEleLowVolt,
+                alarmVo==null?null:alarmVo.stateIcEnable,
+                alarmVo==null?null:alarmVo.alarmBatteryVolt,//鐢垫睜鐢靛帇(1锛氭姤璀︼紝0锛氭甯�)
+                alarmVo==null?null:alarmVo.alarmBlockValve,//闃�闂ㄥ牭杞姤璀�(1锛氭姤璀︼紝0锛氭甯�)
+                (byte)0//渚涚數鏂瑰紡锛�0: 220V锛�1锛氳搫鐢垫睜锛�
+        ) ;
+        sv.saveRmAlarmStateHistory(po) ;
+    }
+
+
+    /**
+     * 淇濆瓨鎶ヨ鐘舵�佹渶鏂版暟鎹�
+     * @param po 瀹炰綋瀵硅薄
+     * @param controller 鎺у埗鍣ㄥ璞�
+     * @param rtuDt 鎺у埗鍣ㄦ椂閽�
+     * @param alarmVo  鎶ヨ鍙婄姸鎬佹暟鎹�
+     * @param receiveDt 鎺ユ敹鏁版嵁鏃舵湰鍦版椂閽�
+     */
+    private RmAlarmStateLast update(RmAlarmStateLast po,
+                                    PrController controller,
+                                    String rtuDt,
+                                    AlarmVo alarmVo,
+                                    String receiveDt) throws Exception {
+        po.controllerId = controller==null?null:controller.getId() ;
+        po.intakeId = controller==null?null:controller.getIntakeId() ;
+
+        po.dt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(receiveDt) ;
+        po.rtuDt = DateTime.dateFrom_yyyy_MM_dd_HH_mm_ss(rtuDt) ;
+        if(alarmVo != null){
+            po.valveState = alarmVo.statePump ;
+            po.alarmRemainWater = alarmVo.alarmWaterRemain ;
+            po.alarm0WaterRemain = alarmVo.alarm0WaterRemain ;
+            po.alarmExceedYear = alarmVo.alarmExceedYear ;
+            po.alarmWaterMeterFault = alarmVo.alarmWaterMeterFault ;
+            po.alarmLoss = alarmVo.alarmSteal ;
+            po.alarmWaterMeterBreak = alarmVo.alarmWaterMeterBreak ;
+            po.alarmEleMeterFault = alarmVo.alarmEleMeterFault ;
+            po.alarm0MoneyRemain = alarmVo.alarm0MoneyRemain ;
+            po.alarmInnerDoor = alarmVo.alarmDoor;
+            po.alarmOuterDoor = alarmVo.alarmDoor;
+            po.alarmEleMiss = alarmVo.alarmEleMiss ;
+            po.alarmEleExceed = alarmVo.alarmEleExceed ;
+            po.alarmEleLowVolt = alarmVo.alarmEleLowVolt ;
+            po.stateIcEnable = alarmVo.stateIcEnable ;
+            po.alarmBatteryVolt = alarmVo.alarmBatteryVolt ;
+            po.alarmValve = alarmVo.alarmBlockValve;
+        }
+        return po ;
+    }
+
+}

--
Gitblit v1.8.0