package com.ld.igds.io.fzzy.command;
|
|
import com.ld.igds.constant.BizType;
|
import com.ld.igds.io.fzzy.ServerUtils;
|
import com.ld.igds.io.fzzy.dto.IoMessage;
|
import com.ld.igds.io.fzzy.server.BhznQuantityServerEngine;
|
import com.ld.igds.io.constant.OrderRespEnum;
|
import com.ld.igds.io.constant.ProtocolEnum;
|
import com.ld.igds.io.notify.NotifyWebInvoker;
|
import com.ld.igds.io.request.QuantityRequest;
|
import com.ld.igds.io.response.BaseResponse;
|
import com.ld.igds.quantity.io.RemoteQuantityService;
|
import com.ld.igds.util.RedisUtil;
|
import com.ld.io.api.InvokeResult;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.Executors;
|
import java.util.concurrent.FutureTask;
|
|
@Slf4j
|
@Component(BhznRemoteQuantityImpl.BEAN_ID)
|
public class BhznRemoteQuantityImpl implements RemoteQuantityService {
|
|
public static final String BEAN_ID = "fzzy.remoteQuantityService";
|
@Autowired
|
private BhznQuantityServerEngine bhznQuantityServerEngine;
|
@Autowired
|
private NotifyWebInvoker notifyWebInvoker;
|
@Autowired
|
private RedisUtil redisUtil;
|
|
@Override
|
public String getProtocol() {
|
return ProtocolEnum.TCP_FZZY_QUANTITY_V35.getCode();
|
}
|
|
@Override
|
public BaseResponse checkStart(QuantityRequest request) {
|
try {
|
|
String key = ServerUtils.buildRequestKey(request.getCompanyId(), request.getSn());
|
|
IoMessage message = CommandBuilder.getInstance().build2001Message(request);
|
InvokeResult result = sendMsg(request.getIp(), request.getPort(), message);
|
|
// 如果有执行异常,直接通知到前端
|
if (InvokeResult.SUCCESS != result) {
|
log.info("平台------>>>>数量检测:开始检测-失败{}", result.getMessage());
|
notifyWebInvoker.notifyWeb(request.getCompanyId(), OrderRespEnum.ORDER_ERROR, BizType.SYS, request.getSerName() + " 开始检测,命令执行失败");
|
return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(),
|
"开始检测执行失败:" + result.getMessage());
|
}
|
|
//最长保存一个小时
|
redisUtil.set(key, request, 60 * 60);
|
|
//启动子任务定时查询进度
|
FutureTask<String> futureTask = new FutureTask<>(new QueryProgressTask(redisUtil, this, key));
|
ExecutorService executorService = Executors.newCachedThreadPool();
|
executorService.submit(futureTask);
|
executorService.shutdown();
|
|
} catch (Exception e) {
|
return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(),
|
"执行失败:" + e.getMessage());
|
}
|
|
return new BaseResponse(OrderRespEnum.ORDER_SUCCESS);
|
}
|
|
|
@Override
|
public BaseResponse remoteConf(QuantityRequest request) {
|
|
//检测之前先下发配置
|
IoMessage message = CommandBuilder.getInstance().build1001Message(request);
|
|
InvokeResult result = sendMsg(request.getIp(), request.getPort(), message);
|
|
if (InvokeResult.SUCCESS != result) {
|
log.info("平台------>>>>数量检测:下发配置失败-失败{}", result.getMessage());
|
notifyWebInvoker.notifyWeb(request.getCompanyId(), OrderRespEnum.ORDER_ERROR, BizType.SYS, request.getSerName() + " 下发检测配置,命令执行失败");
|
return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(),
|
"下发配置执行失败:" + result.getMessage());
|
}
|
|
return new BaseResponse(OrderRespEnum.ORDER_SUCCESS);
|
}
|
|
@Override
|
public BaseResponse checkStop(QuantityRequest request) {
|
//检测之前先下发配置
|
IoMessage message = CommandBuilder.getInstance().build2002Message(request);
|
InvokeResult result = sendMsg(request.getIp(), request.getPort(), message);
|
if (InvokeResult.SUCCESS != result) {
|
log.info("平台------>>>>数量检测:停止检测-失败{}", result.getMessage());
|
notifyWebInvoker.notifyWeb(request.getCompanyId(), OrderRespEnum.ORDER_ERROR, BizType.SYS, request.getSerName() + " 停止检测失败,命令执行失败");
|
return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(),
|
"停止检测执行失败:" + result.getMessage());
|
}
|
String key = ServerUtils.buildRequestKey(request.getCompanyId(),request.getSn());
|
//删除缓存
|
redisUtil.del(key);
|
|
return new BaseResponse(OrderRespEnum.ORDER_SUCCESS);
|
}
|
|
@Override
|
public BaseResponse snapImg(QuantityRequest request) {
|
return new BaseResponse(OrderRespEnum.NO_PROTOCOL);
|
}
|
|
@Override
|
public BaseResponse closeWarn(QuantityRequest request) {
|
return new BaseResponse(OrderRespEnum.NO_FUNCTION);
|
}
|
|
@Override
|
public BaseResponse ptz(QuantityRequest Request) {
|
return new BaseResponse(OrderRespEnum.NO_FUNCTION);
|
}
|
|
public InvokeResult sendMsg(String ip, Integer port, IoMessage message) {
|
|
String msg = CommandBuilder.getInstance().build(message);
|
|
log.debug("平台------>>>>数量检测:报文信息-{}", msg);
|
|
InvokeResult result = bhznQuantityServerEngine.push(ip, port, msg.getBytes());
|
return result;
|
}
|
|
}
|