package com.dy.rtuMw.server.rtuData.p206V2; 
 | 
  
 | 
import com.dy.common.mw.protocol.Data; 
 | 
import com.dy.common.mw.protocol.p206V2.DataV2; 
 | 
import com.dy.common.mw.protocol.p206V2.upVos.DataCd02Vo; 
 | 
import com.dy.rtuMw.server.rtuData.TaskSurpport; 
 | 
import org.apache.logging.log4j.LogManager; 
 | 
import org.apache.logging.log4j.Logger; 
 | 
  
 | 
import java.text.ParseException; 
 | 
import java.util.HashMap; 
 | 
import java.util.Map; 
 | 
  
 | 
/** 
 | 
 * @Author: liurunyu 
 | 
 * @Date: 2024/11/1 9:16 
 | 
 * @Description 
 | 
 */ 
 | 
public class TkDealHearBeatV2 extends TaskSurpport { 
 | 
  
 | 
    private static final Map<String, String> onceUpDataRtus = new HashMap<>(); 
 | 
  
 | 
    private static final Logger log = LogManager.getLogger(TkPreGenObjsV2.class.getName()) ; 
 | 
  
 | 
    //类ID,一定与Tree.xml配置文件中配置一致 
 | 
    public static final String taskId = "TkDealHearBeatV2" ; 
 | 
  
 | 
    /** 
 | 
     * 执行节点任务 
 | 
     * @param data 需要处理的数据 
 | 
     */ 
 | 
    @Override 
 | 
    public void execute(Object data) throws ParseException { 
 | 
        Data d = (Data)data ; 
 | 
        String rtuAddr = d.getRtuAddr() ;//TkRtuData里判断了rtuAddr为空 
 | 
        DataCd02Vo cd02Vo = null ; 
 | 
        if(d.subData != null && d.subData instanceof DataV2){ 
 | 
            DataV2 dataV2 = (DataV2)d.subData ; 
 | 
            if(dataV2.subData != null && dataV2.subData instanceof DataCd02Vo){ 
 | 
                cd02Vo = (DataCd02Vo)dataV2.subData ; 
 | 
            } 
 | 
        } 
 | 
        boolean toNext = true ; 
 | 
        if(!onceUpDataRtus.containsKey(rtuAddr)){ 
 | 
            //初次上行数据,不论是否是心跳,都要进行任务树处理 
 | 
            //toNext = true ; 
 | 
            if(cd02Vo != null){ 
 | 
                //是心跳数据 
 | 
                onceUpDataRtus.put(rtuAddr, (cd02Vo.alarmVo == null?"":cd02Vo.alarmVo.to1010()) + 
 | 
                        (cd02Vo.stateVo == null?"":cd02Vo.stateVo.to1010())) ; 
 | 
            }else{ 
 | 
                //不是心跳数据 
 | 
                onceUpDataRtus.put(rtuAddr, "") ; 
 | 
            } 
 | 
        }else{ 
 | 
            if(cd02Vo != null){ 
 | 
                //是心跳数据, 
 | 
                String alarmStateOld = onceUpDataRtus.get(rtuAddr) ; 
 | 
                String alarmStateNew = (cd02Vo.alarmVo == null?"":cd02Vo.alarmVo.to1010()) + 
 | 
                        (cd02Vo.stateVo == null?"":cd02Vo.stateVo.to1010()) ; 
 | 
                if(alarmStateOld.equals(alarmStateNew)){ 
 | 
                    toNext = false ;//是心跳数据,并且报警与状态未改变,不进行任务树处理,不缓存未变化的报警与状态 
 | 
                }else{ 
 | 
                    //是心跳数据,并且报警与状态也改变了,进行任务树处理 
 | 
                    //toNext = true ; 
 | 
                    onceUpDataRtus.put(rtuAddr, alarmStateNew) ;//缓存新报警与状态 
 | 
                } 
 | 
            }else{ 
 | 
                //不是心跳数据,要进行任务树处理 
 | 
                //toNext = true ; 
 | 
            } 
 | 
        } 
 | 
        if(toNext){ 
 | 
            this.toNextTasks(data); 
 | 
        } 
 | 
    } 
 | 
} 
 |