燕山石化溯源三维电子沙盘-【后端】-服务
1
13693261870
2023-04-26 659abe57f755e128e68d0a56bfc473e0baa4260b
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
package com.yssh.controller;
 
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
 
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.yssh.service.IWarningAnalyseService;
import com.yssh.utils.Result;
 
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
 
@Api(tags="告警分析")
@RequestMapping("/warning")
@RestController
@SuppressWarnings("rawtypes")
public class WarningAnalyseController {
 
    @Autowired
    private IWarningAnalyseService warningService;
 
    private static ConcurrentHashMap<String, Object> cache = new ConcurrentHashMap<>(5);
 
    private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
 
    public static final long CACHE_HOLD_TIME_24H = 24 * 60 * 60 * 1000L;
 
    /**
     * 1.查询当前时间的所有点位value值(以47.dat查询即可)
     * 2.筛选大于yssh_bjyj中的jcbj字段的值 返回id+经纬度+value
     */
    @ApiOperationSupport(order = 1)
    @ApiOperation(value = "获取实时报警", notes = "获取实时报警分析数据")
    @GetMapping("/runAlarm")
    public Result alarmAnalyse() {
        return Result.OK(warningService.getRunTimeAlarmAnalyse());
    }
 
    /**
     * 1.查询当前时间的所有点位value值(以47.dat查询即可)
     * 2.筛选大于yssh_bjyj中的jcyj字段的值 返回id+经纬度+value
     */
    @ApiOperationSupport(order = 2)
    @ApiOperation(value = "获取实时预警", notes = "获取实时预警分析数据")
    @GetMapping("/runWarning")
    public Result warningAnalyse() {
        return Result.OK(warningService.getRunTimeWarningAnalyse());
    }
 
    @ApiOperationSupport(order = 3)
    @ApiOperation(value = "本月预警、报警统计", notes = "本月预警、报警统计,返回参数alarmNumber对应值为本月报警数据量,参数warningNumber对应值为本月预警数据量")
    @GetMapping("/monthCount")
    public Result thisMonthCount() {
        return Result.OK(warningService.countThisMonthAlarmAndWarning());
    }
 
    @ApiOperationSupport(order = 4)
    @ApiOperation(value = "每日预警、报警数量变化趋势", notes = "一周每日预警、报警数量统计,返回参数alarmDayCount为一周每日报警统计数量列表,参数warningDayCount为一周每日预警统计数量列表")
    @GetMapping("/everydayCount")
    public Result everydayCount() {
        return Result.OK(warningService.countEverydayAlarmAndWarning());
    }
 
    @ApiOperationSupport(order = 4)
    @ApiOperation(value = "三小时监测站点数据变化趋势", notes = "返回值为三小时监测站点监测数据,返回值为map集合,其中key为站点名称,value为list集合,保存每天监测数值数据")
    @GetMapping("/locationDataChange")
    public Result locationDataChange() {
        //return Result.OK(warningService.selectEachLocationDataChange());
 
        String key = dateFormat.format(new Date()) + "_local";
        Map<String, List<Double>> map;
        if (cache.containsKey(key)) {
            map = (Map<String, List<Double>>) cache.get(key);
        } else {
            map = warningService.selectEachLocationDataChange();
            if (null != map && map.size() > 0) {
                cache.put(key, map);
            }
        }
 
        return Result.ok(map);
    }
 
    @ApiOperationSupport(order = 4)
    @ApiOperation(value = "获取本月监测大数据站点最大值TOP10", notes = "获取本月监测大数据站点最大值TOP10数量列表")
    @GetMapping("/monthTop10")
    public Result monthTop10() {
        //return Result.OK(warningService.selectThisMonthLocationValueDataTop10());
 
        String key = dateFormat.format(new Date()) + "_top10";
        List<Map<String, Object>> list;
        if (cache.containsKey(key)) {
            list = (List<Map<String, Object>>) cache.get(key);
        } else {
            list = warningService.selectThisMonthLocationValueDataTop10();
            if (null != list && list.size() > 0) {
                cache.put(key, list);
            }
        }
 
        return Result.OK(list);
    }
 
    @ApiOperationSupport(order = 5)
    @ApiOperation(value = "根据时间获取报警和预警信息", notes = "根据时间获取报警和预警信息")
    @GetMapping("/getAlarmAndWarnByTime")
    public Result getAlarmAndWarnByTime(
            @RequestParam(value = "begin", required = true) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date begin,
            @RequestParam(value = "end", required = true) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date end) {
        if (null == begin || null == end) {
            return Result.error(null);
        }
 
        if (begin.getTime() > end.getTime()) {
            Date tmp = end;
            begin = end;
            end = tmp;
        }
 
        return Result.OK(warningService.getAlarmAndWarnByTime(begin, end));
    }
}