| 
					
				 | 
			
			
				@@ -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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |