jinpengyong
2020-11-23 8bb914874ef1ebcda2a9c606224bf3e3db2f46f8
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
package com.moral.task;
 
import com.alibaba.fastjson.JSON;
import com.moral.entity.Device;
import com.moral.service.DeviceAdjustValueService;
import com.moral.service.DeviceAdjustValueTimingService;
import com.moral.service.DeviceService;
import com.moral.util.AlarmUtils_2;
import com.moral.util.LengthOfTimeUtils;
import com.moral.util.RedisUtils;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.xxl.job.core.log.XxlJobLogger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
 
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
 
@Component
public class DeviceAdjustValueTimingTask {
    private static transient Logger logger = LoggerFactory.getLogger(DeviceAdjustValueTimingTask.class);
 
    @Resource
    private DeviceAdjustValueTimingService deviceAdjustValueTimingService;
 
    @Resource
    private DeviceAdjustValueService deviceAdjustValueService;
 
    @Resource
    private DeviceService deviceService;
 
    @Resource
    RedisUtils redisUtils;
 
    @XxlJob("DeviceAdjustValueTiming")
    public ReturnT DeviceAdjustValueTiming(String params) {
        //获取当前时间和五分钟前的时间
        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime time = LocalDateTime.now();
        String endTime = df.format(time);
        // 当前时间 -5分钟
        String startTime = df.format(time.minusMinutes(5));
 
        try {
            //从device_adjust_value表中查询时间段内需要变更的设备列表
            int startTimeSeconds = LengthOfTimeUtils.Seconds(startTime);
            int endTimeSeconds = LengthOfTimeUtils.Seconds(endTime);
            //创建list,接收要变更校准值公式的设备列表
            List<Map<String, Object>> deviceAdjusTimingList = new ArrayList();
            //判断开始时间和结束时间是否处于同一天
            if (startTimeSeconds>86100&&endTimeSeconds<300){
                List<Map<String, Object>> dayBeforeList = deviceAdjustValueTimingService.selectDataBySecondSolt(startTimeSeconds,86400);
                List<Map<String, Object>> dayNextList = deviceAdjustValueTimingService.selectDataBySecondSolt(0,endTimeSeconds);
                deviceAdjusTimingList.addAll(dayBeforeList);
                deviceAdjusTimingList.addAll(dayNextList);
            }else {
                List<Map<String, Object>> list = deviceAdjustValueTimingService.selectDataBySecondSolt(startTimeSeconds,endTimeSeconds);
                deviceAdjusTimingList.addAll(list);
            }
            //判断deviceAdjustimingList集合是否为空
            if (deviceAdjusTimingList.isEmpty()){
                ReturnT returnT = new ReturnT(200, "没有需要更新的设备!");
                return returnT;
            }else {
                //遍历deviceAdjustimingList集合,根据集合中的设备对device_adjust_value表中的数据进行替换
                for (Map<String, Object> deviceAdjustimingMap:deviceAdjusTimingList) {
                    int device_id = Integer.parseInt(deviceAdjustimingMap.get("device_id").toString());
                    String value = deviceAdjustimingMap.get("value").toString();
                    //通过device_id查询device_adjust_value是否存在这台设备
                    List<Map<String, Object>> deviceAdjustValueList = deviceAdjustValueService.getDataByDevice_id(device_id);
                    //判断表里原来是否有这台设备的信息,没有的话需要插入
                    if (deviceAdjustValueList.isEmpty()){
                        deviceAdjustValueService.insertData(device_id,value,endTime);
                    }else {
                        deviceAdjustValueService.updateValueByDeviceID(device_id,value);
                    }
                    try {
                        // 存储到redis
                        //Map<String,String> adjustMap = new HashMap<>();
                        if(value!=null&&!value.isEmpty()){
                            Map<String, Object> valueMap = JSON.parseObject(value);
                            System.out.println("valueMap:"+valueMap);
                            if(!valueMap.isEmpty()){
                                Device device = deviceService.getDeviceByID(device_id);
                                String key = RedisUtils.getAdjustKey(device.getMac());
                                redisUtils.set(key,valueMap);
                            }
                        }
                    }catch (Exception e){
                        ReturnT returnT = new ReturnT(500, "插入redis出现问题!");
                        return returnT;
                    }
                    ReturnT returnT = new ReturnT(200, "校准值变更成功!");
                    return returnT;
                }
            }
        }catch (Exception e){
            XxlJobLogger.log("DeviceAdjustValueTimingException:" + e.getMessage());
            logger.error(e.getMessage());
            e.printStackTrace();
        }
        ReturnT returnT = new ReturnT(500, "校准值变更失败!");
        return returnT;
    }
 
}