Просмотр исходного кода

新增 获取云飞气象站历史数据接口

zhaiyifei 1 год назад
Родитель
Сommit
21f906e3af

+ 2 - 5
src/main/java/com/yunfeiyun/agmp/iotm/device/qxz/controller/IotDeviceQxzController.java

@@ -1,6 +1,5 @@
 package com.yunfeiyun.agmp.iotm.device.qxz.controller;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yunfeiyun.agmp.common.core.domain.AjaxResult;
 import com.yunfeiyun.agmp.common.core.page.TableDataInfo;
 import com.yunfeiyun.agmp.iot.common.constant.devicetype.IotDeviceDictConst;
@@ -58,13 +57,11 @@ public class IotDeviceQxzController extends BaseController {
      */
     @GetMapping("/data/list")
     public TableDataInfo dataList(IotDeviceQxzDataListReqVo reqVo) {
-        // 因为最终查询不是第一个,所以分页不能放在这里
-//        startPage();
         IotDeviceBaseFunReqVo iotDeviceBaseFunReqVo = new IotDeviceBaseFunReqVo();
         iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
         iotDeviceBaseFunReqVo.setMethodName("dataList");
         iotDeviceBaseFunReqVo.setParam(reqVo);
-        return getDataTable((IPage) iotDeviceCommonService.func(iotDeviceBaseFunReqVo));
+        return iotDeviceCommonService.func(iotDeviceBaseFunReqVo);
     }
 
     /**
@@ -78,7 +75,7 @@ public class IotDeviceQxzController extends BaseController {
         iotDeviceBaseFunReqVo.setDevBid(reqVo.getDevBid());
         iotDeviceBaseFunReqVo.setMethodName("chartList");
         iotDeviceBaseFunReqVo.setParam(reqVo);
-        List<IotDeviceListResVo> list = (List<IotDeviceListResVo>) iotDeviceCommonService.func(iotDeviceBaseFunReqVo);
+        List<IotDeviceListResVo> list = iotDeviceCommonService.func(iotDeviceBaseFunReqVo);
         return AjaxResult.success(list);
     }
 }

+ 0 - 9
src/main/java/com/yunfeiyun/agmp/iotm/device/qxz/domain/YfQxzChartDataDto.java

@@ -1,9 +0,0 @@
-package com.yunfeiyun.agmp.iotm.device.qxz.domain;
-
-import com.yunfeiyun.agmp.iot.common.domain.QxzChartDataDto;
-import lombok.Data;
-
-@Data
-public class YfQxzChartDataDto extends QxzChartDataDto {
-
-}

+ 78 - 7
src/main/java/com/yunfeiyun/agmp/iotm/device/qxz/service/impl/IotYfQxzServiceImpl.java

@@ -1,6 +1,11 @@
 package com.yunfeiyun.agmp.iotm.device.qxz.service.impl;
 
 import com.alibaba.fastjson2.JSONArray;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yunfeiyun.agmp.common.constant.ErrorCode;
+import com.yunfeiyun.agmp.common.core.page.PageDomain;
+import com.yunfeiyun.agmp.common.core.page.TableDataInfo;
+import com.yunfeiyun.agmp.common.core.page.TableSupport;
 import com.yunfeiyun.agmp.common.utils.DateUtils;
 import com.yunfeiyun.agmp.common.utils.StringUtils;
 import com.yunfeiyun.agmp.iot.common.constant.IotErrorCode;
@@ -12,21 +17,21 @@ import com.yunfeiyun.agmp.iot.common.service.MongoService;
 import com.yunfeiyun.agmp.iotm.device.common.service.IotDeviceBaseService;
 import com.yunfeiyun.agmp.iotm.device.common.service.impl.IotDeviceBaseServiceImpl;
 import com.yunfeiyun.agmp.iotm.device.qxz.domain.IotDeviceQxzDataListReqVo;
-import com.yunfeiyun.agmp.iotm.device.qxz.domain.YfQxzChartDataDto;
 import com.yunfeiyun.agmp.iotm.util.MongoUtil;
 import com.yunfeiyun.agmp.iotm.web.service.IIotDeviceService;
 import com.yunfeiyun.agmp.iotm.web.service.IIotDevicefactorService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.mongodb.core.aggregation.*;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.stereotype.Service;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.text.ParseException;
+import java.util.*;
 
 @Service(value = ServiceNameConst.SERVICE_YF_QXZ)
+@Slf4j
 public class IotYfQxzServiceImpl extends IotDeviceBaseServiceImpl implements IotDeviceBaseService {
 
     @Autowired
@@ -39,6 +44,72 @@ public class IotYfQxzServiceImpl extends IotDeviceBaseServiceImpl implements Iot
     private IIotDeviceService iotDeviceService;
 
     /**
+     * 获取数据列表接口
+     * @param reqVo
+     */
+    public TableDataInfo dataList(IotDeviceQxzDataListReqVo reqVo) throws ParseException {
+        TableDataInfo rspData = new TableDataInfo();
+        rspData.setCode(ErrorCode.SUCCESS.getCode());
+        rspData.setMsg(ErrorCode.SUCCESS.getMessage());
+        rspData.setData(new ArrayList<>());
+        rspData.setTotal(0);
+
+        IotDevice findDevice = iotDeviceService.selectIotDeviceByDevBid(reqVo.getDevBid());
+
+        String devBid = findDevice.getDevBid();
+        Date startDate = null;
+        Date endDate = null;
+        try{
+            startDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, reqVo.getStartTime());
+            endDate = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, reqVo.getEndTime());
+        }catch (Exception e){
+            log.error("时间格式错误", e);
+            throw new IotBizException(ErrorCode.INVALID_PARAMETER.getCode(), "请输入正确的起止时间");
+        }
+
+        Criteria criteria = new Criteria().and("devBid").is(devBid);
+        criteria = criteria.andOperator(
+                Criteria.where("time").gte(startDate),
+                Criteria.where("time").lte(endDate)
+        );
+
+        MatchOperation matchOperation = Aggregation.match(criteria);
+
+        GroupOperation groupOperation = Aggregation.group("time")
+                .push("$$ROOT").as("data");
+
+        ProjectionOperation projectionOperationResult = Aggregation.project("_id")
+                .and("_id").as("time")
+                .and("data").as("dataList");
+
+        SortOperation sortOperation = Aggregation.sort(Sort.Direction.DESC, "time");
+
+        Aggregation aggregation = Aggregation.newAggregation(
+                matchOperation,
+                groupOperation,
+                projectionOperationResult,
+                sortOperation
+        );
+
+        PageDomain pageDomain = TableSupport.buildPageRequest();
+        IPage<QxzDataListDto> qxzDataListDtoIPage = mongoService.aggregate(IotYfqxzdata.class, aggregation, QxzDataListDto.class, pageDomain);
+        //查出该设备的“自定义要素信息列表”
+        IotDevicefactor param = new IotDevicefactor();
+        param.setDevBid(devBid);
+        List<IotDevicefactor> factorList = iotDevicefactorService.selectIotDevicefactorList(param);
+
+        List<List<IotQxzDataListRseVo>> rest = new ArrayList<>();
+        for(QxzDataListDto item: qxzDataListDtoIPage.getRecords()){
+            List<QxzDataDto> dataList = item.getDataList();
+            List<IotQxzDataListRseVo> iotQxzDataListRseVoList = ElementFactorUtil.qxzListProcessData(dataList, factorList, findDevice, false);
+            rest.add(iotQxzDataListRseVoList);
+        }
+        rspData.setData(rest);
+        rspData.setTotal(qxzDataListDtoIPage.getTotal());
+        return rspData;
+    }
+
+    /**
      * 获取折线图数据列表接口
      * @param reqVo
      */
@@ -120,13 +191,13 @@ public class IotYfQxzServiceImpl extends IotDeviceBaseServiceImpl implements Iot
                 projectionOperation2,
                 sortOperation2
         );
-        List<QxzChartDataDto> dataList = mongoService.aggregate(IotYfqxzdata.class, aggregation, YfQxzChartDataDto.class);
+        List<QxzDataDto> dataList = mongoService.aggregate(IotYfqxzdata.class, aggregation, QxzDataDto.class);
 
         //查出该设备的“自定义要素信息列表”
         IotDevicefactor param = new IotDevicefactor();
         param.setDevBid(devBid);
         List<IotDevicefactor> factorList = iotDevicefactorService.selectIotDevicefactorList(param);
-        List<IotQxzDataListRseVo> iotXphChartListResVoList = ElementFactorUtil.qxzChartProcessData(dataList, factorList, findDevice, false);
-        return iotXphChartListResVoList;
+        List<IotQxzDataListRseVo> iotQxzDataListRseVoList = ElementFactorUtil.qxzChartProcessData(dataList, factorList, findDevice, false);
+        return iotQxzDataListRseVoList;
     }
 }