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