Commit 73c506f7 authored by tianchao's avatar tianchao
parents 3fb88d48 9b72d85e
......@@ -18,6 +18,11 @@ public class BusinessConstant {
*/
public static final Integer ZERO = 0;
/**
* 10
*/
public static final Integer TEN = 10;
/**
* 初始父级组织机构ID
*/
......@@ -59,4 +64,9 @@ public class BusinessConstant {
* 校准策略
*/
public static final String CALIBRATION_STRATEGY = "calibration_strategy";
/**
* 发电类型
*/
public static final String GENERATION_TYPE = "generation_type";
}
......@@ -5,6 +5,8 @@ import pps.cloud.base.service.data.base_power_line.DynamicQueryBasePowerLineInpu
import pps.cloud.base.service.data.base_power_line.DynamicQueryBasePowerLineOutput;
import pps.cloud.base.service.data.base_power_line.GetBasePowerLineInput;
import pps.cloud.base.service.data.base_power_line.GetBasePowerLineViewOutput;
import pps.cloud.base.service.data.base_power_line_plant.DynamicQueryBasePowerLinePlantInput;
import pps.cloud.base.service.data.base_power_line_plant.DynamicQueryBasePowerLinePlantOutput;
import pps.cloud.base.service.data.base_power_line_wellhead.DynamicQueryBasePowerLineWellheadInput;
import pps.cloud.base.service.data.base_power_line_wellhead.DynamicQueryBasePowerLineWellheadViewOutput;
import xstartup.annotation.XService;
......@@ -26,35 +28,46 @@ import xstartup.feature.api.annotation.XApiPost;
public interface IBasePowerLineCloudService {
/**
* 输电线路配置模块--通过ID查询线路基本信息
* 输电线路配置Cloud模块--通过ID查询线路基本信息
*
* @param context 上下文
* @param input 输入
* @return {@link XSingleResult}<{@link GetBasePowerLineViewOutput}>
*/
@XText("输电线路配置模块--通过ID查询线路基本信息")
@XText("输电线路配置Cloud模块--通过ID查询线路基本信息")
@XApiGet
XSingleResult<GetBasePowerLineViewOutput> getBasePowerLineById(XContext context, GetBasePowerLineInput input);
/**
* 输电线路配置模块--条件查询线路基本信息列表
* 输电线路配置Cloud模块--条件查询线路基本信息列表
*
* @param context 上下文
* @param input 输入
* @return {@link XListResult}<{@link DynamicQueryBasePowerLineOutput}>
*/
@XText("输电线路配置模块--条件查询线路基本信息列表")
@XText("输电线路配置Cloud模块--条件查询线路基本信息列表")
@XApiPost
XListResult<DynamicQueryBasePowerLineOutput> getBasePowerLineList(XContext context, DynamicQueryBasePowerLineInput input);
/**
* 输电线路配置模块--条件查询线路关联井口信息
* 输电线路配置Cloud模块--条件查询线路关联井口信息
*
* @param context 上下文
* @param input 输入
* @return {@link XListResult}<{@link DynamicQueryBasePowerLineWellheadViewOutput}>
*/
@XText("输电线路配置模块--条件查询线路关联井口信息")
@XText("输电线路配置Cloud模块--条件查询线路关联井口信息")
@XApiPost
XListResult<DynamicQueryBasePowerLineWellheadViewOutput> getPowerLineWellheadList(XContext context, DynamicQueryBasePowerLineWellheadInput input);
/**
* 输电线路配置Cloud模块--条件查询线路关联电站信息
*
* @param context 上下文
* @param input 输入
* @return {@link XListResult}<{@link DynamicQueryBasePowerLinePlantOutput}>
*/
@XText("输电线路配置Cloud模块--条件查询线路关联电站信息")
@XApiPost
XListResult<DynamicQueryBasePowerLinePlantOutput> queryPowerLinePlantListByParam(XContext context, DynamicQueryBasePowerLinePlantInput input);
}
......@@ -28,6 +28,6 @@ public interface IBasePriceStrategyCloudService {
*/
@XApiAnonymous
@XApiGet
@XText("市电峰谷策略--策略配置详情列表")
@XText("市电峰谷配置Cloud模块--策略配置详情列表")
XListResult<GetBasePriceStrategyDetailOutput> queryStrategyDetailList(XContext context, GetBasePriceStrategyDetailInput input);
}
package pps.cloud.base.service;
import pps.cloud.base.service.data.base_wellhead.DynamicQueryBaseWellheadInput;
import pps.cloud.base.service.data.base_wellhead.DynamicQueryBaseWellheadOutput;
import xstartup.annotation.XService;
import xstartup.annotation.XText;
import xstartup.base.XContext;
import xstartup.data.XListResult;
import xstartup.feature.api.annotation.XApiPost;
/**
* 井口配置Cloud模块
*
* @author ZWT
* @date 2023/09/13 17:26
*/
@XService
@XText("井口配置Cloud模块")
public interface IBaseWellheadCloudService {
/**
* 井口配置Cloud模块--条件查询井口基本信息列表
*
* @param context 上下文
* @param input 输入
* @return {@link XListResult}<{@link DynamicQueryBaseWellheadOutput}>
*/
@XText("井口配置Cloud模块--条件查询井口基本信息列表")
@XApiPost
XListResult<DynamicQueryBaseWellheadOutput> queryBaseWellheadListByParam(XContext context, DynamicQueryBaseWellheadInput input);
}
\ No newline at end of file
package pps.cloud.base.service.data.base_power_line_plant;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import xstartup.annotation.XText;
import java.util.Collection;
/**
* 输电线路光伏配置
*
* @author ZWT
* @date 2023/08/25
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DynamicQueryBasePowerLinePlantInput {
@XText("光伏电站ID")
private String plantId;
@XText("线路ID集合")
private Collection<String> lineIds;
}
package pps.cloud.base.service.data.base_power_line_plant;
import lombok.Data;
import xstartup.annotation.XText;
/**
* 输电线路光伏配置
*
* @author ZWT
* @date 2023/08/25
*/
@Data
public class DynamicQueryBasePowerLinePlantOutput {
@XText("光伏电站ID")
private String plantId;
@XText("线路ID")
private String lineId;
}
package pps.cloud.base.service.data.base_wellhead;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import xstartup.annotation.XText;
import java.util.List;
/**
* 井口配置Cloud模块
*
* @author ZWT
* @date 2023/09/13
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DynamicQueryBaseWellheadInput {
@XText("井口ID")
private String wellheadId;
@XText("井口ID集合")
private List<String> wellheadIds;
}
package pps.cloud.base.service.data.base_wellhead;
import lombok.Data;
import xstartup.annotation.XText;
import java.math.BigDecimal;
/**
* 井口配置Cloud模块
*
* @author ZWT
* @date 2023/09/13
*/
@Data
public class DynamicQueryBaseWellheadOutput {
@XText("ID")
private String id;
@XText("组织机构ID")
private String ouId;
@XText("井号")
private String wellNumber;
@XText("运行类型key(字典获取)")
private String runTypeKey;
@XText("运行功率(KW)")
private BigDecimal serviceRating;
}
package pps.core.base.enums;
import xstartup.error.XError;
/**
* 业务错误
*
* @author ZWT
* @date 2023/09/12
*/
public enum BusinessError implements XError {
DieselReference(2000, "当前柴发设备已被引用"),
StorageReference(2001, "当前储能设备已被引用"),
PhotovoltaicReference(2002, "当前光伏电站已被引用"),
LineReference(2003, "当前线路已被引用"),
StrategyReference(2004, "当前策略已被引用"),
WellheadReferenceLine(2005, "当前井口已被线路引用"),
WellheadReferenceSpace(2006, "当前井口已被间开引用"),
;
private int code;
private String text;
BusinessError(int code, String text) {
this.code = code;
this.text = text;
}
@Override
public int getCode() {
return 0;
}
@Override
public String getText() {
return null;
}
}
......@@ -6,9 +6,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import pps.core.base.entity.BaseDieselGeneratorEnt;
import pps.core.base.entity.BasePowerLineDieselEnt;
import pps.core.base.enums.BusinessError;
import pps.core.base.mapper.BaseDieselGeneratorMapper;
import pps.core.base.mapper.BasePowerLineDieselMapper;
import pps.core.base.service.data.base_diesel_generator.*;
import pps.core.base.utils.ServiceUtil;
import pps.core.common.constant.BusinessConstant;
import pps.core.common.entity.BaseModel;
import pps.core.common.session.PpsUserSession;
......@@ -25,6 +27,7 @@ import xstartup.feature.api.annotation.XApiAnonymous;
import xstartup.feature.api.annotation.XApiGet;
import xstartup.feature.api.annotation.XApiPost;
import xstartup.feature.mybatis.helper.XMapperHelper;
import xstartup.helper.XTransactionHelper;
import java.util.List;
import java.util.Objects;
......@@ -36,39 +39,38 @@ import java.util.Objects;
* @date 2023/09/08
*/
@XService
public class BaseDieselGeneratorService extends BaseService {
public class BaseDieselGeneratorService {
@XText("新增")
@XApiAnonymous
@XApiPost
public XServiceResult createBaseDieselGenerator(XContext context, CreateBaseDieselGeneratorInput input) {
BaseDieselGeneratorMapper mapper = context.getBean(BaseDieselGeneratorMapper.class);
BaseDieselGeneratorEnt entity = new BaseDieselGeneratorEnt();
XCopyUtils.copyObject(input, entity);
PpsUserSession session = context.getSession(PpsUserSession.class);
BaseUtils.setBaseModelDefault(entity, session);
mapper.insert(entity);
return XServiceResult.OK;
return XTransactionHelper.begin(context, () -> {
BaseDieselGeneratorMapper mapper = context.getBean(BaseDieselGeneratorMapper.class);
BaseDieselGeneratorEnt entity = XCopyUtils.copyNewObject(input, BaseDieselGeneratorEnt.class);
PpsUserSession session = context.getSession(PpsUserSession.class);
BaseUtils.setBaseModelDefault(entity, session);
mapper.insert(entity);
return XServiceResult.OK;
});
}
@XText("更新")
@XApiAnonymous
@XApiPost
public XServiceResult updateBaseDieselGenerator(XContext context, UpdateBaseDieselGeneratorInput input) {
BaseDieselGeneratorMapper mapper = context.getBean(BaseDieselGeneratorMapper.class);
QueryWrapper<BaseDieselGeneratorEnt> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.eq(BaseDieselGeneratorEnt::getId, input.getId())
.eq(BaseDieselGeneratorEnt::getIsDeleted, BusinessConstant.ONE);
BaseDieselGeneratorEnt entity = mapper.selectOne(queryWrapper);
if (entity == null) {
return XServiceResult.error(context, XError.NotFound);
}
XCopyUtils.copyObject(input, entity);
PpsUserSession session = context.getSession(PpsUserSession.class);
BaseUtils.setBaseModelDefault(entity, session);
mapper.updateById(entity);
return XServiceResult.OK;
return XTransactionHelper.begin(context, () -> {
BaseDieselGeneratorMapper mapper = context.getBean(BaseDieselGeneratorMapper.class);
BaseDieselGeneratorEnt entity = this.selectOneByDieselId(input.getId(), mapper);
if (Objects.isNull(entity)) {
return XServiceResult.error(context, XError.NotFound);
}
XCopyUtils.copyObject(input, entity);
PpsUserSession session = context.getSession(PpsUserSession.class);
BaseUtils.setBaseModelDefault(entity, session);
mapper.updateById(entity);
return XServiceResult.OK;
});
}
@XText("删除")
......@@ -77,24 +79,22 @@ public class BaseDieselGeneratorService extends BaseService {
public XServiceResult deleteBaseDieselGenerator(XContext context, DeleteBaseDieselGeneratorInput input) {
String dieselId = input.getId();
if (this.checkDieselIsReference(context, dieselId)) {
return XServiceResult.error(992, "当前柴发设备已被引用");
}
BaseDieselGeneratorMapper mapper = context.getBean(BaseDieselGeneratorMapper.class);
QueryWrapper<BaseDieselGeneratorEnt> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.eq(BaseDieselGeneratorEnt::getId, input.getId())
.eq(BaseDieselGeneratorEnt::getIsDeleted, BusinessConstant.ONE);
BaseDieselGeneratorEnt entity = mapper.selectOne(queryWrapper);
if (Objects.isNull(entity)) {
return XServiceResult.error(context, XError.NotFound);
return XServiceResult.error(context, BusinessError.DieselReference);
}
entity = new BaseDieselGeneratorEnt();
entity.setId(input.getId());
entity.setIsDeleted(BusinessConstant.ZERO);
PpsUserSession session = context.getSession(PpsUserSession.class);
BaseUtils.setBaseModelDefault(entity, session);
mapper.updateById(entity);
return XServiceResult.OK;
return XTransactionHelper.begin(context, () -> {
BaseDieselGeneratorMapper mapper = context.getBean(BaseDieselGeneratorMapper.class);
BaseDieselGeneratorEnt entity = this.selectOneByDieselId(dieselId, mapper);
if (Objects.isNull(entity)) {
return XServiceResult.error(context, XError.NotFound);
}
entity = new BaseDieselGeneratorEnt();
entity.setId(dieselId);
entity.setIsDeleted(BusinessConstant.ZERO);
PpsUserSession session = context.getSession(PpsUserSession.class);
BaseUtils.setBaseModelDefault(entity, session);
mapper.updateById(entity);
return XServiceResult.OK;
});
}
@XText("根据id获取详情")
......@@ -102,16 +102,11 @@ public class BaseDieselGeneratorService extends BaseService {
@XApiGet
public XSingleResult<GetBaseDieselGeneratorOutput> getBaseDieselGenerator(XContext context, GetBaseDieselGeneratorInput input) {
BaseDieselGeneratorMapper mapper = context.getBean(BaseDieselGeneratorMapper.class);
QueryWrapper<BaseDieselGeneratorEnt> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.eq(BaseDieselGeneratorEnt::getId, input.getId())
.eq(BaseDieselGeneratorEnt::getIsDeleted, BusinessConstant.ONE);
BaseDieselGeneratorEnt entity = mapper.selectOne(queryWrapper);
if (entity == null) {
BaseDieselGeneratorEnt entity = this.selectOneByDieselId(input.getId(), mapper);
if (Objects.isNull(entity)) {
return XSingleResult.error(context, XError.NotFound);
}
GetBaseDieselGeneratorOutput output = new GetBaseDieselGeneratorOutput();
XCopyUtils.copyObject(entity, output);
GetBaseDieselGeneratorOutput output = XCopyUtils.copyNewObject(entity, GetBaseDieselGeneratorOutput.class);
return XSingleResult.success(output);
}
......@@ -124,7 +119,7 @@ public class BaseDieselGeneratorService extends BaseService {
String deviceName = input.getDeviceName();
String excludeIdFlag = input.getExcludeIdFlag();
BaseDieselGeneratorMapper mapper = context.getBean(BaseDieselGeneratorMapper.class);
List<String> allListByOuId = this.getAllListByOuId(context, input.getOuId());
List<String> allListByOuId = ServiceUtil.getOrgIdsByPath(context, ouId);
QueryWrapper<BaseDieselGeneratorEnt> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.notExists("1".equals(excludeIdFlag), "SELECT 1 FROM base_power_line_diesel w WHERE w.ou_id = {0} AND base_diesel_generator.id = w.diesel_id AND w.is_deleted = 1", input.getOuId())
......@@ -153,4 +148,17 @@ public class BaseDieselGeneratorService extends BaseService {
);
return count > 0;
}
}
/**
* 通过设备ID查询设备信息
*
* @param dieselId 设备id
* @param mapper 映射器
* @return {@link BaseDieselGeneratorEnt}
*/
private BaseDieselGeneratorEnt selectOneByDieselId(String dieselId, BaseDieselGeneratorMapper mapper) {
return mapper.selectOne(new LambdaQueryWrapper<BaseDieselGeneratorEnt>()
.eq(BaseModel::getId, dieselId)
);
}
}
\ No newline at end of file
......@@ -6,9 +6,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import pps.core.base.entity.BaseEnergyStorageDeviceEnt;
import pps.core.base.entity.BasePowerLineStorageEnt;
import pps.core.base.enums.BusinessError;
import pps.core.base.mapper.BaseEnergyStorageDeviceMapper;
import pps.core.base.mapper.BasePowerLineStorageMapper;
import pps.core.base.service.data.base_energy_storage_device.*;
import pps.core.base.utils.ServiceUtil;
import pps.core.common.constant.BusinessConstant;
import pps.core.common.entity.BaseModel;
import pps.core.common.session.PpsUserSession;
......@@ -25,6 +27,7 @@ import xstartup.feature.api.annotation.XApiAnonymous;
import xstartup.feature.api.annotation.XApiGet;
import xstartup.feature.api.annotation.XApiPost;
import xstartup.feature.mybatis.helper.XMapperHelper;
import xstartup.helper.XTransactionHelper;
import java.util.List;
import java.util.Objects;
......@@ -36,39 +39,38 @@ import java.util.Objects;
* @date 2023/09/08
*/
@XService
public class BaseEnergyStorageDeviceService extends BaseService {
public class BaseEnergyStorageDeviceService {
@XText("新增")
@XApiAnonymous
@XApiPost
public XServiceResult createBaseEnergyStorageDevice(XContext context, CreateBaseEnergyStorageDeviceInput input) {
BaseEnergyStorageDeviceMapper mapper = context.getBean(BaseEnergyStorageDeviceMapper.class);
BaseEnergyStorageDeviceEnt entity = new BaseEnergyStorageDeviceEnt();
XCopyUtils.copyObject(input, entity);
PpsUserSession session = context.getSession(PpsUserSession.class);
BaseUtils.setBaseModelDefault(entity, session);
mapper.insert(entity);
return XServiceResult.OK;
return XTransactionHelper.begin(context, () -> {
BaseEnergyStorageDeviceMapper mapper = context.getBean(BaseEnergyStorageDeviceMapper.class);
BaseEnergyStorageDeviceEnt entity = XCopyUtils.copyNewObject(input, BaseEnergyStorageDeviceEnt.class);
PpsUserSession session = context.getSession(PpsUserSession.class);
BaseUtils.setBaseModelDefault(entity, session);
mapper.insert(entity);
return XServiceResult.OK;
});
}
@XText("更新")
@XApiAnonymous
@XApiPost
public XServiceResult updateBaseEnergyStorageDevice(XContext context, UpdateBaseEnergyStorageDeviceInput input) {
BaseEnergyStorageDeviceMapper mapper = context.getBean(BaseEnergyStorageDeviceMapper.class);
QueryWrapper<BaseEnergyStorageDeviceEnt> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.eq(BaseEnergyStorageDeviceEnt::getId, input.getId())
.eq(BaseEnergyStorageDeviceEnt::getIsDeleted, BusinessConstant.ONE);
BaseEnergyStorageDeviceEnt entity = mapper.selectOne(queryWrapper);
if (entity == null) {
return XServiceResult.error(context, XError.NotFound);
}
XCopyUtils.copyObject(input, entity);
PpsUserSession session = context.getSession(PpsUserSession.class);
BaseUtils.setBaseModelDefault(entity, session);
mapper.updateById(entity);
return XServiceResult.OK;
return XTransactionHelper.begin(context, () -> {
BaseEnergyStorageDeviceMapper mapper = context.getBean(BaseEnergyStorageDeviceMapper.class);
BaseEnergyStorageDeviceEnt entity = this.selectOneByDeviceId(input.getId(), mapper);
if (Objects.isNull(entity)) {
return XServiceResult.error(context, XError.NotFound);
}
XCopyUtils.copyObject(input, entity);
PpsUserSession session = context.getSession(PpsUserSession.class);
BaseUtils.setBaseModelDefault(entity, session);
mapper.updateById(entity);
return XServiceResult.OK;
});
}
@XText("删除")
......@@ -77,24 +79,22 @@ public class BaseEnergyStorageDeviceService extends BaseService {
public XServiceResult deleteBaseEnergyStorageDevice(XContext context, DeleteBaseEnergyStorageDeviceInput input) {
String storageId = input.getId();
if (this.checkStorageIsReference(context, storageId)) {
return XServiceResult.error(992, "当前储能设备已被引用");
}
BaseEnergyStorageDeviceMapper mapper = context.getBean(BaseEnergyStorageDeviceMapper.class);
QueryWrapper<BaseEnergyStorageDeviceEnt> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.eq(BaseEnergyStorageDeviceEnt::getId, input.getId())
.eq(BaseEnergyStorageDeviceEnt::getIsDeleted, BusinessConstant.ONE);
BaseEnergyStorageDeviceEnt entity = mapper.selectOne(queryWrapper);
if (Objects.isNull(entity)) {
return XServiceResult.error(context, XError.NotFound);
return XServiceResult.error(context, BusinessError.StorageReference);
}
entity = new BaseEnergyStorageDeviceEnt();
entity.setId(input.getId());
entity.setIsDeleted(BusinessConstant.ZERO);
PpsUserSession session = context.getSession(PpsUserSession.class);
BaseUtils.setBaseModelDefault(entity, session);
mapper.updateById(entity);
return XServiceResult.OK;
return XTransactionHelper.begin(context, () -> {
BaseEnergyStorageDeviceMapper mapper = context.getBean(BaseEnergyStorageDeviceMapper.class);
BaseEnergyStorageDeviceEnt entity = this.selectOneByDeviceId(storageId, mapper);
if (Objects.isNull(entity)) {
return XServiceResult.error(context, XError.NotFound);
}
entity = new BaseEnergyStorageDeviceEnt();
entity.setId(storageId);
entity.setIsDeleted(BusinessConstant.ZERO);
PpsUserSession session = context.getSession(PpsUserSession.class);
BaseUtils.setBaseModelDefault(entity, session);
mapper.updateById(entity);
return XServiceResult.OK;
});
}
@XText("根据id获取详情")
......@@ -102,16 +102,11 @@ public class BaseEnergyStorageDeviceService extends BaseService {
@XApiGet
public XSingleResult<GetBaseEnergyStorageDeviceOutput> getBaseEnergyStorageDevice(XContext context, GetBaseEnergyStorageDeviceInput input) {
BaseEnergyStorageDeviceMapper mapper = context.getBean(BaseEnergyStorageDeviceMapper.class);
QueryWrapper<BaseEnergyStorageDeviceEnt> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.eq(BaseEnergyStorageDeviceEnt::getId, input.getId())
.eq(BaseEnergyStorageDeviceEnt::getIsDeleted, BusinessConstant.ONE);
BaseEnergyStorageDeviceEnt entity = mapper.selectOne(queryWrapper);
if (entity == null) {
BaseEnergyStorageDeviceEnt entity = this.selectOneByDeviceId(input.getId(), mapper);
if (Objects.isNull(entity)) {
return XSingleResult.error(context, XError.NotFound);
}
GetBaseEnergyStorageDeviceOutput output = new GetBaseEnergyStorageDeviceOutput();
XCopyUtils.copyObject(entity, output);
GetBaseEnergyStorageDeviceOutput output = XCopyUtils.copyNewObject(entity, GetBaseEnergyStorageDeviceOutput.class);
return XSingleResult.success(output);
}
......@@ -124,7 +119,7 @@ public class BaseEnergyStorageDeviceService extends BaseService {
String deviceName = input.getDeviceName();
String excludeIdFlag = input.getExcludeIdFlag();
BaseEnergyStorageDeviceMapper mapper = context.getBean(BaseEnergyStorageDeviceMapper.class);
List<String> allListByOuId = this.getAllListByOuId(context, input.getOuId());
List<String> allListByOuId = ServiceUtil.getOrgIdsByPath(context, ouId);
QueryWrapper<BaseEnergyStorageDeviceEnt> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.notExists("1".equals(excludeIdFlag), "SELECT 1 FROM base_power_line_storage w WHERE w.ou_id = {0} AND base_energy_storage_device.id = w.storage_id AND w.is_deleted = 1", input.getOuId())
......@@ -153,4 +148,17 @@ public class BaseEnergyStorageDeviceService extends BaseService {
);
return count > 0;
}
/**
* 通过设备ID查询设备信息
*
* @param deviceId 设备id
* @param mapper 映射器
* @return {@link BaseEnergyStorageDeviceEnt}
*/
private BaseEnergyStorageDeviceEnt selectOneByDeviceId(String deviceId, BaseEnergyStorageDeviceMapper mapper) {
return mapper.selectOne(new LambdaQueryWrapper<BaseEnergyStorageDeviceEnt>()
.eq(BaseModel::getId, deviceId)
);
}
}
\ No newline at end of file
......@@ -5,10 +5,13 @@ import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import pps.core.base.entity.BasePhotovoltaicPlantEnt;
import pps.core.base.entity.BasePowerLineEnt;
import pps.core.base.entity.BasePowerLinePlantEnt;
import pps.core.base.enums.BusinessError;
import pps.core.base.mapper.BasePhotovoltaicPlantMapper;
import pps.core.base.mapper.BasePowerLinePlantMapper;
import pps.core.base.service.data.base_photovoltaic_plant.*;
import pps.core.base.utils.ServiceUtil;
import pps.core.common.constant.BusinessConstant;
import pps.core.common.constant.UserConstant;
import pps.core.common.entity.BaseModel;
......@@ -31,6 +34,7 @@ import xstartup.feature.api.annotation.XApiAnonymous;
import xstartup.feature.api.annotation.XApiGet;
import xstartup.feature.api.annotation.XApiPost;
import xstartup.feature.mybatis.helper.XMapperHelper;
import xstartup.helper.XTransactionHelper;
import java.util.List;
import java.util.Objects;
......@@ -43,39 +47,38 @@ import java.util.Objects;
* @date 2023/09/08
*/
@XService
public class BasePhotovoltaicPlantService extends BaseService {
public class BasePhotovoltaicPlantService {
@XText("新增")
@XApiAnonymous
@XApiPost
public XServiceResult createBasePhotovoltaicPlant(XContext context, CreateBasePhotovoltaicPlantInput input) {
BasePhotovoltaicPlantMapper mapper = context.getBean(BasePhotovoltaicPlantMapper.class);
BasePhotovoltaicPlantEnt entity = new BasePhotovoltaicPlantEnt();
XCopyUtils.copyObject(input, entity);
PpsUserSession session = context.getSession(PpsUserSession.class);
BaseUtils.setBaseModelDefault(entity, session);
mapper.insert(entity);
return XServiceResult.OK;
return XTransactionHelper.begin(context, () -> {
BasePhotovoltaicPlantMapper mapper = context.getBean(BasePhotovoltaicPlantMapper.class);
BasePhotovoltaicPlantEnt entity = XCopyUtils.copyNewObject(input, BasePhotovoltaicPlantEnt.class);
PpsUserSession session = context.getSession(PpsUserSession.class);
BaseUtils.setBaseModelDefault(entity, session);
mapper.insert(entity);
return XServiceResult.OK;
});
}
@XText("更新")
@XApiAnonymous
@XApiPost
public XServiceResult updateBasePhotovoltaicPlant(XContext context, UpdateBasePhotovoltaicPlantInput input) {
BasePhotovoltaicPlantMapper mapper = context.getBean(BasePhotovoltaicPlantMapper.class);
QueryWrapper<BasePhotovoltaicPlantEnt> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.eq(BasePhotovoltaicPlantEnt::getId, input.getId())
.eq(BasePhotovoltaicPlantEnt::getIsDeleted, BusinessConstant.ONE);
BasePhotovoltaicPlantEnt entity = mapper.selectOne(queryWrapper);
if (entity == null) {
return XServiceResult.error(context, XError.NotFound);
}
XCopyUtils.copyObject(input, entity);
PpsUserSession session = context.getSession(PpsUserSession.class);
BaseUtils.setBaseModelDefault(entity, session);
mapper.updateById(entity);
return XServiceResult.OK;
return XTransactionHelper.begin(context, () -> {
BasePhotovoltaicPlantMapper mapper = context.getBean(BasePhotovoltaicPlantMapper.class);
BasePhotovoltaicPlantEnt entity = this.selectOneByPlantId(input.getId(), mapper);
if (Objects.isNull(entity)) {
return XServiceResult.error(context, XError.NotFound);
}
XCopyUtils.copyObject(input, entity);
PpsUserSession session = context.getSession(PpsUserSession.class);
BaseUtils.setBaseModelDefault(entity, session);
mapper.updateById(entity);
return XServiceResult.OK;
});
}
@XText("删除")
......@@ -84,24 +87,22 @@ public class BasePhotovoltaicPlantService extends BaseService {
public XServiceResult deleteBasePhotovoltaicPlant(XContext context, DeleteBasePhotovoltaicPlantInput input) {
String plantId = input.getId();
if (this.checkPhotovoltaicIsReference(context, plantId)) {
return XServiceResult.error(992, "当前光伏电站已被引用");
return XServiceResult.error(context, BusinessError.PhotovoltaicReference);
}
BasePhotovoltaicPlantMapper mapper = context.getBean(BasePhotovoltaicPlantMapper.class);
QueryWrapper<BasePhotovoltaicPlantEnt> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.eq(BasePhotovoltaicPlantEnt::getId, plantId)
.eq(BasePhotovoltaicPlantEnt::getIsDeleted, BusinessConstant.ONE);
BasePhotovoltaicPlantEnt entity = mapper.selectOne(queryWrapper);
if (Objects.isNull(entity)) {
return XServiceResult.error(context, XError.NotFound);
}
entity = new BasePhotovoltaicPlantEnt();
entity.setId(input.getId());
entity.setIsDeleted(BusinessConstant.ZERO);
PpsUserSession session = context.getSession(PpsUserSession.class);
BaseUtils.setBaseModelDefault(entity, session);
mapper.updateById(entity);
return XServiceResult.OK;
return XTransactionHelper.begin(context, () -> {
BasePhotovoltaicPlantMapper mapper = context.getBean(BasePhotovoltaicPlantMapper.class);
BasePhotovoltaicPlantEnt entity = this.selectOneByPlantId(plantId, mapper);
if (Objects.isNull(entity)) {
return XServiceResult.error(context, XError.NotFound);
}
entity = new BasePhotovoltaicPlantEnt();
entity.setId(plantId);
entity.setIsDeleted(BusinessConstant.ZERO);
PpsUserSession session = context.getSession(PpsUserSession.class);
BaseUtils.setBaseModelDefault(entity, session);
mapper.updateById(entity);
return XServiceResult.OK;
});
}
@XText("根据id获取详情")
......@@ -109,23 +110,19 @@ public class BasePhotovoltaicPlantService extends BaseService {
@XApiGet
public XSingleResult<GetBasePhotovoltaicPlantOutput> getBasePhotovoltaicPlant(XContext context, GetBasePhotovoltaicPlantInput input) {
BasePhotovoltaicPlantMapper mapper = context.getBean(BasePhotovoltaicPlantMapper.class);
QueryWrapper<BasePhotovoltaicPlantEnt> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.eq(BasePhotovoltaicPlantEnt::getId, input.getId())
.eq(BasePhotovoltaicPlantEnt::getIsDeleted, BusinessConstant.ONE);
BasePhotovoltaicPlantEnt entity = mapper.selectOne(queryWrapper);
if (entity == null) {
BasePhotovoltaicPlantEnt entity = this.selectOneByPlantId(input.getId(), mapper);
if (Objects.isNull(entity)) {
return XSingleResult.error(context, XError.NotFound);
}
GetBasePhotovoltaicPlantOutput output = new GetBasePhotovoltaicPlantOutput();
XCopyUtils.copyObject(entity, output);
GetBasePhotovoltaicPlantOutput output = XCopyUtils.copyNewObject(entity, GetBasePhotovoltaicPlantOutput.class);
//根据组织机构的路径获取
SysOrganizationViewMapper organizationViewMapper = context.getBean(SysOrganizationViewMapper.class);
SysOrganizationView organizationView = new SysOrganizationView();
organizationView.setId(entity.getOuId());
organizationView = organizationViewMapper.selectOrgProvince(organizationView);
if (null != organizationView)
if (Objects.nonNull(organizationView)) {
output.setProvince(organizationView.getProvinceName());
}
return XSingleResult.success(output);
}
......@@ -137,7 +134,7 @@ public class BasePhotovoltaicPlantService extends BaseService {
String stationName = input.getStationName();
String ouId = input.getOuId();
String excludeIdFlag = input.getExcludeIdFlag();
List<String> allListByOuId = this.getAllListByOuId(context, ouId);
List<String> allListByOuId = ServiceUtil.getOrgIdsByPath(context, ouId);
QueryWrapper<BasePhotovoltaicPlantEnt> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.notExists("1".equals(excludeIdFlag), "SELECT 1 FROM base_power_line_plant w WHERE w.ou_id = {0} AND base_photovoltaic_plant.id = w.plant_id AND w.is_deleted = 1", input.getOuId())
......@@ -206,4 +203,16 @@ public class BasePhotovoltaicPlantService extends BaseService {
);
return count > 0;
}
/**
* 通过电站ID获取电站信息
*
* @param plantId 电站id
* @param mapper 映射器
* @return {@link BasePowerLineEnt}
*/
private BasePhotovoltaicPlantEnt selectOneByPlantId(String plantId, BasePhotovoltaicPlantMapper mapper) {
return mapper.selectOne(new LambdaQueryWrapper<BasePhotovoltaicPlantEnt>()
.eq(BaseModel::getId, plantId));
}
}
......@@ -8,12 +8,17 @@ import pps.cloud.base.service.data.base_power_line.DynamicQueryBasePowerLineInpu
import pps.cloud.base.service.data.base_power_line.DynamicQueryBasePowerLineOutput;
import pps.cloud.base.service.data.base_power_line.GetBasePowerLineInput;
import pps.cloud.base.service.data.base_power_line.GetBasePowerLineViewOutput;
import pps.cloud.base.service.data.base_power_line_plant.DynamicQueryBasePowerLinePlantInput;
import pps.cloud.base.service.data.base_power_line_plant.DynamicQueryBasePowerLinePlantOutput;
import pps.cloud.base.service.data.base_power_line_wellhead.DynamicQueryBasePowerLineWellheadInput;
import pps.cloud.base.service.data.base_power_line_wellhead.DynamicQueryBasePowerLineWellheadViewOutput;
import pps.core.base.entity.BasePowerLineEnt;
import pps.core.base.entity.BasePowerLinePlantEnt;
import pps.core.base.entity.BasePowerLineWellheadView;
import pps.core.base.mapper.BasePowerLineMapper;
import pps.core.base.mapper.BasePowerLinePlantMapper;
import pps.core.base.mapper.BasePowerLineWellheadViewMapper;
import pps.core.common.constant.BusinessConstant;
import pps.core.common.entity.BaseModel;
import xstartup.annotation.XService;
import xstartup.base.XContext;
......@@ -22,6 +27,7 @@ import xstartup.data.XListResult;
import xstartup.data.XSingleResult;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
......@@ -34,7 +40,7 @@ import java.util.List;
public class BasePowerLineCloudServiceImpl implements IBasePowerLineCloudService {
/**
* 输电线路配置模块--通过ID查询线路基本信息
* 输电线路配置Cloud模块--通过ID查询线路基本信息
*
* @param context 上下文
* @param input 输入
......@@ -51,7 +57,7 @@ public class BasePowerLineCloudServiceImpl implements IBasePowerLineCloudService
}
/**
* 输电线路配置模块--条件查询线路基本信息列表
* 输电线路配置Cloud模块--条件查询线路基本信息列表
*
* @param context 上下文
* @param input 输入
......@@ -85,7 +91,7 @@ public class BasePowerLineCloudServiceImpl implements IBasePowerLineCloudService
}
/**
* 输电线路配置模块--条件查询线路关联井口信息
* 输电线路配置Cloud模块--条件查询线路关联井口信息
*
* @param context 上下文
* @param input 输入
......@@ -108,4 +114,34 @@ public class BasePowerLineCloudServiceImpl implements IBasePowerLineCloudService
}
return XListResult.success(outputs);
}
/**
* 输电线路配置Cloud模块--条件查询线路关联电站信息
*
* @param context 上下文
* @param input 输入
* @return {@link XListResult}<{@link DynamicQueryBasePowerLinePlantOutput}>
*/
@Override
public XListResult<DynamicQueryBasePowerLinePlantOutput> queryPowerLinePlantListByParam(XContext context, DynamicQueryBasePowerLinePlantInput input) {
String plantId = input.getPlantId();
Collection<String> lineIds = input.getLineIds();
BasePowerLinePlantMapper mapper = context.getBean(BasePowerLinePlantMapper.class);
List<BasePowerLinePlantEnt> list = mapper.selectList(
new LambdaQueryWrapper<BasePowerLinePlantEnt>()
.eq(BaseModel::getIsDeleted, BusinessConstant.ONE)
.eq(StringUtils.isNotBlank(plantId), BasePowerLinePlantEnt::getPlantId, plantId)
.in(CollUtil.isNotEmpty(lineIds), BasePowerLinePlantEnt::getLineId, lineIds)
);
List<DynamicQueryBasePowerLinePlantOutput> outputs;
if (CollUtil.isEmpty(list)) {
outputs = new ArrayList<>(0);
} else {
outputs = XCopyUtils.copyNewList(
list,
DynamicQueryBasePowerLinePlantOutput.class
);
}
return XListResult.success(outputs);
}
}
\ No newline at end of file
......@@ -3,12 +3,18 @@ package pps.core.base.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.UUID;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.github.pagehelper.PageInfo;
import com.github.pagehelper.page.PageMethod;
import org.apache.commons.lang3.StringUtils;
import pps.cloud.space.service.ISpaceInstitutionDetailCloudService;
import pps.cloud.system.service.SysOrganizationCloudService;
import pps.cloud.system.service.data.GetOuListByOuIdsInput;
import pps.cloud.system.service.data.GetOuListTreeOutput;
import pps.cloud.system.service.data.GetSysOrganizationViewInput;
import pps.cloud.system.service.data.GetSysOrganizationViewOutput;
import pps.core.base.entity.*;
import pps.core.base.enums.BusinessError;
import pps.core.base.mapper.*;
import pps.core.base.service.data.base_power_line.*;
import pps.core.base.service.data.base_power_line_diesel.GetBasePowerLineDieselViewOutput;
......@@ -36,10 +42,7 @@ import xstartup.feature.api.annotation.XApiGet;
import xstartup.feature.api.annotation.XApiPost;
import xstartup.helper.XTransactionHelper;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
/**
......@@ -142,8 +145,8 @@ public class BasePowerLineService {
@XText("输电线路配置--删除")
public XServiceResult deleteBasePowerLine(XContext context, DeleteBasePowerLineInput input) {
String lineId = input.getId();
if (ServiceUtil.checkLineIsReference(context, lineId)) {
return XServiceResult.error(992, "当前线路已被引用");
if (this.checkLineIsReference(context, lineId)) {
return XServiceResult.error(context, BusinessError.LineReference);
}
return XTransactionHelper.begin(context, () -> {
BasePowerLineMapper mapper = context.getBean(BasePowerLineMapper.class);
......@@ -252,7 +255,7 @@ public class BasePowerLineService {
output.setLineTypeName(
lineTypeMap.get(output.getLineTypeKey())
);
output.setOuName(ServiceUtil.getSysOrgNameById(context, output.getOuId()));
output.setOuName(this.getSysOrgNameById(context, output.getOuId()));
return XSingleResult.success(output);
}
......@@ -275,7 +278,7 @@ public class BasePowerLineService {
PageInfo<BasePowerLineView> pageInfo = new PageInfo<>(list);
List<QueryBasePowerLineViewOutput> outputs = XCopyUtils.copyNewList(pageInfo.getList(), QueryBasePowerLineViewOutput.class);
if (CollUtil.isNotEmpty(outputs)) {
Map<String, String> ouMap = ServiceUtil.getOuMapByOuIds(
Map<String, String> ouMap = this.getOuMapByOuIds(
context,
outputs.stream()
.map(QueryBasePowerLineViewOutput::getOuId)
......@@ -367,6 +370,57 @@ public class BasePowerLineService {
/*-----------------------------------private-----------------------------------*/
/**
* 检查线路是否被间开制度引用
*
* @param context 上下文
* @param lineId 线路id
* @return boolean
*/
private boolean checkLineIsReference(XContext context, String lineId) {
ISpaceInstitutionDetailCloudService contextBean = context.getBean(ISpaceInstitutionDetailCloudService.class);
XSingleResult<Long> result = contextBean.getInstitutionLineCountByLineId(context, lineId);
result.throwIfFail();
return result.getResult() > 0;
}
/**
* 通过组织id获取系统组织名称
*
* @param context 上下文
* @param ouId 组织id
* @return {@link String}
*/
private String getSysOrgNameById(XContext context, String ouId) {
SysOrganizationCloudService orgCloudService = context.getBean(SysOrganizationCloudService.class);
GetSysOrganizationViewInput viewInput = new GetSysOrganizationViewInput();
viewInput.setId(ouId);
XSingleResult<GetSysOrganizationViewOutput> organization = orgCloudService.getSysOrganizationById(context, viewInput);
organization.throwIfFail();
return Optional.ofNullable(organization.getResult())
.map(GetSysOrganizationViewOutput::getOuName)
.orElse(null);
}
/**
* 通过组织机构ID集合获取详情列表
*
* @param context 上下文
* @param ouIds ou id
* @return {@link Map}<{@link String}, {@link String}>
*/
private Map<String, String> getOuMapByOuIds(XContext context, List<String> ouIds) {
GetOuListByOuIdsInput input = new GetOuListByOuIdsInput();
input.setOuIdList(ouIds);
SysOrganizationCloudService organizationCloudService = context.getBean(SysOrganizationCloudService.class);
XListResult<GetOuListTreeOutput> ouListByOuIds = organizationCloudService.getOuListByOuIds(context, input);
ouListByOuIds.throwIfFail();
return ouListByOuIds.getResult().stream()
.collect(Collectors.toMap(
GetOuListTreeOutput::getOuId, GetOuListTreeOutput::getOuName
));
}
/**
* 通过线路ID获取线路信息
*
......@@ -375,9 +429,8 @@ public class BasePowerLineService {
* @return {@link BasePowerLineEnt}
*/
private BasePowerLineEnt selectOneByLineId(String lineId, BasePowerLineMapper mapper) {
return mapper.selectOne(new QueryWrapper<BasePowerLineEnt>()
.lambda()
.eq(BasePowerLineEnt::getId, lineId));
return mapper.selectOne(new LambdaQueryWrapper<BasePowerLineEnt>()
.eq(BaseModel::getId, lineId));
}
/**
......
......@@ -25,7 +25,7 @@ import java.util.List;
public class BasePriceStrategyCloudServiceImpl implements IBasePriceStrategyCloudService {
/**
* 市电峰谷策略--策略配置详情列表
* 市电峰谷配置Cloud模块--策略配置详情列表
*
* @param context 上下文
* @param input 输入
......
......@@ -8,7 +8,11 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.github.pagehelper.PageInfo;
import com.github.pagehelper.page.PageMethod;
import org.apache.commons.lang3.StringUtils;
import pps.cloud.system.service.SystemAreaService;
import pps.cloud.system.service.data.GetSysAreaInput;
import pps.cloud.system.service.data.GetSysAreaOutput;
import pps.core.base.entity.*;
import pps.core.base.enums.BusinessError;
import pps.core.base.mapper.*;
import pps.core.base.service.data.base_price_strategy.*;
import pps.core.base.service.data.base_price_strategy_detail.GetBasePriceStrategyDetailOutput;
......@@ -140,7 +144,7 @@ public class BasePriceStrategyService {
public XServiceResult deleteBasePriceStrategy(XContext context, DeleteBasePriceStrategyInput input) {
String strategyId = input.getId();
if (this.checkStrategyIsReference(context, strategyId)) {
return XServiceResult.error(992, "当前策略已被引用");
return XServiceResult.error(context, BusinessError.StrategyReference);
}
return XTransactionHelper.begin(context, () -> {
BasePriceStrategyMapper mapper = context.getBean(BasePriceStrategyMapper.class);
......@@ -202,7 +206,9 @@ public class BasePriceStrategyService {
List<BasePriceStrategyMonthEnt> monthEntList = monthMapper.selectList(new QueryWrapper<BasePriceStrategyMonthEnt>()
.lambda()
.select(BasePriceStrategyMonthEnt::getId, BasePriceStrategyMonthEnt::getStrategyMonth)
.eq(BasePriceStrategyMonthEnt::getStrategyId, strategyId));
.eq(BasePriceStrategyMonthEnt::getStrategyId, strategyId)
.last(" ORDER BY strategy_month + 0 ")
);
if (CollUtil.isNotEmpty(monthEntList)) {
List<GetBasePriceStrategyMonthOutput> months = XCopyUtils.copyNewList(monthEntList, GetBasePriceStrategyMonthOutput.class);
//查明细
......@@ -257,7 +263,7 @@ public class BasePriceStrategyService {
PageInfo<BasePriceStrategyView> pageInfo = new PageInfo<>(list);
List<QueryBasePriceStrategyViewOutput> outputs = XCopyUtils.copyNewList(pageInfo.getList(), QueryBasePriceStrategyViewOutput.class);
if (CollUtil.isNotEmpty(outputs)) {
Map<Integer, String> areaMap = ServiceUtil.getSysAreaMap(context);
Map<Integer, String> areaMap = this.getSysAreaMap(context);
for (QueryBasePriceStrategyViewOutput output : outputs) {
output.setAreaName(
areaMap.get(output.getAreaCode())
......@@ -315,6 +321,20 @@ public class BasePriceStrategyService {
return count > 0;
}
/**
* 获取区域Map
*
* @param context 上下文
* @return {@link Map}<{@link Integer}, {@link String}>
*/
private Map<Integer, String> getSysAreaMap(XContext context) {
SystemAreaService systemAreaService = context.getBean(SystemAreaService.class);
XListResult<GetSysAreaOutput> sysAreaList = systemAreaService.getSysAreaList(context, new GetSysAreaInput());
sysAreaList.throwIfFail();
return sysAreaList.getResult().stream()
.collect(Collectors.toMap(GetSysAreaOutput::getId, GetSysAreaOutput::getName));
}
/**
* 保存策略明细
*
......
package pps.core.base.service;
import pps.cloud.system.service.SysOrganizationCloudService;
import pps.cloud.system.service.data.GetAllOuListByOuIdInput;
import pps.cloud.system.service.data.GetSysOrganizationViewOutput;
import xstartup.base.XContext;
import xstartup.data.XListResult;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Description
* @Author luoxiangyang
* @Date 2023/8/31 14:13
**/
public class BaseService {
/**
* 根据ouid获取所有子集的ouid
* @param context
* @param ouId
* @return
*/
public List<String> getAllListByOuId(XContext context,String ouId){
SysOrganizationCloudService organizationCloudService = context.getBean(SysOrganizationCloudService.class);
GetAllOuListByOuIdInput ouIdInput=new GetAllOuListByOuIdInput();
ouIdInput.setOuId(ouId);
XListResult<GetSysOrganizationViewOutput> allListByOuId = organizationCloudService.getAllListByOuId(context, ouIdInput);
allListByOuId.throwIfFail();
List<GetSysOrganizationViewOutput> listByOuIdResult = allListByOuId.getResult();
return listByOuIdResult.stream().map(GetSysOrganizationViewOutput::getId).collect(Collectors.toList());
}
}
package pps.core.base.service;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.commons.lang3.StringUtils;
import pps.cloud.base.service.IBaseWellheadCloudService;
import pps.cloud.base.service.data.base_wellhead.DynamicQueryBaseWellheadInput;
import pps.cloud.base.service.data.base_wellhead.DynamicQueryBaseWellheadOutput;
import pps.core.base.entity.BaseWellheadEnt;
import pps.core.base.mapper.BaseWellheadMapper;
import pps.core.common.constant.BusinessConstant;
import pps.core.common.entity.BaseModel;
import xstartup.annotation.XService;
import xstartup.base.XContext;
import xstartup.base.util.XCopyUtils;
import xstartup.data.XListResult;
import java.util.ArrayList;
import java.util.List;
/**
* 井口配置Cloud模块
*
* @author ZWT
* @date 2023/09/13 17:34
*/
@XService
public class BaseWellheadCloudServiceImpl implements IBaseWellheadCloudService {
/**
* 井口配置Cloud模块--条件查询井口基本信息列表
*
* @param context 上下文
* @param input 输入
* @return {@link XListResult}<{@link DynamicQueryBaseWellheadOutput}>
*/
@Override
public XListResult<DynamicQueryBaseWellheadOutput> queryBaseWellheadListByParam(XContext context, DynamicQueryBaseWellheadInput input) {
String wellheadId = input.getWellheadId();
List<String> wellheadIds = input.getWellheadIds();
BaseWellheadMapper mapper = context.getBean(BaseWellheadMapper.class);
List<BaseWellheadEnt> list = mapper.selectList(
new LambdaQueryWrapper<BaseWellheadEnt>()
.eq(BaseModel::getIsDeleted, BusinessConstant.ONE)
.eq(StringUtils.isNotBlank(wellheadId), BaseModel::getId, wellheadId)
.in(CollUtil.isNotEmpty(wellheadIds), BaseModel::getId, wellheadIds)
);
List<DynamicQueryBaseWellheadOutput> outputs;
if (CollUtil.isEmpty(list)) {
outputs = new ArrayList<>(0);
} else {
outputs = XCopyUtils.copyNewList(
list,
DynamicQueryBaseWellheadOutput.class
);
}
return XListResult.success(outputs);
}
}
......@@ -3,13 +3,16 @@ package pps.core.base.service;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.apache.commons.lang3.StringUtils;
import pps.cloud.space.service.ISpaceInstitutionDetailCloudService;
import pps.core.base.entity.BaseDieselGeneratorEnt;
import pps.core.base.entity.BasePowerLineWellheadEnt;
import pps.core.base.entity.BaseWellheadEnt;
import pps.core.base.enums.BusinessError;
import pps.core.base.mapper.BasePowerLineWellheadMapper;
import pps.core.base.mapper.BaseWellheadMapper;
import pps.core.base.service.data.base_wellhead.*;
import pps.core.base.utils.ServiceUtil;
import pps.core.common.constant.BusinessConstant;
import pps.core.common.entity.BaseModel;
import pps.core.common.session.PpsUserSession;
......@@ -39,7 +42,7 @@ import java.util.Objects;
* @date 2023/09/08
*/
@XService
public class BaseWellheadService extends BaseService {
public class BaseWellheadService {
@XText("新增")
@XApiAnonymous
......@@ -61,9 +64,7 @@ public class BaseWellheadService extends BaseService {
public XServiceResult updateBaseWellhead(XContext context, UpdateBaseWellheadInput input) {
return XTransactionHelper.begin(context, () -> {
BaseWellheadMapper mapper = context.getBean(BaseWellheadMapper.class);
BaseWellheadEnt entity = mapper.selectOne(new LambdaUpdateWrapper<BaseWellheadEnt>()
.eq(BaseModel::getId, input.getId())
);
BaseWellheadEnt entity = this.selectOneByWellheadId(input.getId(), mapper);
if (Objects.isNull(entity)) {
return XServiceResult.error(context, XError.NotFound);
}
......@@ -80,19 +81,20 @@ public class BaseWellheadService extends BaseService {
@XApiPost
public XServiceResult deleteBaseWellhead(XContext context, DeleteBaseWellheadInput input) {
String wellheadId = input.getId();
if (this.checkWellheadIsReference(context, wellheadId)) {
return XServiceResult.error(992, "当前井口已被引用");
if (this.checkWellheadIsLineReference(context, wellheadId)) {
return XServiceResult.error(context, BusinessError.WellheadReferenceLine);
}
if (this.checkWellheadIsSpaceReference(context, wellheadId)) {
return XServiceResult.error(context, BusinessError.WellheadReferenceSpace);
}
return XTransactionHelper.begin(context, () -> {
BaseWellheadMapper mapper = context.getBean(BaseWellheadMapper.class);
BaseWellheadEnt entity = mapper.selectOne(new LambdaUpdateWrapper<BaseWellheadEnt>()
.eq(BaseModel::getId, wellheadId)
);
BaseWellheadEnt entity = this.selectOneByWellheadId(wellheadId, mapper);
if (Objects.isNull(entity)) {
return XServiceResult.error(context, XError.NotFound);
}
entity = new BaseWellheadEnt();
entity.setId(input.getId());
entity.setId(wellheadId);
entity.setIsDeleted(BusinessConstant.ZERO);
PpsUserSession session = context.getSession(PpsUserSession.class);
BaseUtils.setBaseModelDefault(entity, session);
......@@ -106,16 +108,11 @@ public class BaseWellheadService extends BaseService {
@XApiGet
public XSingleResult<GetBaseWellheadOutput> getBaseWellhead(XContext context, GetBaseWellheadInput input) {
BaseWellheadMapper mapper = context.getBean(BaseWellheadMapper.class);
QueryWrapper<BaseWellheadEnt> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda()
.eq(BaseWellheadEnt::getId, input.getId())
.eq(BaseWellheadEnt::getIsDeleted, BusinessConstant.ONE);
BaseWellheadEnt entity = mapper.selectOne(queryWrapper);
if (entity == null) {
BaseWellheadEnt entity = this.selectOneByWellheadId(input.getId(), mapper);
if (Objects.isNull(entity)) {
return XSingleResult.error(context, XError.NotFound);
}
GetBaseWellheadOutput output = new GetBaseWellheadOutput();
XCopyUtils.copyObject(entity, output);
GetBaseWellheadOutput output = XCopyUtils.copyNewObject(entity, GetBaseWellheadOutput.class);
return XSingleResult.success(output);
}
......@@ -126,7 +123,7 @@ public class BaseWellheadService extends BaseService {
String excludeIdFlag = input.getExcludeIdFlag();
BaseWellheadMapper mapper = context.getBean(BaseWellheadMapper.class);
QueryWrapper<BaseWellheadEnt> queryWrapper = new QueryWrapper<>();
List<String> allListByOuId = this.getAllListByOuId(context, input.getOuId());
List<String> allListByOuId = ServiceUtil.getOrgIdsByPath(context, input.getOuId());
queryWrapper.lambda()
.notExists(StringUtils.equals("1", excludeIdFlag), "SELECT 1 FROM base_power_line_wellhead w WHERE w.ou_id = {0} AND base_wellhead.id = w.wellhead_id AND w.is_deleted = 1", input.getOuId())
.eq(BaseWellheadEnt::getIsDeleted, BusinessConstant.ONE)
......@@ -138,13 +135,13 @@ public class BaseWellheadService extends BaseService {
/*-----------------------------------private-----------------------------------*/
/**
* 检查井口是否被引用
* 检查井口是否被线路引用
*
* @param context 上下文
* @param wellheadId 井口ID
* @return boolean
*/
private boolean checkWellheadIsReference(XContext context, String wellheadId) {
private boolean checkWellheadIsLineReference(XContext context, String wellheadId) {
BasePowerLineWellheadMapper mapper = context.getBean(BasePowerLineWellheadMapper.class);
Long count = mapper.selectCount(new LambdaQueryWrapper<BasePowerLineWellheadEnt>()
.eq(BasePowerLineWellheadEnt::getWellheadId, wellheadId)
......@@ -152,4 +149,31 @@ public class BaseWellheadService extends BaseService {
);
return count > 0;
}
/**
* 检查井口是否被间开引用
*
* @param context 上下文
* @param wellheadId 井口id
* @return boolean
*/
private boolean checkWellheadIsSpaceReference(XContext context, String wellheadId) {
ISpaceInstitutionDetailCloudService contextBean = context.getBean(ISpaceInstitutionDetailCloudService.class);
XSingleResult<Long> result = contextBean.getInstitutionWellheadCountByWellheadId(context, wellheadId);
result.throwIfFail();
return result.getResult() > 0;
}
/**
* 通过井口ID查询井口信息
*
* @param wellheadId 井口id
* @param mapper 映射器
* @return {@link BaseDieselGeneratorEnt}
*/
private BaseWellheadEnt selectOneByWellheadId(String wellheadId, BaseWellheadMapper mapper) {
return mapper.selectOne(new LambdaQueryWrapper<BaseWellheadEnt>()
.eq(BaseModel::getId, wellheadId)
);
}
}
package pps.core.base.utils;
import com.baomidou.mybatisplus.core.enums.SqlMethod;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import pps.cloud.space.service.ISpaceInstitutionDetailCloudService;
import pps.cloud.system.service.SysOrganizationCloudService;
import pps.cloud.system.service.SystemAreaService;
import pps.cloud.system.service.SystemDictionaryService;
import pps.cloud.system.service.data.*;
import pps.cloud.system.service.data.GetAllOuListByOuIdInput;
import pps.cloud.system.service.data.GetSysOrganizationViewOutput;
import pps.cloud.system.service.data.QuerySysDictionaryViewInput;
import pps.cloud.system.service.data.QuerySysDictionaryViewOutput;
import xstartup.base.XContext;
import xstartup.data.XListResult;
import xstartup.data.XSingleResult;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
......@@ -46,38 +42,6 @@ public class ServiceUtil {
.collect(Collectors.toMap(QuerySysDictionaryViewOutput::getDicKey, QuerySysDictionaryViewOutput::getDicName));
}
/**
* 通过组织id获取系统组织名称
*
* @param context 上下文
* @param ouId 组织id
* @return {@link String}
*/
public static String getSysOrgNameById(XContext context, String ouId) {
SysOrganizationCloudService orgCloudService = context.getBean(SysOrganizationCloudService.class);
GetSysOrganizationViewInput viewInput = new GetSysOrganizationViewInput();
viewInput.setId(ouId);
XSingleResult<GetSysOrganizationViewOutput> organization = orgCloudService.getSysOrganizationById(context, viewInput);
organization.throwIfFail();
return Optional.ofNullable(organization.getResult())
.map(GetSysOrganizationViewOutput::getOuName)
.orElse(null);
}
/**
* 获取区域Map
*
* @param context 上下文
* @return {@link Map}<{@link Integer}, {@link String}>
*/
public static Map<Integer, String> getSysAreaMap(XContext context) {
SystemAreaService systemAreaService = context.getBean(SystemAreaService.class);
XListResult<GetSysAreaOutput> sysAreaList = systemAreaService.getSysAreaList(context, new GetSysAreaInput());
sysAreaList.throwIfFail();
return sysAreaList.getResult().stream()
.collect(Collectors.toMap(GetSysAreaOutput::getId, GetSysAreaOutput::getName));
}
/**
* 获取所有path包含组织ID的组织
*
......@@ -95,51 +59,4 @@ public class ServiceUtil {
.map(GetSysOrganizationViewOutput::getId)
.collect(Collectors.toList());
}
/**
* 通过组织机构ID集合获取详情列表
*
* @param context 上下文
* @param ouIds ou id
* @return {@link Map}<{@link String}, {@link String}>
*/
public static Map<String, String> getOuMapByOuIds(XContext context, List<String> ouIds) {
GetOuListByOuIdsInput input = new GetOuListByOuIdsInput();
input.setOuIdList(ouIds);
SysOrganizationCloudService organizationCloudService = context.getBean(SysOrganizationCloudService.class);
XListResult<GetOuListTreeOutput> ouListByOuIds = organizationCloudService.getOuListByOuIds(context, input);
ouListByOuIds.throwIfFail();
return ouListByOuIds.getResult().stream()
.collect(Collectors.toMap(
GetOuListTreeOutput::getOuId, GetOuListTreeOutput::getOuName
));
}
/**
* 检查线路是否被间开制度引用
*
* @param context 上下文
* @param lineId 线路id
* @return boolean
*/
public static boolean checkLineIsReference(XContext context, String lineId) {
ISpaceInstitutionDetailCloudService contextBean = context.getBean(ISpaceInstitutionDetailCloudService.class);
XSingleResult<Long> result = contextBean.getInstitutionLineCountByLineId(context, lineId);
result.throwIfFail();
return result.getResult() > 0;
}
/**
* 批量插入
*
* @param mapper 映射器
* @param entityClass 实体类
* @param list 列表
*/
public static <E> void batchInsert(Class<?> mapper, Class<?> entityClass, Collection<E> list) {
String sqlStatement = SqlHelper.getSqlStatement(mapper, SqlMethod.INSERT_ONE);
SqlHelper.executeBatch(entityClass, null, list, 1000, (sqlSession, ent) -> {
sqlSession.insert(sqlStatement, ent);
});
}
}
\ No newline at end of file
package pps.core.task.constant;
/**
* cron配置
*
* @author ZWT
* @date 2023/09/13 14:29
*/
public class CronConstant {
/**
* 每月第一天 0点
*/
public static final String FIRST_DAY_OF_THE_MONTH = "0 0 0 1 * ?";
/**
* 每周一 0点
*/
public static final String EVERY_MONDAY = "0 0 0 ? * 2";
}
package pps.core.task.job;
import pps.cloud.space.service.ISpaceOptimizeLongCloudService;
import xstartup.annotation.XService;
import xstartup.annotation.XText;
import xstartup.base.XContext;
import xstartup.data.XServiceResult;
import xstartup.service.job.XJob;
/**
* 长期间开优化定时任务
*
* @author ZWT
* @date 2023/09/13 13:59
*/
@XText("长期间开优化定时任务")
@XService
public class SpaceOptimizeLongJob implements XJob {
/**
* 每月一日执行
*
* @param xContext x上下文
* @return {@link XServiceResult}
*/
// @XCronTrigger(value = XCronTrigger.PRE_10S)
// @XCronTrigger(value = CronConstant.FIRST_DAY_OF_THE_MONTH)
@Override
public XServiceResult execute(XContext xContext) {
ISpaceOptimizeLongCloudService service = xContext.getBean(ISpaceOptimizeLongCloudService.class);
XServiceResult result = service.optimizeLongJob(xContext);
result.throwIfFail();
return XServiceResult.OK;
}
}
\ No newline at end of file
......@@ -7,23 +7,34 @@ import xstartup.data.XSingleResult;
import xstartup.feature.api.annotation.XApiGet;
/**
* 基础间开配置模块
* 基础间开配置Cloud模块
*
* @author ZWT
* @date 2023/09/06 17:07
*/
@XService
@XText("基础间开配置模块")
@XText("基础间开配置Cloud模块")
public interface ISpaceInstitutionDetailCloudService {
/**
* 基础间开配置模块--获取线路配置制度数量
* 基础间开配置Cloud模块--检查线路是否被引用
*
* @param context 上下文
* @param lineId 线路id
* @return {@link XSingleResult}<{@link Long}>
*/
@XText("基础间开配置模块--获取线路配置制度数量")
@XText("基础间开配置Cloud模块--检查线路是否被引用")
@XApiGet
XSingleResult<Long> getInstitutionLineCountByLineId(XContext context, String lineId);
/**
* 基础间开配置Cloud模块--检查井口是否被引用
*
* @param context 上下文
* @param wellheadId 井口id
* @return {@link XSingleResult}<{@link Long}>
*/
@XText("基础间开配置Cloud模块--检查井口是否被引用")
@XApiGet
XSingleResult<Long> getInstitutionWellheadCountByWellheadId(XContext context, String wellheadId);
}
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 2023/09/13 14:03
*/
@XService
@XText("长期间开优化Cloud模块")
public interface ISpaceOptimizeLongCloudService {
/**
* 长期间开优化Cloud模块--定时任务
*
* @param context 上下文
* @return {@link XServiceResult}
*/
@XText("长期间开优化Cloud模块--定时任务")
XServiceResult optimizeLongJob(XContext context);
}
\ No newline at end of file
......@@ -37,7 +37,11 @@
<artifactId>pps-cloud-base</artifactId>
<version>1.0.0-pps</version>
</dependency>
<dependency>
<groupId>gf</groupId>
<artifactId>pps-cloud-prediction</artifactId>
<version>1.0.0-pps</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
......
......@@ -58,6 +58,13 @@ public class SpaceInstitutionWellheadView extends BaseModel implements Serializa
@TableField
private BigDecimal runDuration;
/**
* 运行功率
*/
@XText("运行功率(KW)")
@TableField(exist = false)
private BigDecimal serviceRating;
/**
* 间开制度小间开时段配置
*/
......
package pps.core.space.enums;
import xstartup.error.XError;
/**
* 业务错误
*
* @author ZWT
* @date 2023/09/12
*/
public enum BusinessError implements XError {
LineExists(2100, "当前线路已设定周期"),
RepeatSetting(2101, "请勿重复设定"),
DidNotFindSpace(2102, "未发现可优化基础间开制度"),
DidNotFindWellhead(2103, "未发现可优化井口"),
DidNotFindPlant(2104, "未发现可用光伏电站"),
;
private int code;
private String text;
BusinessError(int code, String text) {
this.code = code;
this.text = text;
}
@Override
public int getCode() {
return 0;
}
@Override
public String getText() {
return null;
}
}
......@@ -4,6 +4,7 @@ import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import pps.core.space.entity.SpaceInstitutionWellheadView;
import java.util.Collection;
import java.util.List;
/**
......@@ -25,4 +26,12 @@ public interface SpaceInstitutionWellheadViewMapper {
* @return int
*/
int batchInsertList(@Param(value = "list") List<SpaceInstitutionWellheadView> list);
/**
* 通过制度ID集合获取所有间开井口
*
* @param institutionIds 机构ID
* @return {@link List}<{@link SpaceInstitutionWellheadView}>
*/
List<SpaceInstitutionWellheadView> selectListByInstitutionIds(@Param(value = "list") Collection institutionIds);
}
......@@ -11,6 +11,7 @@ import pps.core.common.utils.BaseUtils;
import pps.core.space.entity.SpaceCalibrationHistoryView;
import pps.core.space.entity.SpaceCalibrationPeriodEnt;
import pps.core.space.entity.SpaceInstitutionWellheadEnt;
import pps.core.space.enums.BusinessError;
import pps.core.space.mapper.SpaceCalibrationHistoryViewMapper;
import pps.core.space.mapper.SpaceCalibrationPeriodMapper;
import pps.core.space.mapper.SpaceInstitutionWellheadMapper;
......@@ -69,7 +70,7 @@ public class SpaceCalibrationService {
SpaceCalibrationPeriodMapper mapper = context.getBean(SpaceCalibrationPeriodMapper.class);
SpaceCalibrationPeriodEnt periodEnt = this.getPeriodEntByParam(mapper, input.getLineId(), input.getOuId());
if (Objects.nonNull(periodEnt)) {
return XServiceResult.error(992, "当前线路已设定周期");
return XServiceResult.error(context, BusinessError.LineExists);
}
SpaceCalibrationPeriodEnt entity = XCopyUtils.copyNewObject(input, SpaceCalibrationPeriodEnt.class);
BaseUtils.setBaseModelDefault(entity, session);
......
......@@ -5,13 +5,15 @@ import pps.cloud.space.service.ISpaceInstitutionDetailCloudService;
import pps.core.common.constant.BusinessConstant;
import pps.core.common.entity.BaseModel;
import pps.core.space.entity.SpaceInstitutionDetailEnt;
import pps.core.space.entity.SpaceInstitutionWellheadEnt;
import pps.core.space.mapper.SpaceInstitutionDetailMapper;
import pps.core.space.mapper.SpaceInstitutionWellheadMapper;
import xstartup.annotation.XService;
import xstartup.base.XContext;
import xstartup.data.XSingleResult;
/**
* 基础间开配置模块
* 基础间开配置Cloud模块
*
* @author ZWT
* @date 2023/09/06 17:09
......@@ -20,7 +22,7 @@ import xstartup.data.XSingleResult;
public class SpaceInstitutionDetailCloudServiceImpl implements ISpaceInstitutionDetailCloudService {
/**
* 基础间开配置模块--获取线路配置制度数量
* 基础间开配置Cloud模块--获取线路配置制度数量
*
* @param context 上下文
* @param lineId 线路id
......@@ -35,4 +37,21 @@ public class SpaceInstitutionDetailCloudServiceImpl implements ISpaceInstitution
.eq(SpaceInstitutionDetailEnt::getLineId, lineId)
));
}
/**
* 基础间开配置Cloud模块--检查井口是否被引用
*
* @param context 上下文
* @param wellheadId 井口id
* @return {@link XSingleResult}<{@link Long}>
*/
@Override
public XSingleResult<Long> getInstitutionWellheadCountByWellheadId(XContext context, String wellheadId) {
SpaceInstitutionWellheadMapper mapper = context.getBean(SpaceInstitutionWellheadMapper.class);
return XSingleResult.success(mapper.selectCount(
new LambdaQueryWrapper<SpaceInstitutionWellheadEnt>()
.eq(BaseModel::getIsDeleted, BusinessConstant.ONE)
.eq(SpaceInstitutionWellheadEnt::getWellheadId, wellheadId)
));
}
}
......@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.commons.lang3.StringUtils;
import pps.cloud.base.service.IBasePowerLineCloudService;
import pps.cloud.base.service.data.base_power_line_wellhead.DynamicQueryBasePowerLineWellheadInput;
import pps.cloud.base.service.data.base_power_line_wellhead.DynamicQueryBasePowerLineWellheadViewOutput;
import pps.core.common.constant.BusinessConstant;
......@@ -14,6 +15,7 @@ import pps.core.common.entity.BaseModel;
import pps.core.common.session.PpsUserSession;
import pps.core.common.utils.BaseUtils;
import pps.core.space.entity.*;
import pps.core.space.enums.BusinessError;
import pps.core.space.mapper.*;
import pps.core.space.service.data.space_institution_detail.*;
import pps.core.space.service.data.space_institution_duration.GetSpaceInstitutionDurationViewOutput;
......@@ -25,6 +27,7 @@ import xstartup.annotation.XService;
import xstartup.annotation.XText;
import xstartup.base.XContext;
import xstartup.base.util.XCopyUtils;
import xstartup.data.XListResult;
import xstartup.data.XPageResult;
import xstartup.data.XServiceResult;
import xstartup.data.XSingleResult;
......@@ -183,7 +186,7 @@ public class SpaceInstitutionDetailService {
.map(SpaceInstitutionWellheadEnt::getWellheadId)
.collect(Collectors.toList()));
}
List<DynamicQueryBasePowerLineWellheadViewOutput> powerLineWellheadList = ServiceUtil.getPowerLineWellheadList(context, wellheadInput);
List<DynamicQueryBasePowerLineWellheadViewOutput> powerLineWellheadList = this.getPowerLineWellheadList(context, wellheadInput);
if (CollUtil.isNotEmpty(powerLineWellheadList)) {
powerLineWellheadList.forEach(wellhead -> {
SpaceInstitutionWellheadEnt ent = new SpaceInstitutionWellheadEnt();
......@@ -284,9 +287,6 @@ public class SpaceInstitutionDetailService {
public XServiceResult updateBasicInstitution(XContext context, UpdateSpaceInstitutionDetailInput input) {
String ouId = input.getOuId();
String lineId = input.getLineId();
if (StringUtils.isAnyBlank(ouId, lineId)) {
return XServiceResult.error(992, "缺少必填项");
}
String institutionId = input.getId();
return XTransactionHelper.begin(context, () -> {
SpaceInstitutionDetailMapper mapper = context.getBean(SpaceInstitutionDetailMapper.class);
......@@ -296,7 +296,7 @@ public class SpaceInstitutionDetailService {
}
Integer isCurrentBasic = entity.getIsCurrentBasic();
if (isCurrentBasic.equals(BusinessConstant.ZERO)) {
return XServiceResult.error(992, "请勿重复设定");
return XServiceResult.error(context, BusinessError.RepeatSetting);
}
//关闭当前基础制度
mapper.update(null, new LambdaUpdateWrapper<SpaceInstitutionDetailEnt>()
......@@ -372,6 +372,20 @@ public class SpaceInstitutionDetailService {
/*-----------------------------------private-----------------------------------*/
/**
* 条件查询输电线路井口列表
*
* @param context 上下文
* @param input 输入
* @return {@link List}<{@link DynamicQueryBasePowerLineWellheadViewOutput}>
*/
private List<DynamicQueryBasePowerLineWellheadViewOutput> getPowerLineWellheadList(XContext context, DynamicQueryBasePowerLineWellheadInput input) {
IBasePowerLineCloudService lineService = context.getBean(IBasePowerLineCloudService.class);
XListResult<DynamicQueryBasePowerLineWellheadViewOutput> result = lineService.getPowerLineWellheadList(context, input);
result.throwIfFail();
return result.getResult();
}
/**
* 保存策略关联信息
*
......
package pps.core.space.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.commons.lang3.StringUtils;
import pps.cloud.base.service.IBasePowerLineCloudService;
import pps.cloud.base.service.IBaseWellheadCloudService;
import pps.cloud.base.service.data.base_power_line_plant.DynamicQueryBasePowerLinePlantInput;
import pps.cloud.base.service.data.base_power_line_plant.DynamicQueryBasePowerLinePlantOutput;
import pps.cloud.base.service.data.base_wellhead.DynamicQueryBaseWellheadInput;
import pps.cloud.base.service.data.base_wellhead.DynamicQueryBaseWellheadOutput;
import pps.cloud.prediction.service.IPlantPredictedPowerCloudService;
import pps.cloud.prediction.service.data.plant_predicted_power_data.DynamicQueryPlantPredictedPowerInput;
import pps.cloud.prediction.service.data.plant_predicted_power_data.DynamicQueryPlantPredictedPowerOutput;
import pps.cloud.space.service.ISpaceOptimizeLongCloudService;
import pps.core.common.constant.BusinessConstant;
import pps.core.common.entity.BaseModel;
import pps.core.space.entity.SpaceInstitutionDetailEnt;
import pps.core.space.entity.SpaceInstitutionWellheadView;
import pps.core.space.enums.BusinessError;
import pps.core.space.mapper.SpaceInstitutionDetailMapper;
import pps.core.space.mapper.SpaceInstitutionWellheadViewMapper;
import xstartup.annotation.XService;
import xstartup.base.XContext;
import xstartup.data.XListResult;
import xstartup.data.XServiceResult;
import java.math.BigDecimal;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 长期间开优化Cloud模块
*
* @author ZWT
* @date 2023/09/13 14:14
*/
@XService
public class SpaceOptimizeLongCloudServiceImpl implements ISpaceOptimizeLongCloudService {
/**
* 长期间开优化Cloud模块--定时任务
*
* @param context 上下文
* @return {@link XServiceResult}
*/
@Override
public XServiceResult optimizeLongJob(XContext context) {
//取生效中的基础间开
SpaceInstitutionDetailMapper detailMapper = context.getBean(SpaceInstitutionDetailMapper.class);
List<SpaceInstitutionDetailEnt> detailEntList = detailMapper.selectList(new LambdaQueryWrapper<SpaceInstitutionDetailEnt>()
.eq(BaseModel::getIsDeleted, BusinessConstant.ONE)
.eq(SpaceInstitutionDetailEnt::getIsCurrentBasic, BusinessConstant.ZERO)
.apply(" institution_end_date >= CURDATE() ")
);
if (CollUtil.isEmpty(detailEntList)) {
//未发现可优化基础间开制度
return XServiceResult.error(context, BusinessError.DidNotFindSpace);
}
Set<String> lineIds = new HashSet<>(32);
Set<String> institutionIds = new HashSet<>(32);
for (SpaceInstitutionDetailEnt spaceInstitutionDetailEnt : detailEntList) {
lineIds.add(spaceInstitutionDetailEnt.getLineId());
institutionIds.add(spaceInstitutionDetailEnt.getId());
}
//取生效中间开的所有井口
SpaceInstitutionWellheadViewMapper wellheadMapper = context.getBean(SpaceInstitutionWellheadViewMapper.class);
List<SpaceInstitutionWellheadView> spaceWellheadList = wellheadMapper.selectListByInstitutionIds(institutionIds);
if (CollUtil.isEmpty(spaceWellheadList)) {
//未发现可优化井口
return XServiceResult.error(context, BusinessError.DidNotFindWellhead);
}
this.setServiceRatingForSpaceWellheadList(context, spaceWellheadList);
//取线路关联的所有光伏电站ID
List<DynamicQueryBasePowerLinePlantOutput> plantList = this.getPowerLinePlantListByLineIds(context, lineIds);
if (CollUtil.isEmpty(plantList)) {
//未发现可用光伏电站
return XServiceResult.error(context, BusinessError.DidNotFindPlant);
}
//取当前时间
DateTime date = DateUtil.date();
int year = date.year();
int monthNum = date.month();
String month;
if (monthNum < BusinessConstant.TEN) {
month = "0" + monthNum;
} else {
month = String.valueOf(monthNum);
}
//优化
for (SpaceInstitutionDetailEnt detail : detailEntList) {
switch (detail.getGridTypeKey()) {
//并网型优化
case "1":
//获取当前制度对应的光伏预测数据列表
List<DynamicQueryPlantPredictedPowerOutput> avgPowerList = this.getAveragePowerGenerationListByPlantIds(context,
DynamicQueryPlantPredictedPowerInput.builder()
.plantIds(
plantList.stream()
.filter(p -> StringUtils.equals(detail.getLineId(), p.getLineId()))
.map(DynamicQueryBasePowerLinePlantOutput::getPlantId)
.collect(Collectors.toList())
)
.yearTime(String.valueOf(year))
.monthTime(month)
.build()
);
//取光伏出力峰值
BigDecimal powerMax = avgPowerList.stream()
.map(DynamicQueryPlantPredictedPowerOutput::getPower)
.max(BigDecimal::compareTo)
.orElse(BigDecimal.ZERO);
//取当前制度下井口的总功率
BigDecimal wellheadTotalPower = spaceWellheadList.stream()
.filter(w -> StringUtils.equals(detail.getId(), w.getInstitutionId()))
.map(SpaceInstitutionWellheadView::getServiceRating)
.reduce(BigDecimal.ZERO, BigDecimal::add);
int compare = powerMax.compareTo(wellheadTotalPower);
if (compare >= BusinessConstant.ZERO) {
//光伏出力峰值大于等于井口总功率:绿电消纳优先策略
} else {
//遍历井口,按发电功率大于等于光伏出力峰值条件分组
Map<Boolean, List<SpaceInstitutionWellheadView>> collect = spaceWellheadList.stream()
.filter(w ->
StringUtils.equals(detail.getId(), w.getInstitutionId())
)
.collect(Collectors.partitioningBy(w -> powerMax.compareTo(w.getServiceRating()) >= BusinessConstant.ZERO));
List<SpaceInstitutionWellheadView> lowWellheadList = collect.get(false);
int size = spaceWellheadList.size();
int lowWellheadListSize = lowWellheadList.size();
//光伏出力峰值<任何一口井的运行功率:消峰平谷策略
if (size == lowWellheadListSize) {
}
//光伏出力峰值>=线路哪部分井口运行功率:满足的部分井口采用绿电消纳优先,不满足的井采用消峰平谷
else {
List<SpaceInstitutionWellheadView> highWellheadList = collect.get(true);
}
}
break;
//离网型优化
case "0":
break;
default:
//电网类型不存在
}
}
return XServiceResult.OK;
}
/*-----------------------------------private-----------------------------------*/
/**
* 条件获取获取光伏预测各时段平均值列表
*
* @param context 上下文
* @param input 输入
* @return {@link List}<{@link DynamicQueryPlantPredictedPowerOutput}>
*/
private List<DynamicQueryPlantPredictedPowerOutput> getAveragePowerGenerationListByPlantIds(XContext context, DynamicQueryPlantPredictedPowerInput input) {
IPlantPredictedPowerCloudService cloudService = context.getBean(IPlantPredictedPowerCloudService.class);
XListResult<DynamicQueryPlantPredictedPowerOutput> result = cloudService.queryAveragePowerGenerationListByParam(context, input);
result.throwIfFail();
return result.getResult();
}
/**
* 按线路ID集合获取电站列表
*
* @param context 上下文
* @param lineIds 线路ID
* @return {@link List}<{@link DynamicQueryBasePowerLinePlantOutput}>
*/
private List<DynamicQueryBasePowerLinePlantOutput> getPowerLinePlantListByLineIds(XContext context, Set<String> lineIds) {
IBasePowerLineCloudService cloudService = context.getBean(IBasePowerLineCloudService.class);
XListResult<DynamicQueryBasePowerLinePlantOutput> result = cloudService.queryPowerLinePlantListByParam(context,
DynamicQueryBasePowerLinePlantInput.builder()
.lineIds(lineIds)
.build()
);
result.throwIfFail();
return result.getResult();
}
/**
* 为间开井口列表设置发电功率
*
* @param context 上下文
* @param spaceWellheadList 空间井口清单
*/
private void setServiceRatingForSpaceWellheadList(XContext context, List<SpaceInstitutionWellheadView> spaceWellheadList) {
IBaseWellheadCloudService cloudService = context.getBean(IBaseWellheadCloudService.class);
XListResult<DynamicQueryBaseWellheadOutput> result = cloudService.queryBaseWellheadListByParam(context,
DynamicQueryBaseWellheadInput.builder()
.wellheadIds(spaceWellheadList.stream()
.map(SpaceInstitutionWellheadView::getWellheadId)
.collect(Collectors.toList())
)
.build());
result.throwIfFail();
List<DynamicQueryBaseWellheadOutput> wellheadOutputList = result.getResult();
if (CollUtil.isEmpty(wellheadOutputList)) {
return;
}
spaceWellheadList.forEach(s -> {
s.setServiceRating(
wellheadOutputList.stream()
.filter(w -> StringUtils.equals(s.getWellheadId(), w.getId()))
.findAny()
.map(DynamicQueryBaseWellheadOutput::getServiceRating)
.orElse(BigDecimal.ZERO)
);
});
}
}
......@@ -10,7 +10,7 @@ import pps.core.common.constant.BusinessConstant;
import pps.core.common.entity.BaseModel;
import pps.core.space.entity.*;
import pps.core.space.mapper.*;
import pps.core.space.service.data.space_optimize_long_duration.GetSpaceOptimizeLongDurationOutput;
import pps.core.space.service.data.SpaceOptimizeDateDuration;
import pps.core.space.service.data.space_optimize_long_period.GetSpaceOptimizeLongPeriodViewInput;
import pps.core.space.service.data.space_optimize_long_period.GetSpaceOptimizeLongPeriodViewOutput;
import pps.core.space.service.data.space_optimize_long_period.QuerySpaceOptimizeLongPeriodViewInput;
......@@ -93,6 +93,7 @@ public class SpaceOptimizeLongPeriodService {
return XSingleResult.error(context, XError.NotFound);
}
GetSpaceOptimizeLongPeriodViewOutput output = XCopyUtils.copyNewObject(period, GetSpaceOptimizeLongPeriodViewOutput.class);
output.setDateList(ServiceUtil.getOptimizeDateList(period.getCreateTime(), period.getOptimizeDeadline()));
//查间开制度详情
SpaceInstitutionDetailMapper detailMapper = context.getBean(SpaceInstitutionDetailMapper.class);
SpaceInstitutionDetailEnt detailEnt = detailMapper.selectById(period.getInstitutionId());
......@@ -106,6 +107,7 @@ public class SpaceOptimizeLongPeriodService {
.strategyMonth(String.valueOf(calendar.get(Calendar.MONTH) + 1))
.build()));
}
output.setGridTypeKey(detailEnt.getGridTypeKey());
//查井口列表
SpaceOptimizeLongWellheadMapper wellheadMapper = context.getBean(SpaceOptimizeLongWellheadMapper.class);
List<SpaceOptimizeLongWellheadEnt> wellheadList = wellheadMapper.selectList(new LambdaQueryWrapper<SpaceOptimizeLongWellheadEnt>()
......@@ -122,16 +124,20 @@ public class SpaceOptimizeLongPeriodService {
.orderByAsc(SpaceOptimizeLongDurationEnt::getIsOptimize, SpaceOptimizeLongDurationEnt::getOpenWellTime)
);
if (CollUtil.isNotEmpty(durationList)) {
List<GetSpaceOptimizeLongDurationOutput> durationOutputs = XCopyUtils.copyNewList(durationList, GetSpaceOptimizeLongDurationOutput.class);
Map<String, List<GetSpaceOptimizeLongDurationOutput>> collect = durationOutputs.stream()
List<SpaceOptimizeDateDuration> durationOutputs = XCopyUtils.copyNewList(durationList, SpaceOptimizeDateDuration.class);
Map<String, List<SpaceOptimizeDateDuration>> collect = durationOutputs.stream()
.collect(
Collectors.groupingBy(GetSpaceOptimizeLongDurationOutput::getWellheadId)
Collectors.groupingBy(SpaceOptimizeDateDuration::getWellheadId)
);
wellheadOutputs.forEach(w -> {
if (collect.containsKey(w.getWellheadId())) {
w.setDurationList(collect.get(w.getWellheadId()));
Map<Integer, List<SpaceOptimizeDateDuration>> listMap = collect.get(w.getWellheadId()).stream()
.collect(Collectors.groupingBy(SpaceOptimizeDateDuration::getIsOptimize));
w.setOptimizeList(ServiceUtil.getAllDateDuration(listMap.get(0)));
w.setInitializeList(ServiceUtil.getAllDateDuration(listMap.get(1)));
} else {
w.setDurationList(new ArrayList<>(0));
w.setOptimizeList(new ArrayList<>(0));
w.setInitializeList(new ArrayList<>(0));
}
});
}
......
......@@ -10,7 +10,7 @@ import pps.core.common.constant.BusinessConstant;
import pps.core.common.entity.BaseModel;
import pps.core.space.entity.*;
import pps.core.space.mapper.*;
import pps.core.space.service.data.space_optimize_mid_duration.GetSpaceOptimizeMidDurationOutput;
import pps.core.space.service.data.SpaceOptimizeDateDuration;
import pps.core.space.service.data.space_optimize_mid_period.GetSpaceOptimizeMidPeriodViewInput;
import pps.core.space.service.data.space_optimize_mid_period.GetSpaceOptimizeMidPeriodViewOutput;
import pps.core.space.service.data.space_optimize_mid_period.QuerySpaceOptimizeMidPeriodViewInput;
......@@ -93,6 +93,7 @@ public class SpaceOptimizeMidPeriodService {
return XSingleResult.error(context, XError.NotFound);
}
GetSpaceOptimizeMidPeriodViewOutput output = XCopyUtils.copyNewObject(period, GetSpaceOptimizeMidPeriodViewOutput.class);
output.setDateList(ServiceUtil.getOptimizeDateList(period.getCreateTime(), period.getOptimizeDeadline()));
//查间开制度详情
SpaceInstitutionDetailMapper detailMapper = context.getBean(SpaceInstitutionDetailMapper.class);
SpaceInstitutionDetailEnt detailEnt = detailMapper.selectById(period.getInstitutionId());
......@@ -106,6 +107,7 @@ public class SpaceOptimizeMidPeriodService {
.strategyMonth(String.valueOf(calendar.get(Calendar.MONTH) + 1))
.build()));
}
output.setGridTypeKey(detailEnt.getGridTypeKey());
//查井口列表
SpaceOptimizeMidWellheadMapper wellheadMapper = context.getBean(SpaceOptimizeMidWellheadMapper.class);
List<SpaceOptimizeMidWellheadEnt> wellheadList = wellheadMapper.selectList(new LambdaQueryWrapper<SpaceOptimizeMidWellheadEnt>()
......@@ -122,16 +124,20 @@ public class SpaceOptimizeMidPeriodService {
.orderByAsc(SpaceOptimizeMidDurationEnt::getIsOptimize, SpaceOptimizeMidDurationEnt::getOpenWellTime)
);
if (CollUtil.isNotEmpty(durationList)) {
List<GetSpaceOptimizeMidDurationOutput> durationOutputs = XCopyUtils.copyNewList(durationList, GetSpaceOptimizeMidDurationOutput.class);
Map<String, List<GetSpaceOptimizeMidDurationOutput>> collect = durationOutputs.stream()
List<SpaceOptimizeDateDuration> durationOutputs = XCopyUtils.copyNewList(durationList, SpaceOptimizeDateDuration.class);
Map<String, List<SpaceOptimizeDateDuration>> collect = durationOutputs.stream()
.collect(
Collectors.groupingBy(GetSpaceOptimizeMidDurationOutput::getWellheadId)
Collectors.groupingBy(SpaceOptimizeDateDuration::getWellheadId)
);
wellheadOutputs.forEach(w -> {
if (collect.containsKey(w.getWellheadId())) {
w.setDurationList(collect.get(w.getWellheadId()));
Map<Integer, List<SpaceOptimizeDateDuration>> listMap = collect.get(w.getWellheadId()).stream()
.collect(Collectors.groupingBy(SpaceOptimizeDateDuration::getIsOptimize));
w.setOptimizeList(ServiceUtil.getAllDateDuration(listMap.get(0)));
w.setInitializeList(ServiceUtil.getAllDateDuration(listMap.get(1)));
} else {
w.setDurationList(new ArrayList<>(0));
w.setOptimizeList(new ArrayList<>(0));
w.setInitializeList(new ArrayList<>(0));
}
});
}
......
......@@ -2,16 +2,19 @@ package pps.core.space.service;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import pps.core.space.entity.SpaceInstitutionDetailEnt;
import pps.core.space.entity.SpaceOptimizeShortDurationView;
import pps.core.space.entity.SpaceOptimizeShortPeriodEnt;
import pps.core.space.entity.SpaceOptimizeShortWellheadEnt;
import pps.core.space.mapper.SpaceInstitutionDetailMapper;
import pps.core.space.mapper.SpaceOptimizeShortDurationViewMapper;
import pps.core.space.mapper.SpaceOptimizeShortPeriodMapper;
import pps.core.space.mapper.SpaceOptimizeShortWellheadMapper;
import pps.core.space.service.data.space_optimize_short_duration.GetSpaceOptimizeShortDurationOutput;
import pps.core.space.service.data.SpaceOptimizeDateDuration;
import pps.core.space.service.data.space_optimize_short_period.GetSpaceOptimizeShortPeriodViewInput;
import pps.core.space.service.data.space_optimize_short_period.GetSpaceOptimizeShortPeriodViewOutput;
import pps.core.space.service.data.space_optimize_short_wellhead.GetSpaceOptimizeShortWellheadViewOutput;
import pps.core.space.utils.ServiceUtil;
import xstartup.annotation.XService;
import xstartup.annotation.XText;
import xstartup.base.XContext;
......@@ -56,6 +59,10 @@ public class SpaceOptimizeShortPeriodService {
);
GetSpaceOptimizeShortPeriodViewOutput output = new GetSpaceOptimizeShortPeriodViewOutput();
if (Objects.nonNull(period)) {
//查间开制度详情
SpaceInstitutionDetailMapper detailMapper = context.getBean(SpaceInstitutionDetailMapper.class);
SpaceInstitutionDetailEnt detailEnt = detailMapper.selectById(period.getInstitutionId());
output.setGridTypeKey(detailEnt.getGridTypeKey());
String shortPeriodId = period.getId();
//查井口列表
SpaceOptimizeShortWellheadMapper wellheadMapper = context.getBean(SpaceOptimizeShortWellheadMapper.class);
......@@ -71,12 +78,12 @@ public class SpaceOptimizeShortPeriodService {
.build()
);
if (CollUtil.isNotEmpty(durationViewList)) {
Map<String, List<GetSpaceOptimizeShortDurationOutput>> collect = XCopyUtils.copyNewList(durationViewList, GetSpaceOptimizeShortDurationOutput.class)
Map<String, List<SpaceOptimizeDateDuration>> collect = XCopyUtils.copyNewList(durationViewList, SpaceOptimizeDateDuration.class)
.stream()
.collect(Collectors.groupingBy(GetSpaceOptimizeShortDurationOutput::getWellheadId));
.collect(Collectors.groupingBy(SpaceOptimizeDateDuration::getWellheadId));
wellheadViewOutputs.forEach(w -> {
if (collect.containsKey(w.getWellheadId())) {
w.setDurationList(collect.get(w.getWellheadId()));
w.setDurationList(ServiceUtil.getAllDateDuration(collect.get(w.getWellheadId())));
} else {
w.setDurationList(new ArrayList<>(0));
}
......
package pps.core.space.service.data;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import xstartup.annotation.XText;
/**
* 间开优化时间区间
*
* @author ZWT
* @date 2023/09/12 15:17
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class SpaceOptimizeDateDuration {
@XText("井口ID")
private String wellheadId;
@XText("是否优化(0_是;1_否)")
private Integer isOptimize;
@XText("发电类型key(字典获取)")
private String generationTypeKey;
@XText("开井时间")
private String openWellTime;
@XText("关井时间")
private String closeWellTime;
@XText("井口状态:0_关井,1_开井")
private Integer isOpen;
}
package pps.core.space.service.data;
import cn.hutool.core.date.DateTime;
import lombok.Data;
import xstartup.annotation.XText;
/**
* 已优化日期列表
*
* @author ZWT
* @date 2023/09/12
*/
@Data
public class SpaceOptimizeDateOutput {
@XText("优化日期")
private DateTime dateTime;
@XText("优化状态编码(0_已优化;1_未优化)")
private Integer optimizeCode;
@XText("优化状态值")
private String optimizeValue;
}
......@@ -2,6 +2,7 @@ package pps.core.space.service.data.space_optimize_long_period;
import lombok.Data;
import pps.cloud.base.service.data.base_price_strategy_detail.GetBasePriceStrategyDetailOutput;
import pps.core.space.service.data.SpaceOptimizeDateOutput;
import pps.core.space.service.data.space_optimize_long_wellhead.GetSpaceOptimizeLongWellheadOutput;
import xstartup.annotation.XText;
......@@ -35,6 +36,18 @@ public class GetSpaceOptimizeLongPeriodViewOutput {
@XText("优化截止日期")
private Date optimizeDeadline;
/**
* 电网类型key
*/
@XText("电网类型key(字典获取)")
private String gridTypeKey;
/**
* 已优化日期列表
*/
@XText("已优化日期列表")
List<SpaceOptimizeDateOutput> dateList;
/**
* 井口信息
*/
......
package pps.core.space.service.data.space_optimize_long_wellhead;
import lombok.Data;
import pps.core.space.service.data.space_optimize_long_duration.GetSpaceOptimizeLongDurationOutput;
import pps.core.space.service.data.SpaceOptimizeDateDuration;
import xstartup.annotation.XText;
import java.util.List;
......@@ -25,8 +25,14 @@ public class GetSpaceOptimizeLongWellheadOutput {
private String wellNumber;
/**
* 井口配置
* 井口配置(未优化)
*/
@XText("井口配置")
private List<GetSpaceOptimizeLongDurationOutput> durationList;
@XText("井口配置(未优化)")
private List<SpaceOptimizeDateDuration> initializeList;
/**
* 井口配置(已优化)
*/
@XText("井口配置(已优化)")
private List<SpaceOptimizeDateDuration> optimizeList;
}
......@@ -2,6 +2,7 @@ package pps.core.space.service.data.space_optimize_mid_period;
import lombok.Data;
import pps.cloud.base.service.data.base_price_strategy_detail.GetBasePriceStrategyDetailOutput;
import pps.core.space.service.data.SpaceOptimizeDateOutput;
import pps.core.space.service.data.space_optimize_mid_wellhead.GetSpaceOptimizeMidWellheadOutput;
import xstartup.annotation.XText;
......@@ -35,6 +36,18 @@ public class GetSpaceOptimizeMidPeriodViewOutput {
@XText("优化截止日期")
private Date optimizeDeadline;
/**
* 电网类型key
*/
@XText("电网类型key(字典获取)")
private String gridTypeKey;
/**
* 已优化日期列表
*/
@XText("已优化日期列表")
List<SpaceOptimizeDateOutput> dateList;
/**
* 策略配置列表
*/
......
package pps.core.space.service.data.space_optimize_mid_wellhead;
import lombok.Data;
import pps.core.space.service.data.space_optimize_mid_duration.GetSpaceOptimizeMidDurationOutput;
import pps.core.space.service.data.SpaceOptimizeDateDuration;
import xstartup.annotation.XText;
import java.util.List;
......@@ -25,8 +25,14 @@ public class GetSpaceOptimizeMidWellheadOutput {
private String wellNumber;
/**
* 井口配置
* 井口配置(未优化)
*/
@XText("井口配置")
private List<GetSpaceOptimizeMidDurationOutput> durationList;
@XText("井口配置(未优化)")
private List<SpaceOptimizeDateDuration> initializeList;
/**
* 井口配置(已优化)
*/
@XText("井口配置(已优化)")
private List<SpaceOptimizeDateDuration> optimizeList;
}
......@@ -15,6 +15,12 @@ import java.util.List;
@Data
public class GetSpaceOptimizeShortPeriodViewOutput {
/**
* 电网类型key
*/
@XText("电网类型key(字典获取)")
private String gridTypeKey;
/**
* 井口列表
*/
......
package pps.core.space.service.data.space_optimize_short_wellhead;
import lombok.Data;
import pps.core.space.service.data.space_optimize_short_duration.GetSpaceOptimizeShortDurationOutput;
import pps.core.space.service.data.SpaceOptimizeDateDuration;
import xstartup.annotation.XText;
import java.util.List;
......@@ -25,5 +25,5 @@ public class GetSpaceOptimizeShortWellheadViewOutput {
* 井口时段配置
*/
@XText("井口时段配置")
private List<GetSpaceOptimizeShortDurationOutput> durationList;
private List<SpaceOptimizeDateDuration> durationList;
}
package pps.core.space.utils;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
import org.apache.commons.lang3.StringUtils;
import pps.cloud.base.service.IBasePowerLineCloudService;
import pps.cloud.base.service.IBasePriceStrategyCloudService;
import pps.cloud.base.service.data.base_power_line.DynamicQueryBasePowerLineInput;
import pps.cloud.base.service.data.base_power_line.DynamicQueryBasePowerLineOutput;
import pps.cloud.base.service.data.base_power_line.GetBasePowerLineInput;
import pps.cloud.base.service.data.base_power_line.GetBasePowerLineViewOutput;
import pps.cloud.base.service.data.base_power_line_wellhead.DynamicQueryBasePowerLineWellheadInput;
import pps.cloud.base.service.data.base_power_line_wellhead.DynamicQueryBasePowerLineWellheadViewOutput;
import pps.cloud.base.service.data.base_price_strategy_detail.GetBasePriceStrategyDetailInput;
import pps.cloud.base.service.data.base_price_strategy_detail.GetBasePriceStrategyDetailOutput;
import pps.cloud.system.service.SysOrganizationCloudService;
import pps.cloud.system.service.SystemAreaService;
import pps.cloud.system.service.SystemDictionaryService;
import pps.cloud.system.service.data.*;
import pps.core.common.constant.BusinessConstant;
import pps.core.space.service.data.SpaceOptimizeDateDuration;
import pps.core.space.service.data.SpaceOptimizeDateOutput;
import xstartup.base.XContext;
import xstartup.data.XListResult;
import xstartup.data.XSingleResult;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.*;
import java.util.stream.Collectors;
/**
......@@ -70,38 +72,6 @@ public class ServiceUtil {
.orElse(null);
}
/**
* 获取区域Map
*
* @param context 上下文
* @return {@link Map}<{@link Integer}, {@link String}>
*/
public static Map<Integer, String> getSysAreaMap(XContext context) {
SystemAreaService systemAreaService = context.getBean(SystemAreaService.class);
XListResult<GetSysAreaOutput> sysAreaList = systemAreaService.getSysAreaList(context, new GetSysAreaInput());
sysAreaList.throwIfFail();
return sysAreaList.getResult().stream()
.collect(Collectors.toMap(GetSysAreaOutput::getId, GetSysAreaOutput::getName));
}
/**
* 获取所有path包含组织ID的组织
*
* @param context 上下文
* @param ouId ou id
* @return {@link List}<{@link String}>
*/
public static List<String> getOrgIdsByPath(XContext context, String ouId) {
SysOrganizationCloudService organizationCloudService = context.getBean(SysOrganizationCloudService.class);
GetAllOuListByOuIdInput ouIdInput = new GetAllOuListByOuIdInput();
ouIdInput.setOuId(ouId);
XListResult<GetSysOrganizationViewOutput> allListByOuId = organizationCloudService.getAllListByOuId(context, ouIdInput);
allListByOuId.throwIfFail();
return allListByOuId.getResult().stream()
.map(GetSysOrganizationViewOutput::getId)
.collect(Collectors.toList());
}
/**
* 通过组织机构ID集合获取组织名称
*
......@@ -158,20 +128,6 @@ public class ServiceUtil {
);
}
/**
* 条件查询输电线路井口列表
*
* @param context 上下文
* @param input 输入
* @return {@link List}<{@link DynamicQueryBasePowerLineWellheadViewOutput}>
*/
public static List<DynamicQueryBasePowerLineWellheadViewOutput> getPowerLineWellheadList(XContext context, DynamicQueryBasePowerLineWellheadInput input) {
IBasePowerLineCloudService lineService = context.getBean(IBasePowerLineCloudService.class);
XListResult<DynamicQueryBasePowerLineWellheadViewOutput> result = lineService.getPowerLineWellheadList(context, input);
result.throwIfFail();
return result.getResult();
}
/**
* 条件查询策略配置详情列表
*
......@@ -185,4 +141,95 @@ public class ServiceUtil {
result.throwIfFail();
return result.getResult();
}
/**
* 获取优化日期列表
*
* @param begin 开始
* @param end 终止
* @return {@link List}<{@link SpaceOptimizeDateOutput}>
*/
public static List<SpaceOptimizeDateOutput> getOptimizeDateList(Date begin, Date end) {
return DateUtil.rangeToList(
DateUtil.beginOfDay(begin),
DateUtil.endOfDay(end),
DateField.DAY_OF_YEAR).stream()
.map(r -> {
SpaceOptimizeDateOutput spaceOptimizeDateOutput = new SpaceOptimizeDateOutput();
spaceOptimizeDateOutput.setDateTime(r);
spaceOptimizeDateOutput.setOptimizeCode(BusinessConstant.ZERO);
spaceOptimizeDateOutput.setOptimizeValue("已优化");
return spaceOptimizeDateOutput;
}).collect(Collectors.toList());
}
/**
* 封装全天时间段
*
* @param optimizeList 优化列表
* @return {@link List}<{@link SpaceOptimizeDateDuration}>
*/
public static List<SpaceOptimizeDateDuration> getAllDateDuration(List<SpaceOptimizeDateDuration> optimizeList) {
List<SpaceOptimizeDateDuration> allList = new ArrayList<>(16);
if (CollUtil.isEmpty(optimizeList)) {
allList.add(
SpaceOptimizeDateDuration.builder()
.openWellTime("00:00")
.closeWellTime("24:00")
.isOpen(0)
.build()
);
return allList;
}
int size = optimizeList.size();
for (int i = 0; i < size; i++) {
SpaceOptimizeDateDuration optimize = optimizeList.get(i);
String openWellTime = optimize.getOpenWellTime();
String closeWellTime = optimize.getCloseWellTime();
optimize.setIsOpen(1);
if (i == 0) {
//如果开始时间不是从00:00开始,初始化开始时间为关井时间
if (!StringUtils.equals("00:00", openWellTime)) {
allList.add(
SpaceOptimizeDateDuration.builder()
.openWellTime("00:00")
.closeWellTime(openWellTime)
.isOpen(0)
.build()
);
}
}
//将当前时段添加到新集合
allList.add(optimize);
//判断当前时段到下一时段间是否有关井时段
int next = i + 1;
int last = size - 1;
if (next <= last) {
SpaceOptimizeDateDuration nextOptimize = optimizeList.get(next);
String nextOpenWellTime = nextOptimize.getOpenWellTime();
if (!StringUtils.equals(closeWellTime, nextOpenWellTime)) {
allList.add(
SpaceOptimizeDateDuration.builder()
.openWellTime(closeWellTime)
.closeWellTime(nextOpenWellTime)
.isOpen(0)
.build()
);
}
}
if (i == last) {
//如果结束时间不是24:00开始,初始化最终关井时间
if (!StringUtils.equals("24:00", closeWellTime)) {
allList.add(
SpaceOptimizeDateDuration.builder()
.openWellTime(closeWellTime)
.closeWellTime("24:00")
.isOpen(0)
.build()
);
}
}
}
return allList;
}
}
\ No newline at end of file
......@@ -101,4 +101,28 @@
)
</foreach>
</insert>
<select id="selectListByInstitutionIds" parameterType="pps.core.space.entity.SpaceInstitutionWellheadView"
resultMap="BaseResultMap">
SELECT
DISTINCT
institution_id,
wellhead_id,
well_number,
run_type_key,
interval_type_key,
interval_describe,
start_seq,
open_well_day,
close_well_day,
run_duration
FROM
space_institution_wellhead
WHERE
is_deleted = 1
AND institution_id IN
<foreach collection="list" open="(" close=")" separator="," item="item">
#{item}
</foreach>
</select>
</mapper>
\ No newline at end of file
......@@ -8,7 +8,6 @@
<version>1.15.169-xstartup-cloud</version>
<relativePath/>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>gf</groupId>
<artifactId>pps-cloud-prediction</artifactId>
......@@ -16,6 +15,15 @@
<properties>
<maven.build.timestamp.format>yyyy.MMdd.HHmmss</maven.build.timestamp.format>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
......
package pps.cloud.prediction.service;
import pps.cloud.prediction.service.data.plant_predicted_power_data.DynamicQueryPlantPredictedPowerInput;
import pps.cloud.prediction.service.data.plant_predicted_power_data.DynamicQueryPlantPredictedPowerOutput;
import xstartup.annotation.XService;
import xstartup.annotation.XText;
import xstartup.base.XContext;
import xstartup.data.XListResult;
import xstartup.feature.api.annotation.XApiPost;
/**
* 光伏预测Cloud模块
*
* @author ZWT
* @date 2023/09/13 18:49
*/
@XService
@XText("光伏预测Cloud模块")
public interface IPlantPredictedPowerCloudService {
/**
* 光伏预测Cloud模块--条件查询时段发电量平均值
*
* @param context 上下文
* @param input 输入
* @return {@link XListResult}<{@link DynamicQueryPlantPredictedPowerOutput}>
*/
@XText("光伏预测Cloud模块--条件查询时段发电量平均值")
@XApiPost
XListResult<DynamicQueryPlantPredictedPowerOutput> queryAveragePowerGenerationListByParam(XContext context, DynamicQueryPlantPredictedPowerInput input);
}
\ No newline at end of file
package pps.cloud.prediction.service.data.plant_predicted_power_data;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import xstartup.annotation.XText;
import java.util.List;
/**
* 光伏预测Cloud模块
*
* @author ZWT
* @date 2023/09/13
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DynamicQueryPlantPredictedPowerInput {
@XText("电站ID")
private String plantId;
@XText("电站ID集合")
private List<String> plantIds;
@XText("年")
private String yearTime;
@XText("月")
private String monthTime;
}
package pps.cloud.prediction.service.data.plant_predicted_power_data;
import lombok.Data;
import xstartup.annotation.XText;
import java.math.BigDecimal;
/**
* 光伏预测Cloud模块
*
* @author ZWT
* @date 2023/09/13
*/
@Data
public class DynamicQueryPlantPredictedPowerOutput {
@XText("日期")
private String dataDate;
@XText("年")
private String yearTime;
@XText("月")
private String monthTime;
@XText("日")
private String dayTime;
@XText("时")
private String hourTime;
@XText("分")
private String minTime;
@XText("预测功率")
private BigDecimal power;
}
......@@ -27,6 +27,12 @@
<version>1.0.0-pps</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>gf</groupId>
<artifactId>pps-cloud-prediction</artifactId>
<version>1.0.0-pps</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
......
package pps.core.prediction.service;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.commons.lang3.StringUtils;
import pps.cloud.prediction.service.IPlantPredictedPowerCloudService;
import pps.cloud.prediction.service.data.plant_predicted_power_data.DynamicQueryPlantPredictedPowerInput;
import pps.cloud.prediction.service.data.plant_predicted_power_data.DynamicQueryPlantPredictedPowerOutput;
import pps.core.prediction.entity.PlantPredictedPowerDataEnt;
import pps.core.prediction.mapper.PlantPredictedPowerDataMapper;
import xstartup.annotation.XService;
import xstartup.base.XContext;
import xstartup.base.util.XCopyUtils;
import xstartup.data.XListResult;
import java.util.ArrayList;
import java.util.List;
/**
* 光伏预测Cloud模块
*
* @author ZWT
* @date 2023/09/13 19:05
*/
@XService
public class PlantPredictedPowerCloudServiceImpl implements IPlantPredictedPowerCloudService {
/**
* 光伏预测Cloud模块--条件查询时段发电量平均值
*
* @param context 上下文
* @param input 输入
* @return {@link XListResult}<{@link DynamicQueryPlantPredictedPowerOutput}>
*/
@Override
public XListResult<DynamicQueryPlantPredictedPowerOutput> queryAveragePowerGenerationListByParam(XContext context, DynamicQueryPlantPredictedPowerInput input) {
String plantId = input.getPlantId();
List<String> plantIds = input.getPlantIds();
String yearTime = input.getYearTime();
String monthTime = input.getMonthTime();
PlantPredictedPowerDataMapper mapper = context.getBean(PlantPredictedPowerDataMapper.class);
List<PlantPredictedPowerDataEnt> list = mapper.selectList(
new QueryWrapper<PlantPredictedPowerDataEnt>()
.select("data_date",
"year_time",
"month_time",
"day_time",
"hour_time",
"min_time",
"AVG( power ) AS power")
.lambda()
.eq(StringUtils.isNotBlank(plantId), PlantPredictedPowerDataEnt::getPlantId, plantId)
.in(CollUtil.isNotEmpty(plantIds), PlantPredictedPowerDataEnt::getPlantId, plantIds)
.eq(StringUtils.isNotBlank(yearTime), PlantPredictedPowerDataEnt::getYearTime, yearTime)
.eq(StringUtils.isNotBlank(monthTime), PlantPredictedPowerDataEnt::getMonthTime, monthTime)
.groupBy(PlantPredictedPowerDataEnt::getDataDate,
PlantPredictedPowerDataEnt::getYearTime,
PlantPredictedPowerDataEnt::getMonthTime,
PlantPredictedPowerDataEnt::getDayTime,
PlantPredictedPowerDataEnt::getHourTime,
PlantPredictedPowerDataEnt::getMinTime)
);
List<DynamicQueryPlantPredictedPowerOutput> outputs;
if (CollUtil.isEmpty(list)) {
outputs = new ArrayList<>(0);
} else {
outputs = XCopyUtils.copyNewList(list, DynamicQueryPlantPredictedPowerOutput.class);
}
return XListResult.success(outputs);
}
}
package app;
import pps.core.task.job.SpaceOptimizeLongJob;
import pps.core.task.job.TestJob;
import pps.core.task.job.WeatherJob;
import xstartup.base.XStartup;
......@@ -19,19 +20,20 @@ import xstartup.service.job.conf.XJobServiceConf;
//import xstartup.feature.cloud.XCloudHuaweiCseFeature;
public class DeployPpsAllApplication {
public static void main(String... args){
public static void main(String... args) {
System.out.println(XEncryptUtils.encrypt("!qwe@azx#12W3"));
XStartup startup = new XStartupApplication("pps");
startup.config(new XServerConf(22060).naming("pps-all"));
startup.config(new XServiceConf("pps"));
startup.enable(XApiFeature.class)
.config(new XApiCookieConf("%4bH8s9&",43200));
.config(new XApiCookieConf("%4bH8s9&", 43200));
startup.enable(XSwaggerFeature.class);
startup.enable(XMybatisFeature.class);
startup.enable(XRpcFeature.class);
startup.enable(XCorsFeature.class);
startup.enable(XJobFeature.class).config(new XJobServiceConf(TestJob.class));
startup.enable(XJobFeature.class).config(new XJobServiceConf(WeatherJob.class));
startup.enable(XJobFeature.class).config(new XJobServiceConf(SpaceOptimizeLongJob.class));
//startup.enable(XCloudHuaweiCseFeature.class);
startup.run(args);
}
......
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