Commit 055035ce authored by ZWT's avatar ZWT

feat(零碳): 长庆

1.邮件发送服务代码修改,修改配置文件及发送逻辑,解决邮件名称唯一性;
2.邮件接收功能修改,解决邮件接收协议修改后导致的一系列问题;
3.长期间开优化功能修改,修改定时任务处理逻辑及执行周期;
4.中期间开优化功能修改,修改定时任务处理逻辑及执行周期;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent fa03c30a
......@@ -83,6 +83,16 @@ public class BusinessConstant {
*/
public static final Integer ZERO = 0;
/**
* 2
*/
public static final Integer TWO = 2;
/**
* 3
*/
public static final Integer THREE = 3;
/**
* 10
*/
......
package pps.core.task.job;
import cn.hutool.core.util.ObjectUtil;
import pps.cloud.space.service.ISpaceOptimizeLongCloudService;
import pps.cloud.space.service.ISpaceOptimizeUltraCloudService;
import pps.core.common.cache.TaskLockCache;
import pps.core.task.constant.TaskConstant;
import xstartup.annotation.XService;
......@@ -39,7 +39,7 @@ public class SpaceOptimizeUltraJob implements XJob {
cache.setRedisValue(key);
TaskLockCache.set(xContext, cache);
try {
ISpaceOptimizeLongCloudService service = xContext.getBean(ISpaceOptimizeLongCloudService.class);
ISpaceOptimizeUltraCloudService service = xContext.getBean(ISpaceOptimizeUltraCloudService.class);
XServiceResult result = service.optimizeLongJob(xContext);
result.throwIfFail();
} catch (Exception e) {
......
package pps.cloud.space.service;
import xstartup.annotation.XService;
import xstartup.annotation.XText;
import xstartup.base.XContext;
import xstartup.data.XServiceResult;
/**
* 长期间开优化Cloud模块
*
* @author ZWT
* @date 2024/03/22
*/
@XService
@XText("长期间开优化Cloud模块")
public interface ISpaceOptimizeUltraCloudService {
/**
* 长期间开优化Cloud模块--定时任务
*
* @param context 上下文
* @return {@link XServiceResult}
*/
@XText("长期间开优化Cloud模块--定时任务")
XServiceResult optimizeUltraJob(XContext context);
}
\ No newline at end of file
......@@ -88,4 +88,28 @@ public interface SpaceOptimizeViewMapper {
* @return int
*/
int shortDurationBatchInsertList(@Param(value = "list") List<SpaceOptimizeDurationDTO> list);
/**
* 长期间开优化批量新增
*
* @param list 列表
* @return int
*/
int ultraPeriodBatchInsertList(@Param(value = "list") List<SpaceOptimizePeriodDTO> list);
/**
* 长期间开优化井口批量新增
*
* @param list 列表
* @return int
*/
int ultraWellheadBatchInsertList(@Param(value = "list") List<SpaceOptimizeWellheadDTO> list);
/**
* 长期间开优化井口配置批量新增
*
* @param list 列表
* @return int
*/
int ultraDurationBatchInsertList(@Param(value = "list") List<SpaceOptimizeDurationDTO> list);
}
package pps.core.space.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import pps.cloud.prediction.service.data.plant_predicted_power_data.DynamicQueryPlantPredictedPowerInput;
import pps.cloud.prediction.service.data.storage_predicted_power_data.DynamicQueryStoragePredictedPowerInput;
import pps.cloud.space.service.ISpaceOptimizeUltraCloudService;
import pps.core.common.constant.BusinessConstant;
import pps.core.common.entity.BaseModel;
import pps.core.common.utils.BaseUtils;
import pps.core.space.entity.*;
import pps.core.space.mapper.SpaceOptimizeUltraPeriodMapper;
import pps.core.space.mapper.SpaceOptimizeViewMapper;
import pps.core.space.service.data.SpaceOptimizeLineRelation;
import xstartup.annotation.XService;
import xstartup.base.XContext;
import xstartup.data.XServiceResult;
import xstartup.helper.XTransactionHelper;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 长期间开优化Cloud模块
*
* @author ZWT
* @date 2024/03/22
*/
@XService
public class SpaceOptimizeUltraCloudServiceImpl extends SpaceOptimizeBaseService implements ISpaceOptimizeUltraCloudService {
/**
* 长期间开优化Cloud模块--定时任务
*
* @param context 上下文
* @return {@link XServiceResult}
*/
@Override
public XServiceResult optimizeUltraJob(XContext context) {
//取当前时间
DateTime date = DateUtil.beginOfDay(DateTime.now());
//取生效中的基础间开
List<SpaceInstitutionDetailEnt> detailEntList = super.getEffectiveSpaceInstitution(context, date.toString(BusinessConstant.DATE_FORMAT_DAY));
SpaceOptimizeLineRelation relation = super.getOptimizeLineRelation(context, detailEntList);
//月份要加一
int monthIndex = date.month();
int monthNum = monthIndex + 1;
List<SpaceOptimizePeriodDTO> periodDTOList = new ArrayList<>(32);
List<SpaceOptimizeWellheadDTO> wellheadDTOList = new ArrayList<>(64);
List<SpaceOptimizeDurationDTO> durationDTOList = new ArrayList<>(128);
List<SpaceOptimizeDurationDTO> unOptimizeDurationList = new ArrayList<>(128);
//优化
for (SpaceInstitutionDetailEnt detail : detailEntList) {
//查最新间开历史
SpaceOptimizeUltraPeriodMapper periodMapper = context.getBean(SpaceOptimizeUltraPeriodMapper.class);
SpaceOptimizeUltraPeriodEnt ultraPeriodEnt = periodMapper.selectOne(new QueryWrapper<SpaceOptimizeUltraPeriodEnt>()
.select("institution_id",
"MAX( optimize_deadline ) AS optimize_deadline")
.lambda()
.eq(BaseModel::getIsDeleted, BusinessConstant.ONE)
.eq(SpaceOptimizeUltraPeriodEnt::getInstitutionId, detail.getId())
);
if (ObjectUtil.isNotNull(ultraPeriodEnt)) {
Date optimizeDead = ultraPeriodEnt.getOptimizeDeadline();
if (DateUtil.compare(date, optimizeDead) == -1) {
continue;
}
}
Date institutionEndDate = detail.getInstitutionEndDate();
DateTime optimizeDeadline = DateUtil.offsetDay(date, 15);
if (optimizeDeadline.compareTo(institutionEndDate) > 0) {
optimizeDeadline = DateUtil.endOfDay(institutionEndDate);
}
//创建记录
String periodId = super.createOptimizePeriod(periodDTOList, detail.getId(), detail.getLineId(), BaseUtils.getExecutionCycleForCalibration(date, optimizeDeadline), optimizeDeadline);
switch (detail.getGridTypeKey()) {
//并网型优化
case "1":
super.gridConnectedOptimization(context, wellheadDTOList, durationDTOList, unOptimizeDurationList,
relation.getWellheadsByInstitutionIdIdMap().get(detail.getId()), detail, monthNum, periodId,
DynamicQueryPlantPredictedPowerInput.builder()
.plantIds(relation.getPlantIdsByLineIdMap().get(detail.getLineId()))
.startTime(date.toString(BusinessConstant.DATE_FORMAT_DAY))
.endTime(optimizeDeadline.toString(BusinessConstant.DATE_FORMAT_DAY))
.dateType(BusinessConstant.TWO)
.build());
break;
//离网型优化
case "0":
super.offGridOptimization(context, wellheadDTOList, durationDTOList, unOptimizeDurationList, relation.getWellheadsByInstitutionIdIdMap().get(detail.getId()),
relation.getStorageAvgMap(), detail, periodId,
DynamicQueryStoragePredictedPowerInput.builder()
.storageIds(relation.getStorageIdsByLineIdMap().get(detail.getLineId()))
.startTime(DateUtil.offsetDay(date, -15).toString(BusinessConstant.DATE_FORMAT_DAY))
.endTime(DateUtil.offsetDay(optimizeDeadline, -15).toString(BusinessConstant.DATE_FORMAT_DAY))
.build(),
DynamicQueryPlantPredictedPowerInput.builder()
.plantIds(relation.getPlantIdsByLineIdMap().get(detail.getLineId()))
.startTime(date.toString(BusinessConstant.DATE_FORMAT_DAY))
.endTime(optimizeDeadline.toString(BusinessConstant.DATE_FORMAT_DAY))
.dateType(BusinessConstant.TWO)
.build());
break;
default:
//电网类型不存在
}
}
//开启事务
return XTransactionHelper.begin(context, () -> {
int size;
SpaceOptimizeViewMapper optimizeViewMapper = context.getBean(SpaceOptimizeViewMapper.class);
if (CollUtil.isNotEmpty(periodDTOList)) {
size = periodDTOList.size();
if (size > BaseUtils.BATCH_SIZE) {
List<List<SpaceOptimizePeriodDTO>> subList = BaseUtils.getSubList(periodDTOList);
subList.forEach(optimizeViewMapper::ultraPeriodBatchInsertList);
} else {
optimizeViewMapper.ultraPeriodBatchInsertList(periodDTOList);
}
}
if (CollUtil.isNotEmpty(wellheadDTOList)) {
size = wellheadDTOList.size();
if (size > BaseUtils.BATCH_SIZE) {
List<List<SpaceOptimizeWellheadDTO>> subList = BaseUtils.getSubList(wellheadDTOList);
subList.forEach(optimizeViewMapper::ultraWellheadBatchInsertList);
} else {
optimizeViewMapper.ultraWellheadBatchInsertList(wellheadDTOList);
}
}
if (CollUtil.isNotEmpty(unOptimizeDurationList)) {
size = unOptimizeDurationList.size();
if (size > BaseUtils.BATCH_SIZE) {
List<List<SpaceOptimizeDurationDTO>> subList = BaseUtils.getSubList(unOptimizeDurationList);
subList.forEach(optimizeViewMapper::ultraDurationBatchInsertList);
} else {
optimizeViewMapper.ultraDurationBatchInsertList(unOptimizeDurationList);
}
}
if (CollUtil.isNotEmpty(durationDTOList)) {
size = durationDTOList.size();
if (size > BaseUtils.BATCH_SIZE) {
List<List<SpaceOptimizeDurationDTO>> subList = BaseUtils.getSubList(durationDTOList);
subList.forEach(optimizeViewMapper::ultraDurationBatchInsertList);
} else {
optimizeViewMapper.ultraDurationBatchInsertList(durationDTOList);
}
}
return XServiceResult.OK;
});
}
}
\ No newline at end of file
......@@ -253,4 +253,93 @@
)
</foreach>
</insert>
<insert id="ultraPeriodBatchInsertList" parameterType="list">
INSERT INTO space_optimize_ultra_period ( id, create_by_id, create_by_name, create_time,
modify_by_id, modify_by_name, modify_time, line_id, institution_id, execution_cycle, optimize_state,
optimize_deadline )
VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.id},
#{item.createById},
#{item.createByName},
#{item.createTime},
#{item.modifyById},
#{item.modifyByName},
#{item.modifyTime},
#{item.lineId},
#{item.institutionId},
#{item.executionCycle},
#{item.optimizeState},
#{item.optimizeDeadline}
)
</foreach>
</insert>
<insert id="ultraWellheadBatchInsertList" parameterType="list">
INSERT INTO space_optimize_ultra_wellhead ( id, create_by_id, create_by_name, create_time,
modify_by_id, modify_by_name, modify_time, ultra_period_id, wellhead_id, well_number, start_seq)
VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.id},
#{item.createById},
#{item.createByName},
#{item.createTime},
#{item.modifyById},
#{item.modifyByName},
#{item.modifyTime},
#{item.periodId},
#{item.wellheadId},
#{item.wellNumber},
#{item.startSeq}
)
</foreach>
</insert>
<insert id="ultraDurationBatchInsertList" parameterType="list">
INSERT INTO space_optimize_ultra_duration (
id,
create_by_id,
create_by_name,
create_time,
modify_by_id,
modify_by_name,
modify_time,
record_id,
ultra_period_id,
wellhead_id,
is_optimize,
generation_type_key,
open_well_time,
close_well_time
)
VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.id},
#{item.createById},
#{item.createByName},
#{item.createTime},
#{item.modifyById},
#{item.modifyByName},
#{item.modifyTime},
#{item.recordId},
#{item.periodId},
#{item.wellheadId},
#{item.isOptimize},
<choose>
<when test="item.generationTypeKey != null and item.generationTypeKey != ''">
#{item.generationTypeKey},
</when>
<otherwise>
NULL,
</otherwise>
</choose>
#{item.openWellTime},
#{item.closeWellTime}
)
</foreach>
</insert>
</mapper>
\ No newline at end of file
......@@ -30,6 +30,16 @@ public interface PredictedPowerViewMapper {
*/
List<PredictedPowerView> selectShortPowerList(PredictedPowerView view);
/**
* 获取长期预测数据
*
* @param view 看法
* @return {@link List}<{@link PredictedPowerView}>
*/
List<PredictedPowerView> selectUltraPowerList(PredictedPowerView view);
/*-------------------------------------------------------------------------*/
/**
* 获取中期预测数据(小时)
*
......@@ -45,4 +55,12 @@ public interface PredictedPowerViewMapper {
* @return {@link List}<{@link PredictedPowerView}>
*/
List<PredictedPowerView> selectShortPowerHourList(PredictedPowerView view);
/**
* 获取长期预测数据(小时)
*
* @param view 看法
* @return {@link List}<{@link PredictedPowerView}>
*/
List<PredictedPowerView> selectUltraPowerHourList(PredictedPowerView view);
}
......@@ -75,6 +75,13 @@ public class PlantPredictedPowerCloudServiceImpl implements IPlantPredictedPower
.endTime(endTime)
.build());
break;
case 2:
list = mapper.selectUltraPowerList(PredictedPowerView.builder()
.plantIds(plantIds)
.startTime(startTime)
.endTime(endTime)
.build());
break;
default:
}
}
......
......@@ -65,6 +65,37 @@
a.create_time
</select>
<select id="selectUltraPowerList" resultMap="BaseResultMap">
SELECT
IFNULL( AVG( a.predict_power ), 0 ) AS power,
a.create_time AS create_time
FROM
(
SELECT
predict_power,
DATE_FORMAT ( data_date, '%H:%i:%s' ) AS create_time
FROM
plant_predicted_power_long_term
WHERE
plant_id IN
<foreach collection="plantIds" item="item" open="(" separator="," close=")">
#{item}
</foreach>
<if test="startTime != null and endTime != null">
AND
data_date BETWEEN
#{startTime} AND
#{endTime}
</if>
) a
GROUP BY
a.create_time
ORDER BY
a.create_time
</select>
<!--*********************************************************************************-->
<select id="selectMidPowerHourList" resultMap="BaseResultMap">
SELECT
IFNULL( AVG( a.predict_power ), 0 ) AS power,
......@@ -122,4 +153,33 @@
ORDER BY
a.create_time
</select>
<select id="selectUltraPowerHourList" resultMap="BaseResultMap">
SELECT
IFNULL( AVG( a.predict_power ), 0 ) AS power,
a.create_time AS hour_time
FROM
(
SELECT
predict_power,
HOUR( data_date ) AS create_time
FROM
plant_predicted_power_long_term
WHERE
plant_id IN
<foreach collection="plantIds" item="item" open="(" separator="," close=")">
#{item}
</foreach>
<if test="startTime != null and endTime != null">
AND
data_date BETWEEN
#{startTime} AND
#{endTime}
</if>
) a
GROUP BY
a.create_time
ORDER BY
a.create_time
</select>
</mapper>
\ 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