|
@@ -1,7 +1,276 @@
|
|
|
package com.usky.backend.service.impl;
|
|
|
|
|
|
-import com.usky.backend.service.DataQueryService;
|
|
|
+import cn.hutool.db.meta.Table;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
+import com.usky.backend.domain.*;
|
|
|
+import com.usky.backend.domain.request.HistoryQueryVo;
|
|
|
+import com.usky.backend.domain.request.LastQueryVo;
|
|
|
+import com.usky.backend.domain.response.HistoryResultVo;
|
|
|
+import com.usky.backend.domain.response.LastResultVo;
|
|
|
+import com.usky.backend.service.*;
|
|
|
+import net.sf.ehcache.search.expression.IsNull;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+@Service
|
|
|
public class DataQueryServiceImpl implements DataQueryService {
|
|
|
+ @Autowired
|
|
|
+ private DataRealTimeService dataRealTimeService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DataVdHistoryService dataVdHistoryService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DataEgHistoryService dataEgHistoryService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DataLgHistoryService dataLgHistoryService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DataGrHistoryService dataGrHistoryService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DataEvHistoryService dataEvHistoryService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DataLcHistoryService dataLcHistoryService;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HistoryResultVo historyMetric(String deviceId, String metric, String startTime, String endTime,Integer deviceType){
|
|
|
+
|
|
|
+ List<MetricItemVo> items = new ArrayList<>();
|
|
|
+ if(deviceType == 501){
|
|
|
+ LambdaQueryWrapper<DataVdHistory> vdQuery = Wrappers.lambdaQuery();
|
|
|
+ vdQuery.select(DataVdHistory::getAttributeData,DataVdHistory::getDataTime)
|
|
|
+ .eq(DataVdHistory::getDeviceId,deviceId)
|
|
|
+ .eq(DataVdHistory::getAttributeName,metric)
|
|
|
+ .between(DataVdHistory::getDataTime,startTime,endTime);
|
|
|
+ List<DataVdHistory> list = dataVdHistoryService.list(vdQuery);
|
|
|
+
|
|
|
+ if(CollectionUtils.isNotEmpty(list)){
|
|
|
+ for(int i=0;i<list.size();i++){
|
|
|
+ items.add(new MetricItemVo(list.get(i).getDataTime(),list.get(i).getAttributeData()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if(deviceType == 502){
|
|
|
+ LambdaQueryWrapper<DataEgHistory> egQuery = Wrappers.lambdaQuery();
|
|
|
+ egQuery.select(DataEgHistory::getAttributeData,DataEgHistory::getDataTime)
|
|
|
+ .eq(DataEgHistory::getDeviceId,deviceId)
|
|
|
+ .eq(DataEgHistory::getAttributeName,metric)
|
|
|
+ .between(DataEgHistory::getDataTime,startTime,endTime);
|
|
|
+ List<DataEgHistory> list = dataEgHistoryService.list(egQuery);
|
|
|
+
|
|
|
+ if(CollectionUtils.isNotEmpty(list)){
|
|
|
+ for(int i=0;i<list.size();i++){
|
|
|
+ items.add(new MetricItemVo(list.get(i).getDataTime(),list.get(i).getAttributeData()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if(deviceType == 503){
|
|
|
+ LambdaQueryWrapper<DataLgHistory> lgQuery = Wrappers.lambdaQuery();
|
|
|
+ lgQuery.select(DataLgHistory::getAttributeData,DataLgHistory::getDataTime)
|
|
|
+ .eq(DataLgHistory::getDeviceId,deviceId)
|
|
|
+ .eq(DataLgHistory::getAttributeName,metric)
|
|
|
+ .between(DataLgHistory::getDataTime,startTime,endTime);
|
|
|
+ List<DataLgHistory> list = dataLgHistoryService.list(lgQuery);
|
|
|
+
|
|
|
+ if(CollectionUtils.isNotEmpty(list)){
|
|
|
+ for(int i=0;i<list.size();i++){
|
|
|
+ items.add(new MetricItemVo(list.get(i).getDataTime(),list.get(i).getAttributeData()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if(deviceType == 504){
|
|
|
+ LambdaQueryWrapper<DataGrHistory> grQuery = Wrappers.lambdaQuery();
|
|
|
+ grQuery.select(DataGrHistory::getAttributeData,DataGrHistory::getDataTime)
|
|
|
+ .eq(DataGrHistory::getDeviceId,deviceId)
|
|
|
+ .eq(DataGrHistory::getAttributeName,metric)
|
|
|
+ .between(DataGrHistory::getDataTime,startTime,endTime);
|
|
|
+ List<DataGrHistory> list = dataGrHistoryService.list(grQuery);
|
|
|
+
|
|
|
+ if(CollectionUtils.isNotEmpty(list)){
|
|
|
+ for(int i=0;i<list.size();i++){
|
|
|
+ items.add(new MetricItemVo(list.get(i).getDataTime(),list.get(i).getAttributeData()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if(deviceType == 509){
|
|
|
+ LambdaQueryWrapper<DataEvHistory> evQuery = Wrappers.lambdaQuery();
|
|
|
+ evQuery.select(DataEvHistory::getAttributeData,DataEvHistory::getDataTime)
|
|
|
+ .eq(DataEvHistory::getDeviceId,deviceId)
|
|
|
+ .eq(DataEvHistory::getAttributeName,metric)
|
|
|
+ .between(DataEvHistory::getDataTime,startTime,endTime);
|
|
|
+ List<DataEvHistory> list = dataEvHistoryService.list(evQuery);
|
|
|
+
|
|
|
+ if(CollectionUtils.isNotEmpty(list)){
|
|
|
+ for(int i=0;i<list.size();i++){
|
|
|
+ items.add(new MetricItemVo(list.get(i).getDataTime(),list.get(i).getAttributeData()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if(deviceType == 510){
|
|
|
+ LambdaQueryWrapper<DataLcHistory> lcQuery = Wrappers.lambdaQuery();
|
|
|
+ lcQuery.select(DataLcHistory::getAttributeData,DataLcHistory::getDataTime)
|
|
|
+ .eq(DataLcHistory::getDeviceId,deviceId)
|
|
|
+ .eq(DataLcHistory::getAttributeName,metric)
|
|
|
+ .between(DataLcHistory::getDataTime,startTime,endTime);
|
|
|
+ List<DataLcHistory> list = dataLcHistoryService.list(lcQuery);
|
|
|
+
|
|
|
+ if(CollectionUtils.isNotEmpty(list)){
|
|
|
+ for(int i=0;i<list.size();i++){
|
|
|
+ items.add(new MetricItemVo(list.get(i).getDataTime(),list.get(i).getAttributeData()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ HistoryResultVo historyResultVo = new HistoryResultVo(deviceId,metric,items);
|
|
|
+
|
|
|
+ return historyResultVo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<HistoryResultVo> historyMetrics(HistoryQueryVo historyQueryVo){
|
|
|
+ List<HistoryResultVo> result = new ArrayList<>();
|
|
|
+ String deviceId = historyQueryVo.getDeviceId();
|
|
|
+ String startTime = historyQueryVo.getStartTime();
|
|
|
+ String endTime = historyQueryVo.getEndTime();
|
|
|
+ Integer deviceType = historyQueryVo.getDeviceType();
|
|
|
+ List<String> metrics = historyQueryVo.getMetrics();
|
|
|
+ if(CollectionUtils.isNotEmpty(metrics)){
|
|
|
+ for(int i=0;i<metrics.size();i++){
|
|
|
+ List<MetricItemVo> items = new ArrayList<>();
|
|
|
+ if(deviceType == 501){
|
|
|
+ LambdaQueryWrapper<DataVdHistory> vdQuery = Wrappers.lambdaQuery();
|
|
|
+ vdQuery.select(DataVdHistory::getAttributeData,DataVdHistory::getDataTime)
|
|
|
+ .eq(DataVdHistory::getDeviceId,deviceId)
|
|
|
+ .eq(DataVdHistory::getAttributeName,metrics.get(i))
|
|
|
+ .between(DataVdHistory::getDataTime,startTime,endTime);
|
|
|
+ List<DataVdHistory> list = dataVdHistoryService.list(vdQuery);
|
|
|
+
|
|
|
+ if(CollectionUtils.isNotEmpty(list)){
|
|
|
+ for(int j=0;j<list.size();j++){
|
|
|
+ items.add(new MetricItemVo(list.get(j).getDataTime(),list.get(j).getAttributeData()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if(deviceType == 502){
|
|
|
+ LambdaQueryWrapper<DataEgHistory> egQuery = Wrappers.lambdaQuery();
|
|
|
+ egQuery.select(DataEgHistory::getAttributeData,DataEgHistory::getDataTime)
|
|
|
+ .eq(DataEgHistory::getDeviceId,deviceId)
|
|
|
+ .eq(DataEgHistory::getAttributeName,metrics.get(i))
|
|
|
+ .between(DataEgHistory::getDataTime,startTime,endTime);
|
|
|
+ List<DataEgHistory> list = dataEgHistoryService.list(egQuery);
|
|
|
+
|
|
|
+ if(CollectionUtils.isNotEmpty(list)){
|
|
|
+ for(int j=0;j<list.size();j++){
|
|
|
+ items.add(new MetricItemVo(list.get(j).getDataTime(),list.get(j).getAttributeData()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if(deviceType == 503){
|
|
|
+ LambdaQueryWrapper<DataLgHistory> lgQuery = Wrappers.lambdaQuery();
|
|
|
+ lgQuery.select(DataLgHistory::getAttributeData,DataLgHistory::getDataTime)
|
|
|
+ .eq(DataLgHistory::getDeviceId,deviceId)
|
|
|
+ .eq(DataLgHistory::getAttributeName,metrics.get(i))
|
|
|
+ .between(DataLgHistory::getDataTime,startTime,endTime);
|
|
|
+ List<DataLgHistory> list = dataLgHistoryService.list(lgQuery);
|
|
|
+
|
|
|
+ if(CollectionUtils.isNotEmpty(list)){
|
|
|
+ for(int j=0;j<list.size();j++){
|
|
|
+ items.add(new MetricItemVo(list.get(j).getDataTime(),list.get(j).getAttributeData()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if(deviceType == 504){
|
|
|
+ LambdaQueryWrapper<DataGrHistory> grQuery = Wrappers.lambdaQuery();
|
|
|
+ grQuery.select(DataGrHistory::getAttributeData,DataGrHistory::getDataTime)
|
|
|
+ .eq(DataGrHistory::getDeviceId,deviceId)
|
|
|
+ .eq(DataGrHistory::getAttributeName,metrics.get(i))
|
|
|
+ .between(DataGrHistory::getDataTime,startTime,endTime);
|
|
|
+ List<DataGrHistory> list = dataGrHistoryService.list(grQuery);
|
|
|
+
|
|
|
+ if(CollectionUtils.isNotEmpty(list)){
|
|
|
+ for(int j=0;j<list.size();j++){
|
|
|
+ items.add(new MetricItemVo(list.get(j).getDataTime(),list.get(j).getAttributeData()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if(deviceType == 509){
|
|
|
+ LambdaQueryWrapper<DataEvHistory> evQuery = Wrappers.lambdaQuery();
|
|
|
+ evQuery.select(DataEvHistory::getAttributeData,DataEvHistory::getDataTime)
|
|
|
+ .eq(DataEvHistory::getDeviceId,deviceId)
|
|
|
+ .eq(DataEvHistory::getAttributeName,metrics.get(i))
|
|
|
+ .between(DataEvHistory::getDataTime,startTime,endTime);
|
|
|
+ List<DataEvHistory> list = dataEvHistoryService.list(evQuery);
|
|
|
+
|
|
|
+ if(CollectionUtils.isNotEmpty(list)){
|
|
|
+ for(int j=0;j<list.size();j++){
|
|
|
+ items.add(new MetricItemVo(list.get(j).getDataTime(),list.get(j).getAttributeData()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else if(deviceType == 510){
|
|
|
+ LambdaQueryWrapper<DataLcHistory> lcQuery = Wrappers.lambdaQuery();
|
|
|
+ lcQuery.select(DataLcHistory::getAttributeData,DataLcHistory::getDataTime)
|
|
|
+ .eq(DataLcHistory::getDeviceId,deviceId)
|
|
|
+ .eq(DataLcHistory::getAttributeName,metrics.get(i))
|
|
|
+ .between(DataLcHistory::getDataTime,startTime,endTime);
|
|
|
+ List<DataLcHistory> list = dataLcHistoryService.list(lcQuery);
|
|
|
+
|
|
|
+ if(CollectionUtils.isNotEmpty(list)){
|
|
|
+ for(int j=0;j<list.size();j++){
|
|
|
+ items.add(new MetricItemVo(list.get(j).getDataTime(),list.get(j).getAttributeData()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ HistoryResultVo historyResultVo = new HistoryResultVo(deviceId,metrics.get(i),items);
|
|
|
+ result.add(historyResultVo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<LastResultVo> last(LastQueryVo lastQueryVo){
|
|
|
+ List<LastResultVo> list = new ArrayList<>();
|
|
|
+
|
|
|
+ List<String> items = lastQueryVo.getMetrics();
|
|
|
+ for(int i=0;i<items.size();i++){
|
|
|
+ LambdaQueryWrapper<DataRealTime> queryWrapper = Wrappers.lambdaQuery();
|
|
|
+ queryWrapper.select(DataRealTime::getAttributeData,DataRealTime::getDataTime)
|
|
|
+ .eq(DataRealTime::getDeviceId,lastQueryVo.getDeviceId())
|
|
|
+ .eq(DataRealTime::getAttributeName,items.get(i));
|
|
|
+ DataRealTime one = dataRealTimeService.getOne(queryWrapper);
|
|
|
+ if(one != null){
|
|
|
+ LastResultVo lastResultVo = new LastResultVo(items.get(i),one.getDataTime(),one.getAttributeData());
|
|
|
+ list.add(lastResultVo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<StatusVO> status(){
|
|
|
+ List<StatusVO> list = new ArrayList<>();
|
|
|
+ QueryWrapper<DataRealTime> query = Wrappers.query();
|
|
|
+ query.select("device_id as deviceId","Max(data_time) as maxTime")
|
|
|
+ .groupBy("device_id");
|
|
|
+ List<Map<String,Object>> maps = dataRealTimeService.listMaps(query);
|
|
|
+ if(maps.size()>0) {
|
|
|
+ for (int i = 0; i < maps.size(); i++) {
|
|
|
+ StatusVO statusVO = new StatusVO();
|
|
|
+ statusVO.setDeviceId(maps.get(i).get("deviceId").toString());
|
|
|
+ statusVO.setTime(LocalDateTime.parse(maps.get(i).get("maxTime").toString(),DateTimeFormatter.ISO_DATE_TIME));
|
|
|
+ list.add(statusVO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return list;
|
|
|
+ }
|
|
|
|
|
|
}
|