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