Commit c08861ba authored by ZWT's avatar ZWT

feat(零碳): 长庆

1.邮件发送服务代码修改,修改配置文件及发送逻辑,解决邮件名称唯一性;
2.邮件接收功能修改,解决邮件接收协议修改后导致的一系列问题;
3.长期间开优化功能修改,修改定时任务处理逻辑及执行周期;
4.中期间开优化功能修改,修改定时任务处理逻辑及执行周期;
5.超长期间开优化功能开发,开发相关接口及定时任务,创建对应数据表,生成对应接口文档并完成接口冒烟测试;

BREAKING CHANGE: 无

Closes 无

[skip ci]
parent 963d0a44
......@@ -5,6 +5,7 @@ import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.commons.lang3.StringUtils;
......@@ -30,9 +31,7 @@ import pps.core.common.entity.BaseModel;
import pps.core.common.utils.BaseUtils;
import pps.core.space.entity.*;
import pps.core.space.enums.BusinessError;
import pps.core.space.mapper.SpaceInstitutionDetailMapper;
import pps.core.space.mapper.SpaceInstitutionDurationMapper;
import pps.core.space.mapper.SpaceInstitutionWellheadViewMapper;
import pps.core.space.mapper.*;
import pps.core.space.service.data.SpaceOptimizeLineRelation;
import pps.core.space.utils.ServiceUtil;
import xstartup.base.XContext;
......@@ -52,6 +51,72 @@ import java.util.stream.Collectors;
*/
public class SpaceOptimizeBaseService {
/**
* 进行优化
*
* @param context 上下文
* @param periodDTOList 时期数据学家
* @param wellheadDTOList 井口dtolist
* @param durationDTOList 持续时间dtolist
* @param unOptimizeDurationList 取消优化工期列表
* @param dateType 日期类型
* @param flag 旗帜
* @param offset 抵消
*/
public void doOptimize(XContext context, List<SpaceOptimizePeriodDTO> periodDTOList, List<SpaceOptimizeWellheadDTO> wellheadDTOList,
List<SpaceOptimizeDurationDTO> durationDTOList, List<SpaceOptimizeDurationDTO> unOptimizeDurationList,
Integer dateType, Integer flag, Integer offset) {
//取当前时间
DateTime date = DateUtil.beginOfDay(DateTime.now());
//取生效中的基础间开
List<SpaceInstitutionDetailEnt> detailEntList = this.getEffectiveSpaceInstitution(context, date.toString(BusinessConstant.DATE_FORMAT_DAY));
SpaceOptimizeLineRelation relation = this.getOptimizeLineRelation(context, detailEntList);
//月份要加一
int monthNum = date.month() + 1;
//优化
for (SpaceInstitutionDetailEnt detail : detailEntList) {
//查最新间开历史
if (this.isOptimize(context, detail.getId(), flag, date)) {
continue;
}
Date institutionEndDate = detail.getInstitutionEndDate();
DateTime optimizeDeadline = DateUtil.offsetDay(date, offset);
if (optimizeDeadline.compareTo(institutionEndDate) > 0) {
optimizeDeadline = DateUtil.endOfDay(institutionEndDate);
}
//创建记录
String periodId = this.createOptimizePeriod(periodDTOList, detail.getId(), detail.getLineId(), BaseUtils.getExecutionCycleForCalibration(date, optimizeDeadline), optimizeDeadline);
DynamicQueryPlantPredictedPowerInput powerInput = DynamicQueryPlantPredictedPowerInput.builder()
.plantIds(relation.getPlantIdsByLineIdMap().get(detail.getLineId()))
.startTime(date.toString(BusinessConstant.DATE_FORMAT_DAY))
.endTime(optimizeDeadline.toString(BusinessConstant.DATE_FORMAT_DAY))
.dateType(dateType)
.build();
switch (detail.getGridTypeKey()) {
//并网型优化
case "1":
this.gridConnectedOptimization(context, wellheadDTOList, durationDTOList, unOptimizeDurationList,
relation.getWellheadsByInstitutionIdIdMap().get(detail.getId()), detail, monthNum, periodId,
powerInput
);
break;
//离网型优化
case "0":
this.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, -offset).toString(BusinessConstant.DATE_FORMAT_DAY))
.endTime(DateUtil.offsetDay(optimizeDeadline, -offset).toString(BusinessConstant.DATE_FORMAT_DAY))
.build(), powerInput
);
break;
default:
//电网类型不存在
}
}
}
/**
* 获得生效中的基础间开
*
......@@ -1173,4 +1238,67 @@ public class SpaceOptimizeBaseService {
durationDTO.setCloseTime(closeTime);
offGridPeriodList.add(durationDTO);
}
/**
* 是否在优化
*
* @param context 上下文
* @param detailId 详细信息id
* @param flag 旗帜
* @param now 现在
* @return boolean
*/
private boolean isOptimize(XContext context, String detailId, Integer flag, DateTime now) {
switch (flag) {
case 0:
SpaceOptimizeLongPeriodMapper periodMapper = context.getBean(SpaceOptimizeLongPeriodMapper.class);
SpaceOptimizeLongPeriodEnt longPeriodEnt = periodMapper.selectOne(new QueryWrapper<SpaceOptimizeLongPeriodEnt>()
.select("institution_id",
"MAX( optimize_deadline ) AS optimize_deadline")
.lambda()
.eq(BaseModel::getIsDeleted, BusinessConstant.ONE)
.eq(SpaceOptimizeLongPeriodEnt::getInstitutionId, detailId)
);
if (ObjectUtil.isNotNull(longPeriodEnt)) {
Date optimizeDead = longPeriodEnt.getOptimizeDeadline();
if (DateUtil.compare(now, optimizeDead) == -1) {
return true;
}
}
return false;
case 1:
SpaceOptimizeMidPeriodMapper midPeriodMapper = context.getBean(SpaceOptimizeMidPeriodMapper.class);
SpaceOptimizeMidPeriodEnt midPeriodEnt = midPeriodMapper.selectOne(new QueryWrapper<SpaceOptimizeMidPeriodEnt>()
.select("institution_id",
"MAX( optimize_deadline ) AS optimize_deadline")
.lambda()
.eq(BaseModel::getIsDeleted, BusinessConstant.ONE)
.eq(SpaceOptimizeMidPeriodEnt::getInstitutionId, detailId)
);
if (ObjectUtil.isNotNull(midPeriodEnt)) {
Date optimizeDead = midPeriodEnt.getOptimizeDeadline();
if (DateUtil.compare(now, optimizeDead) == -1) {
return true;
}
}
return false;
case 2:
SpaceOptimizeUltraPeriodMapper ultraPeriodMapper = context.getBean(SpaceOptimizeUltraPeriodMapper.class);
SpaceOptimizeUltraPeriodEnt ultraPeriodEnt = ultraPeriodMapper.selectOne(new QueryWrapper<SpaceOptimizeUltraPeriodEnt>()
.select("institution_id",
"MAX( optimize_deadline ) AS optimize_deadline")
.lambda()
.eq(BaseModel::getIsDeleted, BusinessConstant.ONE)
.eq(SpaceOptimizeUltraPeriodEnt::getInstitutionId, detailId)
);
if (ObjectUtil.isNotNull(ultraPeriodEnt)) {
Date optimizeDead = ultraPeriodEnt.getOptimizeDeadline();
if (DateUtil.compare(now, optimizeDead) == -1) {
return true;
}
}
default:
return false;
}
}
}
\ No newline at end of file
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.ISpaceOptimizeLongCloudService;
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.SpaceOptimizeLongPeriodMapper;
import pps.core.space.entity.SpaceOptimizeDurationDTO;
import pps.core.space.entity.SpaceOptimizePeriodDTO;
import pps.core.space.entity.SpaceOptimizeWellheadDTO;
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;
/**
......@@ -41,69 +32,11 @@ public class SpaceOptimizeLongCloudServiceImpl extends SpaceOptimizeBaseService
*/
@Override
public XServiceResult optimizeLongJob(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 monthNum = date.month() + 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) {
//查最新间开历史
SpaceOptimizeLongPeriodMapper periodMapper = context.getBean(SpaceOptimizeLongPeriodMapper.class);
SpaceOptimizeLongPeriodEnt longPeriodEnt = periodMapper.selectOne(new QueryWrapper<SpaceOptimizeLongPeriodEnt>()
.select("institution_id",
"MAX( optimize_deadline ) AS optimize_deadline")
.lambda()
.eq(BaseModel::getIsDeleted, BusinessConstant.ONE)
.eq(SpaceOptimizeLongPeriodEnt::getInstitutionId, detail.getId())
);
if (ObjectUtil.isNotNull(longPeriodEnt)) {
Date optimizeDead = longPeriodEnt.getOptimizeDeadline();
if (DateUtil.compare(date, optimizeDead) == -1) {
continue;
}
}
Date institutionEndDate = detail.getInstitutionEndDate();
DateTime optimizeDeadline = DateUtil.offsetDay(date, 10);
if (optimizeDeadline.compareTo(institutionEndDate) > 0) {
optimizeDeadline = DateUtil.endOfDay(institutionEndDate);
}
//创建记录
String periodId = super.createOptimizePeriod(periodDTOList, detail.getId(), detail.getLineId(), BaseUtils.getExecutionCycleForCalibration(date, optimizeDeadline), optimizeDeadline);
DynamicQueryPlantPredictedPowerInput input = DynamicQueryPlantPredictedPowerInput.builder()
.plantIds(relation.getPlantIdsByLineIdMap().get(detail.getLineId()))
.startTime(date.toString(BusinessConstant.DATE_FORMAT_DAY))
.endTime(optimizeDeadline.toString(BusinessConstant.DATE_FORMAT_DAY))
.dateType(BusinessConstant.ZERO)
.build();
switch (detail.getGridTypeKey()) {
//并网型优化
case "1":
super.gridConnectedOptimization(context, wellheadDTOList, durationDTOList, unOptimizeDurationList,
relation.getWellheadsByInstitutionIdIdMap().get(detail.getId()), detail, monthNum, periodId,
input);
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, -10).toString(BusinessConstant.DATE_FORMAT_DAY))
.endTime(DateUtil.offsetDay(optimizeDeadline, -10).toString(BusinessConstant.DATE_FORMAT_DAY))
.build(), input
);
break;
default:
//电网类型不存在
}
}
super.doOptimize(context, periodDTOList, wellheadDTOList, durationDTOList, unOptimizeDurationList, 0, 0, 10);
//开启事务
return XTransactionHelper.begin(context, () -> {
int size;
......
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.ISpaceOptimizeMidCloudService;
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.SpaceOptimizeMidPeriodMapper;
import pps.core.space.entity.SpaceOptimizeDurationDTO;
import pps.core.space.entity.SpaceOptimizePeriodDTO;
import pps.core.space.entity.SpaceOptimizeWellheadDTO;
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;
/**
......@@ -41,70 +32,11 @@ public class SpaceOptimizeMidCloudServiceImpl extends SpaceOptimizeBaseService i
*/
@Override
public XServiceResult optimizeMidJob(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 monthNum = date.month() + 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) {
//查最新间开历史
SpaceOptimizeMidPeriodMapper periodMapper = context.getBean(SpaceOptimizeMidPeriodMapper.class);
SpaceOptimizeMidPeriodEnt midPeriodEnt = periodMapper.selectOne(new QueryWrapper<SpaceOptimizeMidPeriodEnt>()
.select("institution_id",
"MAX( optimize_deadline ) AS optimize_deadline")
.lambda()
.eq(BaseModel::getIsDeleted, BusinessConstant.ONE)
.eq(SpaceOptimizeMidPeriodEnt::getInstitutionId, detail.getId())
);
if (ObjectUtil.isNotNull(midPeriodEnt)) {
Date optimizeDead = midPeriodEnt.getOptimizeDeadline();
if (DateUtil.compare(date, optimizeDead) == -1) {
continue;
}
}
Date institutionEndDate = detail.getInstitutionEndDate();
DateTime optimizeDeadline = DateUtil.offsetDay(date, 3);
if (optimizeDeadline.compareTo(institutionEndDate) > 0) {
optimizeDeadline = DateUtil.endOfDay(institutionEndDate);
}
//创建记录
String periodId = super.createOptimizePeriod(periodDTOList, detail.getId(), detail.getLineId(), BaseUtils.getExecutionCycleForCalibration(date, optimizeDeadline), optimizeDeadline);
DynamicQueryPlantPredictedPowerInput powerInput = DynamicQueryPlantPredictedPowerInput.builder()
.plantIds(relation.getPlantIdsByLineIdMap().get(detail.getLineId()))
.startTime(date.toString(BusinessConstant.DATE_FORMAT_DAY))
.endTime(optimizeDeadline.toString(BusinessConstant.DATE_FORMAT_DAY))
.dateType(BusinessConstant.ONE)
.build();
switch (detail.getGridTypeKey()) {
//并网型优化
case "1":
super.gridConnectedOptimization(context, wellheadDTOList, durationDTOList, unOptimizeDurationList,
relation.getWellheadsByInstitutionIdIdMap().get(detail.getId()), detail, monthNum, periodId,
powerInput
);
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, -3).toString(BusinessConstant.DATE_FORMAT_DAY))
.endTime(DateUtil.offsetDay(optimizeDeadline, -3).toString(BusinessConstant.DATE_FORMAT_DAY))
.build(), powerInput
);
break;
default:
//电网类型不存在
}
}
super.doOptimize(context, periodDTOList, wellheadDTOList, durationDTOList, unOptimizeDurationList, 1, 1, 3);
//开启事务
return XTransactionHelper.begin(context, () -> {
int size;
......
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.entity.SpaceOptimizeDurationDTO;
import pps.core.space.entity.SpaceOptimizePeriodDTO;
import pps.core.space.entity.SpaceOptimizeWellheadDTO;
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;
/**
......@@ -41,74 +32,11 @@ public class SpaceOptimizeUltraCloudServiceImpl extends SpaceOptimizeBaseService
*/
@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.ZERO)
.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.ZERO)
.build());
break;
default:
//电网类型不存在
}
}
super.doOptimize(context, periodDTOList, wellheadDTOList, durationDTOList, unOptimizeDurationList, 0, 2, 15);
//开启事务
return XTransactionHelper.begin(context, () -> {
int size;
......
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