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
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
194
195
196
197
198
199
200
201
202
package com.ld.igds.io.sample.lt;
 
import com.ld.igds.io.constant.ProtocolEnum;
import com.ld.igds.io.sample.ApiSampleService;
import com.ld.igds.io.sample.data.SampleDto;
import com.ld.igds.util.BytesUtil;
import com.ld.io.api.InvokeResult;
import io.netty.buffer.Unpooled;
import io.netty.channel.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
 
/**
 * 扦样机执行接口
 * 
 * @author: andy.jia
 * @description:
 * @version:
 * @data:2020年4月11日
 *
 */
@Slf4j
@Component(RemoteCheckServiceImpl.BEAN_ID)
public class RemoteCheckServiceImpl implements ApiSampleService {
 
    public static final String BEAN_ID = "client.ltRemoteCheckServiceImpl";
 
    @Override
    public String getProtocol() {
        return ProtocolEnum.TCP_LT_SAMPLE_V3.getCode();
    }
 
    /**
     * 开始执行的逻辑: 1,自动开始工作(散粮):00 00 00 00 00 06 01 06 00 07 00 19
     * 2,扦样散粮车选择扦杆向下时吸粮:00 00 00 00 00 06 01 06 00 08 00 99 或者 扦样散粮车选择扦杆向上时吸粮:00
     * 00 00 00 00 06 01 06 00 08 00 66
     * 
     * @throws Exception
     */
    @Override
    public String doExe(SampleDto param) {
 
        log.debug("开始扦样操作=={}", param.getIp());
        try {
            // 先发送状态查询,然后执行开始
            String strMsg = OrderBulider.getInstance().buildStatus();
            InvokeResult result = push(param.getIp(), param.getPort(), strMsg);
            if (InvokeResult.SUCCESS != result) {
                return "命令执行异常:" + result.getMessage();
            }
            if(LtCheckClientEngine.CHECK_MAC.get(param.getIp()) == null ){
                LtCheckClientEngine.CHECK_MAC.put(param.getIp(),new LtCHeckMac());
            }
            // 判断状态
            if ("0001".equals(LtCheckClientEngine.CHECK_MAC.get(param.getIp()).getHandStatus())) {
                return "设备手动操作中";
            }
            if ("0012".equals(LtCheckClientEngine.CHECK_MAC.get(param.getIp()).getRunStatus())) {
                return "当前设备正在执行中!";
            }
            if ("0011".equals(LtCheckClientEngine.CHECK_MAC.get(param.getIp()).getWarnStatus())) {
                return "警告:伺服报警";
            }
 
            Thread.sleep(5000L);
 
            // Step2 开始执行
            strMsg = OrderBulider.getInstance().buildStart1Msg();
            if (param.getType().equals(SampleDto.TYPE_SMALL)) {
                strMsg = OrderBulider.getInstance().buildStart2Msg();
            }
 
            result = push(param.getIp(), param.getPort(), strMsg);
 
            if (InvokeResult.SUCCESS != result) {
                return "命令执行异常:" + result.getMessage();
            }
 
            // Step3 配置吸取粮食方式
            strMsg = OrderBulider.getInstance().buildTypeDown();
 
            result = push(param.getIp(), param.getPort(), strMsg);
            if (InvokeResult.SUCCESS != result) {
                return "命令执行异常:" + result.getMessage();
            }
 
        } catch (Exception e) {
            log.error("执行异常:{}", e);
            return "命令执行异常:" + e.getMessage();
        }
 
        return null;
    }
 
    @Override
    public String doStop(SampleDto param) {
        log.debug("停止扦样操作=={}", param.getIp());
        try {
            // 先发送状态查询,然后执行开始
            String strMsg = OrderBulider.getInstance().buildStatus();
            InvokeResult result = push(param.getIp(), param.getPort(), strMsg);
            if (InvokeResult.SUCCESS != result) {
                return "命令执行异常:" + result.getMessage();
            }
 
 
            if(LtCheckClientEngine.CHECK_MAC.get(param.getIp()) == null ){
                LtCheckClientEngine.CHECK_MAC.put(param.getIp(),new LtCHeckMac());
            }
            // 判断状态
            if ("0001".equals(LtCheckClientEngine.CHECK_MAC.get(param.getIp()).getHandStatus())) {
                return "设备手动操作中";
            }
            if ("0001".equals(LtCheckClientEngine.CHECK_MAC.get(param.getIp()).getStopStatus())) {
                return "急停按钮已经按下";
            }
            if ("0011".equals(LtCheckClientEngine.CHECK_MAC.get(param.getIp()).getWarnStatus())) {
                return "警告:伺服报警";
            }
 
            // 创建命令
            strMsg = OrderBulider.getInstance().buildStopMsg();
            result = push(param.getIp(), param.getPort(), strMsg);
            if (InvokeResult.SUCCESS != result) {
                return "命令执行异常:" + result.getMessage();
            }
 
        } catch (Exception e) {
            log.error("执行异常:{}", e);
            return "命令执行异常:" + e.getMessage();
        }
 
        return null;
    }
 
    @Override
    public String doResetStop(SampleDto param) {
        log.debug("扦样机解除急停=={}", param.getIp());
 
        // 创建命令
        String strMsg = OrderBulider.getInstance().buildRestStopMsg();
 
        InvokeResult result = push(param.getIp(), param.getPort(), strMsg);
        if (InvokeResult.SUCCESS != result) {
            return "命令执行异常:" + result.getMessage();
        }
 
        // 复位执行完成后不管什么状态-直接初始化
 
        LtCHeckMac ltCHeckMac= new LtCHeckMac();
        ltCHeckMac.setSerStart(true);
        LtCheckClientEngine.CHECK_MAC.put(param.getIp(),ltCHeckMac);
        return null;
    }
    @Override
    public String doReset(SampleDto param) {
        log.debug("扦样机复位指令=={}", param.getIp());
 
        // 创建命令
        String strMsg = OrderBulider.getInstance().buildRestMsg();
 
        InvokeResult result = push(param.getIp(), param.getPort(), strMsg);
        if (InvokeResult.SUCCESS != result) {
            return "命令执行异常:" + result.getMessage();
        }
 
        // 复位执行完成后不管什么状态-直接初始化
 
        LtCHeckMac ltCHeckMac= new LtCHeckMac();
        ltCHeckMac.setSerStart(true);
        LtCheckClientEngine.CHECK_MAC.put(param.getIp(),ltCHeckMac);
        return null;
    }
 
    private InvokeResult push(String ip, int port, String msg) {
        try {
            LtCheckClientEngine clientEngine = new LtCheckClientEngine(
                    ip.trim(), port);
            
            clientEngine.startRun();
 
            Thread.sleep(2000L);
 
            Channel channel = clientEngine.getChannel();
 
            if (null == channel) {
                return InvokeResult.SOCKET_NOT_CREATE;
            }
            if (!channel.isActive()) {
                return InvokeResult.CHANNEL_CLOSED;
            }
            channel.writeAndFlush(
                    Unpooled.copiedBuffer(BytesUtil.hexStrToBytes(msg))).sync();
            
            return InvokeResult.SUCCESS;
 
        } catch (Exception e) {
            log.error("执行异常:{}", e);
            return InvokeResult.SOCKET_STATE_ERROR;
        }
    }
}