jiazx0107@163.com
2023-05-17 620eab6cca2bc9ef9ea6d3067a0a5ba1deadbd1c
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
package com.ld.igds.protocol.iot.n2.fzzy.analysis;
 
import com.alibaba.fastjson.JSON;
import com.ld.igds.constant.Constant;
import com.ld.igds.io.constant.ProtocolEnum;
import com.ld.igds.models.N2MacConf;
import com.ld.igds.n2.service.HMacConfService;
import com.ld.igds.protocol.iot.n2.fzzy.analysis.builder.ReMessageBuilder;
import com.ld.igds.protocol.iot.n2.fzzy.analysis.message.Content;
import com.ld.igds.protocol.iot.n2.fzzy.analysis.message.IoMessage;
import com.ld.igds.protocol.iot.n2.fzzy.server.N2FzzyServerEngine;
import com.ld.io.api.InvokeResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
 
/**
 * 协议解析入口
 *
 * @author vince
 */
@Slf4j
@Component(AnalysisService.BEAN_ID)
public class AnalysisService {
 
    public static final String BEAN_ID = "n2Fzzy.analysisService";
    @Autowired
    private N2FzzyServerEngine serverEngine;
    @Autowired
    private HMacConfService macConfService;
 
    /**
     * @param sessionKey ip:port
     */
    public void analysis(String sessionKey, IoMessage message) throws Exception {
        String[] attr = sessionKey.split(":");
        String ip = attr[0];
        Integer port = Integer.valueOf(attr[1]);
 
        N2MacConf n2MacConf = macConfService.getDataBySn(message.getDeviceId());
 
        if (n2MacConf == null) {
            log.error("分机----->>>平台:返回信息没有获取到制氮机设备,无法继续解析----{}", sessionKey);
            return;
        }
 
        if ("0".equals(message.getFunctionId())) {
            log.info("制氮机心跳" + message.toString());
            byte[] msg = (ReMessageBuilder.PREFIX + JSON.toJSONString(message) + ReMessageBuilder.SUFFIX).getBytes("UTF-8");
            InvokeResult result = serverEngine.push(ip,
                    port, msg);
            log.info(result.toString());
        }
 
        if ("1".equals(message.getFunctionId())) {
            log.info("制氮机状态 " + message.toString());
            Content content = JSON.parseObject(message.getContent(), Content.class);
            if (content != null) {
                n2MacConf.setFlow(Double.valueOf(content.getFlow()));
                n2MacConf.setPurity(Double.valueOf(content.getPurity()));
                n2MacConf.setPressure(Double.valueOf(content.getPressure()));
                n2MacConf.setRunStatus("1".equals(content.getIsRun()) ? Constant.YN_Y : Constant.YN_N);
                n2MacConf.setSn(message.getDeviceId());
                n2MacConf.setIp(ip);
                n2MacConf.setPort(port);
                n2MacConf.setProtocol(ProtocolEnum.TCP_FZZY_N2_V3.getCode());
 
                macConfService.saveData(n2MacConf);
            }
        }
        if ("2".equals(message.getFunctionId())) {
            log.info("制氮机开 暂不解析" + message.toString());
        }
        if ("3".equals(message.getFunctionId())) {
            log.info("制氮机关 -暂不解析" + message.toString());
        }
        //电表
        if ("4".equals(message.getFunctionId())) {
            log.info("制氮机用电 ,暂不解析" + message.toString());
        }
 
        //更新配置里面的端口号
        if(!n2MacConf.getPort().equals(port)){
            n2MacConf.setIp(ip);
            n2MacConf.setPort(port);
            macConfService.saveData(n2MacConf);
        }
    }
}