liurunyu
2024-12-05 267e622c876bea09b61af34fc93cd08b022aa423
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
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();
        }
    }
 
}