|
|
|
@ -99,6 +99,7 @@ public class ObtainGenerationServiceImpl implements ObtainGenerationService {
|
|
|
|
|
*/ |
|
|
|
|
@Override |
|
|
|
|
public void thisDayPowerGeneration(String param) { |
|
|
|
|
String month = DateUtil.format(new Date(),"yyyy-MM") ; |
|
|
|
|
// 步骤1.水电、光伏站点
|
|
|
|
|
List<StationEntity> stations = stationService.list(Wrappers.<StationEntity>lambdaQuery().in(StationEntity::getType, Arrays.asList(HomePageConstant.HYDROPOWER,HomePageConstant.PHOTOVOLTAIC))); |
|
|
|
|
|
|
|
|
@ -106,9 +107,149 @@ public class ObtainGenerationServiceImpl implements ObtainGenerationService {
|
|
|
|
|
List<EminfoAndEmParamVo> devices = JSONObject.parseObject(redisTemplate.opsForValue().get(device_cache_cofig_final).toString(), new TypeReference<List<EminfoAndEmParamVo>>() {}); |
|
|
|
|
|
|
|
|
|
// 步骤3.站点-设备当日发电量
|
|
|
|
|
this.refreshDayGeneration(stations,devices,month + "-01"); |
|
|
|
|
|
|
|
|
|
// 步骤4.近3年的当月发电量
|
|
|
|
|
this.thirtyMonthGenerate(stations,month); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 刷新今日发电量 |
|
|
|
|
* @param stations |
|
|
|
|
* @param devices |
|
|
|
|
*/ |
|
|
|
|
private void refreshDayGeneration(List<StationEntity> stations, List<EminfoAndEmParamVo> devices,String month) { |
|
|
|
|
String end = month + " 23:59:59"; |
|
|
|
|
String start = month + " 00:00:00"; |
|
|
|
|
// 查询当日已保存发电量
|
|
|
|
|
List<ThirtyGenerationEntity> generations = thirtyGenerateService.list(Wrappers.<ThirtyGenerationEntity>lambdaQuery().eq(ThirtyGenerationEntity::getStrDay,start)); |
|
|
|
|
|
|
|
|
|
// 将站点切割
|
|
|
|
|
int limit = countStep(stations.size()); |
|
|
|
|
List<List<StationEntity>> limits = Stream.iterate(0, n -> n + 1).limit(limit).parallel().map(a -> stations.stream().skip((long) a * 3).limit(3).parallel().collect(Collectors.toList())).collect(Collectors.toList()); |
|
|
|
|
CountDownLatch countDownLatch = new CountDownLatch(limits.size()); |
|
|
|
|
List<ThirtyGenerationEntity> saves = new CopyOnWriteArrayList<>(); |
|
|
|
|
for(List<StationEntity> item : limits){ |
|
|
|
|
try{ |
|
|
|
|
pool.submit(()->{ |
|
|
|
|
item.forEach(station->{ |
|
|
|
|
// 站点设备集合
|
|
|
|
|
List<EminfoAndEmParamVo> eminfos = devices.stream().filter(device -> device.getCreateDept().equals(station.getRefDept())).collect(Collectors.toList()); |
|
|
|
|
// 遍历查询发电量
|
|
|
|
|
eminfos.forEach(device->{ |
|
|
|
|
List<AnalyseDataTaosVO> records = dataService.periodTargetData(start,end,5,3,device.getEmCode(),HomePageConstant.HYDROPOWER_GENERATE_POWER); |
|
|
|
|
if(CollectionUtil.isEmpty(records)){ |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
// 是否包含今日累计发电量数据
|
|
|
|
|
Optional<ThirtyGenerationEntity> optional = generations.stream().filter(o->o.getStationId().equals(station.getCode()) && o.getDeviceCode().equals(device.getEmCode())).findFirst(); |
|
|
|
|
if(optional.isPresent()){ |
|
|
|
|
if(StringUtil.isEmpty(records.get(0).getVal())){ |
|
|
|
|
optional.get().setGenerate(BigDecimal.ZERO); |
|
|
|
|
}else{ |
|
|
|
|
optional.get().setGenerate(BigDecimal.valueOf(Double.parseDouble(records.get(0).getVal()) * device.getRideCount())); |
|
|
|
|
} |
|
|
|
|
saves.add(optional.get()); |
|
|
|
|
}else{ |
|
|
|
|
ThirtyGenerationEntity generate = new ThirtyGenerationEntity(); |
|
|
|
|
generate.setStationId(station.getCode()); |
|
|
|
|
generate.setStationName(station.getName()); |
|
|
|
|
generate.setDeviceCode(device.getEmCode()); |
|
|
|
|
generate.setDeviceName(device.getName()); |
|
|
|
|
generate.setTenantId(station.getTenantId()); |
|
|
|
|
generate.setCreateDept(station.getRefDept()); |
|
|
|
|
generate.setCreateUser(station.getCreateUser()); |
|
|
|
|
generate.setUpdateUser(station.getUpdateUser()); |
|
|
|
|
Date time = DateUtil.parse(records.get(0).getTs(), "yyyy-MM-dd HH:mm:ss.s"); |
|
|
|
|
generate.setStrDay(DateUtil.format(time,DateUtil.PATTERN_DATETIME)); |
|
|
|
|
generate.setDay(time.getDate()); |
|
|
|
|
if(StringUtil.isEmpty(records.get(0).getVal())){ |
|
|
|
|
generate.setGenerate(BigDecimal.ZERO); |
|
|
|
|
}else{ |
|
|
|
|
generate.setGenerate(BigDecimal.valueOf(Double.parseDouble(records.get(0).getVal()) * device.getRideCount())); |
|
|
|
|
} |
|
|
|
|
saves.add(generate); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
countDownLatch.countDown(); |
|
|
|
|
log.error("save_generation_execute_complete: {}" ,item.stream().map(StationEntity::getName).collect(Collectors.toList())); |
|
|
|
|
}); |
|
|
|
|
}catch (Exception e){ |
|
|
|
|
log.error("save_generation_execute_complete_error : {}" ,e.getMessage()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// 等待所有线程执行完成
|
|
|
|
|
try { |
|
|
|
|
countDownLatch.await(); |
|
|
|
|
} catch (InterruptedException e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
Thread.currentThread().interrupt(); |
|
|
|
|
} |
|
|
|
|
thirtyGenerateService.saveOrUpdateBatch(saves); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 更新近3年的当月发电量 |
|
|
|
|
*/ |
|
|
|
|
private void thirtyMonthGenerate(List<StationEntity> stations,String month) { |
|
|
|
|
// 步骤1.查询设备当月累计发电量
|
|
|
|
|
List<ThirtyGenerationEntity> generations = thirtyGenerateService.list(Wrappers.<ThirtyGenerationEntity>lambdaQuery().like(ThirtyGenerationEntity::getStrDay,month)); |
|
|
|
|
|
|
|
|
|
// 步骤2.删除近3年当月发电量
|
|
|
|
|
threeGenerateService.deletemMonthGenerate(month + "-01"); |
|
|
|
|
|
|
|
|
|
// 步骤3.将当月累计发电量新增表
|
|
|
|
|
this.saveThreeMonthGenerate(generations,month); |
|
|
|
|
|
|
|
|
|
// 步骤4.清除填报发电量
|
|
|
|
|
threeGenerateService.deleteFillGenerate(); |
|
|
|
|
|
|
|
|
|
// 步骤5.清除超出30日发电量
|
|
|
|
|
thirtyGenerateService.deleteDayGenerate(month); |
|
|
|
|
|
|
|
|
|
// 步骤6.重新补充填报发电量
|
|
|
|
|
Calendar calendar = Calendar.getInstance(); |
|
|
|
|
calendar.add(Calendar.MONTH, -calendar.get(Calendar.MONTH) + 12); |
|
|
|
|
calendar.add(Calendar.DATE, -calendar.get(Calendar.DATE) + 1); |
|
|
|
|
String end = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE) + " 00:00:00"; |
|
|
|
|
// 结束日期
|
|
|
|
|
calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) - 3); |
|
|
|
|
calendar.add(Calendar.MONTH, -calendar.get(Calendar.MONTH)); |
|
|
|
|
String start = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE) + " 00:00:00"; |
|
|
|
|
stations.forEach(station->{ |
|
|
|
|
this.threeGenerateService.saveBatch(this.saveFillGenerate(station,start,end)); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 保存近3年当月发电量 |
|
|
|
|
* @param generations |
|
|
|
|
*/ |
|
|
|
|
private void saveThreeMonthGenerate(List<ThirtyGenerationEntity> generations,String month) { |
|
|
|
|
if(CollectionUtil.isEmpty(generations)){ |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
threeGenerateService.saveBatch(generations.stream().collect(Collectors.groupingBy(ThirtyGenerationEntity::getDeviceCode)).entrySet().stream().map(entry->{ |
|
|
|
|
ThreeGenerationEntity generate = new ThreeGenerationEntity(); |
|
|
|
|
generate.setStationId(entry.getValue().get(0).getStationId()); |
|
|
|
|
generate.setStationName(entry.getValue().get(0).getStationName()); |
|
|
|
|
generate.setDeviceCode(entry.getValue().get(0).getDeviceCode()); |
|
|
|
|
generate.setDeviceName(entry.getValue().get(0).getDeviceName()); |
|
|
|
|
generate.setTenantId(entry.getValue().get(0).getTenantId()); |
|
|
|
|
generate.setCreateDept(entry.getValue().get(0).getCreateDept()); |
|
|
|
|
generate.setCreateUser(entry.getValue().get(0).getCreateUser()); |
|
|
|
|
generate.setUpdateUser(entry.getValue().get(0).getUpdateUser()); |
|
|
|
|
String strMonth = month + "-01"; |
|
|
|
|
generate.setStrMonth(strMonth); |
|
|
|
|
generate.setMonth(DateUtil.parse(strMonth,DateUtil.PATTERN_DATE).getMonth() + 1); |
|
|
|
|
generate.setGenerate(BigDecimal.valueOf(entry.getValue().stream().mapToDouble(o->o.getGenerate().doubleValue()).sum()).setScale(2, RoundingMode.HALF_UP)); |
|
|
|
|
return generate; |
|
|
|
|
}).collect(Collectors.toList())); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 查询发电量 |
|
|
|
|
* @param stations |
|
|
|
|