Commit 77e79ae5 authored by ZWT's avatar ZWT

feat(吉林演示): 松原

1.天气数据接收定时任务,解决代码扫描问题,修改文件读取相关代码,解决资源未关流问题;
2.修改登录验证码生成工具类,解决代码扫描问题,修复随机数不安全问题;
3.删除除主程序启动类外其他启动类模块,解决代码扫描问题;
4.删除自定义httputlis类,解决代码扫描问题,替换部分代码远程调用方法;
5.重构光伏预测模块下载电站实际发电数据导入模板接口,解决代码扫描问题;
6.重构光伏预测模块导入电站实际发电数据接口,解决代码扫描问题;
7.删除公用excel导入导出工具类及poi相关pom依赖,解决代码扫描问题;
8.光伏功率预测模块,增加查询线路列表接口,解决页面接口报错问题;
9.增加测试用历史数据导入接口;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent e83150e0
......@@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
......@@ -12,7 +11,6 @@ import pps.core.common.constant.BusinessConstant;
import pps.core.common.session.PpsUserSession;
import pps.core.common.utils.BaseUtils;
import pps.core.system.entity.*;
import pps.core.system.error.LoginError;
import pps.core.system.mapper.*;
import pps.core.system.service.data.sys_user.*;
import pps.core.system.utils.UserInfoUtil;
......@@ -69,42 +67,6 @@ public class SysUserService {
return XPageResult.success(outputs, input, pageInfo.getTotal());
}
@XText("新增用户")
@XApiPost
public XServiceResult createSysUser(XContext context, CreateSysUserInput input) throws XServiceException {
if (CharSequenceUtil.isBlank(input.getPassword())) {
return XServiceResult.error(context, LoginError.Missing_Pd);
}
return XTransactionHelper.begin(context, () -> {
SysUserMapper mapper = context.getBean(SysUserMapper.class);
//查询是否存在相同的登录名,如果存在,提示错误信息
Long count = mapper.selectCount(new LambdaQueryWrapper<SysUserEnt>()
.eq(SysUserEnt::getLoginName, input.getLoginName()));
if (count > 0) {
return XServiceResult.error(context, LoginError.Account_Already_Exists);
}
SysUserEnt entity = new SysUserEnt();
XCopyUtils.copyObject(input, entity);
String uuid = BaseUtils.randomUUIDString();
entity.setId(uuid);
PpsUserSession session = context.getSession(PpsUserSession.class);
if (ObjectUtil.isNotNull(session)) {
entity.setCreateById(session.getId());
entity.setCreateByName(session.getUserName());
}
entity.setCreateTime(new Date());
//加密敏感信息
entity.setPhone(UserInfoUtil.encrypt(entity.getPhone()));
entity.setIdentifyNo(UserInfoUtil.encrypt(entity.getIdentifyNo()));
entity.setEmail(UserInfoUtil.encrypt(entity.getEmail()));
mapper.insert(entity);
//新增用户和组织机构关系表
insertSysUserOrganizationRel(context, uuid, input.getOuId(), session);
//返回执行成功的结果,事务提交
return XServiceResult.OK;
});
}
//新增用户和组织机构关系表
public void insertSysUserOrganizationRel(XContext context, String uuid, String ouId, PpsUserSession session) throws XServiceException {
XTransactionHelper.begin(context, () -> {
......@@ -127,59 +89,6 @@ public class SysUserService {
});
}
@XText("修改用户信息")
@XApiPost
public XServiceResult updateSysUser(XContext context, UpdateSysUserInput input) throws XServiceException {
return XTransactionHelper.begin(context, () -> {
SysUserMapper mapper = context.getBean(SysUserMapper.class);
SysUserEnt entity = mapper.selectById(input.getId());
if (ObjectUtil.isNull(entity)) {
return XServiceResult.error(context, XError.NotFound);
}
//查询是否存在相同的登录名,如果存在,提示错误信息
Long count = mapper.selectCount(new LambdaQueryWrapper<SysUserEnt>()
.eq(SysUserEnt::getLoginName, input.getLoginName())
.ne(SysUserEnt::getId, input.getId())
);
if (count > 0) {
return XServiceResult.error(context, LoginError.Account_Already_Exists);
}
entity.setUserCode(input.getUserCode());
entity.setUserName(input.getUserName());
entity.setAddress(input.getAddress());
if (CharSequenceUtil.isNotBlank(input.getPassword())) {
entity.setPassword(input.getPassword());
} else {
entity.setPassword(null);
}
//加密敏感信息
if (CharSequenceUtil.isNotBlank(input.getPhone()) && !CharSequenceUtil.contains(input.getPhone(), '*')) {
entity.setPhone(UserInfoUtil.encrypt(input.getPhone()));
} else {
entity.setPhone(null);
}
if (CharSequenceUtil.isNotBlank(input.getIdentifyNo()) && !CharSequenceUtil.contains(input.getIdentifyNo(), '*')) {
entity.setIdentifyNo(UserInfoUtil.encrypt(input.getIdentifyNo()));
} else {
entity.setIdentifyNo(null);
}
if (CharSequenceUtil.isNotBlank(input.getEmail()) && !CharSequenceUtil.contains(input.getEmail(), '*')) {
entity.setEmail(UserInfoUtil.encrypt(input.getEmail()));
} else {
entity.setEmail(null);
}
entity.setModifyTime(new Date());
PpsUserSession session = context.getSession(PpsUserSession.class);
entity.setModifyById(session.getId());
entity.setModifyByName(session.getUserName());
mapper.updateById(entity);
//修改用户和组织机构关系为失效
updateSysUserOrganizationRel(context, input.getId(), input.getOuId(), session, "update");
//返回执行成功的结果,事务提交
return XServiceResult.OK;
});
}
@XText("修改用户状态(封禁、解锁)")
@XApiPost
public XServiceResult updateSysUserStatus(XContext context, UpdateSysUserInput input) throws XServiceException {
......
package pps.cloud.base.service;
import pps.cloud.base.service.data.CrawlBaseWatherInput;
import xstartup.annotation.XService;
import xstartup.annotation.XText;
import xstartup.base.XContext;
import xstartup.data.XServiceResult;
@XService
public interface BaseWatherCloudService {
@XText("获取电站天气信息")
XServiceResult crawlPlantBaseWatherData(XContext context);
@XText("获取天气信息")
XServiceResult crawlBaseWatherData(XContext context);
@XText("获取天气信息")
XServiceResult crawlBaseWatherDataByCityCode(XContext context, CrawlBaseWatherInput input);
}
package pps.core.base.excel;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import pps.core.base.entity.ThirdWindPowerGenerationEnt;
import pps.core.base.entity.WindPredictionFutureView;
import pps.core.base.entity.WindPredictionHistoryView;
import pps.core.base.mapper.ThirdWindPowerGenerationMapper;
import pps.core.base.mapper.WindPredictionFutureViewMapper;
import pps.core.base.mapper.WindPredictionHistoryViewMapper;
import pps.core.base.service.data.third_weather_data.ThirdApiWeatherExcelData;
import pps.core.common.utils.BaseUtils;
import xstartup.base.XContext;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* 天气数据监听器(测试用)
*
* @author ZWT
* @date 2024/04/30 11:04
*/
public class ThirdApiWeatherDataListener2 implements ReadListener<ThirdApiWeatherExcelData> {
private XContext context;
/**
* 缓存的数据
*/
private List<ThirdApiWeatherExcelData> cachedDataList = new ArrayList<>(4096);
public ThirdApiWeatherDataListener2(XContext context) {
this.context = context;
}
@Override
public void invoke(ThirdApiWeatherExcelData thirdApiWeatherData, AnalysisContext analysisContext) {
cachedDataList.add(thirdApiWeatherData);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
this.saveHistory(context, cachedDataList);
}
private void saveHistory(XContext context, List<ThirdApiWeatherExcelData> cachedDataList) {
if (CollUtil.isNotEmpty(cachedDataList)) {
String stationId = "f4816d9e4e134aaba0dbd483775e36b2";
String stationName = "吉林油田模拟电站";
ThirdApiWeatherExcelData first = CollUtil.getFirst(cachedDataList);
ThirdApiWeatherExcelData last = CollUtil.getLast(cachedDataList);
//每个csv只要第一天
DateTime beginTime = DateUtil.parseDateTime(first.getTime());
DateTime endTime = DateUtil.endOfDay(beginTime);
//查实际信息
ThirdWindPowerGenerationMapper mapper = context.getBean(ThirdWindPowerGenerationMapper.class);
List<ThirdWindPowerGenerationEnt> list = mapper.selectList(new LambdaQueryWrapper<ThirdWindPowerGenerationEnt>()
.eq(ThirdWindPowerGenerationEnt::getStationId, stationId)
.between(ThirdWindPowerGenerationEnt::getCollectTime, beginTime, endTime)
.orderByAsc(ThirdWindPowerGenerationEnt::getCollectTime)
);
Map<Date, ThirdWindPowerGenerationEnt> collect = list.stream()
.collect(Collectors.toMap(ThirdWindPowerGenerationEnt::getCollectTime, Function.identity()));
//封装数据
List<WindPredictionFutureView> futureList = new ArrayList<>(96);
List<WindPredictionHistoryView> historyList = new ArrayList<>(96);
DateTime dateTime;
ThirdWindPowerGenerationEnt generationEnt;
for (ThirdApiWeatherExcelData data : cachedDataList) {
dateTime = DateUtil.parseDateTime(data.getTime());
if (endTime.compareTo(dateTime) <= 0) {
break;
}
WindPredictionHistoryView historyView = new WindPredictionHistoryView();
historyView.setStationId(stationId);
historyView.setDataTime(dateTime);
historyView.setWindDirection(data.getWnd());
historyView.setWindSpeed(data.getGust());
historyView.setAirTemperature(data.getTem());
historyView.setHumidity(data.getRhu());
historyView.setPressure(data.getPrsQfe());
historyView.setWnd100m(data.getWnd100m());
historyView.setWns100m(data.getWns100m());
historyView.setWnsGrd100m(data.getWnsGrd100m());
WindPredictionFutureView futureView = new WindPredictionFutureView();
futureView.setStationId(stationId);
futureView.setDataTime(dateTime);
futureView.setWindDirection(data.getWnd());
futureView.setWindSpeed(data.getGust());
futureView.setAirTemperature(data.getTem());
futureView.setHumidity(data.getRhu());
futureView.setPressure(data.getPrsQfe());
futureView.setActualPower(BigDecimal.ZERO);
//匹配实际
if (collect.containsKey(dateTime)) {
generationEnt = collect.get(dateTime);
futureView.setActualWindSpeed(generationEnt.getActualWindSpeed());
historyView.setActualWindSpeed(generationEnt.getActualWindSpeed());
historyView.setActualPower(generationEnt.getActualPower());
historyView.setActualWindDirection(generationEnt.getAccurateWindDirection());
} else {
futureView.setActualWindSpeed(BigDecimal.ZERO);
historyView.setActualWindSpeed(BigDecimal.ZERO);
historyView.setActualPower(BigDecimal.ZERO);
}
futureList.add(futureView);
historyList.add(historyView);
}
//入库
if (CollUtil.isNotEmpty(futureList)) {
WindPredictionFutureViewMapper futureMapper = context.getBean(WindPredictionFutureViewMapper.class);
if (futureList.size() > BaseUtils.BATCH_SIZE) {
List<List<WindPredictionFutureView>> subList = BaseUtils.getSubList(futureList);
subList.forEach(futureMapper::insertBatch);
} else {
futureMapper.insertBatch(futureList);
}
}
if (CollUtil.isNotEmpty(historyList)) {
WindPredictionHistoryViewMapper historyMapper = context.getBean(WindPredictionHistoryViewMapper.class);
if (historyList.size() > BaseUtils.BATCH_SIZE) {
List<List<WindPredictionHistoryView>> subList = BaseUtils.getSubList(historyList);
subList.forEach(historyMapper::batchInsert);
} else {
historyMapper.batchInsert(historyList);
}
}
}
}
}
\ No newline at end of file
package pps.core.base.excel;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import pps.core.base.entity.WindPredictionFutureView;
import pps.core.base.entity.WindPredictionHistoryView;
import pps.core.base.mapper.WindPredictionFutureViewMapper;
import pps.core.base.mapper.WindPredictionHistoryViewMapper;
import pps.core.base.service.data.base_excel.WindPredictionExcelData;
import pps.core.common.utils.BaseUtils;
import xstartup.base.XContext;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
/**
* 风资源数据(测试用)
*
* @author ZWT
* @date 2024/08/30 15:46
*/
public class WindPredictionDataListener implements ReadListener<WindPredictionExcelData> {
private XContext context;
private String stationId;
/**
* 缓存的数据
*/
private List<WindPredictionExcelData> cachedDataList = new ArrayList<>(4096);
public WindPredictionDataListener(XContext context, String stationId) {
this.context = context;
this.stationId = stationId;
}
@Override
public void invoke(WindPredictionExcelData windPredictionExcelData, AnalysisContext analysisContext) {
cachedDataList.add(windPredictionExcelData);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
this.saveWindPredictionHistory(context, cachedDataList, stationId);
}
public void saveWindPredictionHistory(XContext context, List<WindPredictionExcelData> cachedDataList, String stationId) {
if (CollUtil.isNotEmpty(cachedDataList)) {
List<WindPredictionFutureView> futureList = new ArrayList<>(cachedDataList.size());
List<WindPredictionHistoryView> historyList = new ArrayList<>(cachedDataList.size());
//按日期顺序排序
cachedDataList.sort(Comparator.comparing(WindPredictionExcelData::getDataTime));
//数据分界线
DateTime futureFlag = DateUtil.offsetDay(DateUtil.beginOfDay(CollUtil.getLast(cachedDataList).getDataTime()), -20);
//数据分片
for (WindPredictionExcelData excelData : cachedDataList) {
if (DateUtil.compare(excelData.getDataTime(), futureFlag) >= 0) {
//未来数据
WindPredictionFutureView build = WindPredictionFutureView.builder()
.stationId(stationId)
.dataTime(excelData.getDataTime())
.windDirection(excelData.getWindDirection())
.windSpeed(excelData.getWindSpeed())
.airTemperature(excelData.getAirTemperature())
.humidity(excelData.getHumidity())
.pressure(excelData.getPressure())
.actualWindSpeed(excelData.getActualWindSpeed())
.actualPower(excelData.getActualPower())
.predictedPower(excelData.getPredictedPower())
.build();
//去重
if (futureList.stream()
.noneMatch(item -> DateUtil.compare(item.getDataTime(), build.getDataTime()) == 0)) {
futureList.add(build);
}
} else {
//历史数据
WindPredictionHistoryView build = WindPredictionHistoryView.builder()
.stationId(stationId)
.dataTime(excelData.getDataTime())
.windDirection(excelData.getWindDirection())
.windSpeed(excelData.getWindSpeed())
.airTemperature(excelData.getAirTemperature())
.humidity(excelData.getHumidity())
.pressure(excelData.getPressure())
.actualWindSpeed(excelData.getActualWindSpeed())
.actualPower(excelData.getActualPower())
.predictedPower(excelData.getPredictedPower())
.build();
//去重
if (historyList.stream()
.noneMatch(item -> DateUtil.compare(item.getDataTime(), build.getDataTime()) == 0)) {
historyList.add(build);
}
}
}
//记录
String futureStart = DateUtil.formatDateTime(CollUtil.getFirst(futureList).getDataTime());
String futureEnd = DateUtil.formatDateTime(CollUtil.getLast(futureList).getDataTime());
String historyStart = DateUtil.formatDateTime(CollUtil.getFirst(historyList).getDataTime());
String historyEnd = DateUtil.formatDateTime(CollUtil.getLast(historyList).getDataTime());
//入库
if (CollUtil.isNotEmpty(futureList)) {
WindPredictionFutureViewMapper futureMapper = context.getBean(WindPredictionFutureViewMapper.class);
if (futureList.size() > BaseUtils.BATCH_SIZE) {
List<List<WindPredictionFutureView>> subList = BaseUtils.getSubList(futureList);
subList.forEach(futureMapper::insertBatch);
} else {
futureMapper.insertBatch(futureList);
}
}
if (CollUtil.isNotEmpty(historyList)) {
WindPredictionHistoryViewMapper historyMapper = context.getBean(WindPredictionHistoryViewMapper.class);
if (historyList.size() > BaseUtils.BATCH_SIZE) {
List<List<WindPredictionHistoryView>> subList = BaseUtils.getSubList(historyList);
subList.forEach(historyMapper::batchInsert);
} else {
historyMapper.batchInsert(historyList);
}
}
}
}
}
package pps.core.base.excel;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import pps.core.base.entity.ThirdWindPowerGenerationView;
import pps.core.base.mapper.ThirdWindPowerGenerationViewMapper;
import pps.core.base.service.data.base_excel.WindPredictionExcel2Data;
import pps.core.common.utils.BaseUtils;
import xstartup.base.XContext;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* 风资源数据(测试用)
*
* @author ZWT
* @date 2024/08/30 15:46
*/
public class WindPredictionDataListener2 implements ReadListener<WindPredictionExcel2Data> {
private XContext context;
/**
* 缓存的数据
*/
private List<WindPredictionExcel2Data> cachedDataList = new ArrayList<>(4096);
public WindPredictionDataListener2(XContext context) {
this.context = context;
}
@Override
public void invoke(WindPredictionExcel2Data windPredictionExcelData, AnalysisContext analysisContext) {
cachedDataList.add(windPredictionExcelData);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
this.saveWindPredictionHistory(context, cachedDataList);
}
public void saveWindPredictionHistory(XContext context, List<WindPredictionExcel2Data> cachedDataList) {
if (CollUtil.isNotEmpty(cachedDataList)) {
List<ThirdWindPowerGenerationView> batchList = new ArrayList<>(cachedDataList.size());
String stationId = "f4816d9e4e134aaba0dbd483775e36b2";
String stationName = "吉林油田模拟电站";
DateTime date;
DateTime beginOfDay;
int minute;
Integer actualWindDirection;
for (WindPredictionExcel2Data data : cachedDataList) {
date = DateUtil.date(data.getDataTime());
beginOfDay = DateUtil.beginOfDay(date);
minute = date.minute();
//转换时间
switch (minute) {
case 10:
continue;
case 20:
date = DateUtil.offsetMinute(date, -5);
break;
case 40:
continue;
case 50:
date = DateUtil.offsetMinute(date, -5);
break;
}
//转换风向
BigDecimal accurateWindDirection = data.getAccurateWindDirection();
if (BigDecimal.valueOf(45).compareTo(accurateWindDirection) > 0) {
actualWindDirection = 0;
} else if (BigDecimal.valueOf(90).compareTo(accurateWindDirection) > 0) {
actualWindDirection = 45;
} else if (BigDecimal.valueOf(135).compareTo(accurateWindDirection) > 0) {
actualWindDirection = 90;
} else if (BigDecimal.valueOf(180).compareTo(accurateWindDirection) > 0) {
actualWindDirection = 135;
} else if (BigDecimal.valueOf(225).compareTo(accurateWindDirection) > 0) {
actualWindDirection = 180;
} else if (BigDecimal.valueOf(270).compareTo(accurateWindDirection) > 0) {
actualWindDirection = 225;
} else if (BigDecimal.valueOf(315).compareTo(accurateWindDirection) > 0) {
actualWindDirection = 270;
} else {
actualWindDirection = 315;
}
//封装
batchList.add(
ThirdWindPowerGenerationView.builder()
.stationName(stationName)
.stationId(stationId)
.collectTime(date)
.actualWindSpeed(data.getActualWindSpeed())
.actualPower(data.getActualPower())
.actualGeneration(BigDecimal.ZERO)
.accurateWindDirection(data.getAccurateWindDirection())
.actualWindDirection(actualWindDirection)
.inputTime(beginOfDay)
.systemSource("SY")
.build()
);
}
ThirdWindPowerGenerationViewMapper viewMapper = context.getBean(ThirdWindPowerGenerationViewMapper.class);
//批量新增
if (batchList.size() > BaseUtils.BATCH_SIZE) {
List<List<ThirdWindPowerGenerationView>> subList = BaseUtils.getSubList(batchList);
subList.forEach(viewMapper::batchInsert);
} else {
viewMapper.batchInsert(batchList);
}
}
}
}
package pps.core.base.service;
import cn.hutool.core.io.FileUtil;
import com.alibaba.excel.EasyExcel;
import pps.core.base.excel.ThirdApiWeatherDataListener;
import pps.core.base.excel.ThirdApiWeatherDataListener2;
import pps.core.base.excel.WindPredictionDataListener;
import pps.core.base.excel.WindPredictionDataListener2;
import pps.core.base.service.data.base_data.GetBaseDataInput;
import pps.core.base.service.data.base_excel.WindPredictionExcel2Data;
import pps.core.base.service.data.base_excel.WindPredictionExcelData;
import pps.core.base.service.data.base_power_line.DynamicQueryBasePowerLineInput;
import pps.core.base.service.data.base_power_line.DynamicQueryBasePowerLineOutput;
import pps.core.base.service.data.third_weather_data.ThirdApiWeatherExcelData;
import xstartup.annotation.XService;
import xstartup.annotation.XText;
import xstartup.base.XContext;
import xstartup.data.XListResult;
import xstartup.data.XServiceResult;
import xstartup.feature.api.annotation.XApiGet;
import xstartup.feature.api.annotation.XApiPost;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@XService
public class BaseLineService {
@XText("线路列表")
@XApiPost
public XListResult<DynamicQueryBasePowerLineOutput> queryBaseLineList(XContext context, DynamicQueryBasePowerLineInput input) {
BasePowerLineService bean = context.getBean(BasePowerLineService.class);
return bean.queryBasePowerLineList(context, input);
}
@XText("天气")
@XApiGet(anonymous = true)
public XServiceResult test(XContext context, GetBaseDataInput input) {
// BaseWeatherCloudServiceImpl bean = context.getBean(BaseWeatherCloudServiceImpl.class);
// bean.weatherDataProcess(context, input.getKeyName());
// WindPredictionHistoryCloudServiceImpl bean = context.getBean(WindPredictionHistoryCloudServiceImpl.class);
// bean.windPredictionHistoryJob(context);
// ThirdWindPowerGenerationCloudServiceImpl bean = context.getBean(ThirdWindPowerGenerationCloudServiceImpl.class);
// bean.thirdWindPowerGenerationJob(context);
return XServiceResult.OK;
}
@XText("风资源历史数据配置导入")
@XApiGet
public XServiceResult importWindPrediction(XContext context) {
String fileName = "D:\\工作\\尚博信\\数据智能事业部\\零碳\\演示\\吉林\\新需求\\20240828\\data\\";
Map<String, String> map = new HashMap<>();
map.put("11.csv", "0191993ac6707650bc41b04b04ce9b62");
map.put("12.csv", "0191993ac6707650bc41b04b04ce9b63");
map.put("13.csv", "0191993ac6707650bc41b04b04ce9b64");
map.put("14.csv", "0191993ac6707650bc41b04b04ce9b65");
map.put("15.csv", "0191993ac6707650bc41b04b04ce9b66");
map.put("16.csv", "11d04d59195746f48e14e149969940e5");
map.put("17.csv", "133dae9b74034bab8c0f96a2878c41aa");
map.put("18.csv", "8aa54645c3e34977ba3d121325881843");
map.put("20.csv", "c0e6e7a0163f4e75a6e5e05627c0731a");
map.forEach((key, value) -> {
EasyExcel.read(fileName + key, WindPredictionExcelData.class, new WindPredictionDataListener(context, value)).sheet().doRead();
});
return XServiceResult.OK;
}
@XText("实际风资源数据")
@XApiGet
public XServiceResult importWindPrediction2(XContext context) {
String fileName = "D:\\工作\\尚博信\\数据智能事业部\\零碳\\演示\\吉林\\新需求\\20240919\\导入实际数据.xlsx";
EasyExcel.read(fileName, WindPredictionExcel2Data.class, new WindPredictionDataListener2(context)).sheet().doRead();
return XServiceResult.OK;
}
@XText("风资源历史数据配置导入2")
@XApiGet(anonymous = true)
public XServiceResult importWindPrediction3(XContext context) {
String fileName = "D:\\工作\\尚博信\\数据智能事业部\\零碳\\演示\\吉林\\新需求\\20240919\\result 3\\result 3";
List<File> files = FileUtil.loopFiles(fileName);
for (File file : files) {
EasyExcel.read(file, ThirdApiWeatherExcelData.class, new ThirdApiWeatherDataListener2(context)).sheet().doRead();
}
return XServiceResult.OK;
}
@XText("天气历史数据导入")
@XApiGet
public XServiceResult importHistory(XContext context) {
String fileName = "D:\\home\\result_w.csv";
// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
EasyExcel.read(fileName, ThirdApiWeatherExcelData.class, new ThirdApiWeatherDataListener(context)).sheet().doRead();
return XServiceResult.OK;
}
}
\ No newline at end of file
package pps.core.base.service;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import pps.core.base.entity.ConfigOilFieldEnt;
import pps.core.base.mapper.ConfigOilFieldMapper;
import pps.core.base.service.data.config_oil_field.GetConfigOilFieldOutput;
import pps.core.base.service.data.config_oil_field.GetProjectTitleOutput;
import pps.core.common.constant.BusinessConstant;
import xstartup.annotation.XService;
import xstartup.annotation.XText;
import xstartup.base.XContext;
import xstartup.base.XStartup;
import xstartup.data.XFileResult;
import xstartup.data.XFileType;
import xstartup.data.XSingleResult;
import xstartup.feature.api.annotation.XApiGet;
import java.util.List;
/**
* 油田配置模块
*
* @author ZWT
* @date 2024/06/25
*/
@XService
public class ConfigOilFieldService {
private static final String storeDir = XStartup.getCurrent().getProperty("home.image.path");
/**
* 获取当前配置
*
* @param context 上下文
* @return {@link XSingleResult }<{@link GetConfigOilFieldOutput }>
*/
@XText("获取当前配置")
@XApiGet(anonymous = true)
public XSingleResult<GetConfigOilFieldOutput> getCurrentConfig(XContext context) {
ConfigOilFieldEnt ent = this.getCurrentConfigOil(context);
GetProjectTitleOutput output = this.getProjectTitleOutput(ent.getProjectTitle());
return XSingleResult.success(GetConfigOilFieldOutput.builder()
.title(output.getTitle())
.homePagePath(ent.getHomePagePath())
.build());
}
/**
* 首页图片下载
*
* @param context 上下文
* @return {@link XFileResult }
*/
@XText("首页图片下载")
@XApiGet(anonymous = true)
public XFileResult homeImageLoad(XContext context) {
ConfigOilFieldEnt ent = this.getCurrentConfigOil(context);
GetProjectTitleOutput output = this.getProjectTitleOutput(ent.getProjectTitle());
return XFileResult.success(XFileType.IMAGE_PNG, storeDir + FileUtil.FILE_SEPARATOR + output.getImageRelativePath());
}
/*--------------------------------- private ---------------------------------*/
/**
* 获取当前配置
*
* @param context 上下文
* @return {@link ConfigOilFieldEnt }
*/
private ConfigOilFieldEnt getCurrentConfigOil(XContext context) {
ConfigOilFieldMapper mapper = context.getBean(ConfigOilFieldMapper.class);
return mapper.selectOne(new LambdaQueryWrapper<ConfigOilFieldEnt>()
.eq(ConfigOilFieldEnt::getIsEnable, BusinessConstant.ZERO)
.last(BusinessConstant.LAST_LIMIT)
);
}
/**
* 获取项目标题输出
*
* @param projectTitle 项目名称
* @return {@link GetProjectTitleOutput }
*/
private GetProjectTitleOutput getProjectTitleOutput(String projectTitle) {
List<GetProjectTitleOutput> list = JSONUtil.toList(projectTitle, GetProjectTitleOutput.class);
return list.stream()
.filter(t -> ObjectUtil.isNotNull(t.getSort()) && ObjectUtil.equals(0, t.getSort()))
.findAny()
.orElse(new GetProjectTitleOutput());
}
}
\ No newline at end of file
package pps.core.base.service.data.base_excel;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 风资源数据(测试用)
*
* @author ZWT
* @date 2024/08/30 15:33
*/
@Data
@ExcelIgnoreUnannotated
public class WindPredictionExcel2Data {
@ExcelProperty(value = "时间")
private Date dataTime;
@ExcelProperty(value = "实际风速")
private BigDecimal actualWindSpeed;
@ExcelProperty(value = "实际功率")
private BigDecimal actualPower;
@ExcelProperty(value = "实际风向")
private BigDecimal accurateWindDirection;
}
package pps.core.base.service.data.base_excel;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import xstartup.annotation.XText;
import java.math.BigDecimal;
import java.util.Date;
/**
* 风资源数据(测试用)
*
* @author ZWT
* @date 2024/08/30 15:33
*/
@Data
@ExcelIgnoreUnannotated
public class WindPredictionExcelData {
@XText("记录时间")
@ExcelProperty(value = "DATATIME")
private Date dataTime;
@XText("风向")
@ExcelProperty(value = "WINDDIRECTION")
private Integer windDirection;
@XText("预报风速(m/s)")
@ExcelProperty(value = "WINDSPEED")
private BigDecimal windSpeed;
@XText("气温(℃)")
@ExcelProperty(value = "TEMPERATURE")
private BigDecimal airTemperature;
@XText("湿度(%)")
@ExcelProperty(value = "HUMIDITY")
private BigDecimal humidity;
@XText("气压(hPa)")
@ExcelProperty(value = "PRESSURE")
private BigDecimal pressure;
@XText("实际风速(m/s)")
@ExcelProperty(value = "ROUND(A.WS,1)")
private BigDecimal actualWindSpeed;
@XText("实际功率(kw)")
@ExcelProperty(value = "ROUND(A.POWER,0)")
private BigDecimal actualPower;
@XText("预测功率(kw)")
@ExcelProperty(value = "PREPOWER")
private BigDecimal predictedPower;
}
package pps.core.base.service.data.base_excel;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import xstartup.annotation.XText;
import java.math.BigDecimal;
import java.util.Date;
/**
* 风资源数据(测试用)
*
* @author ZWT
* @date 2024/08/30 15:33
*/
@Data
@ExcelIgnoreUnannotated
public class WindPredictionExcelData3 {
@XText("记录时间")
@ExcelProperty(value = "DATATIME")
private Date dataTime;
@XText("风向")
@ExcelProperty(value = "WINDDIRECTION")
private Integer windDirection;
@XText("预报风速(m/s)")
@ExcelProperty(value = "WINDSPEED")
private BigDecimal windSpeed;
@XText("气温(℃)")
@ExcelProperty(value = "TEMPERATURE")
private BigDecimal airTemperature;
@XText("湿度(%)")
@ExcelProperty(value = "HUMIDITY")
private BigDecimal humidity;
@XText("气压(hPa)")
@ExcelProperty(value = "PRESSURE")
private BigDecimal pressure;
@XText("实际风速(m/s)")
@ExcelProperty(value = "ROUND(A.WS,1)")
private BigDecimal actualWindSpeed;
@XText("实际功率(kw)")
@ExcelProperty(value = "ROUND(A.POWER,0)")
private BigDecimal actualPower;
@XText("预测功率(kw)")
@ExcelProperty(value = "PREPOWER")
private BigDecimal predictedPower;
}
package pps.core.base.service.data.config_oil_field;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import xstartup.annotation.XText;
/**
* 油田配置入参
*
* @author ZWT
* @date 2024/09/26
*/
@Data
public class GetConfigOilFieldInput {
@XText("来源")
@NotBlank(message = "缺少系统来源")
private String source;
}
package pps.core.base.service.data.config_oil_field;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import xstartup.annotation.XText;
/**
* 油田配置输出
*
* @author ZWT
* @date 2024/06/25
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class GetConfigOilFieldOutput {
@XText("首页路由")
private String homePagePath;
@XText("标题")
private String title;
}
package pps.core.base.service.data.config_oil_field;
import lombok.Data;
import xstartup.annotation.XText;
/**
* 项目标题
*
* @author ZWT
* @date 2024/06/25
*/
@Data
public class GetProjectTitleOutput {
@XText("标题")
private String title;
@XText("排序")
private Integer sort;
@XText("图片相对路径")
private String imageRelativePath;
}
......@@ -40,8 +40,6 @@ weather.mail.host=@weather.mail.host@
weather.mail.username=@weather.mail.username@
weather.mail.password=@weather.mail.password@
weather.mail.protocol=@weather.mail.protocol@
#\u9996\u9875
home.image.path=@home.image.path@
#\u7B2C\u4E09\u65B9\u63A5\u53E3\u5730\u5740(\u957F\u5E86)
third-party.chang-qing.url=@third-party.chang-qing.url@
feature.swagger.enable=@feature.swagger.enable@
\ No newline at end of file
......@@ -45,8 +45,6 @@ weather.mail.host=pop.qq.com
weather.mail.username=2289169069@qq.com
weather.mail.password=nkmvazsaaehneaed
weather.mail.protocol=pop3
#\u9996\u9875
home.image.path=/home/gf-jar/homeImg
#\u7B2C\u4E09\u65B9\u63A5\u53E3\u5730\u5740(\u957F\u5E86)
third-party.chang-qing.url=http://10.78.7.253
feature.swagger.enable=true
\ No newline at end of file
......@@ -45,8 +45,6 @@ weather.mail.host=mail.petrochina
weather.mail.username=lingtanproject@petrochina.com.cn
weather.mail.password=Cppeilingtan2024
weather.mail.protocol=pop3
#\u9996\u9875
home.image.path=/home/gf-jar/homeImg
#\u7B2C\u4E09\u65B9\u63A5\u53E3\u5730\u5740(\u957F\u5E86)
third-party.chang-qing.url=http://10.78.7.253
feature.swagger.enable=false
\ No newline at end of file
......@@ -45,8 +45,6 @@ weather.mail.host=mail.petrochina
weather.mail.username=lingtanproject@petrochina.com.cn
weather.mail.password=Cppeilingtan2024
weather.mail.protocol=pop3
#\u9996\u9875
home.image.path=/home/gf-jar/homeImg
#\u7B2C\u4E09\u65B9\u63A5\u53E3\u5730\u5740(\u957F\u5E86)
third-party.chang-qing.url=http://10.78.7.253
feature.swagger.enable=false
\ No newline at end of file
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