EnergySearchService.java
4.41 KB
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
package com.iot.scheduler.service;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import jakarta.annotation.Resource;
import java.util.*;
@Slf4j
@Service
public class EnergySearchService {
@Value("${energy.db.corpCode}")
private String energyCorpCode;
@Value("${energy.db.tableName}")
private String energyTableName;
@Resource
private JdbcTemplate jdbcTemplate;
/**
* 分页查询能耗设备信息
* 查询表 t_auto_ymk_iot_energy,按设备名称排序
*
* @param deviceName 设备名称(模糊匹配)
* @param runStatus 状态(0:离线,1:停机,2:待机,3:运行)
* @param pageNo 页码,默认1
* @param pageSize 每页条数,默认10
*/
public Map<String, Object> queryEnergyList(String deviceName, String runStatus,
Integer pageNo, Integer pageSize) {
StringBuilder countSql = new StringBuilder("SELECT COUNT(*) FROM " + energyTableName + " WHERE corp_code = ?");
StringBuilder querySql = new StringBuilder(
"SELECT id, deviceName, projectType, projectState, dtuSn, dtuId, deviceId, " +
"evalue, duration, runStatus, created_at, updated_at " +
"FROM " + energyTableName + " WHERE corp_code = ?");
List<Object> params = new ArrayList<>();
params.add(energyCorpCode);
// 设备名称模糊查询
if (StringUtils.hasText(deviceName)) {
countSql.append(" AND deviceName LIKE ?");
querySql.append(" AND deviceName LIKE ?");
params.add("%" + deviceName + "%");
}
// 设备状态精确匹配
if (StringUtils.hasText(runStatus)) {
countSql.append(" AND runStatus = ?");
querySql.append(" AND runStatus = ?");
params.add(runStatus);
}
Long total = jdbcTemplate.queryForObject(countSql.toString(), Long.class, params.toArray());
int offset = (pageNo - 1) * pageSize;
querySql.append(" ORDER BY deviceName ASC LIMIT ?, ?");
params.add(offset);
params.add(pageSize);
List<Map<String, Object>> list = jdbcTemplate.queryForList(querySql.toString(), params.toArray());
list.forEach(row -> {
if (row.get("duration") != null) {
long seconds = Long.parseLong(String.valueOf(row.get("duration")));
long h = seconds / 3600;
long m = (seconds % 3600) / 60;
long s = seconds % 60;
StringBuilder sb = new StringBuilder();
if (h > 0) sb.append(h).append("时");
if (h > 0 || m > 0) sb.append(m).append("分");
sb.append(s).append("秒");
row.put("duration", sb.toString());
}
});
return Map.of(
"code", 200,
"msg", "请求成功",
"total", total != null ? total : 0,
"pageNo", pageNo,
"pageSize", pageSize,
"list", list
);
}
/**
* 统计能耗设备各runStatus数量及总数量
* runStatus: 0-离线, 1-停机, 2-待机, 3-运行
*/
public Map<String, Object> queryEnergyStats() {
String sql = "SELECT runStatus, COUNT(*) AS cnt FROM " + energyTableName
+ " WHERE corp_code = ? GROUP BY runStatus";
List<Map<String, Object>> rows = jdbcTemplate.queryForList(sql, energyCorpCode);
int total = 0;
Map<String, Integer> statusMap = new LinkedHashMap<>();
statusMap.put("0", 0);
statusMap.put("1", 0);
statusMap.put("2", 0);
statusMap.put("3", 0);
for (Map<String, Object> row : rows) {
String key = String.valueOf(row.get("runStatus"));
int cnt = ((Number) row.get("cnt")).intValue();
total += cnt;
statusMap.merge(key, cnt, Integer::sum);
}
return Map.of(
"code", 200,
"msg", "请求成功",
"total", total,
"0", statusMap.get("0"),
"1", statusMap.get("1"),
"2", statusMap.get("2"),
"3", statusMap.get("3")
);
}
}