Jay
2025-01-17 570ca8e69bf33cff32c3ae1c5d54015de6804c95
提交 | 用户 | 时间
60201e 1 package com.iailab.module.data.api.point;
2
48c064 3 import com.iailab.framework.common.pojo.PageResult;
a2aa90 4 import com.iailab.framework.common.util.date.DateUtils;
b8b8cb 5 import com.iailab.framework.common.util.object.ConvertUtils;
60201e 6 import com.iailab.module.data.api.point.dto.*;
b8b8cb 7 import com.iailab.module.data.influxdb.pojo.InfluxPointValuePOJO;
8 import com.iailab.module.data.influxdb.service.InfluxDBService;
a2aa90 9 import com.iailab.module.data.influxdb.service.impl.InfluxDBServiceImpl;
b8b8cb 10 import com.iailab.module.data.point.collection.PointCollector;
318cc2 11 import com.iailab.module.data.point.collection.handler.CalculateHandle;
48c064 12 import com.iailab.module.data.point.dto.DaMathPointDTO;
b8b8cb 13 import com.iailab.module.data.point.dto.DaPointDTO;
14 import com.iailab.module.data.point.dto.DaPointWriteValueDTO;
48c064 15 import com.iailab.module.data.point.service.DaMathPointService;
1c3121 16 import com.iailab.module.data.point.service.DaPointService;
859884 17 import com.iailab.module.data.point.vo.DaPointPageReqVO;
1c3121 18 import org.springframework.beans.factory.annotation.Autowired;
b8b8cb 19 import org.springframework.util.CollectionUtils;
60201e 20 import org.springframework.validation.annotation.Validated;
21 import org.springframework.web.bind.annotation.RestController;
22
b8b8cb 23 import java.util.*;
24 import java.util.stream.Collectors;
48c064 25 import java.util.stream.IntStream;
60201e 26
27 /**
28  * @author PanZhibao
29  * @Description
30  * @createTime 2024年09月02日
31  */
32 @RestController // 提供 RESTful API 接口,给 Feign 调用
33 @Validated
34 public class DataPointApiImpl implements DataPointApi {
35
1c3121 36     @Autowired
37     private DaPointService daPointService;
38
b8b8cb 39     @Autowired
40     private PointCollector pointCollector;
41
42     @Autowired
43     private InfluxDBService influxDBService;
48c064 44
L 45     @Autowired
46     private DaMathPointService daMathPointService;
60201e 47
48     @Override
73ed35 49     public ApiPointDTO getInfoById(String pointId) {
07890e 50         return daPointService.getSimpleInfoById(pointId);
D 51     }
52
53     @Override
50084d 54     public List<ApiPointDTO> getInfoByIds(Set<String> pointIds) {
07890e 55         List<ApiPointDTO> result = new ArrayList<>(pointIds.size());
D 56         for (String pointId : pointIds) {
57             result.add(daPointService.getSimpleInfoById(pointId));
58         }
59         return result;
b8b8cb 60     }
61
62     @Override
63     public ApiPointDTO getInfoByNo(String pointNo) {
64         return ConvertUtils.sourceToTarget(daPointService.getSimpleInfoByNo(pointNo), ApiPointDTO.class);
60201e 65     }
66
67     @Override
73ed35 68     public Map<String, Object> queryPointsRealValue(List<String> pointNos) {
b8b8cb 69         return pointCollector.getCurrentValue(pointNos);
60201e 70     }
71
72     @Override
73ed35 73     public Map<String, List<Map<String, Object>>> queryPointsHistoryValue(ApiPointsValueQueryDTO queryDto) {
b8b8cb 74         Map<String, List<Map<String, Object>>> data = new HashMap<>();
34ba73 75         Calendar calendar = Calendar.getInstance();
76         calendar.set(Calendar.MILLISECOND, 0);
b8b8cb 77         if (queryDto.getEnd() == null) {
34ba73 78             queryDto.setEnd(calendar.getTime());
b8b8cb 79         }
34ba73 80         if (queryDto.getStart() == null) {
81             calendar.add(Calendar.HOUR_OF_DAY, -1);
82             queryDto.setStart(calendar.getTime());
83         }
84
b8b8cb 85         Map<String, Object> params = new HashMap<>(1);
86         params.put("pointNos", queryDto.getPointNos());
87         List<DaPointDTO> pointList = daPointService.list(params);
88         if (CollectionUtils.isEmpty(pointList)) {
89             return data;
90         }
91         List<InfluxPointValuePOJO> influxParams = pointList.stream().map(item -> {
92             InfluxPointValuePOJO pojo = new InfluxPointValuePOJO();
93             pojo.setPoint(item.getPointNo());
94             pojo.setType(item.getDataType());
95             return pojo;
96         }).collect(Collectors.toList());
97         data = influxDBService.queryPointsValues(influxParams, queryDto.getStart(), queryDto.getEnd());
98         return data;
60201e 99     }
100
101     @Override
73ed35 102     public List<ApiPointValueDTO> queryPointHistoryValue(ApiPointValueQueryDTO queryDto) {
b8b8cb 103         DaPointDTO daPointDTO = daPointService.getByNo(queryDto.getPointNo());
104         InfluxPointValuePOJO pojo = new InfluxPointValuePOJO();
105         pojo.setPoint(queryDto.getPointNo());
106         pojo.setType(daPointDTO.getDataType());
107         Date startTime = queryDto.getStart();
108         Date endTime = queryDto.getEnd();
34ba73 109         Calendar calendar = Calendar.getInstance();
110         calendar.set(Calendar.MILLISECOND, 0);
111         if (endTime == null) {
112             endTime = calendar.getTime();
113         }
114         if (startTime == null) {
115             calendar.add(Calendar.HOUR_OF_DAY, -1);
116             startTime = calendar.getTime();
117         }
b8b8cb 118         List<Map<String, Object>> list = influxDBService.queryPointValues(pojo, startTime, endTime);
119         List<ApiPointValueDTO> pointValueList = new ArrayList<>();
120         for (int i = 0; list.size() - i >= 1; i++) {
121             ApiPointValueDTO pointValue = new ApiPointValueDTO();
9df837 122             pointValue.setV(Double.parseDouble(list.get(i).get(InfluxDBServiceImpl.VALUE).toString()));
123             pointValue.setT(DateUtils.parse(list.get(i).get(InfluxDBServiceImpl.TIME).toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND));
b8b8cb 124             pointValueList.add(pointValue);
125         }
126         return pointValueList;
60201e 127     }
128
129     @Override
b8b8cb 130     public Boolean writePointRealValue(ApiPointValueWriteDTO writeDTO) {
131         try {
132             DaPointWriteValueDTO wr = new DaPointWriteValueDTO();
133             wr.setPointNo(writeDTO.getPointNo());
134             wr.setPointValue(writeDTO.getValue());
135             pointCollector.setValue(wr);
136             return true;
137         } catch (Exception ex) {
2780e6 138             ex.printStackTrace();
b8b8cb 139             return false;
140         }
60201e 141     }
48c064 142
L 143     @Override
859884 144     public PageResult<ApiPointDTO> queryMathPointCurrentValue(ApiPointPageReqVO reqVO) {
116db5 145         DaPointDTO daPointDTO = daPointService.getSimpleInfoByNo(reqVO.getPointNo());
48c064 146         DaMathPointDTO daMathPointDTO = daMathPointService.getByPoint(daPointDTO.getId());
318cc2 147         String[] pointNos = daMathPointDTO.getExpression().split(CalculateHandle.regex);
859884 148         DaPointPageReqVO pageReqVO = new DaPointPageReqVO();
149         pageReqVO.setPageNo(reqVO.getPageNo());
150         pageReqVO.setPageSize(reqVO.getPageSize());
151         pageReqVO.setPointNos(Arrays.asList(pointNos));
152         PageResult<DaPointDTO> pageResult = daPointService.queryPage(pageReqVO);
153         List<String> pointNosL = pageResult.getList().stream().map(item -> {
154             return item.getPointNo();
48c064 155         }).collect(Collectors.toList());
859884 156         Map<String, Object> currentValueMap = pointCollector.getCurrentValue(pointNosL);
157
158         List<ApiPointDTO> dataList = new ArrayList<>();
159         pageResult.getList().forEach(item -> {
160             ApiPointDTO dto = new ApiPointDTO();
161             dto.setPointNo(item.getPointNo());
162             dto.setPointName(item.getPointName());
163             dto.setCurrentValue(currentValueMap.get(item.getPointNo()).toString());
d902db 164             dataList.add(dto);
859884 165         });
166         return new PageResult<>(dataList, pageResult.getTotal());
48c064 167     }
60201e 168 }