package com.ld.igds.protocol.zldz.command; import com.ld.igds.io.RemoteGrainService; import com.ld.igds.io.constant.OrderRespEnum; import com.ld.igds.io.request.BaseRequest; import com.ld.igds.io.request.CheckGrainRequest; import com.ld.igds.io.response.BaseResponse; import com.ld.igds.io.response.GrainResponse; import com.ld.igds.protocol.zldz.command.builder.CommandBuilder1115; import com.ld.igds.protocol.zldz.command.builder.CommandBuilder8815; import com.ld.igds.protocol.zldz.command.builder.CommandBuilder8817; import com.ld.igds.protocol.zldz.command.message.Message; import com.ld.igds.protocol.zldz.task.CommandReSendService; import com.ld.igds.protocol.zldz.task.CommandTask; import com.ld.igds.protocol.zldz.util.ServerUtils; import com.ld.io.api.InvokeResult; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * 粮情协议,直接获取粮情,温湿度信息通过心跳定时获取。 * * @author jiazx */ @Slf4j @Component(RemoteGrainServiceImpl.BEAN_ID) public class RemoteGrainServiceImpl extends BaseRemoteImpl implements RemoteGrainService { public static final String BEAN_ID = "zldz.remoteGrainService"; @Autowired private CommandReSendService commandReSendService; /** * 粮情检测,首先需要执行温湿度检测,温湿度检测完成后,再进粮情检测。 * 温湿度的信息根据分机和温湿度地址存在缓存30分钟,30分钟内不重复采集,系统判断与当前时间差距离当前时间是否超过25分钟 * ,超过重新获取,没有超过直接采集粮情 * * @param request * @return */ @Override public GrainResponse checkGrain(CheckGrainRequest request) { // Step1 生成粮情信息 Message message = CommandBuilder1115.getInstance().buildMessage(request); log.info("平台------>>>分机:" +request.getSerName() + "-粮情采集命令=" + message.toString()); InvokeResult result = send(request.getIp(), request.getPort(), message.getByteMsg()); // 封装返回信息 if (InvokeResult.SUCCESS == result) { CommandTask commandData = new CommandTask(); commandData.setCompanyId(request.getCompanyId()); commandData.setIp(request.getIp()); commandData.setPort(request.getPort()); commandData.setByteCommand(message.getByteMsg()); commandData.setCommand(message.getStrMsg()); commandData.setResultType(ServerUtils.MSG_TYPE_8817); commandData.setCableRule(request.getCableRule()); commandData.setSerName(request.getSerName()); commandData.setDepotId(request.getDepotId()); commandReSendService.reSendGrainTask(commandData); return new GrainResponse(OrderRespEnum.ORDER_SUCCESS.getCode(), "粮情采集命令发送成功"); } else { log.info("分机" + request.getSerName() + "粮情采集命令发送失败:" + result.getMessage()); return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(), result.getMessage()); } } /** * 服务器回复终端的收到请求 * * @param request */ public BaseResponse reply8815(BaseRequest request) { // Step1 生成粮情信息 Message message = CommandBuilder8815.getInstance().buildMessage( request); log.debug("平台------>>>分机:" +request.getSerName() + "-粮情服务端回复命令=" + message.toString()); // 发送命令 InvokeResult result = send(request.getIp(), request.getPort(), message.getByteMsg()); // 封装返回信息 if (InvokeResult.SUCCESS == result) { return new BaseResponse(OrderRespEnum.ORDER_SUCCESS.getCode(), "分机" + request.getSerName() + "粮情服务端回复命令发送成功"); } else { log.error("分机" + request.getSerName() + "粮情服务端回复命令发送失败:" + result.getMessage()); return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "分机" + request.getSerName() + "粮情服务端回复命令发送失败:" + result.getMessage()); } } /** * 回复命令 * * @param request * @param hexCurPacket 当前包的hex */ public BaseResponse reply8817(BaseRequest request, String hexCurPacket) { // Step1 生成粮情信息,把信息放在request request.setBizType(hexCurPacket); Message message = CommandBuilder8817.getInstance().buildMessage(request); log.debug("平台------>>>分机:" +request.getSerName() + "-粮情服务端回复收到粮情包命令=" + message.toString()); // 发送命令 InvokeResult result = send(request.getIp(), request.getPort(), message.getByteMsg()); // 封装返回信息 if (InvokeResult.SUCCESS == result) { return new BaseResponse(OrderRespEnum.ORDER_SUCCESS.getCode(), "分机" + request.getSerName() + "粮情服务端回复收到粮情包命令发送成功"); } else { log.info("分机" + request.getSerName() + "粮情服务端回复收到粮情包命令发送失败:" + result.getMessage()); return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), "分机" + request.getSerName() + "粮情服务端回复收到粮情包命令发送失败:" + result.getMessage()); } } }