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