|
@@ -1,8 +1,10 @@
|
|
|
package com.zcxk.job.service.impl;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.xxl.job.core.log.XxlJobLogger;
|
|
|
import com.zcxk.job.dao.StatMeterUnreadDeviceMapper;
|
|
|
+import com.zcxk.job.dao.WMeterTypeMapper;
|
|
|
import com.zcxk.job.entity.StatMeterUnreadDevice;
|
|
|
import com.zcxk.job.service.WaterMeterUnreadDeviceService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -21,6 +23,8 @@ import java.time.temporal.TemporalAdjusters;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
|
|
|
+import static com.google.common.collect.Lists.newArrayList;
|
|
|
+
|
|
|
@Slf4j
|
|
|
@Service
|
|
|
public class WaterMeterUnreadDeviceServiceImpl implements WaterMeterUnreadDeviceService {
|
|
@@ -28,6 +32,8 @@ public class WaterMeterUnreadDeviceServiceImpl implements WaterMeterUnreadDevice
|
|
|
private MongoTemplate mongoTemplate;
|
|
|
@Autowired
|
|
|
private StatMeterUnreadDeviceMapper statMeterUnreadDeviceMapper;
|
|
|
+ @Autowired
|
|
|
+ private WMeterTypeMapper wMeterTypeMapper;
|
|
|
|
|
|
@Override
|
|
|
public void yesterdayUnreadDeviceJobHandler(String param) {
|
|
@@ -36,10 +42,16 @@ public class WaterMeterUnreadDeviceServiceImpl implements WaterMeterUnreadDevice
|
|
|
Integer statDay = 0;
|
|
|
Integer startDate = 0;
|
|
|
Integer endDate = 0;
|
|
|
+ List<Integer> deviceTypeIds = newArrayList();
|
|
|
if (obj != null) {
|
|
|
statDay = obj.getInteger("statDay");
|
|
|
startDate = obj.getInteger("startDate");
|
|
|
endDate = obj.getInteger("endDate");
|
|
|
+ String codes = obj.getString("code");
|
|
|
+ if (codes != null) {
|
|
|
+ List<String> codeList = JSON.parseArray(codes,String.class);
|
|
|
+ deviceTypeIds = wMeterTypeMapper.findDeviceTypeIdByCode(codeList);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if (statDay == null || statDay == 0) {
|
|
@@ -51,14 +63,39 @@ public class WaterMeterUnreadDeviceServiceImpl implements WaterMeterUnreadDevice
|
|
|
if (endDate == null || endDate == 0) {
|
|
|
endDate = Integer.valueOf(LocalDateTime.now().plusDays(-1).format(DateTimeFormatter.ofPattern("yyyyMMdd")));
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
XxlJobLogger.log("statDay:{},startDate:{},endDate:{}",statDay, startDate, endDate);
|
|
|
|
|
|
- List<StatMeterUnreadDevice> results = this.findUnreadDevice(statDay,startDate,endDate);
|
|
|
+ List<StatMeterUnreadDevice> results = this.findUnreadDevice(statDay,startDate,endDate,deviceTypeIds);
|
|
|
System.out.println(results);
|
|
|
if (results != null && results.size() > 0) {
|
|
|
log.info("结果数量,size:{}", results.size());
|
|
|
XxlJobLogger.log("结果数量,size:{}", results.size());
|
|
|
- statMeterUnreadDeviceMapper.batchInsert("sc_stat_meter_unread_device_by_building",results);
|
|
|
+ int total = results.size();
|
|
|
+ int pageSize = 5000;
|
|
|
+ int totalPage = total / pageSize;
|
|
|
+ if (total % pageSize != 0) {
|
|
|
+ totalPage++;
|
|
|
+ }
|
|
|
+ for (int i = 1; i <= totalPage; i++)
|
|
|
+ {
|
|
|
+ XxlJobLogger.log("current page = " + i);
|
|
|
+ List<StatMeterUnreadDevice> records = newArrayList();
|
|
|
+ int start = (i - 1) * pageSize;
|
|
|
+ int j = 0;
|
|
|
+
|
|
|
+ for (int index = 0; (j < pageSize) && (index < total); j++)
|
|
|
+ {
|
|
|
+ index = start + j;
|
|
|
+ records.add(results.get(index));
|
|
|
+ index++;
|
|
|
+ }
|
|
|
+ XxlJobLogger.log("current page size = " + records.size());
|
|
|
+ statMeterUnreadDeviceMapper.batchInsert("sc_stat_meter_unread_device_by_building",records);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -69,10 +106,16 @@ public class WaterMeterUnreadDeviceServiceImpl implements WaterMeterUnreadDevice
|
|
|
Integer statDay = 0;
|
|
|
Integer startDate = 0;
|
|
|
Integer endDate = 0;
|
|
|
+ List<Integer> deviceTypeIds = newArrayList();
|
|
|
if (obj != null) {
|
|
|
statDay = obj.getInteger("statDay");
|
|
|
startDate = obj.getInteger("startDate");
|
|
|
endDate = obj.getInteger("endDate");
|
|
|
+ String codes = obj.getString("code");
|
|
|
+ if (codes != null) {
|
|
|
+ List<String> codeList = JSON.parseArray(codes,String.class);
|
|
|
+ deviceTypeIds = wMeterTypeMapper.findDeviceTypeIdByCode(codeList);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if (statDay == null || statDay == 0) {
|
|
@@ -86,10 +129,32 @@ public class WaterMeterUnreadDeviceServiceImpl implements WaterMeterUnreadDevice
|
|
|
}
|
|
|
XxlJobLogger.log("statDay:{},startDate:{},endDate:{}",statDay, startDate, endDate);
|
|
|
|
|
|
- List<StatMeterUnreadDevice> results = this.findUnreadDevice(statDay,startDate,endDate);
|
|
|
+ List<StatMeterUnreadDevice> results = this.findUnreadDevice(statDay,startDate,endDate, deviceTypeIds);
|
|
|
if (results != null && results.size() > 0) {
|
|
|
XxlJobLogger.log("结果数量,size:{}", results.size());
|
|
|
- statMeterUnreadDeviceMapper.batchInsert("sc_stat_meter_unread_device_by_building_7day",results);
|
|
|
+ int total = results.size();
|
|
|
+ int pageSize = 5000;
|
|
|
+ int totalPage = total / pageSize;
|
|
|
+ if (total % pageSize != 0) {
|
|
|
+ totalPage++;
|
|
|
+ }
|
|
|
+ for (int i = 1; i <= totalPage; i++)
|
|
|
+ {
|
|
|
+ XxlJobLogger.log("current page = " + i);
|
|
|
+ List<StatMeterUnreadDevice> records = newArrayList();
|
|
|
+ int start = (i - 1) * pageSize;
|
|
|
+ int j = 0;
|
|
|
+
|
|
|
+ for (int index = 0; (j < pageSize) && (index < total); j++)
|
|
|
+ {
|
|
|
+ index = start + j;
|
|
|
+ records.add(results.get(index));
|
|
|
+ index++;
|
|
|
+ }
|
|
|
+ XxlJobLogger.log("current page size = " + records.size());
|
|
|
+ statMeterUnreadDeviceMapper.batchInsert("sc_stat_meter_unread_device_by_building_7day",records);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -100,10 +165,16 @@ public class WaterMeterUnreadDeviceServiceImpl implements WaterMeterUnreadDevice
|
|
|
Integer statDay = 0;
|
|
|
Integer startDate = 0;
|
|
|
Integer endDate = 0;
|
|
|
+ List<Integer> deviceTypeIds = newArrayList();
|
|
|
if (obj != null) {
|
|
|
statDay = obj.getInteger("statDay");
|
|
|
startDate = obj.getInteger("startDate");
|
|
|
endDate = obj.getInteger("endDate");
|
|
|
+ String codes = obj.getString("code");
|
|
|
+ if (codes != null) {
|
|
|
+ List<String> codeList = JSON.parseArray(codes,String.class);
|
|
|
+ deviceTypeIds = wMeterTypeMapper.findDeviceTypeIdByCode(codeList);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if (statDay == null || statDay == 0) {
|
|
@@ -117,10 +188,32 @@ public class WaterMeterUnreadDeviceServiceImpl implements WaterMeterUnreadDevice
|
|
|
}
|
|
|
XxlJobLogger.log("statDay:{},startDate:{},endDate:{}",statDay, startDate, endDate);
|
|
|
|
|
|
- List<StatMeterUnreadDevice> results = this.findUnreadDevice(statDay,startDate,endDate);
|
|
|
+ List<StatMeterUnreadDevice> results = this.findUnreadDevice(statDay,startDate,endDate, deviceTypeIds);
|
|
|
if (results != null && results.size() > 0) {
|
|
|
XxlJobLogger.log("结果数量,size:{}", results.size());
|
|
|
- statMeterUnreadDeviceMapper.batchInsert("sc_stat_meter_unread_device_by_building_15day",results);
|
|
|
+ int total = results.size();
|
|
|
+ int pageSize = 5000;
|
|
|
+ int totalPage = total / pageSize;
|
|
|
+ if (total % pageSize != 0) {
|
|
|
+ totalPage++;
|
|
|
+ }
|
|
|
+ for (int i = 1; i <= totalPage; i++)
|
|
|
+ {
|
|
|
+ XxlJobLogger.log("current page = " + i);
|
|
|
+ List<StatMeterUnreadDevice> records = newArrayList();
|
|
|
+ int start = (i - 1) * pageSize;
|
|
|
+ int j = 0;
|
|
|
+
|
|
|
+ for (int index = 0; (j < pageSize) && (index < total); j++)
|
|
|
+ {
|
|
|
+ index = start + j;
|
|
|
+ records.add(results.get(index));
|
|
|
+ index++;
|
|
|
+ }
|
|
|
+ XxlJobLogger.log("current page size = " + records.size());
|
|
|
+ statMeterUnreadDeviceMapper.batchInsert("sc_stat_meter_unread_device_by_building_15day",records);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -131,10 +224,16 @@ public class WaterMeterUnreadDeviceServiceImpl implements WaterMeterUnreadDevice
|
|
|
Integer statDay = 0;
|
|
|
Integer startDate = 0;
|
|
|
Integer endDate = 0;
|
|
|
+ List<Integer> deviceTypeIds = newArrayList();
|
|
|
if (obj != null) {
|
|
|
statDay = obj.getInteger("statDay");
|
|
|
startDate = obj.getInteger("startDate");
|
|
|
endDate = obj.getInteger("endDate");
|
|
|
+ String codes = obj.getString("code");
|
|
|
+ if (codes != null) {
|
|
|
+ List<String> codeList = JSON.parseArray(codes,String.class);
|
|
|
+ deviceTypeIds = wMeterTypeMapper.findDeviceTypeIdByCode(codeList);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if (statDay == null || statDay == 0) {
|
|
@@ -148,14 +247,36 @@ public class WaterMeterUnreadDeviceServiceImpl implements WaterMeterUnreadDevice
|
|
|
}
|
|
|
XxlJobLogger.log("statDay:{},startDate:{},endDate:{}",statDay, startDate, endDate);
|
|
|
|
|
|
- List<StatMeterUnreadDevice> results = this.findUnreadDevice(statDay,startDate,endDate);
|
|
|
+ List<StatMeterUnreadDevice> results = this.findUnreadDevice(statDay,startDate,endDate, deviceTypeIds);
|
|
|
if (results != null && results.size() > 0) {
|
|
|
XxlJobLogger.log("结果数量,size:{}", results.size());
|
|
|
- statMeterUnreadDeviceMapper.batchInsert("sc_stat_meter_unread_device_by_building_month",results);
|
|
|
+ int total = results.size();
|
|
|
+ int pageSize = 5000;
|
|
|
+ int totalPage = total / pageSize;
|
|
|
+ if (total % pageSize != 0) {
|
|
|
+ totalPage++;
|
|
|
+ }
|
|
|
+ for (int i = 1; i <= totalPage; i++)
|
|
|
+ {
|
|
|
+ XxlJobLogger.log("current page = " + i);
|
|
|
+ List<StatMeterUnreadDevice> records = newArrayList();
|
|
|
+ int start = (i - 1) * pageSize;
|
|
|
+ int j = 0;
|
|
|
+
|
|
|
+ for (int index = 0; (j < pageSize) && (index < total); j++)
|
|
|
+ {
|
|
|
+ index = start + j;
|
|
|
+ records.add(results.get(index));
|
|
|
+ index++;
|
|
|
+ }
|
|
|
+ XxlJobLogger.log("current page size = " + records.size());
|
|
|
+ statMeterUnreadDeviceMapper.batchInsert("sc_stat_meter_unread_device_by_building_month",records);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- protected List<StatMeterUnreadDevice> findUnreadDevice(Integer statDay, Integer startDate, Integer endDate){
|
|
|
+ protected List<StatMeterUnreadDevice> findUnreadDevice(Integer statDay, Integer startDate, Integer endDate, List<Integer> deviceTypeIds){
|
|
|
/*
|
|
|
db.sc_meter_read_record.aggregate(
|
|
|
[
|
|
@@ -184,6 +305,9 @@ public class WaterMeterUnreadDeviceServiceImpl implements WaterMeterUnreadDevice
|
|
|
List<AggregationOperation> operations = new ArrayList<>();
|
|
|
operations.add(Aggregation.match(Criteria.where("status").is(1)));
|
|
|
operations.add(Aggregation.match(Criteria.where("readDate").gte(startDate).lte(endDate)));
|
|
|
+ if (deviceTypeIds != null && deviceTypeIds.size() > 0) {
|
|
|
+ operations.add(Aggregation.match(Criteria.where("deviceTypeId").in(deviceTypeIds)));
|
|
|
+ }
|
|
|
// 1,添加分组条件
|
|
|
ConditionalOperators.Cond readTimesCond = ConditionalOperators.when(new Criteria("readStatus").is(2)).then(1).otherwise(0);
|
|
|
operations.add(Aggregation.group("siteId","channelId","customerId","buildingId","deviceId")
|