package com.iailab.module.data.api.point; import com.iailab.framework.common.util.date.DateUtils; import com.iailab.framework.common.util.object.ConvertUtils; import com.iailab.module.data.api.point.dto.*; import com.iailab.module.data.influxdb.pojo.InfluxPointValuePOJO; import com.iailab.module.data.influxdb.service.InfluxDBService; import com.iailab.module.data.influxdb.service.impl.InfluxDBServiceImpl; import com.iailab.module.data.point.collection.PointCollector; import com.iailab.module.data.point.dto.DaPointDTO; import com.iailab.module.data.point.dto.DaPointWriteValueDTO; import com.iailab.module.data.point.service.DaPointService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RestController; import java.util.*; import java.util.stream.Collectors; /** * @author PanZhibao * @Description * @createTime 2024年09月02日 */ @RestController // 提供 RESTful API 接口,给 Feign 调用 @Validated public class DataPointApiImpl implements DataPointApi { @Autowired private DaPointService daPointService; @Autowired private PointCollector pointCollector; @Autowired private InfluxDBService influxDBService; @Override public ApiPointDTO getInfoById(String pointId) { return daPointService.getSimpleInfoById(pointId); } @Override public List getInfoByIds(List pointIds) { List result = new ArrayList<>(pointIds.size()); for (String pointId : pointIds) { result.add(daPointService.getSimpleInfoById(pointId)); } return result; } @Override public ApiPointDTO getInfoByNo(String pointNo) { return ConvertUtils.sourceToTarget(daPointService.getSimpleInfoByNo(pointNo), ApiPointDTO.class); } @Override public Map queryPointsRealValue(List pointNos) { return pointCollector.getCurrentValue(pointNos); } @Override public Map>> queryPointsHistoryValue(ApiPointsValueQueryDTO queryDto) { Map>> data = new HashMap<>(); if (queryDto.getStart() == null) { queryDto.setStart(new Date()); } if (queryDto.getEnd() == null) { queryDto.setEnd(new Date()); } Map params = new HashMap<>(1); params.put("pointNos", queryDto.getPointNos()); List pointList = daPointService.list(params); if (CollectionUtils.isEmpty(pointList)) { return data; } List influxParams = pointList.stream().map(item -> { InfluxPointValuePOJO pojo = new InfluxPointValuePOJO(); pojo.setPoint(item.getPointNo()); pojo.setType(item.getDataType()); return pojo; }).collect(Collectors.toList()); data = influxDBService.queryPointsValues(influxParams, queryDto.getStart(), queryDto.getEnd()); return data; } @Override public List queryPointHistoryValue(ApiPointValueQueryDTO queryDto) { DaPointDTO daPointDTO = daPointService.getByNo(queryDto.getPointNo()); InfluxPointValuePOJO pojo = new InfluxPointValuePOJO(); pojo.setPoint(queryDto.getPointNo()); pojo.setType(daPointDTO.getDataType()); Date startTime = queryDto.getStart(); Date endTime = queryDto.getEnd(); List> list = influxDBService.queryPointValues(pojo, startTime, endTime); List pointValueList = new ArrayList<>(); for (int i = 0; list.size() - i >= 1; i++) { ApiPointValueDTO pointValue = new ApiPointValueDTO(); pointValue.setV(Double.parseDouble(list.get(i).get(InfluxDBServiceImpl.VALUE).toString())); pointValue.setT(DateUtils.parse(list.get(i).get(InfluxDBServiceImpl.TIME).toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)); pointValueList.add(pointValue); } return pointValueList; } @Override public Boolean writePointRealValue(ApiPointValueWriteDTO writeDTO) { try { DaPointWriteValueDTO wr = new DaPointWriteValueDTO(); wr.setPointNo(writeDTO.getPointNo()); wr.setPointValue(writeDTO.getValue()); pointCollector.setValue(wr); return true; } catch (Exception ex) { return false; } } }