Commit b389e222 authored by ZWT's avatar ZWT

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

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

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent 2df0668f
......@@ -6,6 +6,7 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.io.file.FileReader;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
......@@ -19,8 +20,10 @@ import pps.core.base.entity.PlantPredictedPowerDataEnt;
import pps.core.base.enums.WindDirection;
import pps.core.base.mapper.BasePhotovoltaicPlantViewMapper;
import pps.core.base.mapper.PlantPredictedPowerDataMapper;
import pps.core.base.mapper.PlantPredictedPowerDataViewMapper;
import pps.core.base.service.data.DailyData;
import pps.core.common.constant.BusinessConstant;
import pps.core.common.utils.BaseUtils;
import xstartup.annotation.XService;
import xstartup.base.XContext;
import xstartup.base.XStartup;
......@@ -127,6 +130,7 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
//
// FileUtil.del(tempFilePath);
// }
List<PlantPredictedPowerDataEnt> batchList = new ArrayList<>();
FileReader fileReader = new FileReader("D:\\home\\weather\\temp\\receive\\20231114\\1699943400000.json");
String jsonString = fileReader.readString();
JSONObject jsonObject = JSONObject.parseObject(jsonString);
......@@ -151,7 +155,6 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
List<PlantPredictedPowerDataEnt> objList = new ArrayList<>();
DateTime dateTime = DateTime.of(dailyData.getDateTime());
int hours = 0;
String dayTime = dateTime.toString("yyyy-MM-dd");
String plantId = plant.getId();
DateTime date;
for (int i = 0; i < 8; i++) {
......@@ -159,16 +162,15 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
int hour = LocalTime.parse(dailyData.getHourTimeArray().get(i)).getHour();
if (hours >= hour) {
dateTime = DateUtil.offsetDay(dateTime, 1);
dayTime = dateTime.toString("yyyy-MM-dd");
}
hours = hour;
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(CharSequenceUtil.replace(dailyData.getTemperatureArray().get(i), "℃", "")),
new BigDecimal(CharSequenceUtil.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), "%", "")),
new BigDecimal(CharSequenceUtil.replace(dailyData.getPressureArray().get(i), "hPa", "")),
new BigDecimal(CharSequenceUtil.replace(dailyData.getHumidityArray().get(i), "%", "")),
String.valueOf(dateTime.year()),
this.int2Str(dateTime.month() + 1),
this.int2Str(dateTime.dayOfMonth()),
......@@ -184,10 +186,10 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
);
allList.add(dao);
PlantPredictedPowerDataEnt isExit = objList.stream().filter(item ->
StrUtil.equals(item.getYearTime(), dao.getYearTime()) &&
StrUtil.equals(item.getMonthTime(), dao.getMonthTime()) &&
StrUtil.equals(item.getDayTime(), dao.getDayTime()) &&
StrUtil.equals(item.getHourTime(), dao.getHourTime()))
CharSequenceUtil.equals(item.getYearTime(), dao.getYearTime()) &&
CharSequenceUtil.equals(item.getMonthTime(), dao.getMonthTime()) &&
CharSequenceUtil.equals(item.getDayTime(), dao.getDayTime()) &&
CharSequenceUtil.equals(item.getHourTime(), dao.getHourTime()))
.findFirst()
.orElse(null);
if (Objects.isNull(isExit)) {
......@@ -198,9 +200,10 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
// 两条数据中间差了两个小时,使用上下两条数据推算出中间差掉的两个小时
for (int i = 0; i < objList.size() - 1; i++) {
for (int y = 1; y < 3; y++) {
date = DateUtil.parseDate(objList.get(i).getDataDate());
PlantPredictedPowerDataEnt dataEnt = objList.get(i);
date = DateUtil.parseDate(dataEnt.getDataDate());
String hourString;
Integer hourTime = Integer.valueOf(objList.get(i).getHourTime());
Integer hourTime = Integer.valueOf(dataEnt.getHourTime());
if (hourTime.equals(23)) {
date = DateUtil.offsetDay(date, 1);
hourString = "0" + (y - 1);
......@@ -211,15 +214,15 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
hourString = String.valueOf(hourTime + y);
}
}
dayTime = date.toString("yyyy-MM-dd");
int nextIndex = i + 1;
PlantPredictedPowerDataEnt nextData = objList.get(i + 1);
BigDecimal valueOf = BigDecimal.valueOf(0.3 * y);
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),
this.compute(dataEnt.getTemperature(), nextData.getTemperature(), valueOf),
this.compute(dataEnt.getWindSpeed(), nextData.getWindSpeed(), valueOf),
dataEnt.getWindDirection(),
this.compute(dataEnt.getPressure(), nextData.getPressure(), valueOf),
this.compute(dataEnt.getHumidity(), nextData.getHumidity(), valueOf),
String.valueOf(date.year()),
this.int2Str(date.month() + 1),
this.int2Str(date.dayOfMonth()),
......@@ -237,7 +240,6 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
}
}
//入库
List<PlantPredictedPowerDataEnt> batchList = new ArrayList<>();
List<PlantPredictedPowerDataEnt> sortList = allList.stream()
.sorted(Comparator.comparing(PlantPredictedPowerDataEnt::getDataDate))
.collect(Collectors.toList());
......@@ -248,39 +250,53 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
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 nextIndex = i + 1;
BigDecimal temperature_1 = sortList.get(i).getTemperature() == null ? new BigDecimal(0) : sortList.get(i).getTemperature();
BigDecimal temperature_2 = sortList.get(nextIndex).getTemperature() == null ? new BigDecimal(0) : sortList.get(nextIndex).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(nextIndex).getHumidity() == null ? new BigDecimal(0) : sortList.get(nextIndex).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(nextIndex).getWindSpeed() == null ? new BigDecimal(0) : sortList.get(nextIndex).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(nextIndex).getPressure() == null ? new BigDecimal(0) : sortList.get(nextIndex).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(nextIndex).getPlaneIrradiance() == null ? new BigDecimal(0) : sortList.get(nextIndex).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(nextIndex).getHorizontalIrradiance() == null ? new BigDecimal(0) : sortList.get(nextIndex).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(nextIndex).getPower() == null ? new BigDecimal(0) : sortList.get(nextIndex).getPower();
dao.setPower(power_1.add(power_2.subtract(power_1).multiply(new BigDecimal(0.3 * (y + 1)))));
dao.setDataDate(new StringBuilder(dao.getYearTime())
.append('-')
.append(dao.getMonthTime())
.append('-')
.append(dao.getDayTime())
.append(' ')
.append(dao.getHourTime())
.append(':')
.append(dao.getMinTime()).toString());
PlantPredictedPowerDataEnt nextData = sortList.get(i + 1);
BigDecimal valueOf = BigDecimal.valueOf(0.3 * (y + 1));
dao.setTemperature(this.compute(Objects.isNull(item.getTemperature()) ? BigDecimal.ZERO : item.getTemperature(),
Objects.isNull(nextData.getTemperature()) ? BigDecimal.ZERO : nextData.getTemperature(),
valueOf));
dao.setHumidity(this.compute(Objects.isNull(item.getHumidity()) ? BigDecimal.ZERO : item.getHumidity(),
Objects.isNull(nextData.getHumidity()) ? BigDecimal.ZERO : nextData.getHumidity(),
valueOf));
dao.setWindSpeed(this.compute(Objects.isNull(item.getWindSpeed()) ? BigDecimal.ZERO : item.getWindSpeed(),
Objects.isNull(nextData.getWindSpeed()) ? BigDecimal.ZERO : nextData.getWindSpeed(),
valueOf));
dao.setPressure(this.compute(Objects.isNull(item.getPressure()) ? BigDecimal.ZERO : item.getPressure(),
Objects.isNull(nextData.getPressure()) ? BigDecimal.ZERO : nextData.getPressure(),
valueOf));
dao.setPlaneIrradiance(this.compute(Objects.isNull(item.getPlaneIrradiance()) ? BigDecimal.ZERO : item.getPlaneIrradiance(),
Objects.isNull(nextData.getPlaneIrradiance()) ? BigDecimal.ZERO : nextData.getPlaneIrradiance(),
valueOf));
dao.setHorizontalIrradiance(this.compute(Objects.isNull(item.getHorizontalIrradiance()) ? BigDecimal.ZERO : item.getHorizontalIrradiance(),
Objects.isNull(nextData.getHorizontalIrradiance()) ? BigDecimal.ZERO : nextData.getHorizontalIrradiance(),
valueOf));
dao.setPower(this.compute(Objects.isNull(item.getPower()) ? BigDecimal.ZERO : item.getPower(),
Objects.isNull(nextData.getPower()) ? BigDecimal.ZERO : nextData.getPower(),
valueOf));
batchList.add(dao);
}
}
}
}
}
}
PlantPredictedPowerDataViewMapper dataViewMapper = context.getBean(PlantPredictedPowerDataViewMapper.class);
if (CollUtil.isNotEmpty(batchList)) {
int size = batchList.size();
if (size > BaseUtils.BATCH_SIZE) {
List<List<PlantPredictedPowerDataEnt>> subList = BaseUtils.getSubList(batchList);
subList.forEach(dataViewMapper::insertBatch);
} else {
dataViewMapper.insertBatch(batchList);
}
}
}
......@@ -337,8 +353,16 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
}
private BigDecimal compute(BigDecimal a, BigDecimal b, int y) {
return a.add(b.subtract(a).multiply(new BigDecimal(0.3 * y)));
/**
* 计算
*
* @param a 一
* @param b b
* @param c c
* @return {@link BigDecimal}
*/
private BigDecimal compute(BigDecimal a, BigDecimal b, BigDecimal c) {
return a.add(b.subtract(a).multiply(c));
}
/**
......
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