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.rtuData.TaskSurpport; import com.dy.rtuMw.server.rtuData.dbSv.DbSv; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * @Author liurunyu * @Date 2024/5/8 14:18 */ public class TkDealAlarmStatusV202404 extends TaskSurpport { private static final Logger log = LogManager.getLogger(TkDealAlarmStatusV202404.class.getName()) ; //类ID,一定与Tree.xml配置文件中配置一致 public static final String taskId = "TkDealAlarmStatusV202404" ; /** * 执行节点任务:报警及状态 * @param data 需要处理的数据 */ @Override public void execute(Object data) { Data d = (Data)data ; DataV202404 dV202404 = (DataV202404)d.getSubData() ; Object cdObj = dV202404.subData ; //前面任务已经判断cdObj不为null try{ Object[] objs = this.getTaskResults(TkPreGenObjsV202404.taskId) ; DbSv sv = (DbSv)objs[0] ; PrController controller = (PrController)objs[1] ; if(cdObj instanceof DataCd81Vo){ //设备终端随机自报 DataCd81Vo cdData = (DataCd81Vo)(cdObj) ; this.saveOrUpdateLast(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ; this.saveHistory(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ; }else if(cdObj instanceof DataCd80_5BVo){ //设备终端工作上报 + 查询设备终端实时值 DataCd80_5BVo cdData = (DataCd80_5BVo)(cdObj) ; this.saveOrUpdateLast(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ; this.saveHistory(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ; }else if(cdObj instanceof DataCd93_A3Vo){ //平台/APP远程关闭水泵/阀门 + 刷卡关泵/阀上报 DataCd93_A3Vo cdData = (DataCd93_A3Vo)(cdObj) ; this.saveOrUpdateLast(sv, controller, d.getRtuAddr(), cdData.endDt, cdData, dV202404.dt) ; this.saveHistory(sv, controller, d.getRtuAddr(), cdData.endDt, cdData, dV202404.dt) ; }else if(cdObj instanceof DataCd84Vo){ //设备终端刷卡开泵/阀上报 DataCd84Vo cdData = (DataCd84Vo)(cdObj) ; this.saveOrUpdateLast(sv, controller, d.getRtuAddr(), cdData.openDt, cdData, dV202404.dt) ; this.saveHistory(sv, controller, d.getRtuAddr(), cdData.openDt, cdData, dV202404.dt) ; }else if(cdObj instanceof DataCdC2Vo){ //设备终端开关水泵/阀门成功/失败上报 DataCdC2Vo cdData = (DataCdC2Vo)(cdObj) ; this.saveOrUpdateLast(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ; this.saveHistory(sv, controller, d.getRtuAddr(), cdData.rtuDt, cdData, dV202404.dt) ; } }catch (Exception e){ log.error("保存控制器报警和状态数据时发生异常", e); } } /** * 保存报警状态最新数据 * @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.alarmInnerDoor, alarmVo==null?null:alarmVo.alarmOuterDoor, alarmVo==null?null:alarmVo.alarmEleMiss, alarmVo==null?null:alarmVo.alarmEleExceed, alarmVo==null?null:alarmVo.alarmEleLowVolt, alarmVo==null?null:alarmVo.stateIcEnable, (byte)0,//电池电压(1:报警,0:正常) (byte)0,//阀门报警(1:报警,0:正常) (byte)0//供电方式(0: 220V,1:蓄电池) ) ; sv.saveRmAlarmStateLast(po) ; }else{ po = this.update(po, controller, rtuDt, alarmVo, receiveDt) ; this.updateVirCardNoUseState(sv, controller, alarmVo) ; 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.alarmInnerDoor, alarmVo==null?null:alarmVo.alarmOuterDoor, alarmVo==null?null:alarmVo.alarmEleMiss, alarmVo==null?null:alarmVo.alarmEleExceed, alarmVo==null?null:alarmVo.alarmEleLowVolt, alarmVo==null?null:alarmVo.stateIcEnable, (byte)0,//电池电压(1:报警,0:正常) (byte)0,//阀门报警(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.alarmInnerDoor ; po.alarmOuterDoor = alarmVo.alarmOuterDoor ; po.alarmEleMiss = alarmVo.alarmEleMiss ; po.alarmEleExceed = alarmVo.alarmEleExceed ; po.alarmEleLowVolt = alarmVo.alarmEleLowVolt ; po.stateIcEnable = alarmVo.stateIcEnable ; } return po ; } /** * 虚拟卡在取水中的占用状态改为非应用状态 */ private void updateVirCardNoUseState(DbSv sv, PrController controller, AlarmVo alarmVo){ if(alarmVo != null){ if(alarmVo.statePump != null && alarmVo.statePump.byteValue() == 0){ //阀门关闭状态 if(controller != null && controller.getIntakeId() != null){ //虚拟卡在取水中的占用状态改为非应用状态 sv.updateVirCardNoUseState(controller.getIntakeId()); } } } } }