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