Commit db984fe2 authored by ZWT's avatar ZWT

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

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

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent 4918950d
......@@ -2,6 +2,7 @@ package pps.core.base.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
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;
......@@ -9,15 +10,20 @@ import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.sun.mail.imap.IMAPFolder;
import org.apache.commons.lang3.StringUtils;
import pps.cloud.base.service.IBaseWeatherCloudService;
import pps.core.base.entity.BasePhotovoltaicPlantView;
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.service.data.DailyData;
import xstartup.annotation.XService;
import xstartup.base.XContext;
import xstartup.base.XStartup;
import xstartup.base.util.XCopyUtils;
import xstartup.data.XServiceResult;
import javax.mail.*;
......@@ -25,6 +31,8 @@ import javax.mail.internet.MimeUtility;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.time.LocalTime;
import java.util.*;
import java.util.stream.Collectors;
......@@ -90,14 +98,15 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
return null;
}
//取电站
BasePhotovoltaicPlantViewMapper mapper = context.getBean(BasePhotovoltaicPlantViewMapper.class);
List<BasePhotovoltaicPlantView> plantList = mapper.selectPlantList();
BasePhotovoltaicPlantViewMapper viewMapper = context.getBean(BasePhotovoltaicPlantViewMapper.class);
List<BasePhotovoltaicPlantView> plantList = viewMapper.selectPlantList();
if (CollUtil.isEmpty(plantList)) {
return null;
}
//按照cityCode分组
Map<String, List<BasePhotovoltaicPlantView>> plantMap = plantList.stream()
.collect(Collectors.groupingBy(BasePhotovoltaicPlantView::getCityCode));
PlantPredictedPowerDataMapper mapper = context.getBean(PlantPredictedPowerDataMapper.class);
//读取附件
// for (Message message : messageList) {
// String tempFilePath = this.saveAttachment(message);
......@@ -135,11 +144,73 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
List<BasePhotovoltaicPlantView> plantViewList = plantMap.get(cityCode);
//遍历预测数据列表
for (DailyData dailyData : dailyDataList) {
Date dateTime = dailyData.getDateTime();
for (BasePhotovoltaicPlantView plant : plantViewList) {
List<PlantPredictedPowerDataEnt> allList = new ArrayList<>();
List<PlantPredictedPowerDataEnt> objList = new ArrayList<>();
DateTime dateTime = DateTime.of(dailyData.getDateTime());
int hours = 0;
String dayTime = dateTime.toString("yyyy-MM-dd");
for (int i = 0; i < 8; i++) {
String hourTime = dailyData.getHourTimeArray().get(i);
String plantId = plant.getId();
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();
if (hours >= hour) {
dateTime = DateUtil.offsetDay(dateTime, 1);
dayTime = dateTime.toString("yyyy-MM-dd");
}
dao.setYearTime(String.valueOf(dateTime.year()));
int month = dateTime.month() + 1;
dao.setMonthTime(this.int2Str(month));
int dayOfMonth = dateTime.dayOfMonth();
dao.setDayTime(this.int2Str(dayOfMonth));
hours = hour;
dao.setHourTime(this.int2Str(hours));
// 5.执行SQL
mapper.delete(new LambdaQueryWrapper<PlantPredictedPowerDataEnt>()
.eq(PlantPredictedPowerDataEnt::getPlantId, plantId)
.eq(PlantPredictedPowerDataEnt::getYearTime, dao.getYearTime())
.eq(PlantPredictedPowerDataEnt::getMonthTime, dao.getMonthTime())
.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);
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()))
.findFirst()
.orElse(null);
if (Objects.isNull(isExit)) {
objList.add(dao);
}
}
// 原站点时间结构为:08:00 11:00 14:00 17:00 20:00 23:00 02:00 05:00
// 两条数据中间差了两个小时,使用上下两条数据推算出中间差掉的两个小时
}
......@@ -155,6 +226,17 @@ public class BaseWeatherCloudServiceImpl implements IBaseWeatherCloudService {
return XServiceResult.OK;
}
/**
* int转String
*
* @param num 数字
* @return {@link String}
*/
private String int2Str(int num) {
return num < 10 ? "0" + num : String.valueOf(num);
}
/**
* 保存附件
*
......
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