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;
|
}
|
}
|
}
|