| package com.dy.rtuMw.server.forTcp; | 
|   | 
| import com.dy.common.mw.protocol.rtuState.RtuStatus; | 
| import org.apache.logging.log4j.LogManager; | 
| import org.apache.logging.log4j.Logger; | 
|   | 
| 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>() ; | 
|   | 
|     /** | 
|      * 得到全部状态 | 
|      * @return | 
|      */ | 
|     public static Map<String, RtuStatus> allStatus(){ | 
|         return map ; | 
|     } | 
|     /** | 
|      * 得到部分状态 | 
|      * @return | 
|      */ | 
|     public static Map<String, RtuStatus> someStatus(String[] rtuAddrArrGrp){ | 
|         synchronized (map){ | 
|             Map<String, RtuStatus> rsMap = new HashMap<>(); | 
|             for(String rtuAddr : rtuAddrArrGrp){ | 
|                 RtuStatus status = map.get(rtuAddr) ; | 
|                 if(status != null){ | 
|                     rsMap.put(rtuAddr, status) ; | 
|                 } | 
|             } | 
|             return rsMap ; | 
|         } | 
|     } | 
|     /** | 
|      * 得到一个RTU的状态 | 
|      * @return | 
|      */ | 
|     public static RtuStatus oneStatus(String rtuAddr){ | 
|         return map.get(rtuAddr) ; | 
|     } | 
|   | 
|   | 
|     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){ | 
|         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, 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 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, 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, 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, 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){ | 
|         //暂时无逻辑 | 
|     } | 
|   | 
|     /** | 
|      * 收到了成功开阀报(开阀自报,开阀工作报,远程开阀(执行)应答等,都认为阀门是开启状态(这时上报的数据中阀门状态可能是关闭(因为打开阀门需要时间))) | 
|      * @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(); | 
|         } | 
|     } | 
|   | 
| } |