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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package com.ld.igds.common.impl;
 
import com.ld.igds.common.CoreSnapService;
import com.ld.igds.common.mapper.SnapSerMapper;
import com.ld.igds.constant.Constant;
import com.ld.igds.models.SnapSer;
import com.ld.igds.util.ContextUtil;
import com.ld.igds.util.RedisUtil;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
 
import java.util.*;
 
@Component(CoreSnapService.BEAN_ID)
public class CoreSnapServiceImpl implements CoreSnapService {
 
 
    /**
     * 抓拍分机缓存前缀
     */
    private String CACHE_KEY_PRE = "SNAP_SER";
 
    /**
     * 断电抓拍标记前缀
     */
    private String CACHE_KEY_TAG = "SNAP_TAG";
 
    @Autowired
    private SnapSerMapper snapSerMapper;
 
    @Autowired
    private RedisUtil redisUtil;
 
 
    @Override
    public void setCacheSer(SnapSer snapSer) {
        if (null == snapSer.getDeptId()) snapSer.setDeptId("0000");
        String key = CACHE_KEY_PRE + ":" + snapSer.getDeptId() + ":" + snapSer.getSn();
        redisUtil.set(key, snapSer);
    }
 
    @Override
    public SnapSer getCacheSer(String deptId) {
        String patten = Constant.APP_NAME + ":" + CACHE_KEY_PRE;
        Set<String> keys = redisUtil.keys(patten);
        for (String key : keys) {
            if (key.indexOf(deptId) >= 0) {
                return (SnapSer) redisUtil.get(key);
            }
        }
        return null;
    }
 
    @Override
    public SnapSer getCacheSerBySn(String sn) {
        Set<String> keys = redisUtil.keys(CACHE_KEY_PRE);
        for (String key : keys) {
            if (key.indexOf(sn) >= 0) {
                return (SnapSer) redisUtil.get(key);
            }
        }
        return null;
    }
 
    @Override
    public int updateBySn(String status, String ip, Integer port, String sn) {
        return snapSerMapper.updateBySn(status, ip, port, sn);
    }
 
    @Override
    public void allOffLine(String companyId) {
        snapSerMapper.allOffLine(companyId);
    }
 
    @Override
    public void offLine(String sn) {
        snapSerMapper.offLine(sn);
    }
 
    @Override
    public void connectAdd(String sn, String ip, int port) {
        int result = updateBySn(Constant.YN_Y, ip, port, sn);
 
        if (result == 0) {
            SnapSer ser = new SnapSer();
            ser.setCompanyId(ContextUtil.getDefaultCompanyId());
            ser.setId(ContextUtil.getUUID());
            ser.setName("自动添加");
            ser.setPort(port);
            ser.setSn(sn);
            ser.setIp(ip);
            ser.setStatus(Constant.YN_Y);
            ser.setUpdateTime(new Date());
            snapSerMapper.addSer(ser);
 
            //添加设备
            this.setCacheSer(ser);
        }
    }
 
    @Override
    public void setSnapTag(SnapSer snapSer, String warnId) {
        String key = CACHE_KEY_TAG + ":" + snapSer.getSn();
        Map<String, String> map = new HashMap<>();
        map.put("deptId", snapSer.getCompanyId());
        map.put("companyId", snapSer.getCompanyId());
        map.put("outId", warnId);
        map.put("snapSn", snapSer.getSn());
        map.put("start", DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm"));
 
        //默认存8个小时,后面不管上不上电不在抓拍
        redisUtil.set(key, map, 8 * 60 * 60);
    }
 
    @Override
    public void removeSnapTag(SnapSer snapSer) {
        String key = CACHE_KEY_TAG + ":" + snapSer.getSn();
        redisUtil.del(key);
    }
 
    @SuppressWarnings("unchecked")
    @Override
    public List<Map<String, String>> getCacheSnapTag() {
        List<Map<String, String>> array = new ArrayList<>();
        Set<String> keys = redisUtil.keys(CACHE_KEY_TAG);
        Map<String, String> result;
        for (String key : keys) {
            result = (Map<String, String>) redisUtil.get(key);
            if (null != result) array.add(result);
        }
        return array.size() > 0 ? array : null;
    }
}