Commit 1e4ab757 authored by ZWT's avatar ZWT

feat(能源管理系统): 邮件接收

1.添加天气数据邮件方式接收定时任务;
2.修改配置文件,增加新建定时任务,同时增加自定义参数;
3.创建天气邮件数据接收处理实现类,同时验证获取自定义参数方法;
4.添加收件工具类,验证是否能正常接收邮件;
5.天气邮件数据接收定时任务增加获取未读天气数据逻辑,增加附件文件临时存储方法并验证是否能正常读取文件数据同时转换为json数据;
6.增加查询运行中电站列表方法;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent dee28bf7
......@@ -107,6 +107,7 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
Map<String, List<BasePhotovoltaicPlantView>> plantMap = plantList.stream()
.collect(Collectors.groupingBy(BasePhotovoltaicPlantView::getCityCode));
PlantPredictedPowerDataMapper mapper = context.getBean(PlantPredictedPowerDataMapper.class);
List<String> timeList = Arrays.asList("15:00", "30:00", "45:00");
//读取附件
// for (Message message : messageList) {
// String tempFilePath = this.saveAttachment(message);
......@@ -153,28 +154,24 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
String plantId = plant.getId();
DateTime date;
for (int i = 0; i < 8; i++) {
String hourTime = dailyData.getHourTimeArray().get(i);
PlantPredictedPowerDataEnt dao = new PlantPredictedPowerDataEnt();
dao.setCreateTime(new Date());
dao.setPlantId(plantId);
dao.setHourTime(hourTime);
dao.setTemperature(new BigDecimal(StrUtil.replace(dailyData.getTemperatureArray().get(i), "℃", "")));
dao.setWindSpeed(new BigDecimal(StrUtil.replace(dailyData.getWindSpeedArray().get(i), "m/s", "")));
dao.setWindDirection(new BigDecimal(WindDirection.findByValue(dailyData.getWindDirectionArray().get(i)).getValue()));
dao.setPressure(new BigDecimal(StrUtil.replace(dailyData.getPressureArray().get(i), "hPa", "")));
dao.setHumidity(new BigDecimal(StrUtil.replace(dailyData.getHumidityArray().get(i), "%", "")));
//判断小时数与查到的小时数,如果查到的小时数小,判断为第二天
LocalTime localTime = LocalTime.parse(hourTime);
int hour = localTime.getHour();
int hour = LocalTime.parse(dailyData.getHourTimeArray().get(i)).getHour();
if (hours >= hour) {
dateTime = DateUtil.offsetDay(dateTime, 1);
dayTime = dateTime.toString("yyyy-MM-dd");
}
dao.setYearTime(String.valueOf(dateTime.year()));
dao.setMonthTime(this.int2Str(dateTime.month() + 1));
dao.setDayTime(this.int2Str(dateTime.dayOfMonth()));
hours = hour;
dao.setHourTime(this.int2Str(hours));
PlantPredictedPowerDataEnt dao = this.getPlantPredictedPowerEnt(plantId,
this.int2Str(hours),
new BigDecimal(StrUtil.replace(dailyData.getTemperatureArray().get(i), "℃", "")),
new BigDecimal(StrUtil.replace(dailyData.getWindSpeedArray().get(i), "m/s", "")),
new BigDecimal(WindDirection.findByValue(dailyData.getWindDirectionArray().get(i)).getValue()),
new BigDecimal(StrUtil.replace(dailyData.getPressureArray().get(i), "hPa", "")),
new BigDecimal(StrUtil.replace(dailyData.getHumidityArray().get(i), "%", "")),
String.valueOf(dateTime.year()),
this.int2Str(dateTime.month() + 1),
this.int2Str(dateTime.dayOfMonth())
);
// 5.执行SQL
mapper.delete(new LambdaQueryWrapper<PlantPredictedPowerDataEnt>()
.eq(PlantPredictedPowerDataEnt::getPlantId, plantId)
......@@ -183,18 +180,7 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
.eq(PlantPredictedPowerDataEnt::getDayTime, dao.getDayTime())
.eq(PlantPredictedPowerDataEnt::getHourTime, dao.getHourTime())
);
dao.setMinTime("00:00");
dao.setDataDate(new StringBuilder(dao.getYearTime())
.append('-')
.append(dao.getMonthTime())
.append('-')
.append(dao.getDayTime())
.append(' ')
.append(dao.getHourTime())
.append(':')
.append(dao.getMinTime()).toString());
PlantPredictedPowerDataEnt insertDao = XCopyUtils.copyNewObject(dao, PlantPredictedPowerDataEnt.class);
allList.add(insertDao);
allList.add(dao);
PlantPredictedPowerDataEnt isExit = objList.stream().filter(item ->
StrUtil.equals(item.getYearTime(), dao.getYearTime()) &&
StrUtil.equals(item.getMonthTime(), dao.getMonthTime()) &&
......@@ -210,15 +196,6 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
// 两条数据中间差了两个小时,使用上下两条数据推算出中间差掉的两个小时
for (int i = 0; i < objList.size() - 1; i++) {
for (int y = 1; y < 3; y++) {
PlantPredictedPowerDataEnt dao = new PlantPredictedPowerDataEnt();
dao.setCreateTime(new Date());
dao.setPlantId(plantId);
int nextIndex = i + 1;
dao.setTemperature(this.compute(objList.get(i).getTemperature(), objList.get(nextIndex).getTemperature(), y));
dao.setWindSpeed(this.compute(objList.get(i).getWindSpeed(), objList.get(nextIndex).getWindSpeed(), y));
dao.setWindDirection(objList.get(i).getWindDirection());
dao.setPressure(this.compute(objList.get(i).getPressure(), objList.get(nextIndex).getPressure(), y));
dao.setHumidity(this.compute(objList.get(i).getHumidity(), objList.get(nextIndex).getHumidity(), y));
date = DateUtil.parseDate(objList.get(i).getDataDate());
String hourString;
Integer hourTime = Integer.valueOf(objList.get(i).getHourTime());
......@@ -233,10 +210,18 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
}
}
dayTime = date.toString("yyyy-MM-dd");
dao.setYearTime(String.valueOf(date.year()));
dao.setMonthTime(this.int2Str(date.month() + 1));
dao.setDayTime(this.int2Str(date.dayOfMonth()));
dao.setHourTime(hourString);
int nextIndex = i + 1;
PlantPredictedPowerDataEnt dao = this.getPlantPredictedPowerEnt(plantId,
hourString,
this.compute(objList.get(i).getTemperature(), objList.get(nextIndex).getTemperature(), y),
this.compute(objList.get(i).getWindSpeed(), objList.get(nextIndex).getWindSpeed(), y),
objList.get(i).getWindDirection(),
this.compute(objList.get(i).getPressure(), objList.get(nextIndex).getPressure(), y),
this.compute(objList.get(i).getHumidity(), objList.get(nextIndex).getHumidity(), y),
String.valueOf(date.year()),
this.int2Str(date.month() + 1),
this.int2Str(date.dayOfMonth())
);
// 5.执行SQL
mapper.delete(new LambdaQueryWrapper<PlantPredictedPowerDataEnt>()
.eq(PlantPredictedPowerDataEnt::getPlantId, plantId)
......@@ -245,21 +230,50 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
.eq(PlantPredictedPowerDataEnt::getDayTime, dao.getDayTime())
.eq(PlantPredictedPowerDataEnt::getHourTime, dao.getHourTime())
);
dao.setMinTime("00:00");
dao.setDataDate(new StringBuilder(dao.getYearTime())
.append('-')
.append(dao.getMonthTime())
.append('-')
.append(dao.getDayTime())
.append(' ')
.append(dao.getHourTime())
.append(':')
.append(dao.getMinTime()).toString());
PlantPredictedPowerDataEnt insertDao = XCopyUtils.copyNewObject(dao, PlantPredictedPowerDataEnt.class);
allList.add(insertDao);
allList.add(dao);
}
}
//入库
List<PlantPredictedPowerDataEnt> batchList = new ArrayList<>();
List<PlantPredictedPowerDataEnt> sortList = allList.stream()
.sorted(Comparator.comparing(PlantPredictedPowerDataEnt::getDataDate))
.collect(Collectors.toList());
for (int i = 0; i < sortList.size(); i++) {
PlantPredictedPowerDataEnt item = sortList.get(i);
batchList.add(item);
if (i < sortList.size() - 1) {
for (int y = 0; y < timeList.size(); y++) {
PlantPredictedPowerDataEnt dao = XCopyUtils.copyNewObject(item);
dao.setMinTime(timeList.get(y));
dao.setDataDate(dao.getYearTime() + "-" + dao.getMonthTime() + "-" + dao.getDayTime() + " " + dao.getHourTime() + ":" + dao.getMinTime());
int I_i = i + 1;
BigDecimal temperature_1 = sortList.get(i).getTemperature() == null ? new BigDecimal(0) : sortList.get(i).getTemperature();
BigDecimal temperature_2 = sortList.get(I_i).getTemperature() == null ? new BigDecimal(0) : sortList.get(I_i).getTemperature();
dao.setTemperature(temperature_1.add(temperature_2.subtract(temperature_1).multiply(new BigDecimal(0.3 * (y + 1)))));
BigDecimal humidity_1 = sortList.get(i).getHumidity() == null ? new BigDecimal(0) : sortList.get(i).getHumidity();
BigDecimal humidity_2 = sortList.get(I_i).getHumidity() == null ? new BigDecimal(0) : sortList.get(I_i).getHumidity();
dao.setHumidity(humidity_1.add(humidity_2.subtract(humidity_1).multiply(new BigDecimal(0.3 * (y + 1)))));
BigDecimal windSpeed_1 = sortList.get(i).getWindSpeed() == null ? new BigDecimal(0) : sortList.get(i).getWindSpeed();
BigDecimal windSpeed_2 = sortList.get(I_i).getWindSpeed() == null ? new BigDecimal(0) : sortList.get(I_i).getWindSpeed();
dao.setWindSpeed(windSpeed_1.add(windSpeed_2.subtract(windSpeed_1).multiply(new BigDecimal(0.3 * (y + 1)))));
BigDecimal pressure_1 = sortList.get(i).getPressure() == null ? new BigDecimal(0) : sortList.get(i).getPressure();
BigDecimal pressure_2 = sortList.get(I_i).getPressure() == null ? new BigDecimal(0) : sortList.get(I_i).getPressure();
dao.setPressure(pressure_1.add(pressure_2.subtract(pressure_1).multiply(new BigDecimal(0.3 * (y + 1)))));
BigDecimal planeIrradiance_1 = sortList.get(i).getPlaneIrradiance() == null ? new BigDecimal(0) : sortList.get(i).getPlaneIrradiance();
BigDecimal planeIrradiance_2 = sortList.get(I_i).getPlaneIrradiance() == null ? new BigDecimal(0) : sortList.get(I_i).getPlaneIrradiance();
dao.setPlaneIrradiance(planeIrradiance_1.add(planeIrradiance_2.subtract(planeIrradiance_1).multiply(new BigDecimal(0.3 * (y + 1)))));
BigDecimal horizontalIrradiance_1 = sortList.get(i).getHorizontalIrradiance() == null ? new BigDecimal(0) : sortList.get(i).getHorizontalIrradiance();
BigDecimal horizontalIrradiance_2 = sortList.get(I_i).getHorizontalIrradiance() == null ? new BigDecimal(0) : sortList.get(I_i).getHorizontalIrradiance();
dao.setHorizontalIrradiance(horizontalIrradiance_1.add(horizontalIrradiance_2.subtract(horizontalIrradiance_1).multiply(new BigDecimal(0.3 * (y + 1)))));
BigDecimal power_1 = sortList.get(i).getPower() == null ? new BigDecimal(0) : sortList.get(i).getPower();
BigDecimal power_2 = sortList.get(I_i).getPower() == null ? new BigDecimal(0) : sortList.get(I_i).getPower();
dao.setPower(power_1.add(power_2.subtract(power_1).multiply(new BigDecimal(0.3 * (y + 1)))));
batchList.add(dao);
}
}
}
}
......@@ -276,6 +290,49 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
return XServiceResult.OK;
}
/**
* 获取电厂预测功率ent
*
* @param plantId 电站ID
* @param hourTime 小时
* @param temperature 温度
* @param windSpeed 风速
* @param windDirection 风向
* @param pressure 压力
* @param humidity 湿度
* @param yearTime 年时间
* @param monthTime 月份时间
* @param dayTime 白天
* @return {@link PlantPredictedPowerDataEnt}
*/
private PlantPredictedPowerDataEnt getPlantPredictedPowerEnt(String plantId, String hourTime, BigDecimal temperature, BigDecimal windSpeed, BigDecimal windDirection,
BigDecimal pressure, BigDecimal humidity, String yearTime, String monthTime, String dayTime) {
PlantPredictedPowerDataEnt dao = new PlantPredictedPowerDataEnt();
dao.setCreateTime(new Date());
dao.setPlantId(plantId);
dao.setHourTime(hourTime);
dao.setTemperature(temperature);
dao.setWindSpeed(windSpeed);
dao.setWindDirection(windDirection);
dao.setPressure(pressure);
dao.setHumidity(humidity);
dao.setYearTime(yearTime);
dao.setMonthTime(monthTime);
dao.setDayTime(dayTime);
dao.setMinTime("00:00");
dao.setDataDate(new StringBuilder(dao.getYearTime())
.append('-')
.append(dao.getMonthTime())
.append('-')
.append(dao.getDayTime())
.append(' ')
.append(dao.getHourTime())
.append(':')
.append(dao.getMinTime()).toString());
return dao;
}
private BigDecimal compute(BigDecimal a, BigDecimal b, int y) {
return a.add(b.subtract(a).multiply(new BigDecimal(0.3 * y)));
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment