package com.ld.igds.protocol.quantity.shuhan.command; import com.ld.igds.constant.RedisConst; import com.ld.igds.io.constant.OrderRespEnum; import com.ld.igds.io.request.QuantityRequest; import com.ld.igds.io.response.BaseResponse; import com.ld.igds.protocol.quantity.shuhan.QueryStatusTask; import com.ld.igds.protocol.quantity.shuhan.ShuHanUtils; import com.ld.igds.protocol.snap.SnapPluginService; import com.ld.igds.quantity.io.RemoteQuantityService; import com.ld.igds.quantity.service.CoreQuantityService; 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; /** * 蜀汉粮油协议 * * @author vince */ @Slf4j @Component(RemoteQuantityServiceImpl.BEAN_ID) public class RemoteQuantityServiceImpl extends BaseRemoteImpl implements RemoteQuantityService { public static final String BEAN_ID = "shly.remoteQuantityService"; @Autowired private RedisUtil redisUtil; @Autowired private CoreQuantityService coreQuantityService; @Autowired private SnapPluginService snapService; @Override public BaseResponse checkStart(QuantityRequest request) { try { String key = RedisConst.buildKey(request.getCompanyId(), request.getYtIp()); String msg = CommandBuilder.getCheckMsg(request); log.info("发起数量检测采集命令: " + msg); InvokeResult result = super.send(request.getIp(), request.getPort(), msg.getBytes(ShuHanUtils.CHARSET)); // 封装返回信息 if (InvokeResult.SUCCESS == result) { //最长保存一个小时 redisUtil.set(key, request, 60 * 60); //将采集信息放缓存,收到结果后删除 //启动子任务定时查询进度和结果 // 创建子任务 FutureTask futureTask = new FutureTask<>(new QueryStatusTask(redisUtil, this, coreQuantityService, snapService, key, CommandBuilder.getQueryStatusMsg(request))); ExecutorService executorService = Executors.newCachedThreadPool(); executorService.submit(futureTask); executorService.shutdown(); return new BaseResponse(OrderRespEnum.ORDER_SUCCESS.getCode(), "数量检测采集命令发送成功"); } else { log.info("分机" + request.getSerName() + "数量检测采集命令发送失败:" + result.getMessage()); return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), result.getMessage()); } } catch (Exception e) { log.error(e.getMessage(), e); return new BaseResponse(OrderRespEnum.ORDER_ERROR.getCode(), e.getMessage()); } } @Override public BaseResponse remoteConf(QuantityRequest request) { return new BaseResponse(OrderRespEnum.NO_FUNCTION); } @Override public BaseResponse checkStop(QuantityRequest request) { return new BaseResponse(OrderRespEnum.NO_FUNCTION); } @Override public BaseResponse snapImg(QuantityRequest request) { return new BaseResponse(OrderRespEnum.NO_FUNCTION); } @Override public BaseResponse closeWarn(QuantityRequest request) { return new BaseResponse(OrderRespEnum.NO_FUNCTION); } @Override public BaseResponse ptz(QuantityRequest Request) { return new BaseResponse(OrderRespEnum.NO_FUNCTION); } }