| 
					
				 | 
			
			
				@@ -0,0 +1,183 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package com.bz.smart_city.service.impl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.bz.smart_city.commom.model.CommonQueryCondition; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.bz.smart_city.commom.model.Pagination; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.bz.smart_city.entity.MeterReadRecord; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.bz.smart_city.repository.MongoMeterReadRecord; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.bz.smart_city.service.MongoMeterReadRecordService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.data.domain.Sort; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.data.mongodb.core.MongoTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.data.mongodb.core.query.Criteria; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.data.mongodb.core.query.Query; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.ArrayList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Slf4j 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class MongoMeterReadRecordServiceImpl implements MongoMeterReadRecordService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    MongoTemplate mongoTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public Query buildMongodbQuery(CommonQueryCondition condition){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Query query = new Query(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(condition.getSiteId()!=null) query.addCriteria(Criteria.where("siteId").is(condition.getSiteId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(condition.getStartDate()!=null && condition.getEndDate()!=null)query.addCriteria(Criteria.where("readDate").gte(condition.getStartDate()).lte(condition.getEndDate())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(condition.getChannelId()!=null) query.addCriteria(Criteria.where("sysId").is(condition.getChannelId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(condition.getReadStatus()!=null && !"".equals(condition.getReadStatus())) query.addCriteria(Criteria.where("readStatus").is(condition.getReadStatus())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(condition.getBuildingId()!=null) query.addCriteria(Criteria.where("buildingId").is(condition.getBuildingId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(condition.getCommunityId()!=null) query.addCriteria(Criteria.where("community").is(condition.getCommunityId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(condition.getConcentratorId()!=null) query.addCriteria(Criteria.where("concentratorId").is(condition.getConcentratorId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(condition.getChannelNumberId()!=null) query.addCriteria(Criteria.where("channelNumberId").is(condition.getChannelNumberId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(condition.getCollectorCode()!=null && !"".equals(condition.getCollectorCode())) query.addCriteria(Criteria.where("collectorNo").regex(condition.getCollectorCode())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Criteria customerIdCriteria = Criteria.where("customerId"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(condition.getCustormerId()!=null) customerIdCriteria.is(condition.getCustormerId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(condition.getCustomerIds()!=null && condition.getCustomerIds().size()>0) customerIdCriteria.andOperator(Criteria.where("customerId").in(condition.getCustomerIds())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(condition.getCustormerId()!=null || (condition.getCustomerIds()!=null && condition.getCustomerIds().size()>0)) query.addCriteria(customerIdCriteria); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(condition.getDeviceNo()!=null && !"".equals(condition.getDeviceNo())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Criteria criteria = new Criteria(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<Criteria> result = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            result.add(Criteria.where("meterNo").regex(condition.getDeviceNo())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            result.add(Criteria.where("meterFileNo").regex(condition.getDeviceNo())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Criteria[] criteriaArray = result.toArray(new Criteria[result.size()]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            criteria.orOperator(criteriaArray); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            query.addCriteria(criteria); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return query; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public List<MeterReadRecord> findMongoMeterReadRecordList(Query query) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MongoMeterReadRecord> list = mongoTemplate.find(query, MongoMeterReadRecord.class,"sc_meter_read_record"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MeterReadRecord> readRecordList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (list != null && list.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (MongoMeterReadRecord mongoRecord : list) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                MeterReadRecord record = new MeterReadRecord(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setId(mongoRecord.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setReadDate(mongoRecord.getReadDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setSiteId(mongoRecord.getSiteId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setSysId(mongoRecord.getSysId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setProvince(mongoRecord.getProvince()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setCity(mongoRecord.getCity()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setRegion(mongoRecord.getRegion()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setCommunityId(mongoRecord.getCommunity()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setCommunityName(mongoRecord.getCommunityName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setBuildingId(mongoRecord.getBuildingId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setBuildingName(mongoRecord.getBuildingName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setLocation(mongoRecord.getLocation()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setDeviceTypeId(mongoRecord.getDeviceTypeId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setDeviceId(mongoRecord.getDeviceId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setDeviceNo(mongoRecord.getDeviceNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setMeterNo(mongoRecord.getMeterNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setMeterFileNo(mongoRecord.getMeterFileNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setReadTime(mongoRecord.getReadTime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setReadStatus(mongoRecord.getReadStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setReadData(mongoRecord.getReadData()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setConcentratorId(mongoRecord.getConcentratorId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setConcentratorNo(mongoRecord.getConcentratorNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setCollectorId(mongoRecord.getCollectorId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setCollectorNo(mongoRecord.getCollectorNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setCustomerId(mongoRecord.getCustomerId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setCustomerName(mongoRecord.getCustomerName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setFactoryId(mongoRecord.getManufacturerId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setFactoryName(mongoRecord.getManufacturerName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setStatus(mongoRecord.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setLastValid(mongoRecord.getLastValid()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setLastCost(mongoRecord.getLastCost()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setEquipmentType(mongoRecord.getDeviceTypeName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //record.setModel(mongoRecord.getde); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                record.setChannelNumberName(mongoRecord.getChannelName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                readRecordList.add(record); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return readRecordList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public Pagination<MeterReadRecord> findMongoMeterReadRecordPage(CommonQueryCondition condition, int pageNum, int pageSize) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //List<MongoMeterReadRecord> result = meterReadRecordMapper.queryMeterReadRecordWithCondtion(condition); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Query query = buildMongodbQuery(condition); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        long count = mongoTemplate.count(query, MongoMeterReadRecord.class,"sc_meter_read_record"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        query.skip((pageNum - 1) * pageSize).limit(pageSize); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MeterReadRecord> readRecordList = findMongoMeterReadRecordList(query); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return new Pagination<MeterReadRecord>(readRecordList,count); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public List<MeterReadRecord> queryMeterReadRecordWithCondtion(CommonQueryCondition condition) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Query query = this.buildMongodbQuery(condition); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return this.findMongoMeterReadRecordList(query); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public List<MeterReadRecord> findByIds(List<Long> deviceIds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Query query = new Query(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        query.addCriteria(Criteria.where("_id").in(deviceIds)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return this.findMongoMeterReadRecordList(query); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public MeterReadRecord findMeterLastReadRecord(Long deviceId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Query query = new Query(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        query.addCriteria(Criteria.where("_id").is(deviceId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        query.with(Sort.by(Sort.Order.desc("dateCreate"))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MongoMeterReadRecord mongoRecord = mongoTemplate.findOne(query, MongoMeterReadRecord.class,"sc_meter_read_record"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (mongoRecord != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            MeterReadRecord record = new MeterReadRecord(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setId(mongoRecord.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setReadDate(mongoRecord.getReadDate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setSiteId(mongoRecord.getSiteId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setSysId(mongoRecord.getSysId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setProvince(mongoRecord.getProvince()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setCity(mongoRecord.getCity()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setRegion(mongoRecord.getRegion()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setCommunityId(mongoRecord.getCommunity()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setCommunityName(mongoRecord.getCommunityName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setBuildingId(mongoRecord.getBuildingId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setBuildingName(mongoRecord.getBuildingName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setLocation(mongoRecord.getLocation()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setDeviceTypeId(mongoRecord.getDeviceTypeId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setDeviceId(mongoRecord.getDeviceId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setDeviceNo(mongoRecord.getDeviceNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setMeterNo(mongoRecord.getMeterNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setMeterFileNo(mongoRecord.getMeterFileNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setReadTime(mongoRecord.getReadTime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setReadStatus(mongoRecord.getReadStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setReadData(mongoRecord.getReadData()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setConcentratorId(mongoRecord.getConcentratorId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setConcentratorNo(mongoRecord.getConcentratorNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setCollectorId(mongoRecord.getCollectorId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setCollectorNo(mongoRecord.getCollectorNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setCustomerId(mongoRecord.getCustomerId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setCustomerName(mongoRecord.getCustomerName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setFactoryId(mongoRecord.getManufacturerId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setFactoryName(mongoRecord.getManufacturerName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setStatus(mongoRecord.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setLastValid(mongoRecord.getLastValid()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setLastCost(mongoRecord.getLastCost()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setEquipmentType(mongoRecord.getDeviceTypeName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //record.setModel(mongoRecord.getde); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            record.setChannelNumberName(mongoRecord.getChannelName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return record; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |