package com.fzzy.protocol.xsyg.service; import com.fzzy.api.data.GatewayDeviceProtocol; import com.fzzy.gateway.api.GatewaySyncGranService; import com.fzzy.gateway.data.BaseReqData; import com.fzzy.gateway.data.BaseResp; import com.fzzy.gateway.entity.GatewayDevice; import com.fzzy.protocol.ProtocolUtils; import com.fzzy.protocol.xsyg.client.ClientEngine; import com.ld.io.api.InvokeResult; import io.netty.channel.Channel; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.Map; /** * 粮情采集入口 */ @Slf4j @Component public class XsygGatewayGrainService implements GatewaySyncGranService { @Override public String getGrainProtocol() { return GatewayDeviceProtocol.GRAIN_XSYK_2023.getCode(); } /** * 仓库命令 */ public static Map depotGrainCmdMap = new HashMap<>(); static { depotGrainCmdMap.put("KEY_1", "FC6401010009011A10BDDB"); depotGrainCmdMap.put("KEY_2", "FC6402020009011A10BDDB"); depotGrainCmdMap.put("KEY_3", "FC6403030009011A10BDDB"); depotGrainCmdMap.put("KEY_4", "FC6404040009011A10BDDB"); depotGrainCmdMap.put("KEY_5", "FC6405050009011A10BDDB"); depotGrainCmdMap.put("KEY_6", "FC6406060009011A10BDDB"); depotGrainCmdMap.put("KEY_7", "FC6407070009011A10BDDB"); depotGrainCmdMap.put("KEY_8", "FC6408080009011A10BDDB"); depotGrainCmdMap.put("KEY_9", "FC6409090009011A10BDDB"); depotGrainCmdMap.put("KEY_10", "FC640A0A0009011A10BDDB"); depotGrainCmdMap.put("KEY_11", "FC640B0B0009011A10BDDB"); depotGrainCmdMap.put("KEY_12", "FC640C0C0009011A10BDDB"); depotGrainCmdMap.put("KEY_13", "FC640D0D0009011A10BDDB"); depotGrainCmdMap.put("KEY_14", "FC640E0E0009011A10BDDB"); depotGrainCmdMap.put("KEY_15", "FC640F0F0009011A10BDDB"); depotGrainCmdMap.put("KEY_16", "FC6410100009011A10BDDB"); depotGrainCmdMap.put("KEY_17", "FC6411110009011A10BDDB"); depotGrainCmdMap.put("KEY_18", "FC6412120009011A10BDDB"); depotGrainCmdMap.put("KEY_19", "FC6413130009011A10BDDB"); depotGrainCmdMap.put("KEY_20", "FC6414140009011A10BDDB"); depotGrainCmdMap.put("KEY_21", "FC6415150009011A10BDDB"); depotGrainCmdMap.put("KEY_22", "FC6416160009011A10BDDB"); depotGrainCmdMap.put("KEY_23", "FC6417170009011A10BDDB"); depotGrainCmdMap.put("KEY_24", "FC6418180009011A10BDDB"); depotGrainCmdMap.put("KEY_25", "FC6419190009011A10BDDB"); depotGrainCmdMap.put("KEY_26", "FC641A1A0009011A10BDDB"); } /** * FC 64 01 01 00 09 01 1A 10 BD DB * FC 64 02 02 00 09 01 1A 10 BD DB * FC 64 03 03 00 09 01 1A 10 BD DB * FC 64 04 04 00 09 01 1A 10 BD DB * FC 64 05 05 00 09 01 1A 10 BD DB * FC 64 06 06 00 09 01 1A 10 BD DB * FC 64 07 07 00 09 01 1A 10 BD DB * FC 64 08 08 00 09 01 1A 10 BD DB * FC 64 09 09 00 09 01 1A 10 BD DB * FC 64 0A 0A 00 09 01 1A 10 BD DB * FC 64 0B 0B 00 09 01 1A 10 BD DB * FC 64 0C 0C 00 09 01 1A 10 BD DB * FC 64 0D 0D 00 09 01 1A 10 BD DB * FC 64 0E 0E 00 09 01 1A 10 BD DB * FC 64 0F 0F 00 09 01 1A 10 BD DB * FC 64 10 10 00 09 01 1A 10 BD DB * FC 64 11 11 00 09 01 1A 10 BD DB * FC 64 12 12 00 09 01 1A 10 BD DB * FC 64 13 13 00 09 01 1A 10 BD DB * FC 64 14 14 00 09 01 1A 10 BD DB * FC 64 15 15 00 09 01 1A 10 BD DB * FC 64 16 16 00 09 01 1A 10 BD DB * FC 64 17 17 00 09 01 1A 10 BD DB * FC 64 18 18 00 09 01 1A 10 BD DB * FC 64 19 19 00 09 01 1A 10 BD DB * FC 64 1A 1A 00 09 01 1A 10 BD DB * * @param reqData * @return */ @Override public synchronized BaseResp syncGrain(BaseReqData reqData) { BaseResp resp = new BaseResp(); GatewayDevice device = reqData.getDevice(); if (null == device) { resp.setCode(500); resp.setMsg("系统未获取到下行连接设备信息,无法执行"); log.error("----------------系统未获取到下行连接设备信息,无法执行---------"); return resp; } try { //Step 请求信息放入内存 ProtocolUtils.addSyncReq2Map(device.getDepotIdSys(), reqData); String hexStr = buildGrainCmd(device); Channel channel = ClientEngine.getChannel(); if (null == channel) { ClientEngine clientEngine = new ClientEngine(device.getIp(), device.getPort()); clientEngine.start(); Thread.sleep(1000); channel = clientEngine.getChannel(); } InvokeResult message = ClientEngine.send2(hexStr, channel); log.error("平台------>>>>主控:发送粮情检测命令-{}---{}", message, hexStr); // 封装返回信息 if (!InvokeResult.SUCCESS.getCode().equals(message.getCode())) { log.error("平台------>>>>控制柜:发送粮情检测命令-失败{}", message.getMessage()); resp.setCode(500); resp.setMsg("平台------>>>>控制柜:发送粮情检测命令-失败:" + message.getMessage()); } } catch ( Exception e) { log.error("粮情检测异常:{}", e); resp.setCode(500); resp.setMsg("平台------>>>>控制柜:发送粮情检测命令:" + e.getMessage()); return resp; } return resp; } @Override public BaseResp syncGrainTh(BaseReqData reqData) { BaseResp resp = new BaseResp(); return resp; } /** * 生成粮情采集命令 * * @param device * @return */ private String buildGrainCmd(GatewayDevice device) { String key = "KEY_" + device.getDepotIdSys(); return depotGrainCmdMap.get(key); } @Override public BaseResp syncConf(BaseReqData reqData) { return new BaseResp(); } @Override public BaseResp writeConf(BaseReqData reqData) { return new BaseResp(); } @Override public BaseResp initCable(BaseReqData reqData) { return new BaseResp(); } @Override public BaseResp disconnect(BaseReqData reqData) { return new BaseResp(); } @Override public BaseResp transparent(BaseReqData reqData) { return new BaseResp(); } }