|
@@ -45,7 +45,10 @@ public class MeterReadingRecordListener extends AnalysisEventListener<ImportMete
|
|
|
// 时间异常的记录
|
|
|
private List<ImportMeterReadingRecordVo> timeAnomalyList = new ArrayList<>();
|
|
|
|
|
|
- private SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
|
|
|
+ private SimpleDateFormat YMD_SDF = new SimpleDateFormat("yyyyMMdd");
|
|
|
+
|
|
|
+ private SimpleDateFormat Y_SDF = new SimpleDateFormat("yyyy");
|
|
|
+ private SimpleDateFormat M_SDF = new SimpleDateFormat("M");
|
|
|
|
|
|
public MeterReadingRecordListener(SwUserManagementServiceImpl userManagementService, SwWaterUsageEntryServiceImpl waterUsageEntryService) {
|
|
|
this.swUserManagementService = userManagementService;
|
|
@@ -83,12 +86,15 @@ public class MeterReadingRecordListener extends AnalysisEventListener<ImportMete
|
|
|
duplicateRecordList.add(importMeterReadingRecordVo);
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
+ String currentDataFormat = YMD_SDF.format(importMeterReadingRecordVo.getReadingDate());
|
|
|
// 判断抄表日期和当前日期的关系
|
|
|
- if (sdf.format(importMeterReadingRecordVo.getReadingDate()).compareTo(sdf.format(nowDate)) > 0) {
|
|
|
+ if (currentDataFormat.compareTo(YMD_SDF.format(nowDate)) > 0) {
|
|
|
timeAnomalyList.add(importMeterReadingRecordVo);
|
|
|
return;
|
|
|
}
|
|
|
+ importMeterReadingRecordVo.setCheckRepeatData(importMeterReadingRecordVo.getAccountNumber()+
|
|
|
+ currentDataFormat+
|
|
|
+ importMeterReadingRecordVo.getConsumption().stripTrailingZeros().toPlainString());
|
|
|
/**
|
|
|
* 校验导入的日期和当前日期的关系
|
|
|
*/
|
|
@@ -110,9 +116,29 @@ public class MeterReadingRecordListener extends AnalysisEventListener<ImportMete
|
|
|
if (recordList.isEmpty()) {
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
+ // excel中解析出的数据
|
|
|
+ List<String> years = recordList.stream().map(info -> Y_SDF.format(info.getReadingDate())).distinct().collect(Collectors.toList());
|
|
|
+ List<String> months = recordList.stream().map(info -> M_SDF.format(info.getReadingDate())).distinct().collect(Collectors.toList());
|
|
|
// 获取数据中的所有户号
|
|
|
List<String> accountNumList = recordList.stream().map(ImportMeterReadingRecordVo::getAccountNumber).distinct().collect(Collectors.toList());
|
|
|
+ // 查询是否存在抄表记录
|
|
|
+ List<SwWaterUsageEntryDo> existsData = swWaterUsageEntryService.list(new LambdaQueryWrapper<SwWaterUsageEntryDo>()
|
|
|
+ .select(SwWaterUsageEntryDo::getUsernumber,
|
|
|
+ SwWaterUsageEntryDo::getCurrentreadingdate,
|
|
|
+ SwWaterUsageEntryDo::getThisreading)
|
|
|
+ .eq(BaseDo::getDeleted, "0")
|
|
|
+ .in(SwWaterUsageEntryDo::getYear, years)
|
|
|
+ .in(SwWaterUsageEntryDo::getMonth, months)
|
|
|
+ .in(SwWaterUsageEntryDo::getUsernumber, accountNumList));
|
|
|
+ // 按照年月日分组
|
|
|
+ Map<String, List<SwWaterUsageEntryDo>> existsDataMap = existsData.parallelStream().collect(Collectors.groupingBy(info -> info.getUsernumber() +
|
|
|
+ YMD_SDF.format(info.getCurrentreadingdate()) +
|
|
|
+ info.getThisreading().stripTrailingZeros().toPlainString()));
|
|
|
+ List<ImportMeterReadingRecordVo> repeatDataList = recordList.parallelStream().filter(data -> existsDataMap.containsKey(data.getCheckRepeatData())).collect(Collectors.toList());
|
|
|
+ recordList = recordList.parallelStream().filter(data->!existsDataMap.containsKey(data.getCheckRepeatData())).collect(Collectors.toList());
|
|
|
+ if(!repeatDataList.isEmpty()){
|
|
|
+ log.error("以下数据已存在相同的抄表记录:{}",repeatDataList);
|
|
|
+ }
|
|
|
// 获取户号信息
|
|
|
ownerMap = Lists.partition(accountNumList, 2500).stream().map(accountNum ->
|
|
|
swUserManagementService.list(new LambdaQueryWrapper<SwUserManagementDo>()
|
|
@@ -153,7 +179,7 @@ public class MeterReadingRecordListener extends AnalysisEventListener<ImportMete
|
|
|
return ownerData.getLastmeterreaddate() != null && ownerData.getLastmeterreaddate().compareTo(record.getReadingDate()) >= 0;
|
|
|
}
|
|
|
)
|
|
|
- .map(info -> info.getAccountNumber() + '-' + sdf.format(info.getReadingDate()))
|
|
|
+ .map(info -> info.getAccountNumber() + '-' + YMD_SDF.format(info.getReadingDate()))
|
|
|
.collect(Collectors.joining(" "));
|
|
|
if (StringUtils.isNotBlank(errorStrDesc)) {
|
|
|
throw new CustomException(
|