Browse Source
# Conflicts: # hzims-service/hzims-basic/src/main/java/com/hnac/hzims/basic/controller/PresonManagementController.java # hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/FirstWorkTicketServiceImpl.javazhongwei
Jone
4 months ago
85 changed files with 1597 additions and 547 deletions
@ -0,0 +1,26 @@ |
|||||||
|
package com.hnac.hzims.operational.homePage.Hydroelectric.vo; |
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonSerialize; |
||||||
|
import com.fasterxml.jackson.databind.ser.std.NullSerializer; |
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author ysj |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@ApiModel(value = "站点首页-设备近30天发电量") |
||||||
|
public class HydroelectricDeviceGenerateVo { |
||||||
|
|
||||||
|
@ApiModelProperty(value = "日期") |
||||||
|
private String date; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "发电量") |
||||||
|
@JsonSerialize(nullsUsing = NullSerializer.class) |
||||||
|
private Float generate; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "功率") |
||||||
|
@JsonSerialize(nullsUsing = NullSerializer.class) |
||||||
|
private Float load; |
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
package com.hnac.hzims.operational.homePage.Hydroelectric.vo; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author ysj |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@ApiModel(value = "站点首页-设备近24小时功率曲线") |
||||||
|
public class HydroelectricDevicePowerVo { |
||||||
|
|
||||||
|
@ApiModelProperty(value = "字符串时间") |
||||||
|
private String strHour; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "小时") |
||||||
|
private Integer hour; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "有功功率") |
||||||
|
private String activePower; |
||||||
|
} |
@ -0,0 +1,72 @@ |
|||||||
|
package com.hnac.hzims.operational.homePage.Hydroelectric.vo; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author ysj |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@ApiModel(value = "站点首页-设备信息") |
||||||
|
public class HydroelectricDeviceVo { |
||||||
|
|
||||||
|
@ApiModelProperty(value = "设备编号") |
||||||
|
private String deivceCode; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "设备名称") |
||||||
|
private String deivceName; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "开关机状态: 0 - 关机 1 - 开机") |
||||||
|
private Boolean state; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "总装机容量") |
||||||
|
private Double installedCapacity; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "有功功率") |
||||||
|
private Double activePower; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "容量利用率") |
||||||
|
private Double capacityRate; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "无功功率") |
||||||
|
private Double reactivePower; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "导叶开度") |
||||||
|
private Double guideOpen; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "今日发电量") |
||||||
|
private Float powerDay; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "昨日发电量") |
||||||
|
private Float powerYesterDay; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "当年发电量") |
||||||
|
private Float powerYear; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "去年发电量") |
||||||
|
private Float powerYesterYear; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "当月发电量") |
||||||
|
private Float powerMon; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "本次开机时间") |
||||||
|
private String startDownTime; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "本次开机时长") |
||||||
|
private Double startupDownDuration; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "年停机时长") |
||||||
|
private Double shutDownDurationYear; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "年开机时长") |
||||||
|
private Double startupDurationYear; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "设备近24小时有功功率") |
||||||
|
private List<HydroelectricDevicePowerVo> powers; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "设备近30日发电量") |
||||||
|
private List<HydroelectricDeviceGenerateVo> generates; |
||||||
|
} |
@ -0,0 +1,28 @@ |
|||||||
|
package com.hnac.hzims.operational.homePage.Hydroelectric.vo; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author ysj |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@ApiModel(value = "月发电对象") |
||||||
|
public class HydroelectricGenerateMonVo { |
||||||
|
|
||||||
|
@ApiModelProperty(value = "年份") |
||||||
|
private Integer year; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "月份") |
||||||
|
private Integer month; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "字符串格式月份") |
||||||
|
private String strMonth; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "月发电量") |
||||||
|
private Double power; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "计划发电量") |
||||||
|
private Double planPower; |
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
package com.hnac.hzims.operational.homePage.Hydroelectric.vo; |
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author ysj |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@ApiModel(value = "站点首页-最近30日发电量/降雨量") |
||||||
|
public class HydroelectricPowerRainVo { |
||||||
|
|
||||||
|
@ApiModelProperty(value = "日期") |
||||||
|
private String date; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "发电量") |
||||||
|
private Double generate; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "降雨") |
||||||
|
private Double rain; |
||||||
|
} |
@ -0,0 +1,68 @@ |
|||||||
|
package com.hnac.hzims.operational.homePage.Hydroelectric.vo; |
||||||
|
|
||||||
|
import com.hnac.hzims.hzimsweather.response.weather.Daily; |
||||||
|
import io.swagger.annotations.ApiModel; |
||||||
|
import io.swagger.annotations.ApiModelProperty; |
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author ysj |
||||||
|
*/ |
||||||
|
@Data |
||||||
|
@ApiModel(value = "水电站首页-站点") |
||||||
|
public class HydroelectricStationVo { |
||||||
|
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "站点编号") |
||||||
|
private String stationCode; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "站点名称") |
||||||
|
private String stationName; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "总装机容量") |
||||||
|
private Double installedCapacity; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "总发电负荷") |
||||||
|
private Double powerSum; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "容量利用率") |
||||||
|
private Double capacityRate; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "月计划发电量") |
||||||
|
private Double powerMonPlan; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "月发电量") |
||||||
|
private Double powerMon; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "月发电量完成率") |
||||||
|
private Double powerRateMon; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "年计划发电量") |
||||||
|
private Double powerYearPlan; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "年发电量") |
||||||
|
private Double powerYear; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "年发电完成率") |
||||||
|
private Double powerRateYear; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "今日发电量") |
||||||
|
private Double powerDay; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "昨日发电量") |
||||||
|
private Double powerYesterDay; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "七日内天气") |
||||||
|
private List<Daily> weather; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "设备集合") |
||||||
|
private List<HydroelectricDeviceVo> devices; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "降雨/发电量曲线") |
||||||
|
private List<HydroelectricPowerRainVo> powerRains; |
||||||
|
|
||||||
|
@ApiModelProperty(value = "降雨/发电量曲线") |
||||||
|
private List<HydroelectricGenerateMonVo> generateMons; |
||||||
|
} |
@ -1,4 +1,4 @@ |
|||||||
package com.hnac.hzims.operational.home.wind; |
package com.hnac.hzims.operational.homePage.wind.vo; |
||||||
|
|
||||||
import io.swagger.annotations.ApiModel; |
import io.swagger.annotations.ApiModel; |
||||||
import io.swagger.annotations.ApiModelProperty; |
import io.swagger.annotations.ApiModelProperty; |
@ -0,0 +1,35 @@ |
|||||||
|
package com.hnac.hzims.operational.homePage.controller; |
||||||
|
|
||||||
|
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; |
||||||
|
import com.hnac.hzims.operational.homePage.Hydroelectric.vo.HydroelectricStationVo; |
||||||
|
import com.hnac.hzims.operational.homePage.service.HydroelectricService; |
||||||
|
import io.swagger.annotations.Api; |
||||||
|
import io.swagger.annotations.ApiOperation; |
||||||
|
import io.swagger.annotations.ApiParam; |
||||||
|
import lombok.AllArgsConstructor; |
||||||
|
import org.springblade.core.boot.ctrl.BladeController; |
||||||
|
import org.springblade.core.tool.api.R; |
||||||
|
import org.springframework.web.bind.annotation.GetMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestParam; |
||||||
|
import org.springframework.web.bind.annotation.RestController; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author ysj |
||||||
|
*/ |
||||||
|
@RestController |
||||||
|
@RequestMapping("/hydroelectric") |
||||||
|
@Api(value = "水电站-首页", tags = "水电站-首页") |
||||||
|
@AllArgsConstructor |
||||||
|
public class HydroelectricController extends BladeController { |
||||||
|
|
||||||
|
|
||||||
|
private final HydroelectricService hydroelectricService; |
||||||
|
|
||||||
|
@ApiOperation("水电站站点指标") |
||||||
|
@GetMapping("/station") |
||||||
|
@ApiOperationSupport(order = 1) |
||||||
|
public R<HydroelectricStationVo> station(@RequestParam("deptId") Long deptId) { |
||||||
|
return R.data(hydroelectricService.station(deptId)); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,12 @@ |
|||||||
|
package com.hnac.hzims.operational.homePage.service; |
||||||
|
|
||||||
|
import com.hnac.hzims.operational.homePage.Hydroelectric.vo.HydroelectricStationVo; |
||||||
|
|
||||||
|
/** |
||||||
|
* 水电站-首页接口 |
||||||
|
* @author ysj |
||||||
|
*/ |
||||||
|
public interface HydroelectricService { |
||||||
|
|
||||||
|
HydroelectricStationVo station(Long deptId); |
||||||
|
} |
@ -0,0 +1,316 @@ |
|||||||
|
package com.hnac.hzims.operational.homePage.service.impl; |
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject; |
||||||
|
import com.alibaba.fastjson.TypeReference; |
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
||||||
|
import com.hnac.hzims.equipment.feign.IPlanGenertionClient; |
||||||
|
import com.hnac.hzims.equipment.vo.EminfoAndEmParamVo; |
||||||
|
import com.hnac.hzims.equipment.vo.PlanPowerYearVo; |
||||||
|
import com.hnac.hzims.hzimsweather.feign.IRainfallClient; |
||||||
|
import com.hnac.hzims.hzimsweather.response.weather.HeWeatherWeatherDailyResponse; |
||||||
|
import com.hnac.hzims.operational.homePage.Hydroelectric.vo.*; |
||||||
|
import com.hnac.hzims.operational.homePage.service.HydroelectricService; |
||||||
|
import com.hnac.hzims.operational.main.service.IWeatherService; |
||||||
|
import com.hnac.hzims.operational.main.vo.HydropowerUnitRealVo; |
||||||
|
import com.hnac.hzims.operational.main.vo.HydropowerUnitTargetVo; |
||||||
|
import com.hnac.hzims.operational.station.entity.StationEntity; |
||||||
|
import com.hnac.hzims.operational.station.service.IStationService; |
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.apache.commons.collections4.MapUtils; |
||||||
|
import org.springblade.core.tool.api.R; |
||||||
|
import org.springblade.core.tool.utils.BeanUtil; |
||||||
|
import org.springblade.core.tool.utils.CollectionUtil; |
||||||
|
import org.springblade.core.tool.utils.DateUtil; |
||||||
|
import org.springblade.core.tool.utils.ObjectUtil; |
||||||
|
import org.springframework.data.redis.core.RedisTemplate; |
||||||
|
import org.springframework.stereotype.Service; |
||||||
|
|
||||||
|
import java.math.BigDecimal; |
||||||
|
import java.math.RoundingMode; |
||||||
|
import java.util.*; |
||||||
|
import java.util.stream.Collectors; |
||||||
|
|
||||||
|
/** |
||||||
|
* 水电站-首页接口实现类 |
||||||
|
* @author ysj |
||||||
|
*/ |
||||||
|
@Service |
||||||
|
@RequiredArgsConstructor |
||||||
|
@Slf4j |
||||||
|
public class HydroelectricServiceImpl implements HydroelectricService { |
||||||
|
|
||||||
|
|
||||||
|
private final IStationService stationService; |
||||||
|
|
||||||
|
private final IWeatherService weatherService; |
||||||
|
|
||||||
|
private final IRainfallClient rainClient; |
||||||
|
|
||||||
|
private final IPlanGenertionClient planClient; |
||||||
|
|
||||||
|
private final RedisTemplate redisTemplate; |
||||||
|
|
||||||
|
private final static String RECENT_YEAR_POWER_DATA = "hzims:operation:key:power:data"; |
||||||
|
private final static String LOAD_HYDROPOWER_REAL_KEY = "hzims:operation:loadhydropowerunit:real:key"; |
||||||
|
private final static String LOAD_HYDROPOWER_TARGET_KEY = "hzims:operation:loadhydropowerunit:target:key"; |
||||||
|
private final static String DEVICE_CACHE_COFIG_FINAL = "hzims:equipment:emInfo:deviceCode.emInfoList"; |
||||||
|
|
||||||
|
/** |
||||||
|
* 水电站首页-站点首页 |
||||||
|
* @param deptId |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@Override |
||||||
|
public HydroelectricStationVo station(Long deptId) { |
||||||
|
// 步骤1.查询站点
|
||||||
|
StationEntity station = stationService.getOne(Wrappers.<StationEntity>lambdaQuery().eq(StationEntity::getRefDept,deptId)); |
||||||
|
if(ObjectUtil.isEmpty(station)){ |
||||||
|
return new HydroelectricStationVo(); |
||||||
|
} |
||||||
|
// 步骤2.数据准备
|
||||||
|
// 设备
|
||||||
|
List<EminfoAndEmParamVo> devices = JSONObject.parseObject(redisTemplate.opsForValue().get(DEVICE_CACHE_COFIG_FINAL).toString(),new TypeReference<List<EminfoAndEmParamVo>>() {}); |
||||||
|
// 实时数据
|
||||||
|
List<HydropowerUnitRealVo> reals = (List<HydropowerUnitRealVo>) redisTemplate.opsForValue().get(LOAD_HYDROPOWER_REAL_KEY); |
||||||
|
// 指标数据
|
||||||
|
List<HydropowerUnitTargetVo> targets = (List<HydropowerUnitTargetVo>) redisTemplate.opsForValue().get(LOAD_HYDROPOWER_TARGET_KEY); |
||||||
|
// 降雨数据
|
||||||
|
List<Map<String, Object>> rains = this.nearThirtyRains(station.getCode()); |
||||||
|
// 七日天气
|
||||||
|
Map<String, HeWeatherWeatherDailyResponse> weathers = this.weekWeather(Collections.singletonList(station.getCode())); |
||||||
|
// 近3年发电量
|
||||||
|
Map<String, Map<String, Float>> map = (Map<String, Map<String, Float>>) redisTemplate.opsForValue().get(RECENT_YEAR_POWER_DATA); |
||||||
|
// 计划发电量
|
||||||
|
List<PlanPowerYearVo> plans = planClient.getPlanPowerByYear(station.getCode(), Integer.parseInt(DateUtil.format(new Date(),"yyyy"))); |
||||||
|
|
||||||
|
// 步骤3.数据处理、赋值
|
||||||
|
HydroelectricStationVo result = new HydroelectricStationVo(); |
||||||
|
result.setStationCode(station.getCode()); |
||||||
|
result.setStationName(station.getName()); |
||||||
|
// 天气
|
||||||
|
if(MapUtils.isNotEmpty(weathers) && weathers.containsKey(station.getCode())){ |
||||||
|
HeWeatherWeatherDailyResponse week = weathers.get(station.getCode()); |
||||||
|
if(ObjectUtil.isNotEmpty(week) && CollectionUtil.isNotEmpty(week.getDaily())){ |
||||||
|
result.setWeather(week.getDaily()); |
||||||
|
} |
||||||
|
} |
||||||
|
// 设备
|
||||||
|
if(CollectionUtil.isNotEmpty(devices)){ |
||||||
|
result.setDevices(devices.stream().map(iter->{ |
||||||
|
HydroelectricDeviceVo device = new HydroelectricDeviceVo(); |
||||||
|
Optional<HydropowerUnitRealVo> real = reals.stream().filter(o-> iter.getEmCode().equals(o.getDeviceCode())).findFirst(); |
||||||
|
// 实时数据
|
||||||
|
if(real.isPresent()){ |
||||||
|
device.setState(real.get().getState()); |
||||||
|
device.setInstalledCapacity(real.get().getInstalledCapacity()); |
||||||
|
device.setActivePower(real.get().getActivePower()); |
||||||
|
device.setReactivePower(real.get().getReactivePower()); |
||||||
|
device.setGuideOpen(real.get().getGuideOpen()); |
||||||
|
if(device.getActivePower() > 0 && device.getReactivePower() > 0){ |
||||||
|
device.setCapacityRate(BigDecimal.valueOf(device.getActivePower() / device.getInstalledCapacity() * 100).setScale(2, RoundingMode.HALF_UP).doubleValue()); |
||||||
|
}else{ |
||||||
|
device.setCapacityRate(0.0); |
||||||
|
} |
||||||
|
} |
||||||
|
// 指标数据
|
||||||
|
Optional<HydropowerUnitTargetVo> target = targets.stream().filter(o-> iter.getEmCode().equals(o.getDeviceCode())).findFirst(); |
||||||
|
if(target.isPresent()){ |
||||||
|
device.setPowerDay(target.get().getPowerDay()); |
||||||
|
device.setPowerYesterDay(target.get().getPowerYesterDay()); |
||||||
|
device.setPowerYear(target.get().getPowerYear()); |
||||||
|
device.setPowerYesterYear(target.get().getPowerYesterYear()); |
||||||
|
device.setPowerMon(target.get().getPowerMon()); |
||||||
|
device.setStartDownTime(target.get().getStartDownTime()); |
||||||
|
device.setStartupDownDuration(target.get().getStartupDownDuration()); |
||||||
|
device.setStartupDurationYear(target.get().getStartupDurationYear()); |
||||||
|
device.setShutDownDurationYear(target.get().getShutDownDurationYear()); |
||||||
|
if(CollectionUtil.isNotEmpty(target.get().getActivePowerVoList())){ |
||||||
|
device.setPowers(target.get().getActivePowerVoList().stream().map(o-> BeanUtil.copy(o, HydroelectricDevicePowerVo.class)).collect(Collectors.toList())); |
||||||
|
} |
||||||
|
if(CollectionUtil.isNotEmpty(target.get().getActivePowerVoList())){ |
||||||
|
device.setGenerates(target.get().getGenerationPowerVoList().stream().map(o-> BeanUtil.copy(o, HydroelectricDeviceGenerateVo.class)).collect(Collectors.toList())); |
||||||
|
} |
||||||
|
} |
||||||
|
return device; |
||||||
|
}).collect(Collectors.toList())); |
||||||
|
} |
||||||
|
// 站点指标数据
|
||||||
|
if(CollectionUtil.isNotEmpty(result.getDevices())){ |
||||||
|
// 装机容量、发电负荷
|
||||||
|
result.setInstalledCapacity(result.getDevices().stream().mapToDouble(HydroelectricDeviceVo::getInstalledCapacity).sum()); |
||||||
|
result.setPowerSum(result.getDevices().stream().mapToDouble(HydroelectricDeviceVo::getActivePower).sum()); |
||||||
|
if(result.getInstalledCapacity() > 0 && result.getPowerSum() > 0 ){ |
||||||
|
result.setCapacityRate(BigDecimal.valueOf(result.getPowerSum() / result.getInstalledCapacity() * 100).setScale(2, RoundingMode.HALF_UP).doubleValue()); |
||||||
|
}else{ |
||||||
|
result.setCapacityRate(0.0); |
||||||
|
} |
||||||
|
// 月计划发电量、月已发电量
|
||||||
|
if(CollectionUtil.isNotEmpty(plans)){ |
||||||
|
result.setPowerMonPlan(plans.stream().filter(plan -> plan.getMon().contains(DateUtil.format(new Date(),"yyyy-NM"))).mapToDouble(PlanPowerYearVo::getPlanPower).sum()); |
||||||
|
}else{ |
||||||
|
result.setPowerMonPlan(0.0); |
||||||
|
} |
||||||
|
result.setPowerMon(result.getDevices().stream().mapToDouble(HydroelectricDeviceVo::getPowerMon).sum()); |
||||||
|
|
||||||
|
// 年计划发电量、年已发电量
|
||||||
|
if(CollectionUtil.isNotEmpty(plans)){ |
||||||
|
result.setPowerYearPlan(plans.stream().mapToDouble(PlanPowerYearVo::getPlanPower).sum()); |
||||||
|
}else{ |
||||||
|
result.setPowerYearPlan(0.0); |
||||||
|
} |
||||||
|
result.setPowerYear(result.getDevices().stream().mapToDouble(HydroelectricDeviceVo::getPowerYear).sum()); |
||||||
|
|
||||||
|
// 今日发电量、昨日发电量
|
||||||
|
result.setPowerDay(result.getDevices().stream().mapToDouble(HydroelectricDeviceVo::getPowerDay).sum()); |
||||||
|
result.setPowerYesterDay(result.getDevices().stream().mapToDouble(HydroelectricDeviceVo::getPowerYesterDay).sum()); |
||||||
|
|
||||||
|
// 近30日降雨量/发电量
|
||||||
|
result.setPowerRains(this.stationPowerRains(result.getDevices(),rains)); |
||||||
|
// 电站月发电/计划发电
|
||||||
|
result.setGenerateMons(this.stationGenerateMons(plans,map.get(station.getCode()))); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 站点近30天降雨数据 |
||||||
|
* @param station |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
private List<Map<String, Object>> nearThirtyRains(String station) { |
||||||
|
Calendar calendar = Calendar.getInstance(); |
||||||
|
calendar.add(Calendar.DAY_OF_MONTH,-1); |
||||||
|
String end = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE); |
||||||
|
calendar.add(Calendar.DAY_OF_MONTH,-29); |
||||||
|
String start = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE); |
||||||
|
R<List<Map<String, Object>>> rains = rainClient.getDurationRainFall(station,start,end); |
||||||
|
if(!rains.isSuccess() || CollectionUtil.isEmpty(rains.getData())){ |
||||||
|
return new ArrayList<>(); |
||||||
|
} |
||||||
|
return rains.getData(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 站点七天天气 |
||||||
|
* @param stations |
||||||
|
*/ |
||||||
|
private Map<String, HeWeatherWeatherDailyResponse> weekWeather(List stations) { |
||||||
|
if(CollectionUtil.isEmpty(stations)){ |
||||||
|
return new HashMap<>(); |
||||||
|
} |
||||||
|
// 实时天气
|
||||||
|
return weatherService.getWeekWeather(stations); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 站点近30天降雨量/发电量 |
||||||
|
* @param devices |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
private List<HydroelectricPowerRainVo> stationPowerRains(List<HydroelectricDeviceVo> devices,List<Map<String, Object>> rains) { |
||||||
|
List<HydroelectricDeviceGenerateVo> generates = new ArrayList<>(); |
||||||
|
devices.forEach(device->{ |
||||||
|
generates.addAll(device.getGenerates()); |
||||||
|
}); |
||||||
|
Calendar calendar = Calendar.getInstance(); |
||||||
|
calendar.add(Calendar.DAY_OF_MONTH,-1); |
||||||
|
Date end = calendar.getTime(); |
||||||
|
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)); |
||||||
|
calendar.add(Calendar.DAY_OF_MONTH,-29); |
||||||
|
Date start = calendar.getTime(); |
||||||
|
List<HydroelectricPowerRainVo> powerRains = new ArrayList<>(); |
||||||
|
while (start.compareTo(end) < 0) { |
||||||
|
HydroelectricPowerRainVo powerRain = new HydroelectricPowerRainVo(); |
||||||
|
// 日期
|
||||||
|
powerRain.setDate(DateUtil.format(calendar.getTime(),"yyyy-MM-dd")); |
||||||
|
// 发电量
|
||||||
|
powerRain.setGenerate(generates.stream().filter(o-> powerRain.getDate().equals(o.getDate())).mapToDouble(HydroelectricDeviceGenerateVo::getGenerate).sum()); |
||||||
|
// 降雨量
|
||||||
|
if(CollectionUtil.isNotEmpty(rains)){ |
||||||
|
powerRain.setRain(rains.stream().mapToDouble(map->{ |
||||||
|
if (map.get("fx_date").equals(powerRain.getDate())) { |
||||||
|
Object object = map.get("precip"); |
||||||
|
if(ObjectUtil.isEmpty(object)){ |
||||||
|
return 0.0; |
||||||
|
}else{ |
||||||
|
return Double.parseDouble(object.toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
return 0.0; |
||||||
|
}).sum()); |
||||||
|
}else{ |
||||||
|
powerRain.setRain(0.0); |
||||||
|
} |
||||||
|
powerRains.add(powerRain); |
||||||
|
calendar.add(Calendar.DAY_OF_MONTH,1); |
||||||
|
start = calendar.getTime(); |
||||||
|
} |
||||||
|
return powerRains; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 站点电站月发电/计划发电 |
||||||
|
* @param plans |
||||||
|
* @param map |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
private List<HydroelectricGenerateMonVo> stationGenerateMons(List<PlanPowerYearVo> plans, Map<String, Float> map) { |
||||||
|
// 获取月份集合
|
||||||
|
List<String> mons = this.mons(0,12,false); |
||||||
|
return mons.stream().map(mon->{ |
||||||
|
Date date = DateUtil.parse(mon,DateUtil.PATTERN_DATE); |
||||||
|
HydroelectricGenerateMonVo generateMon = new HydroelectricGenerateMonVo(); |
||||||
|
generateMon.setStrMonth(mon); |
||||||
|
generateMon.setYear(date.getYear()); |
||||||
|
generateMon.setMonth(date.getMonth() + 1); |
||||||
|
// 计划发电量
|
||||||
|
if(CollectionUtil.isNotEmpty(plans)){ |
||||||
|
generateMon.setPlanPower(plans.stream().filter(plan -> plan.getMon().contains(DateUtil.format(date,"yyyy-MM"))).mapToDouble(PlanPowerYearVo::getPlanPower).sum()); |
||||||
|
}else{ |
||||||
|
generateMon.setPlanPower(0.0); |
||||||
|
} |
||||||
|
// 实际发电
|
||||||
|
if(MapUtils.isNotEmpty(map)){ |
||||||
|
generateMon.setPower(map.entrySet().stream().filter(entry->entry.getKey().equals(mon)).mapToDouble(Map.Entry::getValue).sum()); |
||||||
|
}else{ |
||||||
|
generateMon.setPlanPower(0.0); |
||||||
|
} |
||||||
|
return generateMon; |
||||||
|
}).collect(Collectors.toList()); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取近年月份集合 |
||||||
|
* @param year |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public List<String> mons(int year, int endMoth, boolean nextMon) { |
||||||
|
List<String> list = new ArrayList<>(); |
||||||
|
// 开始日期
|
||||||
|
Calendar endCal = Calendar.getInstance(); |
||||||
|
endCal.setTime(new Date()); |
||||||
|
endCal.add(Calendar.MONTH, -endCal.get(Calendar.MONTH) + endMoth); |
||||||
|
endCal.add(Calendar.DATE, -endCal.get(Calendar.DATE) + 1); |
||||||
|
|
||||||
|
// 结束日期
|
||||||
|
Calendar startCal = Calendar.getInstance(); |
||||||
|
startCal.setTime(new Date()); |
||||||
|
startCal.set(Calendar.YEAR, startCal.get(Calendar.YEAR) - year); |
||||||
|
startCal.add(Calendar.MONTH, -startCal.get(Calendar.MONTH)); |
||||||
|
startCal.add(Calendar.DATE, -startCal.get(Calendar.DATE) + 1); |
||||||
|
// 获取日期之间的月份
|
||||||
|
while (endCal.after(startCal)) { |
||||||
|
list.add(DateUtil.format(startCal.getTime(),DateUtil.PATTERN_DATE)); |
||||||
|
startCal.add(Calendar.MONTH, 1); |
||||||
|
} |
||||||
|
if(nextMon){ |
||||||
|
list.add(DateUtil.format(endCal.getTime(),DateUtil.PATTERN_DATE)); |
||||||
|
} |
||||||
|
return list; |
||||||
|
} |
||||||
|
|
||||||
|
} |
Binary file not shown.
Loading…
Reference in new issue