潘志宝
2025-01-14 cb5066ddca3d7c8d0959b20715f0f46948e6753e
提交 | 用户 | 时间
10e4c0 1 package com.iailab.module.data.api.controller.admin;
a6de49 2
H 3 import com.iailab.framework.common.pojo.CommonResult;
e255ba 4 import com.iailab.framework.common.pojo.PageResult;
a6de49 5 import com.iailab.framework.common.util.date.DateUtils;
e255ba 6 import com.iailab.framework.common.util.object.BeanUtils;
ed4f78 7 import com.iailab.framework.common.util.object.ConvertUtils;
8 import com.iailab.framework.excel.core.util.ExcelUtils;
df4f01 9 import com.iailab.module.data.api.dto.DeviceValueDTO;
585be5 10 import com.iailab.module.data.api.dto.IndexQueryDTO;
11 import com.iailab.module.data.api.dto.echarts.BarLineDTO;
12 import com.iailab.module.data.api.dto.echarts.SeriesItem;
ed4f78 13 import com.iailab.module.data.api.ind.dto.ApiIndItemQueryDTO;
14 import com.iailab.module.data.api.ind.dto.ApiIndItemValueDTO;
15 import com.iailab.module.data.api.plan.PlanItemApi;
a3a072 16 import com.iailab.module.data.api.plan.dto.ApiPlanDataDTO;
d41f14 17 import com.iailab.module.data.api.point.DataPointApi;
e255ba 18 import com.iailab.module.data.api.point.dto.ApiPointDTO;
d41f14 19 import com.iailab.module.data.api.point.dto.ApiPointValueDTO;
20 import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO;
21 import com.iailab.module.data.api.point.dto.ApiPointsValueQueryDTO;
ed4f78 22 import com.iailab.module.data.common.ApiDataQueryDTO;
23 import com.iailab.module.data.common.ApiDataValueDTO;
df4f01 24 import com.iailab.module.data.common.utils.ApiSecurityUtils;
ed4f78 25 import com.iailab.module.data.ind.collection.IndItemCollector;
26 import com.iailab.module.data.ind.item.vo.IndItemValueVO;
27 import com.iailab.module.data.plan.item.entity.PlanItemEntity;
df4f01 28 import com.iailab.module.data.plan.item.service.PlanItemService;
ed4f78 29 import com.iailab.module.data.plan.item.vo.PlanItemValueExportVO;
a6de49 30 import com.iailab.module.data.point.common.PointDataTypeEnum;
H 31 import com.iailab.module.data.point.dto.DaPointDTO;
32 import com.iailab.module.data.point.service.DaPointService;
33 import io.swagger.v3.oas.annotations.Operation;
34 import io.swagger.v3.oas.annotations.tags.Tag;
35 import lombok.extern.slf4j.Slf4j;
d41f14 36 import org.springframework.beans.factory.annotation.Autowired;
a6de49 37 import org.springframework.util.CollectionUtils;
H 38 import org.springframework.web.bind.annotation.*;
39
df4f01 40 import javax.annotation.Resource;
9100b0 41 import javax.annotation.security.PermitAll;
a6de49 42 import javax.servlet.http.HttpServletRequest;
H 43 import javax.servlet.http.HttpServletResponse;
44 import java.math.BigDecimal;
df4f01 45 import java.math.RoundingMode;
a6de49 46 import java.util.*;
H 47 import java.util.stream.Collectors;
c7f709 48
L 49 import static com.iailab.framework.common.pojo.CommonResult.success;
a6de49 50
H 51 /**
52  * @author PanZhibao
53  * @Description
54  * @createTime 2023年05月02日 10:58:00
55  */
56 @Slf4j
57 @RestController
10e4c0 58 @RequestMapping("/data/api")
a6de49 59 @Tag(name = "数据")
9961c7 60 public class ApiDataController {
a6de49 61
H 62     @Resource
63     private DaPointService daPointService;
64
65     @Resource
66     private ApiSecurityUtils apiSecurityUtils;
67
d41f14 68     @Autowired
69     private DataPointApi dataPointApi;
ed4f78 70
71     @Autowired
72     private PlanItemApi planItemApi;
73
74     @Autowired
75     private IndItemCollector indItemCollector;
76
77     @Autowired
78     private PlanItemService planItemService;
a6de49 79
9100b0 80     @PermitAll
d41f14 81     @PostMapping("/query-points/history-value")
82     @Operation(summary = "查询多个测点历史值")
83     public CommonResult<Map<String, List<Map<String, Object>>>> queryPointsRealValue(HttpServletResponse response, HttpServletRequest
84             request, @RequestBody ApiPointsValueQueryDTO queryDto) {
85         Map<String, List<Map<String, Object>>> data = new HashMap<>();
a6de49 86         try {
H 87             apiSecurityUtils.validate(request);
d41f14 88             data = dataPointApi.queryPointsHistoryValue(queryDto);
c7f709 89             return success(data);
a6de49 90
H 91         } catch (Exception ex) {
c7f709 92             return new CommonResult<Map<String, List<Map<String, Object>>>>().setMsg(ex.getMessage());
a6de49 93         }
H 94     }
95
d41f14 96     @PermitAll
97     @PostMapping("/query-point/history-value")
98     @Operation(summary = "查询单个测点历史值")
99     public CommonResult<List<ApiPointValueDTO>> queryPointHistoryValue(HttpServletResponse response, HttpServletRequest
100             request, @RequestBody ApiPointValueQueryDTO queryDto) {
101         List<ApiPointValueDTO> pointValueList = new ArrayList<>();
a6de49 102         try {
d41f14 103             apiSecurityUtils.validate(request);
104             pointValueList = dataPointApi.queryPointHistoryValue(queryDto);
105             return success(pointValueList);
106
107         } catch (Exception ex) {
108             return new CommonResult<List<ApiPointValueDTO>>().setMsg(ex.getMessage());
109         }
110     }
111
112     @PostMapping("/query-points/real-value")
113     @Operation(summary = "查询多个测点当前值")
114     public CommonResult<Map<String, Object>> queryPointsRealValue(HttpServletResponse response, HttpServletRequest
115             request, @RequestBody List<String> pointNos) {
116         Map<String, Object> data = new HashMap<>();
117         try {
118             apiSecurityUtils.validate(request);
119             data = dataPointApi.queryPointsRealValue(pointNos);
c7f709 120             return success(data);
a6de49 121         } catch (Exception ex) {
c7f709 122             return new CommonResult<Map<String, Object>>().setMsg(ex.getMessage());
a6de49 123         }
H 124     }
125
d41f14 126     @PostMapping("/query-points/chart")
127     public CommonResult<BarLineDTO> queryPointsChart(HttpServletResponse response, HttpServletRequest
128             request, @RequestBody IndexQueryDTO dto) {
a6de49 129         BarLineDTO CommonResult = new BarLineDTO();
H 130         try {
d41f14 131             apiSecurityUtils.validate(request);
a6de49 132             List<String> legend = new ArrayList<>();
H 133             List<SeriesItem> series = new ArrayList<>();
134             String endDateStr = dto.getEndDate() == null ? DateUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss") : DateUtils.format(dto.getEndDate(), "yyyy-MM-dd HH:mm:ss");
135             Date endDate = DateUtils.parse(endDateStr, "yyyy-MM-dd HH:mm");
136             Date startDate = dto.getStartDate() == null ? DateUtils.addDateHours(endDate, -2) : dto.getStartDate();
d41f14 137             List<String> categories = DateUtils.getTimeScale(startDate, endDate, dto.getGranularity() == null ? 60 : dto.getGranularity());
a6de49 138             if (CollectionUtils.isEmpty(dto.getCodes())) {
H 139                 return new CommonResult<BarLineDTO>().setData(CommonResult);
140             }
141             List<DaPointDTO> pointList = new ArrayList<>();
142             dto.getCodes().forEach(item -> {
143                 pointList.add(daPointService.getByNo(item));
144             });
145             pointList.forEach(item -> {
146                 legend.add(item.getPointName());
147                 SeriesItem seriesItem = new SeriesItem();
148                 seriesItem.setName(item.getPointName());
d41f14 149                 ApiPointValueQueryDTO queryDto = new ApiPointValueQueryDTO();
150                 queryDto.setStart(startDate);
151                 queryDto.setEnd(endDate);
152                 queryDto.setPointNo(item.getPointNo());
153                 List<ApiPointValueDTO> list = dataPointApi.queryPointHistoryValue(queryDto);
a6de49 154                 List<Object[]> sData = list.stream().map(dataItem -> {
9df837 155                     Object[] valueArray = new Object[]{DateUtils.format(dataItem.getT(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND),
156                             getFormatValue(item.getDataType(), dataItem.getV())};
a6de49 157                     return valueArray;
H 158                 }).collect(Collectors.toList());
159                 seriesItem.setData(sData);
160                 series.add(seriesItem);
161             });
162             CommonResult.setLegend(legend);
163             CommonResult.setCategories(categories);
164             CommonResult.setSeries(series);
165         } catch (Exception ex) {
166             ex.printStackTrace();
167         }
168         return new CommonResult<BarLineDTO>().setData(CommonResult);
169     }
170
171     private Object getFormatValue(String dataType, Object value) {
172         if (!PointDataTypeEnum.BOOLEAN.getCode().equals(dataType)) {
173             BigDecimal decValue = new BigDecimal(value.toString());
174             if (PointDataTypeEnum.FLOAT.getCode().equals(dataType)) {
175                 return decValue.setScale(2, BigDecimal.ROUND_HALF_UP);
176             } else if (PointDataTypeEnum.INT.getCode().equals(dataType)) {
177                 decValue = decValue.setScale(0, BigDecimal.ROUND_HALF_UP);
178             }
179         }
180         return value;
181     }
182
183
184     @GetMapping("/device-value")
185     public List<DeviceValueDTO> getDeviceValue(@RequestParam Map<String, Object> params) {
186         List<DeviceValueDTO> CommonResult = new ArrayList<>();
187         if (params.get("pointNos") == null) {
188             return CommonResult;
189         }
190         List<String> pointNos = Arrays.asList(params.get("pointNos").toString().split(","));
d41f14 191         Map<String, Object> data = dataPointApi.queryPointsRealValue(pointNos);
a6de49 192         if (!CollectionUtils.isEmpty(data)) {
H 193             data.forEach((k, v) -> {
194                 DeviceValueDTO dto = new DeviceValueDTO();
195                 dto.setDataId(k);
196                 dto.setValue(new BigDecimal(v.toString()));
197                 CommonResult.add(dto);
198             });
199         }
200         return CommonResult;
201     }
ed4f78 202
203     @PermitAll
204     @PostMapping("/query-plan/history-value")
205     @Operation(summary = "查询单个计划历史值")
206     public CommonResult<List<ApiDataValueDTO>> queryPlanItemHistoryValue(HttpServletResponse response, HttpServletRequest
207             request, @RequestBody ApiDataQueryDTO dto) {
208         List<ApiDataValueDTO> result = new ArrayList<>();
209         try {
210             apiSecurityUtils.validate(request);
211             result = planItemApi.queryPlanItemHistoryValue(dto);
212             return new CommonResult<List<ApiDataValueDTO>>().setData(result);
a3a072 213         } catch (Exception ex) {
ed4f78 214             return new CommonResult<List<ApiDataValueDTO>>().setMsg(ex.getMessage());
a3a072 215         }
216     }
217
218     @PermitAll
219     @PostMapping("/query-plan/record-value")
220     @Operation(summary = "查询单个计划历史值")
221     public CommonResult<LinkedHashMap<String, List<ApiPlanDataDTO>>> queryPlanItemRecordValue(HttpServletResponse response, HttpServletRequest
222             request, @RequestBody ApiDataQueryDTO dto) {
223         LinkedHashMap<String, List<ApiPlanDataDTO>> result = new LinkedHashMap<>();
224         try {
225             apiSecurityUtils.validate(request);
226             result = planItemApi.queryPlanItemRecordValue(dto);
227             return new CommonResult<LinkedHashMap<String, List<ApiPlanDataDTO>>>().setData(result);
228         } catch (Exception ex) {
229             return new CommonResult<LinkedHashMap<String, List<ApiPlanDataDTO>>>().setMsg(ex.getMessage());
ed4f78 230         }
231     }
232
233     @PostMapping("/query-plans/chart")
234     public CommonResult<BarLineDTO> queryPlansChart(HttpServletResponse response, HttpServletRequest
235             request, @RequestBody ApiDataQueryDTO dto) {
236
237         BarLineDTO CommonResult = new BarLineDTO();
a3a072 238
ed4f78 239         try {
240             apiSecurityUtils.validate(request);
241             List<String> legend = new ArrayList<>();
242             List<SeriesItem> series = new ArrayList<>();
a3a072 243             Calendar calendar = Calendar.getInstance();
244             calendar.set(Calendar.MILLISECOND, 0);
245             calendar.set(Calendar.SECOND, 0);
246             Date endDate = dto.getEnd() == null ? DateUtils.addDateHours(calendar.getTime(), 2) : dto.getEnd();
247             Date startDate = dto.getStart() == null ? calendar.getTime() : dto.getStart();
ed4f78 248             List<String> categories = DateUtils.getTimeScale(startDate, endDate, dto.getGranularity() == null ? 60 : dto.getGranularity());
249             if (CollectionUtils.isEmpty(dto.getItemNos())) {
250                 return new CommonResult<BarLineDTO>().setData(CommonResult);
251             }
252             List<PlanItemEntity> planItemList = new ArrayList<>();
253             dto.getItemNos().forEach(item -> {
254                 planItemList.add(planItemService.getInfoByNo(item));
255             });
256             planItemList.forEach(item -> {
257                 legend.add(item.getItemName());
258                 SeriesItem seriesItem = new SeriesItem();
259                 seriesItem.setName(item.getItemName());
260                 ApiDataQueryDTO queryDto = new ApiDataQueryDTO();
261                 queryDto.setItemNo(item.getItemNo());
262                 queryDto.setStart(startDate);
263                 queryDto.setEnd(endDate);
264                 List<ApiDataValueDTO> list = planItemApi.queryPlanItemHistoryValue(queryDto);
265
266                 List<Object[]> sData = list.stream().map(dataItem -> {
267                     Object[] valueArray = new Object[]{DateUtils.format(dataItem.getDataTime(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND),
268                             dataItem.getDataValue()};
269                     return valueArray;
270                 }).collect(Collectors.toList());
271                 seriesItem.setData(sData);
272                 series.add(seriesItem);
273             });
274             CommonResult.setLegend(legend);
275             CommonResult.setCategories(categories);
276             CommonResult.setSeries(series);
277         } catch (Exception ex) {
278             ex.printStackTrace();
279         }
280         return new CommonResult<BarLineDTO>().setData(CommonResult);
281     }
282
a3a072 283     @PostMapping("/export-plan/history-value")
ed4f78 284     @Operation(summary = "导出计划数据")
a3a072 285     public void exportPlanHistoryValue(HttpServletResponse response, HttpServletRequest
dc303c 286             request, @RequestBody ApiDataQueryDTO dto) throws Exception {
287         apiSecurityUtils.validate(request);
ed4f78 288         Calendar calendar = Calendar.getInstance();
289         calendar.set(Calendar.MILLISECOND, 0);
290         calendar.set(Calendar.SECOND, 0);
a3a072 291         Date endDate = dto.getEnd() == null ? DateUtils.addDateHours(calendar.getTime(), 2) : dto.getEnd();
292         Date startDate = dto.getStart() == null ? calendar.getTime() : dto.getStart();
ed4f78 293         ApiDataQueryDTO queryDto = new ApiDataQueryDTO();
a3a072 294         queryDto.setItemNo(dto.getItemNo());
ed4f78 295         queryDto.setStart(startDate);
296         queryDto.setEnd(endDate);
297         List<ApiDataValueDTO> list = planItemApi.queryPlanItemHistoryValue(queryDto);
a3a072 298         List<PlanItemValueExportVO> exportList = list.stream().map(item -> {
299             PlanItemValueExportVO exportVO = new PlanItemValueExportVO();
300             exportVO.setDataTime(DateUtils.format(item.getDataTime(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
df4f01 301             exportVO.setDataValue(BigDecimal.valueOf(item.getDataValue()).setScale(0, RoundingMode.HALF_UP).toString());
a3a072 302             return exportVO;
303         }).collect(Collectors.toList());
304         ExcelUtils.write(response, "计划数据.xls", "计划数据", PlanItemValueExportVO.class, exportList);
ed4f78 305     }
306
307     @PermitAll
308     @GetMapping("/query-ind/default-value")
309     @Operation(summary = "查询指标默认值")
dc303c 310     public CommonResult<List<ApiIndItemValueDTO>> queryIndItemDefaultValue(HttpServletResponse response, HttpServletRequest
311             request,@RequestParam String itemNo) throws Exception {
312         apiSecurityUtils.validate(request);
ed4f78 313         List<IndItemValueVO> list = indItemCollector.queryValue(itemNo);
314         List<ApiIndItemValueDTO> dtoList = new ArrayList<>();
315         list.forEach(item -> {
316             ApiIndItemValueDTO dto = new ApiIndItemValueDTO();
317             dto.setDataTime(item.getDataTime());
318             dto.setDataValue(item.getDataValue().doubleValue());
319             dtoList.add(dto);
320         });
321         return success(dtoList);
322     }
323
324     @PermitAll
325     @GetMapping("/query-ind/history-value")
326     @Operation(summary = "查询指标历史值")
327     public CommonResult<List<ApiIndItemValueDTO>> queryIndItemHistoryValue(@RequestParam ApiIndItemQueryDTO dto) {
328         List<IndItemValueVO> list = indItemCollector.queryValue(dto.getItemNo(), dto.getStart(), dto.getEnd());
329         return success(ConvertUtils.sourceToTarget(list, ApiIndItemValueDTO.class));
330     }
e255ba 331
L 332     @PermitAll
333     @GetMapping("/query-points/info")
334     @Operation(summary = "根据计算点编号查询测点集合")
335     public CommonResult<PageResult<ApiPointDTO>> queryPageByNo(@RequestParam String pointNo) {
336         PageResult<ApiPointDTO> data = dataPointApi.getPageByNo(pointNo);
337         return success(data);
338     }
339
a6de49 340 }