package com.fzzy.protocol.zldz.service; import com.fzzy.api.Constant; import com.fzzy.api.data.ApiCommonDevice; import com.fzzy.api.data.GatewayDeviceProtocol; import com.fzzy.api.utils.BytesUtil; 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.io.request.BaseRequest; import com.fzzy.protocol.ProtocolUtils; import com.fzzy.protocol.bhzn.cmd.CommandBuild; import com.fzzy.protocol.bhzn.server.BhznGrainV2ServerEngine; import com.fzzy.protocol.zldz.cmd.CommandBuilder1115; import com.fzzy.protocol.zldz.cmd.CommandBuilder8815; import com.fzzy.protocol.zldz.cmd.CommandBuilder8817; import com.fzzy.protocol.zldz.data.Message; import com.fzzy.protocol.zldz.server.ZldzServerEngine; import com.fzzy.protocol.zldz.server.ZldzServerUtil; import com.ld.io.api.InvokeResult; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; /** * 正来电子粮情协议实现 */ @Slf4j @Component public class ZldzGatewayGrainService implements GatewaySyncGranService { @Override public String getGrainProtocol() { return GatewayDeviceProtocol.GRAIN_FZZY_ZLDZ_WEB.getCode(); } @Override public BaseResp syncGrain(BaseReqData reqData) { BaseResp resp = new BaseResp(); GatewayDevice device = reqData.getDevice(); //获取连接中的设备信息 ApiCommonDevice apiCommonDevice = Constant.getCommonDeviceCache(device.getDeviceSn()); if (null == apiCommonDevice) { resp.setCode(500); resp.setMsg("系统未获取到下行连接设备信息,无法执行"); log.error("----------------系统未获取到下行连接设备信息,无法执行---------"); return resp; } if (Constant.YN_N.equals(apiCommonDevice.getStatus())) { resp.setCode(500); resp.setMsg("下行设备不在线---无法执行----" + device.getDeviceName()); log.error("下行设备不在线---无法执行----" + device.getDeviceName()); return resp; } device.setIp(apiCommonDevice.getIp()); device.setPort(apiCommonDevice.getPort()); reqData.setDevice(device); try { //Step 请求信息放入内存 ProtocolUtils.addSyncReq2Map(device.getDepotIdSys(), reqData); // 生成粮情信息 Message message = CommandBuilder1115.getInstance().buildMessage(reqData, apiCommonDevice); // 发送命令 InvokeResult result = ZldzServerEngine.push(apiCommonDevice.getIp(), apiCommonDevice.getPort(), message.getByteMsg()); log.error("平台------>>>>控制柜:发送粮情检测命令-{}", message); // 封装返回信息 if (!InvokeResult.SUCCESS.getCode().equals(result.getCode())) { log.error("平台------>>>>控制柜:发送粮情检测命令-失败{}", result.getMessage()); resp.setCode(500); resp.setMsg("平台------>>>>控制柜:发送粮情检测命令-失败:" + result.getMessage()); } } catch (Exception e) { log.error("粮情检测异常:{}", e); resp.setCode(500); resp.setMsg("平台------>>>>控制柜:发送粮情检测命令:" + e.getMessage()); return resp; } return resp; } /** * 服务器回复终端的收到请求 * * @param request */ public BaseResp reply8815(BaseRequest request) { BaseResp resp = new BaseResp(); // Step1 生成粮情信息 Message message = CommandBuilder8815.getInstance().buildMessage( request); log.debug("平台------>>>分机:" +request.getSerName() + "-粮情服务端回复命令=" + message.toString()); // 发送命令 InvokeResult result = ZldzServerEngine.push(request.getIp(), request.getPort(), message.getByteMsg()); // 封装返回信息 if (!InvokeResult.SUCCESS.getCode().equals(result.getCode())) { log.error("平台------>>>>控制柜:发送粮情检测命令-失败{}", result.getMessage()); resp.setCode(500); resp.setMsg("平台------>>>>控制柜:发送粮情检测命令-失败:" + result.getMessage()); } return resp; } /** * 回复命令 * * @param request * @param hexCurPacket 当前包的hex */ public BaseResp reply8817(BaseRequest request, String hexCurPacket) { BaseResp resp = new BaseResp(); // Step1 生成粮情信息,把信息放在request request.setBizType(hexCurPacket); Message message = CommandBuilder8817.getInstance().buildMessage(request); log.debug("平台------>>>分机:" +request.getSerName() + "-粮情服务端回复收到粮情包命令=" + message.toString()); // 发送命令 InvokeResult result = ZldzServerEngine.push(request.getIp(), request.getPort(), message.getByteMsg()); // 封装返回信息 if (!InvokeResult.SUCCESS.getCode().equals(result.getCode())) { log.error("平台------>>>>控制柜:发送粮情检测命令-失败{}", result.getMessage()); resp.setCode(500); resp.setMsg("平台------>>>>控制柜:发送粮情检测命令-失败:" + result.getMessage()); } return resp; } }