Browse Source

#新版电站指标信息

zhongwei
yang_shj 4 months ago
parent
commit
ffecf0ffdb
  1. 184
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java

184
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java

@ -1,6 +1,5 @@
package com.hnac.hzims.scheduled.service.operation.home.impl; package com.hnac.hzims.scheduled.service.operation.home.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -8,6 +7,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.hnac.hzims.EquipmentConstants; import com.hnac.hzims.EquipmentConstants;
import com.hnac.hzims.equipment.entity.EmParamEntity; import com.hnac.hzims.equipment.entity.EmParamEntity;
import com.hnac.hzims.equipment.entity.ThirtyGenerationEntity;
import com.hnac.hzims.equipment.entity.ThreeGenerationEntity;
import com.hnac.hzims.equipment.vo.EminfoAndEmParamVo; import com.hnac.hzims.equipment.vo.EminfoAndEmParamVo;
import com.hnac.hzims.hzimsweather.feign.IHeWeatherWeatherClient; import com.hnac.hzims.hzimsweather.feign.IHeWeatherWeatherClient;
import com.hnac.hzims.hzimsweather.vo.RainFallCountByMonthVo; import com.hnac.hzims.hzimsweather.vo.RainFallCountByMonthVo;
@ -20,6 +21,8 @@ import com.hnac.hzims.operational.station.entity.HzimsAnalyzeModelStationEntity;
import com.hnac.hzims.operational.station.entity.StationEntity; import com.hnac.hzims.operational.station.entity.StationEntity;
import com.hnac.hzims.scheduled.service.equipment.DeviceParamService; import com.hnac.hzims.scheduled.service.equipment.DeviceParamService;
import com.hnac.hzims.scheduled.service.equipment.DeviceService; import com.hnac.hzims.scheduled.service.equipment.DeviceService;
import com.hnac.hzims.scheduled.service.equipment.ThirtyGenerateService;
import com.hnac.hzims.scheduled.service.equipment.ThreeGenerateService;
import com.hnac.hzims.scheduled.service.operation.fill.*; import com.hnac.hzims.scheduled.service.operation.fill.*;
import com.hnac.hzims.scheduled.service.operation.home.ModelStationService; import com.hnac.hzims.scheduled.service.operation.home.ModelStationService;
import com.hnac.hzims.scheduled.service.operation.home.RealTargetService; import com.hnac.hzims.scheduled.service.operation.home.RealTargetService;
@ -38,8 +41,6 @@ import com.hnac.hzinfo.sdk.analyse.po.MultiAnalyzeCodePO;
import com.hnac.hzinfo.sdk.core.response.HzPage; import com.hnac.hzinfo.sdk.core.response.HzPage;
import com.hnac.hzinfo.sdk.core.response.Result; import com.hnac.hzinfo.sdk.core.response.Result;
import com.hnac.hzinfo.sdk.v5.device.DeviceDataClient; import com.hnac.hzinfo.sdk.v5.device.DeviceDataClient;
import com.hnac.hzinfo.sdk.v5.device.dto.ReductionDataDTO;
import com.hnac.hzinfo.sdk.v5.device.vo.ReductionDataVO;
import com.xxl.job.core.log.XxlJobLogger; import com.xxl.job.core.log.XxlJobLogger;
import io.undertow.util.CopyOnWriteMap; import io.undertow.util.CopyOnWriteMap;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -58,7 +59,6 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
@ -98,6 +98,10 @@ public class RealTargetServiceImpl implements RealTargetService {
private final ModelStationService modelStationService; private final ModelStationService modelStationService;
private final ThreeGenerateService threeGenerateService;
private final ThirtyGenerateService thirtyGenerateService;
private final RedisTemplate redisTemplate; private final RedisTemplate redisTemplate;
private final IHeWeatherWeatherClient heWeatherWeatherClient; private final IHeWeatherWeatherClient heWeatherWeatherClient;
@ -278,6 +282,10 @@ public class RealTargetServiceImpl implements RealTargetService {
if(CollectionUtil.isEmpty(stations)){ if(CollectionUtil.isEmpty(stations)){
return; return;
} }
// 设备30日发电量
List<ThirtyGenerationEntity> generations = this.thirtyGenerations(stations.stream().map(StationEntity::getCode).collect(Collectors.toList()));
// 设备当年发电量
List<ThreeGenerationEntity> generationYears = this.threeGenerations(stations.stream().map(StationEntity::getCode).collect(Collectors.toList()));
// 补充填补发电指标 // 补充填补发电指标
List<HydropowerUnitTargetVo> targets = this.generteFill(stations); List<HydropowerUnitTargetVo> targets = this.generteFill(stations);
// 水电站设备 // 水电站设备
@ -289,19 +297,20 @@ public class RealTargetServiceImpl implements RealTargetService {
try{ try{
HydropowerUnitTargetVo target = new HydropowerUnitTargetVo(); HydropowerUnitTargetVo target = new HydropowerUnitTargetVo();
target.setDeptId(device.getCreateDept()); target.setDeptId(device.getCreateDept());
Optional<StationEntity> station = stations.stream().filter(o->o.getRefDept().equals(device.getCreateDept())).findFirst();
station.ifPresent(stationEntity -> target.setDeptName(stationEntity.getName()));
target.setDeviceCode(device.getEmCode()); target.setDeviceCode(device.getEmCode());
target.setDeviceName(device.getName()); target.setDeviceName(device.getName());
target.setDeptName(device.getName());
// 当年发电量 // 当年发电量
target.setPowerYear(this.getGenerationPower(device, 0)); target.setPowerYear(this.devicePowerYear(generationYears,device));
// 当月发电量 // 当月发电量
target.setPowerMon(this.getGenerationPower(device, 1)); target.setPowerMon(this.devicePowerMon(generationYears,device));
// 当日发电量 // 当日发电量
target.setPowerDay(this.getGenerationPower(device, 2)); target.setPowerDay(this.devicePowerDay(generations,device));
// 当天有功功率 // 当天有功功率
target.setActivePowerVoList(this.getLoadsByDay(device)); target.setActivePowerVoList(this.getLoadsByDay(device));
// 30天发电量 // 30天发电量
target.setGenerationPowerVoList(this.getGenerationPowerList(device)); target.setGenerationPowerVoList(this.getGenerationPowerList(generations,device));
targets.add(target); targets.add(target);
countDownLatch.countDown(); countDownLatch.countDown();
}catch (Exception exception){ }catch (Exception exception){
@ -323,6 +332,75 @@ public class RealTargetServiceImpl implements RealTargetService {
redisTemplate.opsForValue().set(load_hydropower_unit_target_key,targets); redisTemplate.opsForValue().set(load_hydropower_unit_target_key,targets);
} }
/**
* 去年发电量
* @param generations
* @param device
* @return
*/
private Float devicePowerYesterYear(List<ThreeGenerationEntity> generations, EminfoAndEmParamVo device) {
if(CollectionUtil.isEmpty(generations)){
return 0f;
}
return (float) generations.stream().filter(o -> StringUtil.isNotBlank(o.getDeviceCode()) && o.getDeviceCode().equals(device.getEmCode())).mapToDouble(o->o.getGenerate().doubleValue()).sum();
}
/**
* 当年发电量
* @param generations
* @param device
* @return
*/
private Float devicePowerYear(List<ThreeGenerationEntity> generations, EminfoAndEmParamVo device) {
if(CollectionUtil.isEmpty(generations)){
return 0f;
}
return (float) generations.stream().filter(o -> StringUtil.isNotBlank(o.getDeviceCode()) && o.getDeviceCode().equals(device.getEmCode())).mapToDouble(o->o.getGenerate().doubleValue()).sum();
}
/**
* 当月发电量
* @param generations
* @param device
* @return
*/
private Float devicePowerMon(List<ThreeGenerationEntity> generations, EminfoAndEmParamVo device) {
if(CollectionUtil.isEmpty(generations)){
return 0f;
}
return (float) generations.stream().filter(o-> StringUtil.isNotBlank(o.getDeviceCode()) && o.getDeviceCode().equals(device.getEmCode()) && o.getStrMonth().contains(DateUtil.format(new Date(),"yyyy-MM"))).mapToDouble(o->o.getGenerate().doubleValue()).sum();
}
/**
* 设备当日发电量
* @param generations
* @param device
* @return
*/
private Float devicePowerDay(List<ThirtyGenerationEntity> generations, EminfoAndEmParamVo device) {
if(CollectionUtil.isEmpty(generations)){
return 0f;
}
return (float) generations.stream().filter(o->o.getDeviceCode().equals(device.getEmCode()) && o.getStrDay().contains(DateUtil.format(new Date(),DateUtil.PATTERN_DATE))).mapToDouble(o->o.getGenerate().doubleValue()).sum();
}
/**
* 设备昨日发电量
* @param generations
* @param device
* @return
*/
private Float devicePowerYesterDay(List<ThirtyGenerationEntity> generations, EminfoAndEmParamVo device) {
if(CollectionUtil.isEmpty(generations)){
return 0f;
}
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH,-1);
return (float) generations.stream().filter(o->o.getDeviceCode().equals(device.getEmCode()) && o.getStrDay().contains(DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE))).mapToDouble(o->o.getGenerate().doubleValue()).sum();
}
/** /**
* 水利-泵组实时加载 * 水利-泵组实时加载
* @param param * @param param
@ -1365,9 +1443,6 @@ public class RealTargetServiceImpl implements RealTargetService {
in(StationEntity::getType, types); in(StationEntity::getType, types);
} }
}}); }});
// 设备信息
// List<EminfoAndEmParamVo> devices = JSONObject.parseObject(redisTemplate.opsForValue().get(device_cache_cofig_final).toString(), new TypeReference<List<EminfoAndEmParamVo>>() {
// });
// 开始时间 // 开始时间
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, -calendar.get(Calendar.MONTH) + 12); calendar.add(Calendar.MONTH, -calendar.get(Calendar.MONTH) + 12);
@ -1381,8 +1456,6 @@ public class RealTargetServiceImpl implements RealTargetService {
Map<Long, Map<String, Float>> powerMap = new HashMap<>(); Map<Long, Map<String, Float>> powerMap = new HashMap<>();
stationList.forEach(station -> { stationList.forEach(station -> {
// 站点设备集合 // 站点设备集合
// List<EminfoAndEmParamVo> stationDevices = devices.stream().filter(device -> device.getCreateDept().equals(station.getRefDept())).collect(Collectors.toList());
// log.error("load_power_data station :" + station.getCode() + "==== device :" + stationDevices );
Map<String, Float> generateMap = this.getGenerateYearByWindEnergy(station,start,end); Map<String, Float> generateMap = this.getGenerateYearByWindEnergy(station,start,end);
if(MapUtils.isEmpty(generateMap)){ if(MapUtils.isEmpty(generateMap)){
return; return;
@ -1890,33 +1963,78 @@ public class RealTargetServiceImpl implements RealTargetService {
return dataService.periodTargetFloat(start,end,5,accessRules,device.getEmCode(),device.getRideCount(),HomePageConstant.HYDROPOWER_GENERATE_POWER); return dataService.periodTargetFloat(start,end,5,accessRules,device.getEmCode(),device.getRideCount(),HomePageConstant.HYDROPOWER_GENERATE_POWER);
} }
/** /**
* 近30天发电量 * 站点设备近30天发电量
* @param device * @param stations
* @return * @return
*/ */
private List<GenerationPowerVo> getGenerationPowerList(EminfoAndEmParamVo device) { private List<ThirtyGenerationEntity> thirtyGenerations(List<String> stations) {
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
String end = DateUtil.format(calendar.getTime(), DateUtil.PATTERN_DATETIME); String end = DateUtil.format(calendar.getTime(), DateUtil.PATTERN_DATETIME);
calendar.add(Calendar.DAY_OF_MONTH,-29); calendar.add(Calendar.DAY_OF_MONTH,-29);
calendar.add(Calendar.HOUR_OF_DAY,-calendar.get(Calendar.HOUR_OF_DAY)); String start = DateUtil.format(calendar.getTime(), DateUtil.PATTERN_DATE);
calendar.add(Calendar.MINUTE,-calendar.get(Calendar.MINUTE)); return thirtyGenerateService.list(Wrappers.<ThirtyGenerationEntity>lambdaQuery()
calendar.add(Calendar.SECOND,-calendar.get(Calendar.SECOND)); .in(ThirtyGenerationEntity::getStationId,stations)
String start = DateUtil.format(calendar.getTime(), DateUtil.PATTERN_DATETIME); .ge(ThirtyGenerationEntity::getStrDay,start)
List<AnalyseDataTaosVO> records = dataService.periodTargetData(start,end,5,EquipmentConstants.CycleTypeEnum.DAY_CYCLE.getType(),device.getEmCode(),HomePageConstant.HYDROPOWER_GENERATE_POWER); .le(ThirtyGenerationEntity::getStrDay,end)
if(CollectionUtil.isEmpty(records)){ );
return new ArrayList<>();
} }
return records.stream().map(record -> {
GenerationPowerVo generate = new GenerationPowerVo(); /**
Date time = DateUtil.parse(record.getTs(), "yyyy-MM-dd HH:mm:ss.s"); * 站点设备今年发电量
generate.setDate(DateUtil.format(time,DateUtil.PATTERN_DATE)); * @param stations
if(StringUtil.isEmpty(record.getVal())){ * @return
generate.setGenerate(0f); */
private List<ThreeGenerationEntity> threeGenerations(List<String> stations) {
return threeGenerateService.list(Wrappers.<ThreeGenerationEntity>lambdaQuery()
.in(ThreeGenerationEntity::getStationId,stations)
.like(ThreeGenerationEntity::getStrMonth,DateUtil.format(new Date(),"yyyy"))
);
}
/**
* 查询设备去年发电量
* @param stations
* @return
*/
private List<ThreeGenerationEntity> threeYesterGenerations(List<String> stations) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.YEAR,-1);
return threeGenerateService.list(Wrappers.<ThreeGenerationEntity>lambdaQuery()
.in(ThreeGenerationEntity::getStationId,stations)
.like(ThreeGenerationEntity::getStrMonth,DateUtil.format(calendar.getTime(),"yyyy"))
);
}
/**
* 设备近30天发电量组装
* @param generations
* @param device
* @return
*/
private List<GenerationPowerVo> getGenerationPowerList(List<ThirtyGenerationEntity> generations,EminfoAndEmParamVo device) {
Calendar calendar = Calendar.getInstance();
Date end = calendar.getTime();
calendar.add(Calendar.DAY_OF_MONTH,-29);
Date start = calendar.getTime();
List<GenerationPowerVo> powers = new ArrayList<>();
while (end.compareTo(start) >= 0){
GenerationPowerVo power = new GenerationPowerVo();
if (CollectionUtil.isEmpty(generations)) {
power.setDate(DateUtil.format(start,DateUtil.PATTERN_DATE));
power.setGenerate(0f);
}else{ }else{
generate.setGenerate(Float.parseFloat(String.valueOf(Double.parseDouble(record.getVal()) * device.getRideCount()))); String date = DateUtil.format(start,DateUtil.PATTERN_DATE);
power.setDate(date);
power.setGenerate((float) generations.stream().filter(iter->iter.getDeviceCode().equals(device.getEmCode()) && iter.getStrDay().contains(date)).mapToDouble(o->o.getGenerate().doubleValue()).sum());
} }
return generate; calendar.add(Calendar.DAY_OF_MONTH,1);
}).collect(Collectors.toList()); powers.add(power);
start = calendar.getTime();
} }
return powers;
}
} }
Loading…
Cancel
Save