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
				 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.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