| | |
| | | import org.apache.logging.log4j.LogManager; |
| | | import org.apache.logging.log4j.Logger; |
| | | |
| | | import com.dy.common.mw.protocol.rtuStatus.StCommandResult; |
| | | import com.dy.common.mw.protocol.rtuStatus.StDownData; |
| | | import com.dy.common.mw.protocol.rtuStatus.StOnOffLine; |
| | | import com.dy.common.mw.protocol.rtuStatus.StUpData; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | public class RtuStatusDealer { |
| | | private static Logger log = LogManager.getLogger(RtuStatusDealer.class.getName()) ; |
| | | |
| | | private static Map<String, RtuStatus> map = new HashMap<String, RtuStatus>() ; |
| | | |
| | | public static void onOffLine(RtuSessionStatus sta){ |
| | | // StOnOffLine st = new StOnOffLine() ; |
| | | // st.rtuAddr = sta.rtuAddr ; |
| | | // st.onOff_trueFalse = sta.onTrueOffLine ; |
| | | // st.ip = sta.ip ; |
| | | // st.port = sta.port ; |
| | | |
| | | // if(member == null){ |
| | | // log.error("出错,未能得到处理RTU(地址为" + sta.rtuAddr + ")状态数据的数据中间件,可能数据中间件未启动或脱离的集群!"); |
| | | // }else{ |
| | | // log.info("通知数据中间件(" + member.toString() + "),RTU(地址为" + sta.rtuAddr + ")在线!"); |
| | | // new JgIoHandler().sendP2P(member, st); |
| | | // } |
| | | /** |
| | | * 得到全部状态 |
| | | * @return |
| | | */ |
| | | public static Map<String, RtuStatus> allStatus(){ |
| | | return map ; |
| | | } |
| | | |
| | | public static void onLine(String rtuAddr, String ip, Integer port){ |
| | | // StOnOffLine st = new StOnOffLine() ; |
| | | // st.rtuAddr = rtuAddr ; |
| | | // st.onOff_trueFalse = true ; |
| | | // st.ip = ip ; |
| | | // st.port = port ; |
| | | |
| | | // Address member = JgUnit.getInstance().getJgMembers().getDataMwMemberByRtuAddr(rtuAddr) ; |
| | | // if(member == null){ |
| | | // log.error("出错,未能得到处理RTU(地址为" + rtuAddr + ")状态数据的数据中间件,可能数据中间件未启动或脱离的集群!"); |
| | | // }else{ |
| | | // log.info("通知数据中间件(" + member.toString() + "),RTU(地址为" + rtuAddr + ")在线!"); |
| | | // new JgIoHandler().sendP2P(member, st); |
| | | // } |
| | | /** |
| | | * 得到部分状态 |
| | | * @return |
| | | */ |
| | | public static Map<String, RtuStatus> partStatus(String[] rtuAddrArrGrp){ |
| | | synchronized (map){ |
| | | Map<String, RtuStatus> map = new HashMap<>(); |
| | | for(String rtuAddr : rtuAddrArrGrp){ |
| | | RtuStatus status = map.get(rtuAddr) ; |
| | | if(status != null){ |
| | | map.put(rtuAddr, status) ; |
| | | } |
| | | } |
| | | return map ; |
| | | } |
| | | } |
| | | public static void onLine(String rtuAddr, String ip, Integer port, String protocolName, Short protocolVersion){ |
| | | RtuStatus vo = map.get(rtuAddr) ; |
| | | if(vo == null) { |
| | | vo = new RtuStatus(); |
| | | vo.onLine(rtuAddr, ip, port, protocolName, protocolVersion) ; |
| | | map.put(rtuAddr, vo); |
| | | }else { |
| | | vo.onLine(rtuAddr, ip, port, protocolName, protocolVersion) ; |
| | | } |
| | | } |
| | | |
| | | public static void offLine(String rtuAddr){ |
| | | // StOnOffLine st = new StOnOffLine() ; |
| | | // st.rtuAddr = rtuAddr ; |
| | | // st.onOff_trueFalse = false ; |
| | | |
| | | // Address member = JgUnit.getInstance().getJgMembers().getDataMwMemberByRtuAddr(rtuAddr) ; |
| | | // if(member == null){ |
| | | // log.error("出错,未能得到处理RTU(地址为" + rtuAddr + ")状态数据的数据中间件,可能数据中间件未启动或脱离的集群!"); |
| | | // }else{ |
| | | // log.info("通知数据中间件(" + member.toString() + "),RTU(地址为" + rtuAddr + ")离线!"); |
| | | // new JgIoHandler().sendP2P(member, st); |
| | | // } |
| | | RtuStatus vo = map.get(rtuAddr) ; |
| | | if(vo == null) { |
| | | vo = new RtuStatus(); |
| | | vo.offLine(); |
| | | map.put(rtuAddr, vo); |
| | | }else { |
| | | vo.offLine(); |
| | | } |
| | | } |
| | | |
| | | public static void upData(String rtuAddr, Integer bufferLen){ |
| | | // StUpData st = new StUpData() ; |
| | | // st.rtuAddr = rtuAddr ; |
| | | // st.upBufferLen = bufferLen ; |
| | | // st.isReport = false ; |
| | | |
| | | // Address member = JgUnit.getInstance().getJgMembers().getDataMwMemberByRtuAddr(rtuAddr) ; |
| | | // if(member == null){ |
| | | // log.error("出错,未能得到处理RTU(地址为" + rtuAddr + ")状态数据的数据中间件,可能数据中间件未启动或脱离的集群!"); |
| | | // }else{ |
| | | // log.info("通知数据中间件(" + member.toString() + "),RTU(地址为" + rtuAddr + ")上行数据!"); |
| | | // new JgIoHandler().sendP2P(member, st); |
| | | // } |
| | | public static void upData(String rtuAddr, String code, String codeName, Integer bufferLen){ |
| | | RtuStatus vo = map.get(rtuAddr) ; |
| | | if(vo == null) { |
| | | vo = new RtuStatus(); |
| | | vo.upData(code, codeName, bufferLen); |
| | | map.put(rtuAddr, vo); |
| | | }else { |
| | | vo.upData(code, codeName, bufferLen); |
| | | } |
| | | } |
| | | |
| | | public static void upReport(String rtuAddr, Integer bufferLen){ |
| | | // StUpData st = new StUpData() ; |
| | | // st.rtuAddr = rtuAddr ; |
| | | // st.upBufferLen = bufferLen ; |
| | | // st.isReport = true ; |
| | | |
| | | // Address member = JgUnit.getInstance().getJgMembers().getDataMwMemberByRtuAddr(rtuAddr) ; |
| | | // if(member == null){ |
| | | // log.error("出错,未能得到处理RTU(地址为" + rtuAddr + ")状态数据的数据中间件,可能数据中间件未启动或脱离的集群!"); |
| | | // }else{ |
| | | // log.info("通知数据中间件(" + member.toString() + "),RTU(地址为" + rtuAddr + ")上报数据!"); |
| | | // new JgIoHandler().sendP2P(member, st); |
| | | // } |
| | | public static void upAutoReport(String rtuAddr, String code, String codeName, Integer bufferLen){ |
| | | RtuStatus vo = map.get(rtuAddr) ; |
| | | if(vo == null) { |
| | | vo = new RtuStatus(); |
| | | vo.upData(code, codeName, bufferLen); |
| | | map.put(rtuAddr, vo); |
| | | }else { |
| | | vo.upData(code, codeName, bufferLen); |
| | | } |
| | | } |
| | | |
| | | public static void downData(String rtuAddr, Integer bufferLen){ |
| | | // StDownData st = new StDownData() ; |
| | | // st.rtuAddr = rtuAddr ; |
| | | // st.downBufferLen = bufferLen ; |
| | | |
| | | // Address member = JgUnit.getInstance().getJgMembers().getDataMwMemberByRtuAddr(rtuAddr) ; |
| | | // if(member == null){ |
| | | // log.error("出错,未能得到处理RTU(地址为" + rtuAddr + ")状态数据的数据中间件,可能数据中间件未启动或脱离的集群!"); |
| | | // }else{ |
| | | // log.info("通知数据中间件(" + member.toString() + "),RTU(地址为" + rtuAddr + ")下行数据!"); |
| | | // new JgIoHandler().sendP2P(member, st); |
| | | // } |
| | | public static void downData(String rtuAddr, String code, String codeName, Integer bufferLen){ |
| | | RtuStatus vo = map.get(rtuAddr) ; |
| | | if(vo == null) { |
| | | vo = new RtuStatus(); |
| | | vo.downData(code, codeName, bufferLen); |
| | | map.put(rtuAddr, vo); |
| | | }else { |
| | | vo.downData(code, codeName, bufferLen); |
| | | } |
| | | } |
| | | |
| | | public static void commandSuccess(String rtuAddr){ |
| | | // StCommandResult st = new StCommandResult() ; |
| | | // st.rtuAddr = rtuAddr ; |
| | | // st.isSuccess = true ; |
| | | |
| | | // Address member = JgUnit.getInstance().getJgMembers().getDataMwMemberByRtuAddr(rtuAddr) ; |
| | | // if(member == null){ |
| | | // log.error("出错,未能得到处理RTU(地址为" + rtuAddr + ")状态数据的数据中间件,可能数据中间件未启动或脱离的集群!"); |
| | | // }else{ |
| | | // log.info("通知数据中间件(" + member.toString() + "),RTU(地址为" + rtuAddr + ")命令成功!"); |
| | | // new JgIoHandler().sendP2P(member, st); |
| | | // } |
| | | public static void commandSuccess(String rtuAddr, String code, String codeName){ |
| | | RtuStatus vo = map.get(rtuAddr) ; |
| | | if(vo == null) { |
| | | vo = new RtuStatus(); |
| | | vo.commandSuccess(code, codeName); |
| | | map.put(rtuAddr, vo); |
| | | }else { |
| | | vo.commandSuccess(code, codeName); |
| | | } |
| | | } |
| | | |
| | | public static void commandFailure(String rtuAddr){ |
| | | // StCommandResult st = new StCommandResult() ; |
| | | // st.rtuAddr = rtuAddr ; |
| | | // st.isSuccess = false ; |
| | | |
| | | // Address member = JgUnit.getInstance().getJgMembers().getDataMwMemberByRtuAddr(rtuAddr) ; |
| | | // if(member == null){ |
| | | // log.error("出错,未能得到处理RTU(地址为" + rtuAddr + ")状态数据的数据中间件,可能数据中间件未启动或脱离的集群!"); |
| | | // }else{ |
| | | // log.info("通知数据中间件(" + member.toString() + "),RTU(地址为" + rtuAddr + ")命令失败!"); |
| | | // new JgIoHandler().sendP2P(member, st); |
| | | // } |
| | | public static void commandFailure(String rtuAddr, String code, String codeName){ |
| | | RtuStatus vo = map.get(rtuAddr) ; |
| | | if(vo == null) { |
| | | vo = new RtuStatus(); |
| | | vo.commandFailure(code, codeName); |
| | | map.put(rtuAddr, vo); |
| | | }else { |
| | | vo.commandFailure(code, codeName); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 命令结果收到了,但未在缓存匹配上下行的命令,说明下行缓存命令因超时被清除,这说明有个命令由失败变成功了 |
| | | * @param rtuAddr |
| | | */ |
| | | public static void commandFail2Success(String rtuAddr){ |
| | | // StCommandResult st = new StCommandResult() ; |
| | | // st.rtuAddr = rtuAddr ; |
| | | // st.fail2Success = true ; |
| | | //暂时无逻辑 |
| | | } |
| | | |
| | | // Address member = JgUnit.getInstance().getJgMembers().getDataMwMemberByRtuAddr(rtuAddr) ; |
| | | // if(member == null){ |
| | | // log.error("出错,未能得到处理RTU(地址为" + rtuAddr + ")状态数据的数据中间件,可能数据中间件未启动或脱离的集群!"); |
| | | // }else{ |
| | | // log.info("通知数据中间件(" + member.toString() + "),RTU(地址为" + rtuAddr + ")命令由失败转成功!"); |
| | | // new JgIoHandler().sendP2P(member, st); |
| | | // } |
| | | /** |
| | | * 收到了成功开阀报(开阀自报,开阀工作报,远程开阀(执行)应答等,都认为阀门是开启状态(这时上报的数据中阀门状态可能是关闭(因为打开阀门需要时间))) |
| | | * @param rtuAddr |
| | | */ |
| | | public static void valveOpen(String rtuAddr){ |
| | | RtuStatus vo = map.get(rtuAddr) ; |
| | | if(vo == null) { |
| | | vo = new RtuStatus(); |
| | | vo.valveOpen(); |
| | | map.put(rtuAddr, vo); |
| | | }else { |
| | | vo.valveOpen(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 收到了成功关阀报(关阀自报,远程关阀(执行)应答等,都认为阀门是关闭状态(这时上报的数据中阀门状态可能是开启(因为关闭阀门需要时间))) |
| | | * @param rtuAddr |
| | | */ |
| | | public static void valveClose(String rtuAddr){ |
| | | RtuStatus vo = map.get(rtuAddr) ; |
| | | if(vo == null) { |
| | | vo = new RtuStatus(); |
| | | vo.valveClose(); |
| | | map.put(rtuAddr, vo); |
| | | }else { |
| | | vo.valveClose(); |
| | | } |
| | | } |
| | | |
| | | } |