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:蓄电池) 
 | 
                    System.currentTimeMillis() 
 | 
            ) ; 
 | 
            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()); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
    } 
 | 
} 
 |