wangyangyang há 4 anos atrás
pai
commit
666b3b543c

+ 1 - 0
sms_water/src/main/java/com/huaxu/controller/DayMonthYearReportController.java

@@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.*;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 标签信息页面控制器

+ 2 - 0
sms_water/src/main/java/com/huaxu/dao/DayReportMapper.java

@@ -5,6 +5,8 @@ import com.huaxu.dto.ReportDto;
 import com.huaxu.entity.DayReportEntity;
 import java.io.Serializable;
 import java.util.List;
+import java.util.Map;
+
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;

+ 4 - 0
sms_water/src/main/java/com/huaxu/dao/DeviceParmMapper.java

@@ -2,6 +2,8 @@ package com.huaxu.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.huaxu.dto.ReportAttributeDto;
+import com.huaxu.dto.ReportDto;
 import com.huaxu.entity.DeviceParmEntity;
 import com.huaxu.entity.SceneTypeEntity;
 import org.apache.ibatis.annotations.Mapper;
@@ -69,4 +71,6 @@ public interface DeviceParmMapper  {
     List<DeviceParmEntity> selectByDeviceId(Integer id);
 
     List<DeviceParmEntity> selectByDeviceIdForGis(Integer id);
+
+    List<ReportAttributeDto> findAttributeNameList(@Param("report") ReportDto reportDto);
 }

+ 7 - 0
sms_water/src/main/java/com/huaxu/dto/ReportAttributeDto.java

@@ -1,5 +1,6 @@
 package com.huaxu.dto;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -15,6 +16,12 @@ public class ReportAttributeDto implements Serializable {
      */
     @ApiModelProperty("设备属性名称")
     private String attributeName;
+    /**
+     * 设备属性类型
+     */
+    @ApiModelProperty("设备属性类型")
+    @JsonIgnore
+    private Integer attributeType;
     /**
      * 最小值
      */

+ 5 - 0
sms_water/src/main/java/com/huaxu/dto/ReportDto.java

@@ -41,9 +41,14 @@ public class ReportDto implements Serializable {
     @JsonIgnore
     @ApiModelProperty(value = "设备IDS")
     private List<DeviceDto> deviceIds;
+
     @ApiModelProperty("设备数据")
+    @JsonIgnore
     List<ReportAttributeDto> dataValues;
 
+    @ApiModelProperty("报表标题")
+    List<String> dataTitle;
+
     @ApiModelProperty("设备数据")
     List<Map<String,Object>> dataMapValues;
 

+ 80 - 52
sms_water/src/main/java/com/huaxu/service/DayReportService.java

@@ -10,6 +10,7 @@ import com.huaxu.entity.DayReportEntity;
 import com.huaxu.model.LoginUser;
 import com.huaxu.util.UserUtil;
 import org.apache.ibatis.annotations.Param;
+import org.apache.xmlbeans.impl.xb.xsdschema.BlockSet;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.aggregation.DateOperators;
 import org.springframework.stereotype.Service;
@@ -38,6 +39,8 @@ public class DayReportService extends ServiceImpl<DayReportMapper, DayReportEnti
     private SceneService sceneService;
     @Autowired
     private DeviceService deviceService;
+    @Autowired
+    private DeviceParmService deviceParmService;
 
 
     /**
@@ -73,63 +76,88 @@ public class DayReportService extends ServiceImpl<DayReportMapper, DayReportEnti
         DeviceDto deviceDto = new DeviceDto();
         for (Long id : ids) {
             deviceDto.setSceneIds(sceneService.findByParentIdsLike(id));
-            devices.addAll(deviceService.selectList(deviceDto));
+            if (deviceDto.getSceneIds().size() > 0)
+                devices.addAll(deviceService.selectList(deviceDto));
         }
-        //根据设备ID查询报表测点信息
-        DayReportEntity dayReportEntity = new DayReportEntity();
-        dayReportEntity.setYear(year);
-        dayReportEntity.setMonth(month);
-        dayReportEntity.setDay(day);
-        dayReportEntity.setTenantId(currentUser.getTenantId());
-        dayReportEntity.setParentSceneIds(ids);
-        dayReportEntity.setDeviceIds(devices);
-        reportPage = dayReportMapper.findPage(page, dayReportEntity);
-        //固定参数项
-        ReportDto reportDto = new ReportDto();
-        reportDto.setYear(year);
-        reportDto.setMonth(month);
-        reportDto.setDay(day);
-        reportDto.setDeviceIds(devices);
-        List<ReportDto> reportDtos = dayReportMapper.findReport(reportDto);
-        //单个属性值
-        for (ReportDto item : reportPage.getRecords()) {
-            item.setCollectDate(item.getYear() + "-" + String.format("%02d", item.getMonth()) + "-" + String.format("%02d", item.getDay()) + " " + String.format("%02d", item.getHour()) + ":00");
-            item.setDeviceIds(devices);
-            //固定参数项
-            int index = -1;
-            for (int i = 0; i < reportDtos.size(); i++) {
-                if (reportDtos.get(i).getHour().equals(item.getHour()))
-                    index = i;
+        if (devices.size() > 0) {
+            //根据设备ID查询报表测点信息
+            DayReportEntity dayReportEntity = new DayReportEntity();
+            dayReportEntity.setYear(year);
+            dayReportEntity.setMonth(month);
+            dayReportEntity.setDay(day);
+            dayReportEntity.setTenantId(currentUser.getTenantId());
+            dayReportEntity.setParentSceneIds(ids);
+            dayReportEntity.setDeviceIds(devices);
+            //查询到分页的行数
+            reportPage = dayReportMapper.findPage(page, dayReportEntity);
+            //查询标题
+            ReportDto reportDto = new ReportDto();
+            reportDto.setYear(year);
+            reportDto.setMonth(month);
+            reportDto.setDay(day);
+            reportDto.setDeviceIds(devices);
+            List<ReportAttributeDto> reportAttributeDtos2 = deviceParmService.findAttributeNameList(reportDto);
+            List<String> dataTitle = new ArrayList<>();
+            Map<String, Integer> mapsTitle = new LinkedHashMap<>();
+            int numCount = 0;
+            for (ReportAttributeDto title : reportAttributeDtos2) {
+                dataTitle.add(title.getAttributeName());
+                if (!mapsTitle.containsKey(title.getAttributeName()))
+                    mapsTitle.put(title.getAttributeName(), numCount++);
             }
-            if (index != -1) {
-                if ((index + 2) <= reportDtos.size()) {
-                    item.setYieldWaterUsage(reportDtos.get(index).getYieldWaterUsage() - reportDtos.get(index + 1).getYieldWaterUsage());
-                    item.setIntakeWaterUsage(reportDtos.get(index).getIntakeWaterUsage() - reportDtos.get(index + 1).getIntakeWaterUsage());
-                    item.setPowerUsage(reportDtos.get(index).getPowerUsage() - reportDtos.get(index + 1).getPowerUsage());
-                    item.setDrugUsage(reportDtos.get(index).getDrugUsage() - reportDtos.get(index + 1).getDrugUsage());
-                } else {
-                    item.setYieldWaterUsage(0d);
-                    item.setIntakeWaterUsage(0d);
-                    item.setPowerUsage(0d);
-                    item.setDrugUsage(0d);
+            //固定参数项
+            List<ReportDto> reportDtos = dayReportMapper.findReport(reportDto);
+            //单个属性值
+            for (ReportDto item : reportPage.getRecords()) {
+                item.setCollectDate(item.getYear() + "-" + String.format("%02d", item.getMonth()) + "-" + String.format("%02d", item.getDay()) + " " + String.format("%02d", item.getHour()) + ":00");
+                item.setDeviceIds(devices);
+                item.setDataTitle(dataTitle);
+                //固定参数项
+                calcUsage(item, reportDtos);
+                //动态参数项
+                List<ReportAttributeDto> reportAttributeDtos = dayReportMapper.findAttributeList(item);
+                //item.setDataValues(reportAttributeDtos);
+                Map<String, ReportAttributeDto> mapData = new LinkedHashMap<>();
+                for (ReportAttributeDto itemData : reportAttributeDtos) {
+                    if (!mapData.containsKey(itemData.getAttributeName()))
+                        mapData.put(itemData.getAttributeName(), itemData);
                 }
+                List<Map<String, Object>> maps = new ArrayList<>();
+                for (String key : mapsTitle.keySet()) {
+                    Map<String, Object> map = new LinkedHashMap<>();
+                    map.put("attributeName", mapData.get(key) == null ? key : mapData.get(key).getAttributeName());
+                    map.put("minValue" + mapsTitle.get(key), mapData.get(key) == null ? "-" : mapData.get(key).getMinValue());
+                    map.put("maxValue" + mapsTitle.get(key), mapData.get(key) == null ? "-" : mapData.get(key).getMaxValue());
+                    map.put("avgValue" + mapsTitle.get(key), mapData.get(key) == null ? "-" : mapData.get(key).getAvgValue());
+                    map.put("sumValue" + mapsTitle.get(key), mapData.get(key) == null ? "-" : mapData.get(key).getSumValue());
+                    map.put("latestValue" + mapsTitle.get(key), mapData.get(key) == null ? "-" : mapData.get(key).getLatestValue());
+                    maps.add(map);
+                }
+                item.setDataMapValues(maps);
             }
-            //动态参数项
-            List<ReportAttributeDto> reportAttributeDtos = dayReportMapper.findAttributeList(item);
-            item.setDataValues(reportAttributeDtos);
-            List<Map<String, Object>> maps = new ArrayList<>();
-            for (int num = 0; num < reportAttributeDtos.size(); num++) {
-                Map<String, Object> map = new HashMap<>();
-                map.put("attributeName", reportAttributeDtos.get(num).getAttributeName());
-                map.put("minValue" + num, reportAttributeDtos.get(num).getMinValue());
-                map.put("maxValue" + num, reportAttributeDtos.get(num).getMaxValue());
-                map.put("avgValue" + num, reportAttributeDtos.get(num).getAvgValue());
-                map.put("sumValue" + num, reportAttributeDtos.get(num).getSumValue());
-                map.put("latestValue" + num, reportAttributeDtos.get(num).getLatestValue());
-                maps.add(map);
-            }
-            item.setDataMapValues(maps);
         }
         return reportPage;
     }
+    //计算固定的参数项
+    private void calcUsage(ReportDto item, List<ReportDto> reportDtos) {
+        //固定参数项
+        int index = -1;
+        for (int i = 0; i < reportDtos.size(); i++) {
+            if (reportDtos.get(i).getHour().equals(item.getHour()))
+                index = i;
+        }
+        if (index != -1) {
+            if ((index + 2) <= reportDtos.size()) {
+                item.setYieldWaterUsage(reportDtos.get(index).getYieldWaterUsage() - reportDtos.get(index + 1).getYieldWaterUsage());
+                item.setIntakeWaterUsage(reportDtos.get(index).getIntakeWaterUsage() - reportDtos.get(index + 1).getIntakeWaterUsage());
+                item.setPowerUsage(reportDtos.get(index).getPowerUsage() - reportDtos.get(index + 1).getPowerUsage());
+                item.setDrugUsage(reportDtos.get(index).getDrugUsage() - reportDtos.get(index + 1).getDrugUsage());
+            } else {
+                item.setYieldWaterUsage(0d);
+                item.setIntakeWaterUsage(0d);
+                item.setPowerUsage(0d);
+                item.setDrugUsage(0d);
+            }
+        }
+    }
 }

+ 5 - 0
sms_water/src/main/java/com/huaxu/service/DeviceParmService.java

@@ -1,7 +1,10 @@
 package com.huaxu.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.huaxu.dto.ReportAttributeDto;
+import com.huaxu.dto.ReportDto;
 import com.huaxu.entity.DeviceParmEntity;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.Collection;
 import java.util.List;
@@ -74,4 +77,6 @@ public interface DeviceParmService {
      * @return
      */
     IPage<DeviceParmEntity> selectPage(IPage<DeviceParmEntity> page, DeviceParmEntity deviceParmEntity);
+
+    List<ReportAttributeDto> findAttributeNameList(ReportDto reportDto);
 }

+ 76 - 50
sms_water/src/main/java/com/huaxu/service/MonthReportService.java

@@ -35,6 +35,8 @@ public class MonthReportService extends ServiceImpl<MonthReportMapper, MonthRepo
     private SceneService sceneService;
     @Autowired
     private DeviceService deviceService;
+    @Autowired
+    private DeviceParmService deviceParmService;
 
     /**
      * 查列表
@@ -44,7 +46,6 @@ public class MonthReportService extends ServiceImpl<MonthReportMapper, MonthRepo
     }
 
 
-
     /**
      * 保存
      */
@@ -71,60 +72,85 @@ public class MonthReportService extends ServiceImpl<MonthReportMapper, MonthRepo
         DeviceDto deviceDto = new DeviceDto();
         for (Long id : ids) {
             deviceDto.setSceneIds(sceneService.findByParentIdsLike(id));
-            devices.addAll(deviceService.selectList(deviceDto));
+            if (deviceDto.getSceneIds().size() > 0)
+                devices.addAll(deviceService.selectList(deviceDto));
         }
-        MonthReportEntity monthReportEntity = new MonthReportEntity();
-        monthReportEntity.setYear(year);
-        monthReportEntity.setMonth(month);
-        monthReportEntity.setTenantId(currentUser.getTenantId());
-        monthReportEntity.setParentSceneIds(ids);
-        monthReportEntity.setDeviceIds(devices);
-        reportPage = monthReportMapper.findPage(page, monthReportEntity);
-        //固定参数项
-        ReportDto reportDto = new ReportDto();
-        reportDto.setYear(year);
-        reportDto.setMonth(month);
-        reportDto.setDeviceIds(devices);
-        List<ReportDto> reportDtos = monthReportMapper.findReport(reportDto);
-        //单个属性值
-        for (ReportDto item : reportPage.getRecords()) {
-            item.setCollectDate(item.getYear() + "-" + String.format("%02d", item.getMonth()) + "-" + String.format("%02d", item.getDay()));
-            item.setDeviceIds(devices);
-            //固定参数项
-            int index = -1;
-            for (int i=0;i<reportDtos.size();i++) {
-                if(reportDtos.get(i).getDay().equals(item.getDay()))
-                    index = i;
+        if (devices.size() > 0) {
+            MonthReportEntity monthReportEntity = new MonthReportEntity();
+            monthReportEntity.setYear(year);
+            monthReportEntity.setMonth(month);
+            monthReportEntity.setTenantId(currentUser.getTenantId());
+            monthReportEntity.setParentSceneIds(ids);
+            monthReportEntity.setDeviceIds(devices);
+            reportPage = monthReportMapper.findPage(page, monthReportEntity);
+            //查询标题
+            ReportDto reportDto = new ReportDto();
+            reportDto.setYear(year);
+            reportDto.setMonth(month);
+            reportDto.setDeviceIds(devices);
+            List<ReportAttributeDto> reportAttributeDtos2 = deviceParmService.findAttributeNameList(reportDto);
+            List<String> dataTitle = new ArrayList<>();
+            Map<String, Integer> mapsTitle = new LinkedHashMap<>();
+            int numCount = 0;
+            for (ReportAttributeDto title : reportAttributeDtos2) {
+                dataTitle.add(title.getAttributeName());
+                if (!mapsTitle.containsKey(title.getAttributeName()))
+                    mapsTitle.put(title.getAttributeName(), numCount++);
             }
-            if(index!=-1) {
-                if ((index + 2) <= reportDtos.size()) {
-                    item.setYieldWaterUsage(reportDtos.get(index).getYieldWaterUsage() - reportDtos.get(index + 1).getYieldWaterUsage());
-                    item.setIntakeWaterUsage(reportDtos.get(index).getIntakeWaterUsage() - reportDtos.get(index + 1).getIntakeWaterUsage());
-                    item.setPowerUsage(reportDtos.get(index).getPowerUsage() - reportDtos.get(index + 1).getPowerUsage());
-                    item.setDrugUsage(reportDtos.get(index).getDrugUsage() - reportDtos.get(index + 1).getDrugUsage());
-                } else {
-                    item.setYieldWaterUsage(0d);
-                    item.setIntakeWaterUsage(0d);
-                    item.setPowerUsage(0d);
-                    item.setDrugUsage(0d);
+            //固定参数项
+            List<ReportDto> reportDtos = monthReportMapper.findReport(reportDto);
+            //单个属性值
+            for (ReportDto item : reportPage.getRecords()) {
+                item.setCollectDate(item.getYear() + "-" + String.format("%02d", item.getMonth()) + "-" + String.format("%02d", item.getDay()));
+                item.setDeviceIds(devices);
+                item.setDataTitle(dataTitle);
+                //固定参数项
+                calcUsage(item, reportDtos);
+                //动态参数项
+                List<ReportAttributeDto> reportAttributeDtos = monthReportMapper.findAttributeList(item);
+               // item.setDataValues(reportAttributeDtos);
+                Map<String, ReportAttributeDto> mapData = new LinkedHashMap<>();
+                for (ReportAttributeDto itemData : reportAttributeDtos) {
+                    if (!mapData.containsKey(itemData.getAttributeName()))
+                        mapData.put(itemData.getAttributeName(), itemData);
                 }
+                List<Map<String, Object>> maps = new ArrayList<>();
+                for (String key : mapsTitle.keySet()) {
+                    Map<String, Object> map = new LinkedHashMap<>();
+                    map.put("attributeName", mapData.get(key) == null ? key : mapData.get(key).getAttributeName());
+                    map.put("minValue" + mapsTitle.get(key), mapData.get(key) == null ? "-" : mapData.get(key).getMinValue());
+                    map.put("maxValue" + mapsTitle.get(key), mapData.get(key) == null ? "-" : mapData.get(key).getMaxValue());
+                    map.put("avgValue" + mapsTitle.get(key), mapData.get(key) == null ? "-" : mapData.get(key).getAvgValue());
+                    map.put("sumValue" + mapsTitle.get(key), mapData.get(key) == null ? "-" : mapData.get(key).getSumValue());
+                    map.put("latestValue" + mapsTitle.get(key), mapData.get(key) == null ? "-" : mapData.get(key).getLatestValue());
+                    maps.add(map);
+                }
+                item.setDataMapValues(maps);
             }
-            //动态参数项
-            List<ReportAttributeDto> reportAttributeDtos = monthReportMapper.findAttributeList(item);
-            item.setDataValues(reportAttributeDtos);
-            List<Map<String, Object>> maps = new ArrayList<>();
-            for (int num = 0; num < reportAttributeDtos.size(); num++) {
-                Map<String, Object> map = new HashMap<>();
-                map.put("attributeName", reportAttributeDtos.get(num).getAttributeName());
-                map.put("minValue" + num, reportAttributeDtos.get(num).getMinValue());
-                map.put("maxValue" + num, reportAttributeDtos.get(num).getMaxValue());
-                map.put("avgValue" + num, reportAttributeDtos.get(num).getAvgValue());
-                map.put("sumValue" + num, reportAttributeDtos.get(num).getSumValue());
-                map.put("latestValue" + num, reportAttributeDtos.get(num).getLatestValue());
-                maps.add(map);
-            }
-            item.setDataMapValues(maps);
         }
         return reportPage;
     }
+
+    //计算固定的参数项
+    private void calcUsage(ReportDto item, List<ReportDto> reportDtos) {
+        //固定参数项
+        int index = -1;
+        for (int i = 0; i < reportDtos.size(); i++) {
+            if (reportDtos.get(i).getDay().equals(item.getDay()))
+                index = i;
+        }
+        if (index != -1) {
+            if ((index + 2) <= reportDtos.size()) {
+                item.setYieldWaterUsage(reportDtos.get(index).getYieldWaterUsage() - reportDtos.get(index + 1).getYieldWaterUsage());
+                item.setIntakeWaterUsage(reportDtos.get(index).getIntakeWaterUsage() - reportDtos.get(index + 1).getIntakeWaterUsage());
+                item.setPowerUsage(reportDtos.get(index).getPowerUsage() - reportDtos.get(index + 1).getPowerUsage());
+                item.setDrugUsage(reportDtos.get(index).getDrugUsage() - reportDtos.get(index + 1).getDrugUsage());
+            } else {
+                item.setYieldWaterUsage(0d);
+                item.setIntakeWaterUsage(0d);
+                item.setPowerUsage(0d);
+                item.setDrugUsage(0d);
+            }
+        }
+    }
 }

+ 1 - 0
sms_water/src/main/java/com/huaxu/service/ReportService.java

@@ -11,6 +11,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.Map;
 
 @Service
 public class ReportService {

+ 74 - 47
sms_water/src/main/java/com/huaxu/service/YearReportService.java

@@ -37,6 +37,8 @@ public class YearReportService extends ServiceImpl<YearReportMapper, YearReportE
     private SceneService sceneService;
     @Autowired
     private DeviceService deviceService;
+    @Autowired
+    private DeviceParmService deviceParmService;
 
     /**
      * 查列表
@@ -72,58 +74,83 @@ public class YearReportService extends ServiceImpl<YearReportMapper, YearReportE
         DeviceDto deviceDto = new DeviceDto();
         for (Long id : ids) {
             deviceDto.setSceneIds(sceneService.findByParentIdsLike(id));
-            devices.addAll(deviceService.selectList(deviceDto));
+            if (deviceDto.getSceneIds().size() > 0)
+                devices.addAll(deviceService.selectList(deviceDto));
         }
-        YearReportEntity yearReportEntity = new YearReportEntity();
-        yearReportEntity.setYear(year);
-        yearReportEntity.setTenantId(currentUser.getTenantId());
-        yearReportEntity.setParentSceneIds(ids);
-        yearReportEntity.setDeviceIds(devices);
-        reportPage = yearReportMapper.findPage(page, yearReportEntity);
-        //固定参数项
-        ReportDto reportDto = new ReportDto();
-        reportDto.setYear(year);
-        reportDto.setDeviceIds(devices);
-        List<ReportDto> reportDtos = yearReportMapper.findReport(reportDto);
-        //单个属性值
-        for (ReportDto item : reportPage.getRecords()) {
-            item.setCollectDate(item.getYear() + "-" + String.format("%02d", item.getMonth()));
-            item.setDeviceIds(devices);
-            //固定参数项
-            int index = -1;
-            for (int i=0;i<reportDtos.size();i++) {
-                if(reportDtos.get(i).getMonth().equals(item.getMonth()))
-                    index = i;
+        if(devices.size()>0) {
+            YearReportEntity yearReportEntity = new YearReportEntity();
+            yearReportEntity.setYear(year);
+            yearReportEntity.setTenantId(currentUser.getTenantId());
+            yearReportEntity.setParentSceneIds(ids);
+            yearReportEntity.setDeviceIds(devices);
+            reportPage = yearReportMapper.findPage(page, yearReportEntity);
+            //查询标题
+            ReportDto reportDto = new ReportDto();
+            reportDto.setYear(year);
+            reportDto.setDeviceIds(devices);
+            List<ReportAttributeDto> reportAttributeDtos2 = deviceParmService.findAttributeNameList(reportDto);
+            List<String> dataTitle = new ArrayList<>();
+            Map<String, Integer> mapsTitle = new LinkedHashMap<>();
+            int numCount = 0;
+            for (ReportAttributeDto title : reportAttributeDtos2) {
+                dataTitle.add(title.getAttributeName());
+                if (!mapsTitle.containsKey(title.getAttributeName()))
+                    mapsTitle.put(title.getAttributeName(), numCount++);
             }
-            if(index!=-1) {
-                if ((index + 2) <= reportDtos.size()) {
-                    item.setYieldWaterUsage(reportDtos.get(index).getYieldWaterUsage() - reportDtos.get(index + 1).getYieldWaterUsage());
-                    item.setIntakeWaterUsage(reportDtos.get(index).getIntakeWaterUsage() - reportDtos.get(index + 1).getIntakeWaterUsage());
-                    item.setPowerUsage(reportDtos.get(index).getPowerUsage() - reportDtos.get(index + 1).getPowerUsage());
-                    item.setDrugUsage(reportDtos.get(index).getDrugUsage() - reportDtos.get(index + 1).getDrugUsage());
-                } else {
-                    item.setYieldWaterUsage(0d);
-                    item.setIntakeWaterUsage(0d);
-                    item.setPowerUsage(0d);
-                    item.setDrugUsage(0d);
+            //固定参数项
+            List<ReportDto> reportDtos = yearReportMapper.findReport(reportDto);
+            //单个属性值
+            for (ReportDto item : reportPage.getRecords()) {
+                item.setCollectDate(item.getYear() + "-" + String.format("%02d", item.getMonth()));
+                item.setDeviceIds(devices);
+                item.setDataTitle(dataTitle);
+                //固定参数项
+                calcUsage(item, reportDtos);
+
+                //动态参数项
+                List<ReportAttributeDto> reportAttributeDtos = yearReportMapper.findAttributeList(item);
+                // item.setDataValues(reportAttributeDtos);
+                Map<String, ReportAttributeDto> mapData = new LinkedHashMap<>();
+                for (ReportAttributeDto itemData : reportAttributeDtos) {
+                    if (!mapData.containsKey(itemData.getAttributeName()))
+                        mapData.put(itemData.getAttributeName(), itemData);
                 }
+                List<Map<String, Object>> maps = new ArrayList<>();
+                for (String key : mapsTitle.keySet()) {
+                    Map<String, Object> map = new LinkedHashMap<>();
+                    map.put("attributeName", mapData.get(key) == null ? key : mapData.get(key).getAttributeName());
+                    map.put("minValue" + mapsTitle.get(key), mapData.get(key) == null ? "-" : mapData.get(key).getMinValue());
+                    map.put("maxValue" + mapsTitle.get(key), mapData.get(key) == null ? "-" : mapData.get(key).getMaxValue());
+                    map.put("avgValue" + mapsTitle.get(key), mapData.get(key) == null ? "-" : mapData.get(key).getAvgValue());
+                    map.put("sumValue" + mapsTitle.get(key), mapData.get(key) == null ? "-" : mapData.get(key).getSumValue());
+                    map.put("latestValue" + mapsTitle.get(key), mapData.get(key) == null ? "-" : mapData.get(key).getLatestValue());
+                    maps.add(map);
+                }
+                item.setDataMapValues(maps);
             }
-            //动态参数项
-            List<ReportAttributeDto> reportAttributeDtos = yearReportMapper.findAttributeList(item);
-            item.setDataValues(reportAttributeDtos);
-            List<Map<String, Object>> maps = new ArrayList<>();
-            for (int num = 0; num < reportAttributeDtos.size(); num++) {
-                Map<String, Object> map = new HashMap<>();
-                map.put("attributeName", reportAttributeDtos.get(num).getAttributeName());
-                map.put("minValue" + num, reportAttributeDtos.get(num).getMinValue());
-                map.put("maxValue" + num, reportAttributeDtos.get(num).getMaxValue());
-                map.put("avgValue" + num, reportAttributeDtos.get(num).getAvgValue());
-                map.put("sumValue" + num, reportAttributeDtos.get(num).getSumValue());
-                map.put("latestValue" + num, reportAttributeDtos.get(num).getLatestValue());
-                maps.add(map);
-            }
-            item.setDataMapValues(maps);
         }
         return reportPage;
     }
+    //计算固定的参数项
+    private void calcUsage(ReportDto item, List<ReportDto> reportDtos) {
+        //固定参数项
+        int index = -1;
+        for (int i = 0; i < reportDtos.size(); i++) {
+            if (reportDtos.get(i).getMonth().equals(item.getMonth()))
+                index = i;
+        }
+        if (index != -1) {
+            if ((index + 2) <= reportDtos.size()) {
+                item.setYieldWaterUsage(reportDtos.get(index).getYieldWaterUsage() - reportDtos.get(index + 1).getYieldWaterUsage());
+                item.setIntakeWaterUsage(reportDtos.get(index).getIntakeWaterUsage() - reportDtos.get(index + 1).getIntakeWaterUsage());
+                item.setPowerUsage(reportDtos.get(index).getPowerUsage() - reportDtos.get(index + 1).getPowerUsage());
+                item.setDrugUsage(reportDtos.get(index).getDrugUsage() - reportDtos.get(index + 1).getDrugUsage());
+            } else {
+                item.setYieldWaterUsage(0d);
+                item.setIntakeWaterUsage(0d);
+                item.setPowerUsage(0d);
+                item.setDrugUsage(0d);
+            }
+        }
+    }
 }

+ 7 - 0
sms_water/src/main/java/com/huaxu/service/impl/DeviceParmServiceImpl.java

@@ -3,6 +3,8 @@ package com.huaxu.service.impl;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huaxu.dao.DeviceParmMapper;
+import com.huaxu.dto.ReportAttributeDto;
+import com.huaxu.dto.ReportDto;
 import com.huaxu.entity.DeviceParmEntity;
 import com.huaxu.model.LoginUser;
 import com.huaxu.service.DeviceParmService;
@@ -117,4 +119,9 @@ public class DeviceParmServiceImpl  implements DeviceParmService  {
         return deviceParmMapper.selectPage(page,deviceParmEntity);
     }
 
+    @Override
+    public List<ReportAttributeDto> findAttributeNameList(ReportDto reportDto) {
+        return deviceParmMapper.findAttributeNameList(reportDto);
+    }
+
 }

+ 2 - 0
sms_water/src/main/resources/mapper/DayReportMapper.xml

@@ -103,7 +103,9 @@
         a.parent_scene_id as "parentSceneId",
         a.parent_scene_name as "parentSceneName"
         FROM sms_day_report a
+        inner join sms_device_parm b on a.DEVICE_ID = b.DEVICE_ID
         <where>
+            b.IS_REPORT=1
             <if test="dayReport.tenantId != null  and dayReport.tenantId != ''">and a.tenant_id =
                 #{dayReport.tenantId}
             </if>

+ 19 - 1
sms_water/src/main/resources/mapper/DeviceParmMapper.xml

@@ -190,6 +190,24 @@
         where p.status = 1
 
     </select>
-
+    <select id="findAttributeNameList" resultType="com.huaxu.dto.ReportAttributeDto">
+        SELECT DISTINCT tab.attributeName,tab.attributeType
+        from
+        (SELECT
+        IFNULL(a.REMARK,b.`NAME`) AS "attributeName",
+        b.ATTRIBUTE_TYPE as "attributeType"
+        FROM sms_device_parm a
+        INNER JOIN sms_device_attribute b on a.ATTRIBUTE_ID=b.ID
+        where
+        a.IS_REPORT=1
+        <if test="report.deviceIds != null and report.deviceIds.size() > 0">
+            and a.DEVICE_ID in
+            <foreach collection="report.deviceIds" item="dramaId" open="(" close=")" separator=",">
+                #{dramaId.id}
+            </foreach>
+        </if>
+        ORDER BY a.SEQ
+        ) as tab
+    </select>
 
 </mapper>