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.*; 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; } @Override public BaseResp syncGrainTh(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 { //生成温度命令 Message message = CommandBuilder1128.getInstance().getInstance().buildMessage(reqData, apiCommonDevice); log.error("平台------>>>>控制柜:发送温湿度检测命令-{}", message); // 发送命令 InvokeResult result = ZldzServerEngine.push(apiCommonDevice.getIp(), apiCommonDevice.getPort(), message.getByteMsg()); // 封装返回信息 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; } @Override public BaseResp syncConf(BaseReqData reqData) { BaseResp resp = new BaseResp(); GatewayDevice device = reqData.getDevice(); BaseRequest request = new BaseRequest(); request.setIp(device.getIp()); request.setPort(device.getPort()); request.setSerName(device.getDeviceName()); request.setCompanyId(ZldzServerUtil.DEFAULT_COMPANY); // Step1 生成命令 Message message = CommandBuilder1116_0.getInstance().buildMessage(request); // 发送命令 InvokeResult result = ZldzServerEngine.push(device.getIp(), device.getPort(), message.getByteMsg()); log.info("平台------>>>分机:" + request.getSerName() + "-读取配置命令=" + message); //如果命令发送失败,直接踢掉连接 if (!InvokeResult.SUCCESS.getCode().equals(result.getCode())) { resp.setCode(500); resp.setMsg(result.getMessage()); } return resp; } @Override public BaseResp writeConf(BaseReqData reqData) { BaseResp resp = new BaseResp(); GatewayDevice device = reqData.getDevice(); BaseRequest request = new BaseRequest(); request.setIp(device.getIp()); request.setPort(device.getPort()); request.setCompanyId(device.getOrgId()); request.setSerName(device.getDeviceName()); // Step1 生成命令 Message message = CommandBuilder1116_1.getInstance().buildMessage(request, device); // 发送命令 InvokeResult result = ZldzServerEngine.push(device.getIp(), device.getPort(), message.getByteMsg()); log.info("平台------>>>分机:" + request.getSerName() + "-写入配置命令=" + message); //如果命令发送失败,直接踢掉连接 if (!InvokeResult.SUCCESS.getCode().equals(result.getCode())) { resp.setCode(500); resp.setMsg(result.getMessage()); } return resp; } @Override public BaseResp initCable(BaseReqData reqData) { BaseResp resp = new BaseResp(); GatewayDevice device = reqData.getDevice(); BaseRequest request = new BaseRequest(); request.setIp(device.getIp()); request.setPort(device.getPort()); request.setCompanyId(device.getOrgId()); request.setSerName(device.getDeviceName()); // Step1 Message message = CommandBuilder1122.getInstance().buildMessage(request); // 发送命令 InvokeResult result = ZldzServerEngine.push(device.getIp(), device.getPort(), message.getByteMsg()); log.info("平台------>>>分机:" + request.getSerName() + "-初始化电缆命令=" + message); //如果命令发送失败,直接踢掉连接 if (!InvokeResult.SUCCESS.getCode().equals(result.getCode())) { resp.setCode(500); resp.setMsg(result.getMessage()); } return resp; } @Override public BaseResp disconnect(BaseReqData reqData) { BaseResp resp = new BaseResp(); GatewayDevice device = reqData.getDevice(); ApiCommonDevice commonDevice = Constant.getCommonDeviceCache(device.getDeviceSn()); if (null == commonDevice) { resp.setCode(500); resp.setMsg("系统未发现连接设备,取消执行"); return resp; } ZldzServerEngine.disconnect(commonDevice.getIp(), commonDevice.getPort()); return resp; } @Override public BaseResp transparent(BaseReqData reqData) { BaseResp resp = new BaseResp(); 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; } }