Commit 43b09807 authored by ZWT's avatar ZWT

feat(零碳): 长庆

1.修改极短期间开预测定时任务逻辑,解决优化后部分优化结果时间段过短问题;
2.修改心知天气气象数据获取及接收定时任务,解决天气数据通过邮件下载后,部分数据精度丢失问题;
3.修改首页各个接口逻辑,对小数类型字段进行处理,修改首页接口,增加小时保留两位四舍五入逻辑,同时解决线路详情接口部分查询逻辑报错问题;
4.能耗分析模块,能耗概览接口修改,修改查询逻辑,修改数据获取逻辑及绿电占比计算逻辑;
5.能耗分析模块,消纳曲线用电趋势接口修改,修改查询逻辑,修改数据获取逻辑及绿电占比计算逻辑;
6.能耗分析模块,用电详情接口修改,修改查询逻辑,修改数据获取逻辑及绿电占比计算逻辑;
7.修改首页先导实验井间开制度模块接口查询逻辑,解决极短期间开优化修改后没有第一次开井时间标识导致数据查询不出来问题;
8.基础间开制度新增修改接口逻辑修改,删除防冻堵对井口处理逻辑;
9.极短期间开优化算法修改,增加防冻堵井开井时间优化逻辑;
10.提供长庆通过日期获取当日间开优化结果接口开发,完成接口冒烟测试并添加线上接口文档;
11.提供长庆1天光伏出力预测结果接口开发,完成接口冒烟测试并添加线上接口文档;
12.提供长庆15天光伏出力预测结果接口开发,完成接口冒烟测试并添加线上接口文档;
13.修改极短期间开优化算法,优化防冻堵策略;
14.开发第三方历史天气导入功能;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent af0d6433
...@@ -127,6 +127,13 @@ ...@@ -127,6 +127,13 @@
<version>R8</version> <version>R8</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.4</version>
</dependency>
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
......
package pps.core.base.config.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.BasePhotovoltaicPlantView;
import pps.core.base.entity.PlantPredictedPowerDataEnt;
import pps.core.base.entity.ThirdWeatherDataEnt;
import pps.core.base.entity.ThirdWeatherDataView;
import pps.core.base.mapper.*;
import pps.core.base.service.data.third_weather_data.ThirdApiWeatherExcelData;
import pps.core.base.service.data.third_weather_data.WeatherDeleteCondition;
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;
/**
* 天气数据监听器
*
* @author ZWT
* @date 2024/04/30 11:04
*/
public class ThirdApiWeatherDataListener implements ReadListener<ThirdApiWeatherExcelData> {
private XContext context;
public ThirdApiWeatherDataListener(XContext context) {
this.context = context;
}
/**
* 缓存的数据
*/
private List<ThirdApiWeatherExcelData> cachedDataList = new ArrayList<>(4096);
@Override
public void invoke(ThirdApiWeatherExcelData thirdApiWeatherData, AnalysisContext analysisContext) {
cachedDataList.add(thirdApiWeatherData);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
this.saveHistory();
}
private void saveHistory() {
DateTime date = DateUtil.date();
//查第二采油厂所有电站
BasePhotovoltaicPlantViewMapper viewMapper = context.getBean(BasePhotovoltaicPlantViewMapper.class);
List<BasePhotovoltaicPlantView> plantList = viewMapper.selectPlantList(BasePhotovoltaicPlantView.builder()
.ouId("2c4c9d1c-ad55-4c14-b889-4dc33e3461e2")
.build());
//新数据删除接收
List<WeatherDeleteCondition> deleteList = new ArrayList<>(32);
List<ThirdWeatherDataView> weatherDataViewList = new ArrayList<>(2048);
//todo 老表逻辑(后期删除):后续可能替换
List<PlantPredictedPowerDataEnt> oldDeleteList = new ArrayList<>(32);
List<PlantPredictedPowerDataEnt> oldBatchList = new ArrayList<>(13312);
BigDecimal longitude = new BigDecimal("108.321784");
BigDecimal latitude = new BigDecimal("36.485083");
//获取开始结束时间,添加删除条件
Date beginTime = DateUtil.parseDateTime(cachedDataList.get(0).getTime());
Date endTime = DateUtil.offsetMinute(DateUtil.parseDateTime(cachedDataList.get(cachedDataList.size() - 1).getTime()), 15);
deleteList.add(
WeatherDeleteCondition.builder()
.longitude(longitude)
.latitude(latitude)
.beginTime(beginTime)
.endTime(endTime)
.build()
);
//todo 老表逻辑(后期删除):删除数据逻辑
for (BasePhotovoltaicPlantView plantView : plantList) {
oldDeleteList.add(PlantPredictedPowerDataEnt.builder()
.plantId(plantView.getId())
.createTime(beginTime)
.endTime(endTime)
.build());
}
//天气数据处理
for (ThirdApiWeatherExcelData excel : cachedDataList) {
DateTime time = DateUtil.parseDateTime(excel.getTime());
ThirdWeatherDataView thirdWeatherDataView = ThirdWeatherDataView.builder()
.dni(excel.getDni())
.ghi(excel.getGhi())
.dhi(excel.getDhi())
.forecastTime(time)
.tem(excel.getTem())
.rhu(excel.getRhu())
.wns(excel.getWns())
.wnd(excel.getWnd())
.wnsGrd(excel.getWnsGrd())
.gust(excel.getGust())
.pre(excel.getPre())
.prsQfe(excel.getPrsQfe())
.vis(excel.getVis())
.clo(excel.getClo())
.uvb(excel.getUvb())
.uvi(0)
.phs(excel.getPhs())
.wep(excel.getWep())
.wnd100m(excel.getWnd100m())
.wns100m(excel.getWns100m())
.wnsGrd100m(excel.getWnsGrd100m())
.longitude(longitude)
.latitude(latitude)
.createTime(date)
.updateTime(date)
.build();
weatherDataViewList.add(
thirdWeatherDataView
);
//todo 老表逻辑(后期删除):封装预测数据
for (BasePhotovoltaicPlantView plantView : plantList) {
this.addPlantPredictedPower(oldBatchList, plantView.getId(), thirdWeatherDataView);
}
}
//todo 老表逻辑(后期删除):删除/新增预测数据
this.deletePlantPredictedPowerList(context, oldDeleteList);
this.insertBatchPlantPredictedPowerList(context, oldBatchList);
int size;
if (CollUtil.isNotEmpty(deleteList)) {
ThirdWeatherDataMapper dataMapper = context.getBean(ThirdWeatherDataMapper.class);
size = deleteList.size();
if (size > BaseUtils.BATCH_SIZE) {
List<List<WeatherDeleteCondition>> subList = BaseUtils.getSubList(deleteList);
for (List<WeatherDeleteCondition> list : subList) {
LambdaQueryWrapper<ThirdWeatherDataEnt> wrapper = new LambdaQueryWrapper<>();
for (WeatherDeleteCondition dataEnt : list) {
wrapper.or(w -> w.eq(ThirdWeatherDataEnt::getLatitude, dataEnt.getLatitude())
.eq(ThirdWeatherDataEnt::getLongitude, dataEnt.getLongitude())
.between(ThirdWeatherDataEnt::getForecastTime, dataEnt.getBeginTime(), dataEnt.getEndTime())
);
}
dataMapper.delete(wrapper);
}
} else {
LambdaQueryWrapper<ThirdWeatherDataEnt> wrapper = new LambdaQueryWrapper<>();
for (WeatherDeleteCondition dataEnt : deleteList) {
wrapper.or(w -> w.eq(ThirdWeatherDataEnt::getLatitude, dataEnt.getLatitude())
.eq(ThirdWeatherDataEnt::getLongitude, dataEnt.getLongitude())
.between(ThirdWeatherDataEnt::getForecastTime, dataEnt.getBeginTime(), dataEnt.getEndTime())
);
}
dataMapper.delete(wrapper);
}
}
if (CollUtil.isNotEmpty(weatherDataViewList)) {
ThirdWeatherDataViewMapper dataViewMapper = context.getBean(ThirdWeatherDataViewMapper.class);
size = weatherDataViewList.size();
if (size > BaseUtils.BATCH_SIZE) {
List<List<ThirdWeatherDataView>> subList = BaseUtils.getSubList(weatherDataViewList);
subList.forEach(dataViewMapper::insertBatch);
} else {
dataViewMapper.insertBatch(weatherDataViewList);
}
}
}
/**
* 添加电厂预测功率
*
* @param batchList 批处理列表
* @param plantId 植物id
* @param thirdWeatherDataView 第三天气数据视图
*/
private void addPlantPredictedPower(List<PlantPredictedPowerDataEnt> batchList, String plantId, ThirdWeatherDataView thirdWeatherDataView) {
DateTime date = DateUtil.date(thirdWeatherDataView.getForecastTime());
batchList.add(PlantPredictedPowerDataEnt.builder()
.plantId(plantId)
.createTime(thirdWeatherDataView.getCreateTime())
.yearTime(String.valueOf(date.year()))
.monthTime(this.zeroFill(date.monthBaseOne()))
.dayTime(this.zeroFill(date.dayOfMonth()))
.hourTime(this.zeroFill(date.hour(true)))
.minTime(this.zeroFill(date.minute()))
.dataDate(date.toString("yyyy-MM-dd HH:mm"))
.temperature(thirdWeatherDataView.getTem())
.windSpeed(thirdWeatherDataView.getWns100m())
.windDirection(new BigDecimal(thirdWeatherDataView.getWnd()))
.pressure(thirdWeatherDataView.getPrsQfe())
.humidity(thirdWeatherDataView.getRhu())
.planeIrradiance(thirdWeatherDataView.getDni())
.horizontalIrradiance(thirdWeatherDataView.getGhi())
.power(BigDecimal.ZERO)
.build());
}
/**
* 条件删除预测数据
*
* @param context 上下文
* @param deleteList 删除列表
*/
private void deletePlantPredictedPowerList(XContext context, List<PlantPredictedPowerDataEnt> deleteList) {
if (CollUtil.isNotEmpty(deleteList)) {
PlantPredictedPowerDataMapper mapper = context.getBean(PlantPredictedPowerDataMapper.class);
int size = deleteList.size();
context.getLogger().info("------ deletePlantPredictedPowerList batchDelete delete size: {}", size);
if (size > BaseUtils.BATCH_SIZE) {
List<List<PlantPredictedPowerDataEnt>> subList = BaseUtils.getSubList(deleteList);
for (List<PlantPredictedPowerDataEnt> list : subList) {
LambdaQueryWrapper<PlantPredictedPowerDataEnt> wrapper = new LambdaQueryWrapper<>();
for (PlantPredictedPowerDataEnt dataEnt : list) {
wrapper.or(w -> w.eq(PlantPredictedPowerDataEnt::getPlantId, dataEnt.getPlantId())
.between(PlantPredictedPowerDataEnt::getDataDate, dataEnt.getCreateTime(), dataEnt.getEndTime())
);
}
mapper.delete(wrapper);
}
} else {
LambdaQueryWrapper<PlantPredictedPowerDataEnt> wrapper = new LambdaQueryWrapper<>();
for (PlantPredictedPowerDataEnt dataEnt : deleteList) {
wrapper.or(w -> w.eq(PlantPredictedPowerDataEnt::getPlantId, dataEnt.getPlantId())
.between(PlantPredictedPowerDataEnt::getDataDate, dataEnt.getCreateTime(), dataEnt.getEndTime())
);
}
mapper.delete(wrapper);
}
}
}
/**
* 插入间歇装置预测功率列表
*
* @param context 上下文
* @param batchList 批处理列表
*/
private void insertBatchPlantPredictedPowerList(XContext context, List<PlantPredictedPowerDataEnt> batchList) {
if (CollUtil.isNotEmpty(batchList)) {
PlantPredictedPowerDataViewMapper dataViewMapper = context.getBean(PlantPredictedPowerDataViewMapper.class);
int size = batchList.size();
context.getLogger().info("------ insertBatchPlantPredictedPowerList batchList insert size: {}", size);
if (size > BaseUtils.BATCH_SIZE) {
List<List<PlantPredictedPowerDataEnt>> subList = BaseUtils.getSubList(batchList);
subList.forEach(dataViewMapper::insertBatch);
} else {
dataViewMapper.insertBatch(batchList);
}
}
}
/**
* 零填充
*
* @param number 数字
* @return {@link String}
*/
private String zeroFill(int number) {
if (number < 10) {
return "0" + number;
}
return String.valueOf(number);
}
}
package pps.core.base.service; package pps.core.base.service;
import cn.hutool.core.collection.CollUtil; import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import pps.core.base.config.excel.ThirdApiWeatherDataListener;
import com.github.pagehelper.PageHelper; import pps.core.base.service.data.third_weather_data.ThirdApiWeatherExcelData;
import com.github.pagehelper.PageInfo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
import pps.cloud.system.service.SysOrganizationCloudService;
import pps.cloud.system.service.SystemAreaService;
import pps.cloud.system.service.SystemDictionaryService;
import pps.cloud.system.service.data.GetAllOuListByOuIdInput;
import pps.cloud.system.service.data.GetOuListTreeOutput;
import pps.cloud.system.service.data.QuerySysDictionaryViewInput;
import pps.cloud.system.service.data.QuerySysDictionaryViewOutput;
import pps.core.base.entity.*;
import pps.core.base.mapper.BaseLineAttenuationRateMapper;
import pps.core.base.mapper.BaseLineAttenuationRateViewMapper;
import pps.core.base.mapper.BaseLineMapper;
import pps.core.base.mapper.BaseLineViewMapper;
import pps.core.base.service.data.base_line.*;
import pps.core.base.service.data.base_line_attenuation_rate.CreateBaseLineAttenuationRateInput;
import pps.core.common.session.PpsUserSession;
import pps.core.system.entity.SysAreaEnt;
import pps.core.system.mapper.SysAreaMapper;
import xstartup.annotation.XService; import xstartup.annotation.XService;
import xstartup.annotation.XText;
import xstartup.base.XContext; import xstartup.base.XContext;
import xstartup.base.data.CustomQueryInput;
import xstartup.base.util.XCopyUtils;
import xstartup.base.util.XStringUtils;
import xstartup.data.XListResult;
import xstartup.data.XPageResult;
import xstartup.data.XServiceResult; import xstartup.data.XServiceResult;
import xstartup.data.XSingleResult; import xstartup.feature.api.annotation.XApiGet;
import xstartup.error.XError;
import xstartup.feature.api.annotation.XApiAnonymous;
import xstartup.feature.api.annotation.XApiPost;
import xstartup.feature.mybatis.helper.XMapperHelper;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@XService @XService
public class BaseLineService { public class BaseLineService {
/**
* 根据子节点获取最上层节点
*
* @return
*/
public static String getParentNameStr(List<SysAreaEnt> areaList, SysAreaEnt child) {
String parentNameStr = child.getName();
Integer parentId = child.getParentId();
if (parentId == 120) {
} else {
SysAreaEnt parent = areaList.stream().filter(item -> item.getId().equals(parentId)).findFirst().orElse(null);
String nameStr = getParentNameStr(areaList, parent);
parentNameStr = nameStr + "/" + parentNameStr;
}
return parentNameStr;
}
@XApiAnonymous
@XApiPost
public XServiceResult createBaseLine(XContext context, CreateBaseLineInput input) {
BaseLineMapper mapper = context.getBean(BaseLineMapper.class);
BaseLineEnt entity = new BaseLineEnt();
XCopyUtils.copyObject(input, entity);
if (entity.getParentId() == null)
entity.setParentId(0);
Date now = new Date();
PpsUserSession session = context.getSession(PpsUserSession.class);
entity.setCreateById(session.getId());
entity.setCreateByName(session.getUserName());
entity.setCreateTime(now);
mapper.insert(entity);
if (!CollectionUtils.isEmpty(input.getList())) { @XText("天气历史数据导入")
BaseLineAttenuationRateViewMapper rateMapper = context.getBean(BaseLineAttenuationRateViewMapper.class); @XApiGet(anonymous = true)
List<BaseLineAttenuationRateView> list = new ArrayList<>(); public XServiceResult test(XContext context) {
for (CreateBaseLineAttenuationRateInput rateInput : input.getList()) { String fileName = "D:\\home\\result_w.csv";
BaseLineAttenuationRateView ent = XCopyUtils.copyNewObject(rateInput, BaseLineAttenuationRateView.class); // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
ent.setCreateById(session.getId()); EasyExcel.read(fileName, ThirdApiWeatherExcelData.class, new ThirdApiWeatherDataListener(context)).sheet().doRead();
ent.setCreateByName(session.getUserName());
ent.setCreateTime(now);
ent.setType(0);
ent.setLineId(entity.getId());
list.add(ent);
}
rateMapper.batchInsert(list);
}
return XServiceResult.OK; return XServiceResult.OK;
} }
@XApiAnonymous
@XApiPost
public XServiceResult updateBaseLine(XContext context, UpdateBaseLineInput input) {
BaseLineMapper mapper = context.getBean(BaseLineMapper.class);
QueryWrapper<BaseLineEnt> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(BaseLineEnt::getId, input.getId());
BaseLineEnt entity = mapper.selectOne(queryWrapper);
if (entity == null) {
return XServiceResult.error(context, XError.NotFound);
}
XCopyUtils.copyObject(input, entity);
if (entity.getParentId() == null)
entity.setParentId(0);
Date now = new Date();
PpsUserSession session = context.getSession(PpsUserSession.class);
entity.setModifyById(session.getId());
entity.setModifyByName(session.getUserName());
entity.setModifyTime(now);
mapper.updateById(entity);
BaseLineAttenuationRateMapper rateMapper = context.getBean(BaseLineAttenuationRateMapper.class);
QueryWrapper<BaseLineAttenuationRateEnt> queryRateWrapper = new QueryWrapper<>();
queryRateWrapper.lambda().eq(BaseLineAttenuationRateEnt::getLineId, entity.getId());
queryRateWrapper.lambda().eq(BaseLineAttenuationRateEnt::getType, 0);
rateMapper.delete(queryRateWrapper);
if (!CollectionUtils.isEmpty(input.getList())) {
BaseLineAttenuationRateViewMapper rateViewMapper = context.getBean(BaseLineAttenuationRateViewMapper.class);
List<BaseLineAttenuationRateView> list = new ArrayList<>();
for (CreateBaseLineAttenuationRateInput rateInput : input.getList()) {
BaseLineAttenuationRateView ent = XCopyUtils.copyNewObject(rateInput, BaseLineAttenuationRateView.class);
ent.setCreateById(session.getId());
ent.setCreateByName(session.getUserName());
ent.setCreateTime(now);
ent.setLineId(entity.getId());
ent.setType(0);
list.add(ent);
}
rateViewMapper.batchInsert(list);
}
return XServiceResult.OK;
}
@XApiAnonymous
@XApiPost
public XServiceResult deleteBaseLine(XContext context, DeleteBaseLineInput input) {
BaseLineMapper mapper = context.getBean(BaseLineMapper.class);
QueryWrapper<BaseLineEnt> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(BaseLineEnt::getId, input.getId());
BaseLineEnt entity = mapper.selectOne(queryWrapper);
if (entity == null) {
return XServiceResult.error(context, XError.NotFound);
}
mapper.deleteById(entity);
return XServiceResult.OK;
}
@XApiAnonymous
@XApiPost
public XSingleResult<GetBaseLineOutput> getBaseLine(XContext context, GetBaseLineInput input) {
BaseLineViewMapper mapper = context.getBean(BaseLineViewMapper.class);
BaseLineView lineView = new BaseLineView();
lineView.setId(String.valueOf(input.getId()));
BaseLineView entity = mapper.selectOne(lineView);
if (entity == null) {
return XSingleResult.error(context, XError.NotFound);
}
GetBaseLineOutput output = new GetBaseLineOutput();
XCopyUtils.copyObject(entity, output);
BaseLineAttenuationRateMapper rateMapper = context.getBean(BaseLineAttenuationRateMapper.class);
QueryWrapper<BaseLineAttenuationRateEnt> queryRateWrapper = new QueryWrapper<>();
queryRateWrapper.lambda().eq(BaseLineAttenuationRateEnt::getLineId, entity.getId());
queryRateWrapper.lambda().eq(BaseLineAttenuationRateEnt::getType, 0);
List<BaseLineAttenuationRateEnt> list = rateMapper.selectList(queryRateWrapper);
if (!CollectionUtils.isEmpty(list)) {
List<CreateBaseLineAttenuationRateInput> rateInputs = XCopyUtils.copyNewList(list, CreateBaseLineAttenuationRateInput.class);
output.setList(rateInputs);
}
if (output.getParentId() == 0)
output.setParentId(null);
return XSingleResult.success(output);
}
@XApiAnonymous
@XApiPost
public XPageResult<QueryBaseLineOutput> queryBaseLineList(XContext context, QueryBaseLineListInput input) {
PageHelper.startPage(input.getPage(), input.getLimit());
//获取组织机构下的子集
SysOrganizationCloudService cloudService = context.getBean(SysOrganizationCloudService.class);
GetAllOuListByOuIdInput ouIdInput = new GetAllOuListByOuIdInput();
if (XStringUtils.isNotEmpty(input.getOuId())) {
ouIdInput.setOuId(input.getOuId());
} else {
ouIdInput.setOuId("00000000-0000-0000-0000-000000000000");
}
XListResult<GetOuListTreeOutput> outputXListResult = cloudService.getAllOuListByOuId(context, ouIdInput);
outputXListResult.throwIfFail();
List<GetOuListTreeOutput> ouList = outputXListResult.getResult();
List<String> ouIdList = new ArrayList<>();
if (CollUtil.isNotEmpty(ouList)) {
ouIdList = ouList.stream().map(GetOuListTreeOutput::getOuId).collect(Collectors.toList());
}
BaseLineViewMapper viewMapper = context.getBean(BaseLineViewMapper.class);
BaseLineView view = XCopyUtils.copyNewObject(input, BaseLineView.class);
view.setOuIdList(ouIdList);
List<BaseLineView> list = viewMapper.selectListNew(view);
PageInfo<BaseLineView> pageInfo = new PageInfo(list);
List<QueryBaseLineOutput> outputs = XCopyUtils.copyNewList(pageInfo.getList(), QueryBaseLineOutput.class);
//获取线路、电网字典
List<QuerySysDictionaryViewOutput> gridTypeList = getDictList(context, "grid_type");
List<QuerySysDictionaryViewOutput> lineTypeList = getDictList(context, "line_type");
for (QueryBaseLineOutput item : outputs) {
item.setGridTypeName(getDictName(item.getGridType(), gridTypeList));
item.setLineTypeName(getDictName(item.getLineType(), lineTypeList));
}
return XPageResult.success(outputs, input, pageInfo.getTotal());
}
@XApiAnonymous
@XApiPost
public XPageResult<QueryBaseLineOutput> queryBaseLine(XContext context, QueryBaseLineInput input) {
BaseLineViewMapper mapper = context.getBean(BaseLineViewMapper.class);
BaseLineView view = XCopyUtils.copyNewObject(input, BaseLineView.class);
List<BaseLineView> list = mapper.selectList(view);
PageInfo<BaseLineView> pageInfo = new PageInfo(list);
List<QueryBaseLineOutput> outputs = XCopyUtils.copyNewList(pageInfo.getList(), QueryBaseLineOutput.class);
return XPageResult.success(outputs, input, pageInfo.getTotal());
}
@XApiAnonymous
@XApiPost
public XPageResult<QueryBaseLineAllOutput> queryAllBaseLine(XContext context, QueryBaseLineInput input) {
BaseLineViewMapper mapper = context.getBean(BaseLineViewMapper.class);
BaseLineView view = XCopyUtils.copyNewObject(input, BaseLineView.class);
List<BaseLineAllView> list = mapper.selectDataList(view);
PageInfo<BaseLineAllView> pageInfo = new PageInfo(list);
List<QueryBaseLineAllOutput> outputs = XCopyUtils.copyNewList(pageInfo.getList(), QueryBaseLineAllOutput.class);
SystemAreaService areaService = context.getBean(SystemAreaService.class);
// XListResult<GetSysAreaOutput> areaOutputXListResult = areaService.getSysAreaList(context ,new GetSysAreaInput());
// areaOutputXListResult.throwIfFail();
// List<GetSysAreaOutput> areaOutputs = areaOutputXListResult.getResult();
SysAreaMapper areaMapper = context.getBean(SysAreaMapper.class);
List<SysAreaEnt> areaEntList = areaMapper.selectList(new QueryWrapper<>());
outputs.stream().forEach(item -> {
if (XStringUtils.isNotEmpty(item.getProvince())) {
System.out.println(item.getProvince());
SysAreaEnt areaEnt = areaEntList.stream().filter(area -> item.getProvince().equals(area.getId() + "")).findFirst().orElse(null);
if (areaEnt != null)
item.setProvince(getParentNameStr(areaEntList, areaEnt));
}
});
return XPageResult.success(outputs, input, pageInfo.getTotal());
}
@XApiAnonymous
@XApiPost
public XPageResult<QueryBaseLineOutput> dynamicQueryBaseLine(XContext context, CustomQueryInput input) {
BaseLineMapper mapper = context.getBean(BaseLineMapper.class);
return XMapperHelper.query(mapper, input, BaseLineEnt.class, QueryBaseLineOutput.class);
}
public List<QuerySysDictionaryViewOutput> getDictList(XContext context, String alias) {
SystemDictionaryService dictionaryService = context.getBean(SystemDictionaryService.class);
QuerySysDictionaryViewInput dictInput = new QuerySysDictionaryViewInput();
dictInput.setAlias(alias);
dictInput.setPage(1);
dictInput.setLimit(999);
XListResult<QuerySysDictionaryViewOutput> dictPageResult = dictionaryService.queryChildSysDictionarysByParentAlias(context, dictInput);
dictPageResult.throwIfFail();
return dictPageResult.getResult();
}
public String getDictName(String dictKey, List<QuerySysDictionaryViewOutput> dictList) {
if (StringUtils.isBlank(dictKey) || CollectionUtils.isEmpty(dictList)) {
return " ";
}
for (QuerySysDictionaryViewOutput dict : dictList) {
if (dict.getDicKey().equals(dictKey)) {
return dict.getDicName();
}
}
return "";
}
@XApiAnonymous
@XApiPost
public XListResult<GetBaseLineTreeOutput> getBaseLineTree(XContext context, GetBaseLineInput input) {
BaseLineMapper mapper = context.getBean(BaseLineMapper.class);
QueryWrapper<BaseLineEnt> queryWrapper = new QueryWrapper<>();
//queryWrapper.lambda().in(BaseLineEnt::getWellOuId , ouIdList);
List<BaseLineEnt> list = mapper.selectList(queryWrapper);
List<GetBaseLineTreeOutput> outputs = new ArrayList<>();
for (BaseLineEnt ent : list) {
GetBaseLineTreeOutput output = new GetBaseLineTreeOutput();
output.setParentId(ent.getParentId());
output.setValue(ent.getId());
output.setLabel(ent.getLineName());
outputs.add(output);
}
if (!CollectionUtils.isEmpty(outputs))
selectBaseLineTree(outputs);
return XListResult.success(outputs);
}
public List<GetBaseLineTreeOutput> selectBaseLineTree(List<GetBaseLineTreeOutput> list) {
//操作所有组织机构数据
Map<Integer, List<GetBaseLineTreeOutput>> groupMap = list.stream().collect(Collectors.groupingBy(GetBaseLineTreeOutput::getParentId));
list.forEach(organization -> {
organization.setChildren(groupMap.get(organization.getValue()));
});
List<GetBaseLineTreeOutput> collect = list.stream().filter(organization -> organization.getParentId() == 0).collect(Collectors.toList());
return collect;
}
@XApiAnonymous
@XApiPost
public XListResult<GetBaseLineOutput> getBaseLineList(XContext context, GetBaseLineInput input) {
//获取组织机构下的子集
BaseLineMapper mapper = context.getBean(BaseLineMapper.class);
QueryWrapper<BaseLineEnt> queryWrapper = new QueryWrapper<>();
// queryWrapper.lambda().in(BaseLineEnt::getWellOuId , ouIdList);
List<BaseLineEnt> list = mapper.selectList(queryWrapper);
List<GetBaseLineOutput> outputs = XCopyUtils.copyNewList(list, GetBaseLineOutput.class);
return XListResult.success(outputs);
}
} }
package pps.core.base.service.data.third_weather_data;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import xstartup.annotation.XText;
import java.math.BigDecimal;
/**
* 第三方气象数据
*
* @author ZWT
* @date 2024/04/23
*/
@Data
@ExcelIgnoreUnannotated
public class ThirdApiWeatherExcelData {
@ExcelProperty(value = "dni")
@XText("太阳直接辐射[W/m2]")
private BigDecimal dni;
@ExcelProperty(value = "ghi")
@XText("太阳总辐射(水平面)[W/m2]")
private BigDecimal ghi;
@ExcelProperty(value = "dhi")
@XText("太阳散射辐射(水平面)[W/m2]")
private BigDecimal dhi;
@ExcelProperty(value = "time")
@XText("预报时间")
@JSONField(name = "time")
private String time;
@ExcelProperty(value = "tem")
@XText("气温 [C]")
private BigDecimal tem;
@ExcelProperty(value = "rhu")
@XText("相对湿度 [%]")
private BigDecimal rhu;
@ExcelProperty(value = "wns")
@XText("风速(地面10米)[m/s]")
private BigDecimal wns;
@ExcelProperty(value = "wnd")
@XText("风向角度(地面10米)[degree]")
private Integer wnd;
@ExcelProperty(value = "wns_grd")
@XText("风力等级(地面10米)")
@JSONField(name = "wns_grd")
private Integer wnsGrd;
@ExcelProperty(value = "gust")
@XText("阵风风速(地面10米)[m/s]")
private BigDecimal gust;
@ExcelProperty(value = "pre")
@XText("降水量(1小时累计)[mm]")
private BigDecimal pre;
@ExcelProperty(value = "prs_qfe")
@XText("地面气压 [hPa]")
@JSONField(name = "prs_qfe")
private BigDecimal prsQfe;
@ExcelProperty(value = "vis")
@XText("能见度 [km]")
private BigDecimal vis;
@ExcelProperty(value = "clo")
@XText("云量 [%]")
private BigDecimal clo;
@ExcelProperty(value = "uvb")
@XText("紫外线UV辐照度(1小时累计)[kWh/m2]")
private BigDecimal uvb;
@ExcelProperty(value = "uvi")
@XText("紫外线UV辐照指数")
private Integer uvi;
@ExcelProperty(value = "phs")
@XText("降水相态:(0无降水, 1雨, 3冻雨, 5雪, 6湿雪, 7雨夹雪, 8冰雹)")
private Integer phs;
@ExcelProperty(value = "wep")
@XText("天气现象代码")
private Integer wep;
@ExcelProperty(value = "wnd_100m")
@XText("风向角度(地面100米)[degree]")
@JSONField(name = "wnd_100m")
private Integer wnd100m;
@ExcelProperty(value = "wns_100m")
@XText("风速(地面100米)[m/s]")
@JSONField(name = "wns_100m")
private BigDecimal wns100m;
@ExcelProperty(value = "wns_grd_100m")
@XText("风力等级(地面100米)")
@JSONField(name = "wns_grd_100m")
private Integer wnsGrd100m;
}
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