|
|
|
@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
|
|
import com.google.common.util.concurrent.ThreadFactoryBuilder; |
|
|
|
|
import com.hnac.hzims.EquipmentConstants; |
|
|
|
|
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.hzimsweather.feign.IHeWeatherWeatherClient; |
|
|
|
|
import com.hnac.hzims.hzimsweather.vo.RainFallCountByMonthVo; |
|
|
|
@ -19,6 +21,8 @@ import com.hnac.hzims.operational.station.entity.HzimsAnalyzeModelStationEntity;
|
|
|
|
|
import com.hnac.hzims.operational.station.entity.StationEntity; |
|
|
|
|
import com.hnac.hzims.scheduled.service.equipment.DeviceParamService; |
|
|
|
|
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.home.ModelStationService; |
|
|
|
|
import com.hnac.hzims.scheduled.service.operation.home.RealTargetService; |
|
|
|
@ -92,6 +96,10 @@ public class RealTargetServiceImpl implements RealTargetService {
|
|
|
|
|
|
|
|
|
|
private final ModelStationService modelStationService; |
|
|
|
|
|
|
|
|
|
private final ThreeGenerateService threeGenerateService; |
|
|
|
|
|
|
|
|
|
private final ThirtyGenerateService thirtyGenerateService; |
|
|
|
|
|
|
|
|
|
private final RedisTemplate redisTemplate; |
|
|
|
|
|
|
|
|
|
private final IHeWeatherWeatherClient heWeatherWeatherClient; |
|
|
|
@ -102,6 +110,7 @@ public class RealTargetServiceImpl implements RealTargetService {
|
|
|
|
|
|
|
|
|
|
private final DeviceDataClient deviceDataClient; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Value("${hzims.equipment.emInfo.emInfoList}") |
|
|
|
|
public String device_cache_cofig_final; |
|
|
|
|
|
|
|
|
@ -272,6 +281,12 @@ public class RealTargetServiceImpl implements RealTargetService {
|
|
|
|
|
if(CollectionUtil.isEmpty(stations)){ |
|
|
|
|
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<ThreeGenerationEntity> generationYesterYears = this.threeYesterGenerations(stations.stream().map(StationEntity::getCode).collect(Collectors.toList())); |
|
|
|
|
// 补充填补发电指标
|
|
|
|
|
List<HydropowerUnitTargetVo> targets = this.generteFill(stations); |
|
|
|
|
// 水电站设备
|
|
|
|
@ -283,19 +298,24 @@ public class RealTargetServiceImpl implements RealTargetService {
|
|
|
|
|
try{ |
|
|
|
|
HydropowerUnitTargetVo target = new HydropowerUnitTargetVo(); |
|
|
|
|
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.setDeviceName(device.getName()); |
|
|
|
|
target.setDeptName(device.getName()); |
|
|
|
|
// 当年发电量
|
|
|
|
|
target.setPowerYear(this.getGenerationPower(device, 0)); |
|
|
|
|
target.setPowerYear(this.devicePowerYear(generationYears,device)); |
|
|
|
|
// 去年发电量
|
|
|
|
|
target.setPowerYesterYear(this.devicePowerYesterYear(generationYesterYears,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.setPowerYesterDay(this.devicePowerYesterDay(generations,device)); |
|
|
|
|
// 当天有功功率
|
|
|
|
|
target.setActivePowerVoList(this.getLoadsByDay(device)); |
|
|
|
|
// 30天发电量
|
|
|
|
|
target.setGenerationPowerVoList(this.getGenerationPowerList(device)); |
|
|
|
|
target.setGenerationPowerVoList(this.getGenerationPowerList(generations,device)); |
|
|
|
|
targets.add(target); |
|
|
|
|
countDownLatch.countDown(); |
|
|
|
|
}catch (Exception exception){ |
|
|
|
@ -317,6 +337,75 @@ public class RealTargetServiceImpl implements RealTargetService {
|
|
|
|
|
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 |
|
|
|
@ -1392,7 +1481,7 @@ public class RealTargetServiceImpl implements RealTargetService {
|
|
|
|
|
} |
|
|
|
|
return records.stream().map(record -> { |
|
|
|
|
ActivePowerVo load = new ActivePowerVo(); |
|
|
|
|
Date time = DateUtil.parse(record.getTs(), "yyyy-MM-dd HH:mm:ss.s"); |
|
|
|
|
Date time = DateUtil.parse(record.getTs(), "yyyy-MM-dd HH:mm:ss"); |
|
|
|
|
load.setStrHour(DateUtil.format(time,"yyyy-MM-dd HH")); |
|
|
|
|
load.setHour(time.getHours()); |
|
|
|
|
if(StringUtil.isNotBlank(record.getVal())){ |
|
|
|
@ -1469,10 +1558,14 @@ public class RealTargetServiceImpl implements RealTargetService {
|
|
|
|
|
target.setDeptName(station.getName()); |
|
|
|
|
// 当年发电量
|
|
|
|
|
target.setPowerYear(generateService.generate(year,station.getCode())); |
|
|
|
|
// FIXME 去年发电量
|
|
|
|
|
target.setPowerYesterYear(0f); |
|
|
|
|
// 当月发电量
|
|
|
|
|
target.setPowerMon(generateService.generate(mon,station.getCode())); |
|
|
|
|
// 当日发电量
|
|
|
|
|
target.setPowerDay(generateService.generate(day,station.getCode())); |
|
|
|
|
// FIXME 昨日发电量
|
|
|
|
|
target.setPowerYesterDay(0f); |
|
|
|
|
// 30天发电量
|
|
|
|
|
target.setGenerationPowerVoList(generateService.generate30Day(day,station.getCode())); |
|
|
|
|
return target; |
|
|
|
@ -1875,33 +1968,78 @@ public class RealTargetServiceImpl implements RealTargetService {
|
|
|
|
|
return dataService.periodTargetFloat(start,end,5,accessRules,device.getEmCode(),device.getRideCount(),HomePageConstant.HYDROPOWER_GENERATE_POWER); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 近30天发电量 |
|
|
|
|
* @param device |
|
|
|
|
* 站点设备近30天发电量 |
|
|
|
|
* @param stations |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
private List<GenerationPowerVo> getGenerationPowerList(EminfoAndEmParamVo device) { |
|
|
|
|
private List<ThirtyGenerationEntity> thirtyGenerations(List<String> stations) { |
|
|
|
|
Calendar calendar = Calendar.getInstance(); |
|
|
|
|
String end = DateUtil.format(calendar.getTime(), DateUtil.PATTERN_DATETIME); |
|
|
|
|
calendar.add(Calendar.DAY_OF_MONTH,-29); |
|
|
|
|
calendar.add(Calendar.HOUR_OF_DAY,-calendar.get(Calendar.HOUR_OF_DAY)); |
|
|
|
|
calendar.add(Calendar.MINUTE,-calendar.get(Calendar.MINUTE)); |
|
|
|
|
calendar.add(Calendar.SECOND,-calendar.get(Calendar.SECOND)); |
|
|
|
|
String start = DateUtil.format(calendar.getTime(), DateUtil.PATTERN_DATETIME); |
|
|
|
|
List<AnalyseDataTaosVO> records = dataService.periodTargetData(start,end,5,EquipmentConstants.CycleTypeEnum.DAY_CYCLE.getType(),device.getEmCode(),HomePageConstant.HYDROPOWER_GENERATE_POWER); |
|
|
|
|
if(CollectionUtil.isEmpty(records)){ |
|
|
|
|
return new ArrayList<>(); |
|
|
|
|
String start = DateUtil.format(calendar.getTime(), DateUtil.PATTERN_DATE); |
|
|
|
|
return thirtyGenerateService.list(Wrappers.<ThirtyGenerationEntity>lambdaQuery() |
|
|
|
|
.in(ThirtyGenerationEntity::getStationId,stations) |
|
|
|
|
.ge(ThirtyGenerationEntity::getStrDay,start) |
|
|
|
|
.le(ThirtyGenerationEntity::getStrDay,end) |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
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)); |
|
|
|
|
if(StringUtil.isEmpty(record.getVal())){ |
|
|
|
|
generate.setGenerate(0f); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 站点设备今年发电量 |
|
|
|
|
* @param stations |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
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{ |
|
|
|
|
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; |
|
|
|
|
}).collect(Collectors.toList()); |
|
|
|
|
calendar.add(Calendar.DAY_OF_MONTH,1); |
|
|
|
|
powers.add(power); |
|
|
|
|
start = calendar.getTime(); |
|
|
|
|
} |
|
|
|
|
return powers; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |