jiazx0107@163.com
2023-05-17 620eab6cca2bc9ef9ea6d3067a0a5ba1deadbd1c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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<String> 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);
    }
}