| 
					
				 | 
			
			
				@@ -1,5 +1,6 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package com.example.demo.service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.example.demo.dao.SiteDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.example.demo.entity.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.annotation.Value; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -21,7 +22,10 @@ import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public class SiteService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    MongoTemplate mongoTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MongoTemplate mongoTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private SiteDao siteDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Value("${Account.username}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private String username;    //账号 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -38,7 +42,12 @@ public class SiteService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(requestReadingMeterDto.getMeterCode() != null && requestReadingMeterDto.getMeterCode() .size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            List<MeterInfoDto> meterInfos = this.queryMeterInfoList(requestReadingMeterDto.getMeterCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Long> deviceIds = siteDao.findDeviceIds(requestReadingMeterDto.getMeterCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(deviceIds == null || deviceIds.size()==0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return new ResponseMsg( false,"未查询到有效数据",new ResultDto()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<MeterInfoDto> meterInfos = this.queryMeterInfoList(deviceIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if(meterInfos.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 return new ResponseMsg( true,"成功",new ResultDto(meterInfos)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }else{ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -76,7 +85,11 @@ public class SiteService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 return new ResponseMsg(false, "查询表数请限制在1000个以内", new ResultDto()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //查询数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            List<MeterReadDto> meterReads = this.queryReadInfoList(meterCodes,readDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Long> deviceIds = siteDao.findDeviceIds(meterCodes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(deviceIds == null || deviceIds.size()==0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return new ResponseMsg( false,"未查询到有效数据",new ResultDto()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<MeterReadDto> meterReads = this.queryReadInfoList(deviceIds,readDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (meterCodes != null && meterCodes.size() > 0 && meterReads.size() != meterCodes.size()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //遍历未查询到表的编码 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -91,12 +104,16 @@ public class SiteService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 c.add(Calendar.DAY_OF_MONTH, -1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Integer yesterday = Integer.valueOf(formatter.format(requestReadingMeterDto.getReadingTime())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //查询前一天的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                List<MeterReadDto> meterRead2 = this.queryReadInfoList(meterCodes,yesterday); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //遍历未查询到表的编码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                for (MeterReadDto meterReadDto : meterRead2) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    meterCodes.remove(meterReadDto.getMeterCode());//移除已经查询到的表号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<Long> deviceIds2 = siteDao.findDeviceIds(meterCodes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(deviceIds == null || deviceIds.size()==0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    List<MeterReadDto> meterRead2 = this.queryReadInfoList(deviceIds2,yesterday); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    for (MeterReadDto meterReadDto : meterRead2) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        meterCodes.remove(meterReadDto.getMeterCode());//移除已经查询到的表号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    meterReads.addAll(meterRead2);//合并两次查询的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                meterReads.addAll(meterRead2);//合并两次查询的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //遍历未查询到表的编码 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //未查询到的数据标记异常 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 for (String meterCode : meterCodes) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -119,13 +136,13 @@ public class SiteService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public List<MeterReadDto> queryReadInfoList(List<String> meterCodes, Integer readDate){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public List<MeterReadDto> queryReadInfoList(List<Long> deviceIds, Integer readDate){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Query query = new Query(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(meterCodes != null && meterCodes.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            query.addCriteria(Criteria.where("meterNo").in(meterCodes)) ; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(deviceIds != null && deviceIds.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            query.addCriteria(Criteria.where("deviceId").in(deviceIds)) ; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         query.addCriteria(Criteria.where("readData").ne(null)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        query.addCriteria(Criteria.where("customerId").is(3)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        query.addCriteria(Criteria.where("customerId").is(2)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         query.addCriteria(Criteria.where("status").is(1)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         query.addCriteria(Criteria.where("readDate").is(readDate)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         query.fields().include("meterNo"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -137,13 +154,13 @@ public class SiteService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return list; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public List<MeterInfoDto> queryMeterInfoList(List<String> meterCodes) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public List<MeterInfoDto> queryMeterInfoList(List<Long> deviceIds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Criteria criteria = Criteria.where("readData").ne(null) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                .and("customerId").is(3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .and("customerId").is(2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .and("status").is(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(meterCodes != null && meterCodes.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            criteria.and("meterNo").in(meterCodes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(deviceIds != null && deviceIds.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            criteria.and("deviceId").in(deviceIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Aggregation agg = Aggregation.newAggregation( 
			 |