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