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