Browse Source

'开发获取设备某个时间端内的汇总值接口'

james 1 year ago
parent
commit
0bb46efee4

+ 13 - 0
service-backend/service-backend-biz/src/main/java/com/usky/backend/controller/DataQueryController.java

@@ -8,6 +8,7 @@ import com.usky.backend.domain.response.LastResultVo;
 import com.usky.backend.domain.vo.DataAverageExportVO;
 import com.usky.backend.domain.vo.DataAverageRequestVO;
 import com.usky.backend.domain.vo.DataAverageResponseVO;
+import com.usky.backend.domain.vo.DataTotalRequestVO;
 import com.usky.backend.service.DataQueryService;
 import com.usky.common.core.bean.ApiResult;
 import com.usky.common.core.utils.poi.ExcelUtil;
@@ -21,6 +22,7 @@ import java.io.IOException;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -82,6 +84,17 @@ public class DataQueryController {
         return ApiResult.success(dataQueryService.status());
     }
 
+    /**
+     * 获取设备某个时间端内的汇总值
+     * @param requestVO
+     * @return
+     */
+    @PostMapping("deviceDataTotal")
+    @ApiOperation("获取设备某个时间端内的汇总值")
+    public ApiResult<List<Map<String,Object>>> deviceDataTotal(@RequestBody DataTotalRequestVO requestVO){
+        return ApiResult.success(dataQueryService.deviceDataTotal(requestVO));
+    }
+
     /**
      * 设备日平均值、月平均值、年平均值
      * @param requestVO

+ 12 - 0
service-backend/service-backend-biz/src/main/java/com/usky/backend/domain/vo/DataHistoryTotalVO.java

@@ -0,0 +1,12 @@
+package com.usky.backend.domain.vo;
+
+import lombok.Data;
+
+@Data
+public class DataHistoryTotalVO {
+    private String deviceId;
+
+    private String attributeName;
+
+    private double totalValue;
+}

+ 27 - 0
service-backend/service-backend-biz/src/main/java/com/usky/backend/domain/vo/DataTotalRequestVO.java

@@ -0,0 +1,27 @@
+package com.usky.backend.domain.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class DataTotalRequestVO {
+
+    /**
+     * 分组方式("Each","All")
+     */
+    private String groupType;
+
+    //产品编码
+    private String productCode;
+    //设备类型编码
+    private String deviceType;
+    //设备Id
+    private List<String> deviceIds;
+    //设备属性集合
+    private List<String> attributeNames;
+    //开始时间
+    private String startTime;
+    //结束时间
+    private String endTime;
+}

+ 8 - 0
service-backend/service-backend-biz/src/main/java/com/usky/backend/domain/vo/DataTotalResponseVO.java

@@ -0,0 +1,8 @@
+package com.usky.backend.domain.vo;
+
+import lombok.Data;
+
+@Data
+public class DataTotalResponseVO {
+
+}

+ 14 - 0
service-backend/service-backend-biz/src/main/java/com/usky/backend/mapper/DataRealTimeMapper.java

@@ -4,6 +4,7 @@ import com.usky.backend.domain.DataRealTime;
 //import com.usky.backend.domain.request.DeviceDataInfoVO;
 import com.usky.backend.domain.MetricItemVo;
 import com.usky.backend.domain.vo.DataHistoryAvergerVO;
+import com.usky.backend.domain.vo.DataHistoryTotalVO;
 import com.usky.common.mybatis.core.CrudMapper;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
@@ -26,6 +27,19 @@ public interface DataRealTimeMapper extends CrudMapper<DataRealTime> {
 
     String QueryDeviceTypeAbbrevia(@Param("deviceType") String deviceType);
 
+    List<DataHistoryTotalVO> QueryEachHistoryTotalData(@Param("tableName") String tableName,
+                                                       @Param("startTime") String startTime,
+                                                       @Param("endTime") String endTime,
+                                                       @Param("productCode") String productCode,
+                                                       @Param("deviceIdList") List<String> deviceIdList,
+                                                       @Param("attributeNameList") List<String> attributeNameList);
+
+    List<DataHistoryTotalVO> QueryTotalHistoryTotalData(@Param("tableName") String tableName,
+                                                        @Param("startTime") String startTime,
+                                                        @Param("endTime") String endTime,
+                                                        @Param("productCode") String productCode,
+                                                        @Param("attributeNameList") List<String> attributeNameList);
+
     List<DataHistoryAvergerVO> QueryEachHistoryAvrgData(@Param("leftLen") Integer leftLen,
                                                         @Param("tableName") String tableName,
                                                         @Param("startTime") String startTime,

+ 4 - 0
service-backend/service-backend-biz/src/main/java/com/usky/backend/service/DataQueryService.java

@@ -9,9 +9,11 @@ import com.usky.backend.domain.response.LastResultVo;
 import com.usky.backend.domain.vo.DataAverageExportVO;
 import com.usky.backend.domain.vo.DataAverageRequestVO;
 import com.usky.backend.domain.vo.DataAverageResponseVO;
+import com.usky.backend.domain.vo.DataTotalRequestVO;
 import org.springframework.web.bind.annotation.RequestBody;
 
 import java.util.List;
+import java.util.Map;
 
 public interface DataQueryService {
     HistoryResultVo historyMetric(String deviceId, String metric, String startTime, String endTime,String typeAbbrevia);
@@ -22,6 +24,8 @@ public interface DataQueryService {
 
     List<StatusVO> status();
 
+    List<Map<String,Object>> deviceDataTotal(DataTotalRequestVO requestVO);
+
     List<DataAverageResponseVO> deviceDataAverage(DataAverageRequestVO requestVO);
 
     List<DataAverageExportVO> DataAverageExport(DataAverageRequestVO requestVO);

+ 41 - 4
service-backend/service-backend-biz/src/main/java/com/usky/backend/service/impl/DataQueryServiceImpl.java

@@ -13,10 +13,7 @@ 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.domain.vo.DataAverageExportVO;
-import com.usky.backend.domain.vo.DataAverageRequestVO;
-import com.usky.backend.domain.vo.DataAverageResponseVO;
-import com.usky.backend.domain.vo.DataHistoryAvergerVO;
+import com.usky.backend.domain.vo.*;
 import com.usky.backend.mapper.DataRealTimeMapper;
 import com.usky.backend.service.*;
 import net.sf.ehcache.search.expression.IsNull;
@@ -26,6 +23,7 @@ import org.springframework.stereotype.Service;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -113,6 +111,45 @@ public class DataQueryServiceImpl implements DataQueryService {
         return list;
     }
 
+    @Override
+    public List<Map<String,Object>> deviceDataTotal(DataTotalRequestVO requestVO){
+        List<Map<String,Object>> list = new ArrayList<>();
+        //设备类型简称
+        String typeAbbrevia = dataRealTimeMapper.QueryDeviceTypeAbbrevia(requestVO.getDeviceType());
+        String tableName = "data_"+typeAbbrevia+"_history";
+
+        List<DataHistoryTotalVO> list1 = new ArrayList<>();
+        if(requestVO.getGroupType().equals("Each")){
+            list1 = dataRealTimeMapper.QueryEachHistoryTotalData(tableName,requestVO.getStartTime(),requestVO.getEndTime(),requestVO.getProductCode(),requestVO.getDeviceIds(),requestVO.getAttributeNames());
+        }else if(requestVO.getGroupType().equals("Total")){
+            list1 = dataRealTimeMapper.QueryTotalHistoryTotalData(tableName,requestVO.getStartTime(),requestVO.getEndTime(),requestVO.getProductCode(),requestVO.getAttributeNames());
+        }
+        if(CollectionUtils.isNotEmpty(list1)){
+            List<String> deviceIdList = new ArrayList<>();
+            for(int i=0;i<list1.size();i++){
+                if(!deviceIdList.contains(list1.get(i).getDeviceId())){
+                    deviceIdList.add(list1.get(i).getDeviceId());
+                }
+            }
+            if(CollectionUtils.isNotEmpty(deviceIdList)){
+                for(int j=0;j<deviceIdList.size();j++){
+                    Map<String,Object> map = new HashMap<>();
+
+                    map.put("deviceId",deviceIdList.get(j));
+
+                    for(int k=0;k<list1.size();k++){
+                        if(deviceIdList.get(j).equals(list1.get(k).getDeviceId())){
+                            map.put(list1.get(k).getAttributeName(),list1.get(k).getTotalValue());
+                        }
+                    }
+                    list.add(map);
+                }
+            }
+        }
+
+        return list;
+    }
+
     @Override
     public List<DataAverageResponseVO> deviceDataAverage(DataAverageRequestVO requestVO){
         List<DataAverageResponseVO> list = new ArrayList<>();

+ 30 - 0
service-backend/service-backend-biz/src/main/resources/mapper/backend/DataRealTimeMapper.xml

@@ -45,6 +45,36 @@
             </if>
         </where>
     </select>
+    <select id="QueryEachHistoryTotalData" resultType="com.usky.backend.domain.vo.DataHistoryTotalVO">
+        select device_id as deviceId,attribute_name as attributeName,sum(attribute_data) as totalValue
+        FROM ${tableName}
+        WHERE data_time  BETWEEN  #{startTime} AND  #{endTime} AND product_code = #{productCode}
+        <if test="deviceIdList != null and deviceIdList.size() > 0">
+            AND device_id in
+            <foreach item="item" collection="deviceIdList" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="attributeNameList != null and attributeNameList.size() > 0">
+            AND attribute_name in
+            <foreach item="item" collection="attributeNameList" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        group by device_id,attribute_name
+    </select>
+    <select id="QueryTotalHistoryTotalData" resultType="com.usky.backend.domain.vo.DataHistoryTotalVO">
+        select "all" as deviceId,attribute_name as attributeName,sum(attribute_data) as totalValue
+        FROM ${tableName}
+        WHERE data_time  BETWEEN  #{startTime} AND  #{endTime} AND product_code = #{productCode}
+        <if test="attributeNameList != null and attributeNameList.size() > 0">
+            AND attribute_name in
+            <foreach item="item" collection="attributeNameList" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        group by attribute_name
+    </select>
     <select id="QueryEachHistoryAvrgData" resultType="com.usky.backend.domain.vo.DataHistoryAvergerVO">
         SELECT a.data_date as dataDate,concat("房间",a.device_id) as deviceId, a.attribute_name as attributeName ,avg(a.attribute_data) as avrg
         from (select product_code,device_id,attribute_name,attribute_data,left(data_time,#{leftLen}) as data_date FROM ${tableName} WHERE data_time  BETWEEN  #{startTime} AND  #{endTime} AND product_code = #{productCode}

+ 1 - 1
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDataInfoServiceImpl.java

@@ -105,7 +105,7 @@ public class DmpDataInfoServiceImpl extends AbstractCrudService<DmpDataInfoMappe
                         }
                         dataInfo.setMetrics(mp);
                         dataInfo.setDevice_id(dmpDeviceDataRequestVO.getDeviceId());
-                        dataInfo.setProduct_id(list.get(0).getId().toString());
+                        dataInfo.setProduct_id(list.get(0).getProductCode());
                         dataInfo.setTimestamp(dmpDeviceDataRequestVO.getTimestamp());
                         dataInfo.setDevice_type(list.get(0).getDeviceType()+"-"+shortName);
                     }