| New file | 
|  |  |  | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|