|
@@ -1,7 +1,9 @@
|
1
|
1
|
package com.ruoyi.monitoring.controller;
|
2
|
2
|
|
|
3
|
+import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
3
|
4
|
import com.mybatisflex.core.paginate.Page;
|
4
|
5
|
import com.mybatisflex.core.query.QueryWrapper;
|
|
6
|
+import com.ruoyi.common.utils.ExcelUtil;
|
5
|
7
|
import com.ruoyi.common.web.domain.PageData;
|
6
|
8
|
import com.ruoyi.monitoring.domain.CmcChannel;
|
7
|
9
|
import com.ruoyi.monitoring.domain.CmcTemperature;
|
|
@@ -10,9 +12,8 @@ import com.ruoyi.monitoring.service.ICmcTemperatureService;
|
10
|
12
|
import com.ruoyi.common.web.controller.BaseController;
|
11
|
13
|
import org.noear.solon.annotation.*;
|
12
|
14
|
|
13
|
|
-import java.util.ArrayList;
|
14
|
|
-import java.util.Date;
|
15
|
|
-import java.util.List;
|
|
15
|
+import java.text.SimpleDateFormat;
|
|
16
|
+import java.util.*;
|
16
|
17
|
|
17
|
18
|
/**
|
18
|
19
|
* 水温监测
|
|
@@ -38,31 +39,15 @@ public class CmcTemperatureController extends BaseController {
|
38
|
39
|
return cmcTemperatureService.list(qw);
|
39
|
40
|
}
|
40
|
41
|
|
41
|
|
- private QueryWrapper getQW(CmcTemperature cmcTemperature) {
|
42
|
|
- QueryWrapper qw = QueryWrapper.create();
|
43
|
|
- qw.and(CmcTemperature::getId).eq(cmcTemperature.getId());
|
44
|
|
- qw.and(CmcTemperature::getGroupNo).eq(cmcTemperature.getGroupNo());
|
45
|
|
- qw.and(CmcTemperature::getSensorNo).eq(cmcTemperature.getSensorNo());
|
46
|
|
- qw.and(CmcTemperature::getData).eq(cmcTemperature.getData());
|
47
|
|
- qw.and(CmcTemperature::getVolt).eq(cmcTemperature.getVolt());
|
48
|
|
- qw.and(CmcTemperature::getCSQ).eq(cmcTemperature.getCSQ());
|
49
|
|
- qw.and(CmcTemperature::getDatetime).ge(cmcTemperature.getStartTime());
|
50
|
|
- qw.and(CmcTemperature::getDatetime).le(cmcTemperature.getEndTime());
|
51
|
|
- qw.orderBy(CmcTemperature::getDatetime).desc();
|
52
|
|
- return qw;
|
53
|
|
- }
|
54
|
|
-
|
55
|
42
|
/**
|
56
|
43
|
* 根据点位查询水温监测列表
|
57
|
44
|
*/
|
58
|
45
|
@Get
|
59
|
46
|
@Mapping("listByInfo")
|
60
|
|
- public PageData<CmcTemperature> listByInfo(Page<CmcTemperature> page, CmcTemperature cmcTemperature, String Info) {
|
61
|
|
- CmcChannel channel = new CmcChannel();
|
62
|
|
- channel.setInfo(Info);
|
63
|
|
- int channelSize = cmcChannelService.listChannel(channel).size();
|
|
47
|
+ public PageData<CmcTemperature> listByInfo(Page<CmcTemperature> page, CmcTemperature cmcTemperature, CmcChannel cmcChannel) {
|
|
48
|
+ int channelSize = cmcChannelService.listChannel(cmcChannel).size();
|
64
|
49
|
page.setPageSize(page.getPageSize() * channelSize);
|
65
|
|
- QueryWrapper qw = getQW(cmcTemperature, Info);
|
|
50
|
+ QueryWrapper qw = getQW(cmcTemperature, cmcChannel);
|
66
|
51
|
List<CmcTemperature> records = cmcTemperatureService.list(qw);
|
67
|
52
|
List<CmcTemperature> temperatureList = new ArrayList<>();
|
68
|
53
|
int total = 0;
|
|
@@ -84,7 +69,7 @@ public class CmcTemperatureController extends BaseController {
|
84
|
69
|
Date fifteenMinutesAgo = new Date(fifteenMinutesAgoMillis);
|
85
|
70
|
temperature.setStartTime(fifteenMinutesAgo);
|
86
|
71
|
temperature.setEndTime(cmcTemperature.getStartTime());
|
87
|
|
- QueryWrapper qw1 = getQW(temperature, Info);
|
|
72
|
+ QueryWrapper qw1 = getQW(temperature, cmcChannel);
|
88
|
73
|
temperatureList = cmcTemperatureService.list(qw1);
|
89
|
74
|
temperatureList.addAll(records);
|
90
|
75
|
if (channelSize > 30) {
|
|
@@ -121,72 +106,98 @@ public class CmcTemperatureController extends BaseController {
|
121
|
106
|
*/
|
122
|
107
|
@Get
|
123
|
108
|
@Mapping("listAllByInfo")
|
124
|
|
- public PageData<CmcTemperature> listAllByInfo(CmcTemperature cmcTemperature, String Info) {
|
125
|
|
- CmcChannel channel = new CmcChannel();
|
126
|
|
- channel.setInfo(Info);
|
127
|
|
- int channelSize = cmcChannelService.listChannel(channel).size();
|
128
|
|
- QueryWrapper qw = getQW(cmcTemperature, Info);
|
129
|
|
- List<CmcTemperature> records = cmcTemperatureService.list(qw);
|
130
|
|
- List<CmcTemperature> temperatureList = new ArrayList<>();
|
131
|
|
- if (records.size() > 2) {
|
132
|
|
- long diffInMillis;
|
133
|
|
- // 第30条与第31条数据时间差 毫秒
|
134
|
|
- if (channelSize > 30) {
|
135
|
|
- diffInMillis = records.get(30).getDatetime().getTime() - records.get(29).getDatetime().getTime();
|
136
|
|
- // 时间差超过15分钟,删最后10条数据
|
137
|
|
- if (diffInMillis / 1000 / 60 > 15)
|
138
|
|
- records.subList(records.size() - channelSize + 30, records.size()).clear();
|
|
109
|
+ public PageData<CmcTemperature> listAllByInfo(CmcTemperature cmcTemperature, CmcChannel cmcChannel) {
|
|
110
|
+ int channelSize = cmcChannelService.listChannel(cmcChannel).size();
|
|
111
|
+ List<CmcTemperature> temperatureList = cmcTemperatureService.listTemperature(cmcTemperature, cmcChannel);
|
|
112
|
+ return getPageData(temperatureList).total(temperatureList.size() / channelSize);
|
|
113
|
+ }
|
|
114
|
+
|
|
115
|
+ /**
|
|
116
|
+ * 导出用户列表
|
|
117
|
+ */
|
|
118
|
+ @Post
|
|
119
|
+ @Mapping("export")
|
|
120
|
+ public void export(CmcTemperature cmcTemperature, CmcChannel cmcChannel) {
|
|
121
|
+ List<CmcTemperature> temperatureList = cmcTemperatureService.listTemperature(cmcTemperature, cmcChannel);
|
|
122
|
+ List<ExcelExportEntity> entityList = new ArrayList<>();
|
|
123
|
+ ExcelExportEntity timeColumn = new ExcelExportEntity("时间", "Datetime");
|
|
124
|
+ timeColumn.setNeedMerge(true);
|
|
125
|
+ timeColumn.setWidth(20);
|
|
126
|
+ entityList.add(timeColumn);
|
|
127
|
+ cmcChannelService.listChannel(cmcChannel).forEach(channel -> {
|
|
128
|
+ ExcelExportEntity entity = new ExcelExportEntity(channel.getInfo(), channel.getSensorNo().toString());
|
|
129
|
+ entityList.add(entity);
|
|
130
|
+ });
|
|
131
|
+ List<Map<String, Object>> dataList = prepareData(temperatureList);
|
|
132
|
+ ExcelUtil.customExport(entityList, dataList);
|
|
133
|
+ }
|
|
134
|
+
|
|
135
|
+ private static List<Map<String, Object>> prepareData(List<CmcTemperature> temperatureList) {
|
|
136
|
+ Map<String, Map<Long, Float>> timeDataMap = new LinkedHashMap<>();
|
|
137
|
+ Set<Long> locations = new TreeSet<>();
|
|
138
|
+
|
|
139
|
+ for (CmcTemperature cmcTemperature : temperatureList) {
|
|
140
|
+ Date datetime = cmcTemperature.getDatetime();
|
|
141
|
+ Long sensorNo = cmcTemperature.getSensorNo();
|
|
142
|
+
|
|
143
|
+ locations.add(sensorNo);
|
|
144
|
+ String dateTme = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(datetime);
|
|
145
|
+ if (!timeDataMap.containsKey(dateTme)) {
|
|
146
|
+ timeDataMap.put(dateTme, new HashMap<>());
|
139
|
147
|
}
|
140
|
|
- // 第1条数据与0时时间差 毫秒
|
141
|
|
- diffInMillis = records.get(0).getDatetime().getTime() - cmcTemperature.getStartTime().getTime();
|
142
|
|
- if (diffInMillis / 1000 / 60 > 15)
|
143
|
|
- records.subList(records.size() - channelSize, records.size()).clear();
|
144
|
|
- CmcTemperature temperature = new CmcTemperature();
|
145
|
|
- long fifteenMinutesAgoMillis = cmcTemperature.getStartTime().getTime() - (15 * 60 * 1000);
|
146
|
|
- Date fifteenMinutesAgo = new Date(fifteenMinutesAgoMillis);
|
147
|
|
- temperature.setStartTime(fifteenMinutesAgo);
|
148
|
|
- temperature.setEndTime(cmcTemperature.getStartTime());
|
149
|
|
- QueryWrapper qw1 = getQW(temperature, Info);
|
150
|
|
- temperatureList = cmcTemperatureService.list(qw1);
|
151
|
|
- temperatureList.addAll(records);
|
152
|
|
- if (channelSize > 30) {
|
153
|
|
- for (int i = 0; i < temperatureList.size() - channelSize + 1; i = i + channelSize) {
|
154
|
|
- Date minTime = temperatureList.get(i).getDatetime();
|
155
|
|
- if (temperatureList.get(i + 10).getDatetime().getTime() > minTime.getTime()) {
|
156
|
|
- for (int j = i + 10; j < i + channelSize; j++) {
|
157
|
|
- temperatureList.get(j).setDatetime(minTime);
|
158
|
|
- }
|
159
|
|
- } else {
|
160
|
|
- if (temperatureList.get(i + 30).getDatetime().getTime() > minTime.getTime()) {
|
161
|
|
- for (int j = i + 30; j < i + channelSize; j++) {
|
162
|
|
- temperatureList.get(j).setDatetime(minTime);
|
163
|
|
- }
|
164
|
|
- }
|
165
|
|
- }
|
166
|
|
- }
|
|
148
|
+
|
|
149
|
+ timeDataMap.get(dateTme).put(sensorNo, cmcTemperature.getData());
|
|
150
|
+ }
|
|
151
|
+
|
|
152
|
+ // 转换为导出格式
|
|
153
|
+ List<Map<String, Object>> exportData = new ArrayList<>();
|
|
154
|
+
|
|
155
|
+ for (Map.Entry<String, Map<Long, Float>> entry : timeDataMap.entrySet()) {
|
|
156
|
+ Map<String, Object> rowData = new HashMap<>();
|
|
157
|
+ rowData.put("Datetime", entry.getKey());
|
|
158
|
+
|
|
159
|
+ Map<Long, Float> locationData = entry.getValue();
|
|
160
|
+ for (Long location : locations) {
|
|
161
|
+ rowData.put(String.valueOf(location), locationData.get(location));
|
167
|
162
|
}
|
|
163
|
+
|
|
164
|
+ exportData.add(rowData);
|
168
|
165
|
}
|
169
|
|
- return getPageData(temperatureList).total(temperatureList.size() / channelSize);
|
|
166
|
+ return exportData;
|
|
167
|
+ }
|
|
168
|
+
|
|
169
|
+ private QueryWrapper getQW(CmcTemperature cmcTemperature) {
|
|
170
|
+ QueryWrapper qw = QueryWrapper.create();
|
|
171
|
+ qw.and(CmcTemperature::getId).eq(cmcTemperature.getId());
|
|
172
|
+ qw.and(CmcTemperature::getGroupNo).eq(cmcTemperature.getGroupNo());
|
|
173
|
+ qw.and(CmcTemperature::getSensorNo).eq(cmcTemperature.getSensorNo());
|
|
174
|
+ qw.and(CmcTemperature::getData).eq(cmcTemperature.getData());
|
|
175
|
+ qw.and(CmcTemperature::getVolt).eq(cmcTemperature.getVolt());
|
|
176
|
+ qw.and(CmcTemperature::getCSQ).eq(cmcTemperature.getCSQ());
|
|
177
|
+ qw.and(CmcTemperature::getDatetime).ge(cmcTemperature.getStartTime());
|
|
178
|
+ qw.and(CmcTemperature::getDatetime).le(cmcTemperature.getEndTime());
|
|
179
|
+ qw.orderBy(CmcTemperature::getDatetime).desc();
|
|
180
|
+ return qw;
|
170
|
181
|
}
|
171
|
182
|
|
172
|
|
- private QueryWrapper getQW(CmcTemperature cmcTemperature, String Info) {
|
|
183
|
+ private QueryWrapper getQW(CmcTemperature cmcTemperature, CmcChannel cmcChannel) {
|
173
|
184
|
QueryWrapper qw = QueryWrapper.create();
|
174
|
185
|
qw.select(CmcTemperature::getId, CmcTemperature::getGroupNo, CmcTemperature::getSensorNo, CmcTemperature::getData, CmcTemperature::getVolt, CmcTemperature::getCSQ, CmcTemperature::getDatetime)
|
175
|
|
- .select(CmcChannel::getInfo)
|
176
|
|
- .from(CmcTemperature.class)
|
177
|
|
- .leftJoin(CmcChannel.class)
|
178
|
|
- .on(CmcChannel::getSensorNo, CmcTemperature::getSensorNo)
|
179
|
|
- .where(CmcChannel::getInfo).like(Info)
|
180
|
|
- .and(CmcTemperature::getId).eq(cmcTemperature.getId())
|
181
|
|
- .and(CmcTemperature::getGroupNo).eq(cmcTemperature.getGroupNo())
|
182
|
|
- .and(CmcTemperature::getSensorNo).eq(cmcTemperature.getSensorNo())
|
183
|
|
- .and(CmcTemperature::getData).eq(cmcTemperature.getData())
|
184
|
|
- .and(CmcTemperature::getVolt).eq(cmcTemperature.getVolt())
|
185
|
|
- .and(CmcTemperature::getCSQ).eq(cmcTemperature.getCSQ())
|
186
|
|
- .and(CmcTemperature::getDatetime).ge(cmcTemperature.getStartTime())
|
187
|
|
- .and(CmcTemperature::getDatetime).le(cmcTemperature.getEndTime())
|
188
|
|
- .orderBy(CmcTemperature::getDatetime).asc()
|
189
|
|
- .orderBy(CmcTemperature::getSensorNo).asc();
|
|
186
|
+ .select(CmcChannel::getInfo)
|
|
187
|
+ .from(CmcTemperature.class)
|
|
188
|
+ .leftJoin(CmcChannel.class)
|
|
189
|
+ .on(CmcChannel::getSensorNo, CmcTemperature::getSensorNo)
|
|
190
|
+ .where(CmcChannel::getInfo).like(cmcChannel.getInfo())
|
|
191
|
+ .and(CmcTemperature::getId).eq(cmcTemperature.getId())
|
|
192
|
+ .and(CmcTemperature::getGroupNo).eq(cmcTemperature.getGroupNo())
|
|
193
|
+ .and(CmcTemperature::getSensorNo).eq(cmcTemperature.getSensorNo())
|
|
194
|
+ .and(CmcTemperature::getData).eq(cmcTemperature.getData())
|
|
195
|
+ .and(CmcTemperature::getVolt).eq(cmcTemperature.getVolt())
|
|
196
|
+ .and(CmcTemperature::getCSQ).eq(cmcTemperature.getCSQ())
|
|
197
|
+ .and(CmcTemperature::getDatetime).ge(cmcTemperature.getStartTime())
|
|
198
|
+ .and(CmcTemperature::getDatetime).le(cmcTemperature.getEndTime())
|
|
199
|
+ .orderBy(CmcTemperature::getDatetime).asc()
|
|
200
|
+ .orderBy(CmcTemperature::getSensorNo).asc();
|
190
|
201
|
return qw;
|
191
|
202
|
}
|
192
|
203
|
|