package com.ld.igds.protocol.fzzy.analysis; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.ld.igds.common.CoreSerService; import com.ld.igds.constant.BizType; import com.ld.igds.io.notify.NotifyWebInvoker; import com.ld.igds.io.constant.OrderRespEnum; import com.ld.igds.models.DeviceSer; import com.ld.igds.protocol.fzzy.ServerUtils; import com.ld.igds.protocol.fzzy.dto.ReMessage; /** * 协议解析总入口 */ @Slf4j @Component(AnalysisService.BEAN_ID) public class AnalysisService { public static final String BEAN_ID = "fzzy.analysisService"; @Autowired private CoreSerService coreSerService; @Autowired private AnalysisGrain analysisGrain; @Autowired private AnalysisDevice analysisDevice; @Autowired private AnalysisGas analysisGas; @Autowired private AnalysisEs analysisEs; @Autowired private AnalysisSystem analysisSystem; @Autowired private AnalysisPest analysisPest; @Autowired private AnalysisN2 analysisN2; @Autowired private AnalysisTemp analysisTemp; @Autowired private AnalysisIot analysisIot; @Autowired private NotifyWebInvoker notifyWebInvoker; /** * 协议解析入口 * * @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.warn("控制柜------>>>平台:当前组织编码={},分机ID={},报文信息-={},响应吗返回不正确,无法进行解析," + checkMsg, message.getCompanyId(), message.getIedId(), message.getStrMsg()); notifyWebInvoker.notifyWeb(message.getCompanyId(), OrderRespEnum.MSG_ERROR, BizType.SYS, checkMsg); return; } DeviceSer ser = coreSerService.getCacheSer(message.getCompanyId(), message.getIedId()); if (null == ser) { log.warn("控制柜------>>>平台:当前组织编码={},分机ID={},系统没有获取到分机信息,报文无法进行解析", message.getCompanyId(), message.getIedId()); return; } //根据接口编号进行解析路由 switch (message.getFunctionId()) { case ServerUtils.FUNCTION_1003: analysisSystem.analysis1003(message, ser); break; case ServerUtils.FUNCTION_1004: analysisSystem.analysis1004(message, ser); break; case ServerUtils.FUNCTION_1005: analysisSystem.analysis1005(message, ser); break; case ServerUtils.FUNCTION_1006: analysisSystem.analysis1006(message, ser); break; case ServerUtils.FUNCTION_1007: analysisSystem.analysis1007(message, ser); break; case ServerUtils.FUNCTION_1008: analysisSystem.analysis1008(message, ser); break; case ServerUtils.FUNCTION_1009: analysisSystem.analysis1009(message, ser); break; case ServerUtils.FUNCTION_1010: analysisSystem.analysis1010(message, ser); break; case ServerUtils.FUNCTION_2101: analysisGrain.analysis2101(message, ser); break; case ServerUtils.FUNCTION_2102: analysisGrain.analysis2102(message, ser); 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; } }