vince
2025-07-09 6495040bbda5308c86e852ad1b080097bfa916a9
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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
package com.fzzy.protocol.fzzy.analysis;
 
import com.fzzy.api.Constant;
import com.fzzy.api.data.ApiCommonDevice;
import com.fzzy.protocol.fzzy.data.ReMessage;
import com.fzzy.protocol.fzzy.server.ServerUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
 
import javax.annotation.Resource;
 
 
/**
 * 协议解析总入口
 */
@Slf4j
@Component(AnalysisService.BEAN_ID)
public class AnalysisService {
 
    public static final String BEAN_ID = "fzzy.analysisService";
 
    @Resource
    private AnalysisSystem analysisSystem;
    @Resource
    private AnalysisGrain analysisGrain;
 
    /**
     * 协议解析入口
     *
     * @param message 返回信息
     */
    public void analysis(ReMessage message) {
        try {
            if (null == message) return;
 
            //登录解析
            if (ServerUtils.FUNCTION_1001.equals(message.getFunctionId())) {
                analysisSystem.analysis1001(message);
                return;
            }
 
            String checkMsg = checkMsg(message);
            if (null != checkMsg) {
                log.error("控制柜------>>>平台:当前组织编码={},分机ID={},报文信息-={},响应吗返回不正确,无法进行解析," + checkMsg, message.getCompanyId(), message.getIedId(), message.getStrMsg());
                return;
            }
 
            //执行的分机信息
            ApiCommonDevice commonDevice = Constant.getCommonDeviceCacheBySn(message.getSn());
            log.info("获取到的设备信息");
            log.info(commonDevice.toString());
            if (null == commonDevice) {
                log.warn("控制柜------>>>平台:当前组织编码={},分机ID={},系统没有获取到分机信息,报文无法进行解析", message.getCompanyId(), message.getIedId());
                return;
            }
 
            //根据接口编号进行解析路由
            switch (message.getFunctionId()) {
                case ServerUtils.FUNCTION_1003:
                    analysisSystem.analysis1003(message, commonDevice);
                    break;
                case ServerUtils.FUNCTION_1004:
                    analysisSystem.analysis1004(message, commonDevice);
                    break;
                case ServerUtils.FUNCTION_1005:
                    analysisSystem.analysis1005(message, commonDevice);
                    break;
                case ServerUtils.FUNCTION_1006:
                    analysisSystem.analysis1006(message, commonDevice);
                    break;
                case ServerUtils.FUNCTION_1007:
                    analysisSystem.analysis1007(message, commonDevice);
                    break;
                case ServerUtils.FUNCTION_1008:
                    analysisSystem.analysis1008(message, commonDevice);
                    break;
                case ServerUtils.FUNCTION_1009:
                    analysisSystem.analysis1009(message, commonDevice);
                    break;
                case ServerUtils.FUNCTION_1010:
                    analysisSystem.analysis1010(message, commonDevice);
                    break;
 
                case ServerUtils.FUNCTION_2101:
                    analysisGrain.analysis2101(message, commonDevice);
                    break;
                case ServerUtils.FUNCTION_2102:
                    analysisGrain.analysis2102(message, commonDevice);
                    break;
 
//                case ServerUtils.FUNCTION_2201:
//                    analysisPest.analysis2201(message, ser);
//                    break;
//                case ServerUtils.FUNCTION_2202:
//                    analysisPest.analysis2202(message, ser);
//                    break;
//                case ServerUtils.FUNCTION_2203:
//                    analysisPest.analysis2203(message, ser);
//                    break;
//                case ServerUtils.FUNCTION_2204:
//                    analysisPest.analysis2204(message, ser);
//                    break;
//
//                case ServerUtils.FUNCTION_2301:
//                    analysisGas.analysis2301(message, ser);
//                    break;
//                case ServerUtils.FUNCTION_2302:
//                    analysisGas.analysis2302(message, ser);
//                    break;
//
//                case ServerUtils.FUNCTION_2303:
//                    analysisGas.analysis2303(message, ser);
//                    break;
//                case ServerUtils.FUNCTION_2304:
//                    analysisGas.analysis2304(message, ser);
//                    break;
//
//                case ServerUtils.FUNCTION_3101:
//                    analysisDevice.analysis3101(message, ser);
//                    break;
//                case ServerUtils.FUNCTION_3102:
//                    analysisDevice.analysis3102(message, ser);
//                    break;
//                case ServerUtils.FUNCTION_3103:
//                    analysisDevice.analysis3103(message, ser);
//                    break;
//
//                case ServerUtils.FUNCTION_3201:
//                    analysisDevice.analysis3201(message, ser);
//                    break;
//
//                case ServerUtils.FUNCTION_3301:
//                    analysisN2.analysis3301(message, ser);
//                    break;
//                case ServerUtils.FUNCTION_3302:
//                    analysisN2.analysis3302(message, ser);
//                    break;
//                case ServerUtils.FUNCTION_3303:
//                    analysisN2.analysis3303(message, ser);
//                    break;
//                case ServerUtils.FUNCTION_3304:
//                    analysisN2.analysis3304(message, ser);
//                    break;
//
//                case ServerUtils.FUNCTION_4001:
//                    analysisEs.analysis4001(message, ser);
//                    break;
//
//                case ServerUtils.FUNCTION_5001:
//                    analysisTemp.analysis5001(message, ser);
//                    break;
//
//                case ServerUtils.FUNCTION_5002:
//                    analysisTemp.analysis5002(message, ser);
//                    break;
//
//                case ServerUtils.FUNCTION_6001:
//                    analysisIot.analysis6001(message, ser);
//                    break;
 
                default:
                    break;
            }
        } catch (Exception e) {
            log.error("控制柜----->>>>平台:解析返回报文出现异常:" + e);
            e.printStackTrace();
        }
    }
 
    public String checkMsg(ReMessage message) {
        if (StringUtils.isEmpty(message.getRespCode())) return null;
 
        if (ServerUtils.RESP_0000.equals(message.getRespCode())) return null;
 
        if (ServerUtils.RESP_1000.equals(message.getRespCode())) return "控制柜编号错误";
        if (ServerUtils.RESP_1001.equals(message.getRespCode())) return "终端设备不在线";
        if (ServerUtils.RESP_1010.equals(message.getRespCode())) return "控制柜授权到期";
        if (ServerUtils.RESP_1011.equals(message.getRespCode())) return "授权码无效";
        if (ServerUtils.RESP_1012.equals(message.getRespCode())) return "授权码已被使用";
        if (ServerUtils.RESP_1013.equals(message.getRespCode())) return "授权码已过期";
        if (ServerUtils.RESP_2000.equals(message.getRespCode())) return "签名验证失败";
        if (ServerUtils.RESP_3000.equals(message.getRespCode())) return "通风模式不支持";
        if (ServerUtils.RESP_4000.equals(message.getRespCode())) return "气调模式不支持";
        if (ServerUtils.RESP_5000.equals(message.getRespCode())) return "控制柜当前为手动模式,拒绝远程操作";
        if (ServerUtils.RESP_6000.equals(message.getRespCode())) return "采集执行失败";
        if (ServerUtils.RESP_6001.equals(message.getRespCode())) return "粮情采集执行中";
        if (ServerUtils.RESP_6002.equals(message.getRespCode())) return "气体采集执行中";
        if (ServerUtils.RESP_6003.equals(message.getRespCode())) return "虫害采集执行中";
        if (ServerUtils.RESP_9999.equals(message.getRespCode())) return "未知错误";
        return null;
    }
}