0601 ljc resource模块基础功能开发

This commit is contained in:
Hope Li 2025-06-01 15:22:30 +08:00
parent 1eb28acf44
commit aca9ff8b47
20 changed files with 756 additions and 370 deletions

View File

@ -1,127 +1,37 @@
package cd.casic.ci.process.dal.req.resource; package cd.casic.ci.process.dal.req.resource;
import cd.casic.framework.commons.pojo.PageParam;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime; import java.util.List;
@Data @Data
public class ResourceQueryReq { public class ResourceQueryReq extends PageParam {
/** /**
* 主键id * 主键id
*/ */
private String id; private String id;
/** private List<String> idList;
* 虚拟机类型
*/
private String vmType;
/** /**
* 虚拟机名称 * 资源类型 docker, k8s, machine,cloud
*/ */
private String vmName; private String resourceType;
/** /**
* 到期释放时间 * 其他资源表 ID
*/ */
private String expirationTime; private String resourceId;
/** /**
* 数量 * 资源名称
*/ */
private String sum; private String resourceName;
/**
* 平台
*/
private String platform;
/**
* cpu架构
*/
private String cpuFramework;
/**
* GPU配置状态
*/
private String gpuStatus;
/**
* cpu内核数量
*/
private String cpuCoreSum;
/**
* 内存
*/
private String internalStorage;
/**
* 操作系统
*/
private String os;
/**
* 系统盘类型
*/
private String systemDiskType;
/**
* 系统盘内存大小
*/
private String systemDiskInternalStorage;
/**
* 管理员账号
*/
private String managerAccount;
/**
* 管理员密码
*/
private String managerPassword;
/**
* 安全组
*/
private String securityGroup;
/**
* 调度策略
*/
private String schedulingPolicy;
/**
* 引导方式
*/
private String bootMethod;
/**
* 备份机
*/
private String backup;
/**
* 反亲和组
*/
private String antiAffinityGroup;
/**
* 流水线id
*/
private String pipelineId;
/** /**
* 创建人用户id * 创建人用户id
*/ */
private Long createUserId; private String creator;
private Long updateUserId;
/**
* 创建时间
*/
private LocalDateTime createTime;
private LocalDateTime updateTime;
} }

View File

@ -1,111 +1,34 @@
package cd.casic.ci.process.dal.req.resource; package cd.casic.ci.process.dal.req.resource;
import cd.casic.ci.process.process.dataObject.resource.PipResourceCloud;
import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S;
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
import cd.casic.ci.process.process.dataObject.resource.PipelineDockerEndpoint;
import lombok.Data; import lombok.Data;
@Data @Data
public class ResourceReq { public class ResourceReq {
/**
* 主键id
*/
private String id; private String id;
/**
* 资源类型 docker, k8s, machine,cloud
*/
private String resourceType;
/** /**
* 虚拟机类型 * 其他资源表 ID
*/ */
private String vmType; private String resourceId;
/** /**
* 虚拟机名称 * 资源名称
*/ */
private String vmName; private String resourceName;
/** private PipResourceMachine resourceMachine;
* 到期释放时间
*/
private String expirationTime;
/** private PipelineDockerEndpoint dockerEndpoint;
* 数量
*/
private String sum;
/** private PipResourceK8S pipResourceK8S;
* 平台
*/
private String platform;
/** private PipResourceCloud pipResourceCloud;
* cpu架构
*/
private String cpuFramework;
/**
* GPU配置状态
*/
private String gpuStatus;
/**
* cpu内核数量
*/
private String cpuCoreSum;
/**
* 内存
*/
private String internalStorage;
/**
* 操作系统
*/
private String os;
/**
* 系统盘类型
*/
private String systemDiskType;
/**
* 系统盘内存大小
*/
private String systemDiskInternalStorage;
/**
* 管理员账号
*/
private String managerAccount;
/**
* 管理员密码
*/
private String managerPassword;
/**
* 安全组
*/
private String securityGroup;
/**
* 调度策略
*/
private String schedulingPolicy;
/**
* 引导方式
*/
private String bootMethod;
/**
* 备份机
*/
private String backup;
/**
* 反亲和组
*/
private String antiAffinityGroup;
/**
* 流水线id
*/
private String pipelineId;
} }

View File

@ -0,0 +1,53 @@
package cd.casic.ci.process.dal.resp.resource;
import cd.casic.ci.process.process.dataObject.resource.PipResourceCloud;
import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S;
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
import cd.casic.ci.process.process.dataObject.resource.PipelineDockerEndpoint;
import lombok.Data;
@Data
public class ResourceFindResp {
/**
* 主键id
*/
private String id;
/**
* 资源类型 docker, k8s, machine
*/
private String resourceType;
/**
* 其他资源表 ID
*/
private String resourceId;
/**
* 资源名称
*/
private String resourceName;
//创建人id
private String creator;
//创建人姓名
private String creatorName;
//最后修改人id
private String updater;
//最后修改人姓名
private String updaterName;
private String remark;
private PipResourceMachine resourceMachine;
private PipelineDockerEndpoint dockerEndpoint;
private PipResourceK8S pipResourceK8S;
private PipResourceCloud pipResourceCloud;
}

View File

@ -1,9 +1,10 @@
package cd.casic.ci.process.dal.resp.resource; package cd.casic.ci.process.dal.resp.resource;
import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S;
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
import cd.casic.ci.process.process.dataObject.resource.PipelineDockerEndpoint;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime;
@Data @Data
public class ResourceResp { public class ResourceResp {
/** /**
@ -12,116 +13,38 @@ public class ResourceResp {
private String id; private String id;
/** /**
* 虚拟机类型 * 资源类型 docker, k8s, machine
*/ */
private String vmType; private String resourceType;
/** /**
* 虚拟机名称 * 其他资源表 ID
*/ */
private String vmName; private String resourceId;
/** /**
* 到期释放时间 * 资源名称
*/ */
private String expirationTime; private String resourceName;
/** //创建人id
* 数量 private String creator;
*/
private String sum;
/** //创建人姓名
* 平台 private String creatorName;
*/
private String platform;
/** //最后修改人id
* cpu架构 private String updater;
*/
private String cpuFramework;
/** //最后修改人姓名
* GPU配置状态 private String updaterName;
*/
private String gpuStatus;
/** private String remark;
* cpu内核数量
*/
private String cpuCoreSum;
/** private PipResourceMachine resourceMachine;
* 内存
*/
private String internalStorage;
/** private PipelineDockerEndpoint dockerEndpoint;
* 操作系统
*/
private String os;
/** private PipResourceK8S pipResourceK8S;
* 系统盘类型
*/
private String systemDiskType;
/**
* 系统盘内存大小
*/
private String systemDiskInternalStorage;
/**
* 管理员账号
*/
private String managerAccount;
/**
* 管理员密码
*/
private String managerPassword;
/**
* 安全组
*/
private String securityGroup;
/**
* 调度策略
*/
private String schedulingPolicy;
/**
* 引导方式
*/
private String bootMethod;
/**
* 备份机
*/
private String backup;
/**
* 反亲和组
*/
private String antiAffinityGroup;
/**
* 流水线id
*/
private String pipelineId;
/**
* 创建人用户id
*/
private Long createUserId;
private Long updateUserId;
/**
* 创建时间
*/
private LocalDateTime createTime;
private LocalDateTime updateTime;
} }

View File

@ -0,0 +1,29 @@
package cd.casic.ci.process.enums;
import lombok.Getter;
import java.util.HashMap;
import java.util.Map;
@Getter
public enum ResourceTypeEnum {
DOCKER("docker","镜像"),
K8S("k8s","k8s服务器"),
MACHINE("machine","定向机器"),
CLOUD("cloud","弹性云"),
;
private final String code;
private final String msg;
ResourceTypeEnum(String code, String msg) {
this.code = code;
this.msg = msg;
}
public static Map<String, ResourceTypeEnum> getCodeMap(){
Map<String, ResourceTypeEnum> map = new HashMap<>();
for (ResourceTypeEnum value : values()) {
map.put(value.code, value);
}
return map;
}
}

View File

@ -0,0 +1,24 @@
package cd.casic.ci.process.process.converter;
import cd.casic.ci.process.dal.resp.resource.ResourceFindResp;
import cd.casic.ci.process.process.dataObject.resource.PipResourceTemp;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
* @author HopeLi
* @version v1.0
* @ClassName PipelineConverter
* @Date: 2025/5/13 14:39
* @Description:
*/
@Mapper(componentModel = "spring")
public interface ResourceConverter {
ResourceConverter INSTANCE = Mappers.getMapper(ResourceConverter.class);
ResourceFindResp toBean(PipResourceTemp req);
List<ResourceFindResp> toRespList(List<PipResourceTemp> pipResourceTemps);
}

View File

@ -0,0 +1,14 @@
package cd.casic.ci.process.process.dal.pipeline;
import cd.casic.ci.process.process.dataObject.resource.PipResourceCloud;
import cd.casic.framework.mybatis.core.mapper.BaseMapperX;
/**
* @author HopeLi
* @version v1.0
* @ClassName PipResourceMachineDao
* @Date: 2025/5/13 14:39
* @Description:
*/
public interface PipResourceCloudDao extends BaseMapperX<PipResourceCloud> {
}

View File

@ -0,0 +1,14 @@
package cd.casic.ci.process.process.dal.pipeline;
import cd.casic.ci.process.process.dataObject.resource.PipelineDockerEndpoint;
import cd.casic.framework.mybatis.core.mapper.BaseMapperX;
/**
* @author HopeLi
* @version v1.0
* @ClassName PipResourceDockerEndpointDao
* @Date: 2025/5/13 14:39
* @Description:
*/
public interface PipResourceDockerEndpointDao extends BaseMapperX<PipelineDockerEndpoint> {
}

View File

@ -0,0 +1,14 @@
package cd.casic.ci.process.process.dal.pipeline;
import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S;
import cd.casic.framework.mybatis.core.mapper.BaseMapperX;
/**
* @author HopeLi
* @version v1.0
* @ClassName PipResourceK8SDao
* @Date: 2025/5/13 14:39
* @Description:
*/
public interface PipResourceK8SDao extends BaseMapperX<PipResourceK8S> {
}

View File

@ -0,0 +1,14 @@
package cd.casic.ci.process.process.dal.pipeline;
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
import cd.casic.framework.mybatis.core.mapper.BaseMapperX;
/**
* @author HopeLi
* @version v1.0
* @ClassName PipResourceMachineDao
* @Date: 2025/5/13 14:39
* @Description:
*/
public interface PipResourceMachineDao extends BaseMapperX<PipResourceMachine> {
}

View File

@ -1,6 +1,6 @@
package cd.casic.ci.process.process.dal.pipeline; package cd.casic.ci.process.process.dal.pipeline;
import cd.casic.ci.process.process.dataObject.resource.PipResource; import cd.casic.ci.process.process.dataObject.resource.PipResourceTemp;
import cd.casic.framework.mybatis.core.mapper.BaseMapperX; import cd.casic.framework.mybatis.core.mapper.BaseMapperX;
/** /**
@ -10,5 +10,5 @@ import cd.casic.framework.mybatis.core.mapper.BaseMapperX;
* @Date: 2025/5/13 14:39 * @Date: 2025/5/13 14:39
* @Description: * @Description:
*/ */
public interface PipResourceDao extends BaseMapperX<PipResource> { public interface PipResourceTempDao extends BaseMapperX<PipResourceTemp> {
} }

View File

@ -1,18 +1,18 @@
package cd.casic.ci.process.process.dataObject.resource; package cd.casic.ci.process.process.dataObject.resource;
import cd.casic.ci.process.process.dataObject.base.PipBaseElement; import cd.casic.ci.process.process.dataObject.base.PipBaseElement;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @ClassName PipResourceCloud
* @Author hopeli
* @Date 2025/5/31 22:19
* @Version 1.0
*/
@Data @Data
public class PipResource extends PipBaseElement { @EqualsAndHashCode(callSuper = true)
/** public class PipResourceCloud extends PipBaseElement {
* 主键id
*/
@TableId(type = IdType.ASSIGN_ID)
private String id;
/** /**
* 虚拟机类型 * 虚拟机类型
*/ */
@ -107,9 +107,4 @@ public class PipResource extends PipBaseElement {
* 反亲和组 * 反亲和组
*/ */
private String antiAffinityGroup; private String antiAffinityGroup;
/**
* 流水线id
*/
private String pipelineId;
} }

View File

@ -0,0 +1,11 @@
package cd.casic.ci.process.process.dataObject.resource;
import cd.casic.ci.process.process.dataObject.base.PipBaseElement;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class PipResourceK8S extends PipBaseElement {
}

View File

@ -0,0 +1,70 @@
package cd.casic.ci.process.process.dataObject.resource;
import cd.casic.ci.process.process.dataObject.base.PipBaseElement;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @ClassName PipResourceMachine
* @Author hopeli
* @Date 2025/31 21:48
* @Version 1.0
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class PipResourceMachine extends PipBaseElement {
/**
* 主机地址
*/
private String machineHost;
/**
* 描述
*/
private String description;
/**
* 机器状态
*/
private String machineStatus;
/**
* 登录用户名
*/
private String username;
/**
* SSH 端口
*/
private String sshPort;
/**
* 密码
*/
private String password;
/**
* 秘钥 ID
*/
private Long secretKeyId;
/**
* 代理 ID
*/
private Long proxyId;
/**
* 认证类型编码
*/
private Integer authenticationTypeCode;
/**
* 认证类型
*/
private String authType;
/**
* 操作系统
*/
private String osSystem;
}

View File

@ -0,0 +1,30 @@
package cd.casic.ci.process.process.dataObject.resource;
import cd.casic.ci.process.process.dataObject.base.PipBaseElement;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @ClassName PipResourceTmp
* @Author hopeli
* @Date 2025/31 21:40
* @Version 1.0
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class PipResourceTemp extends PipBaseElement {
/**
* 资源类型 docker, k8s, machine
*/
private String resourceType;
/**
* 其他资源表 ID
*/
private String resourceId;
/**
* 资源名称
*/
private String resourceName;
}

View File

@ -0,0 +1,52 @@
package cd.casic.ci.process.process.dataObject.resource;
import cd.casic.ci.process.process.dataObject.base.PipBaseElement;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* @ClassName PipelineDockerEndpoint
* @Author hopeli
* @Date 2025/5/31 21:54
* @Version 1.0
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class PipelineDockerEndpoint extends PipBaseElement {
/**
* Docker 类型远程/本地
*/
private String dockerType;
/**
* Docker 状态参考 DockerEndpointStateEnum
*/
private String state;
/**
* 主机地址
*/
private String host;
/**
* 端口
*/
private String port;
/**
* 最近测试时间
*/
private LocalDateTime latestTestTime;
/**
* 名称
*/
private String name;
/**
* 类型可能用于扩展分类
*/
private String type;
}

View File

@ -14,16 +14,13 @@ import cd.casic.ci.process.engine.manager.RunContextManager;
import cd.casic.ci.process.engine.runContext.BaseRunContext; import cd.casic.ci.process.engine.runContext.BaseRunContext;
import cd.casic.ci.process.engine.runContext.PipelineRunContext; import cd.casic.ci.process.engine.runContext.PipelineRunContext;
import cd.casic.ci.process.process.converter.PipelineConverter; import cd.casic.ci.process.process.converter.PipelineConverter;
import cd.casic.ci.process.process.dal.pipeline.PipResourceDao;
import cd.casic.ci.process.process.dal.pipeline.PipStageDao; import cd.casic.ci.process.process.dal.pipeline.PipStageDao;
import cd.casic.ci.process.process.dal.pipeline.PipTaskDao; import cd.casic.ci.process.process.dal.pipeline.PipTaskDao;
import cd.casic.ci.process.process.dal.pipeline.PipelineDao; import cd.casic.ci.process.process.dal.pipeline.PipelineDao;
import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline; import cd.casic.ci.process.process.dataObject.pipeline.PipPipeline;
import cd.casic.ci.process.process.dataObject.resource.PipResource;
import cd.casic.ci.process.process.dataObject.stage.PipStage; import cd.casic.ci.process.process.dataObject.stage.PipStage;
import cd.casic.ci.process.process.dataObject.task.PipTask; import cd.casic.ci.process.process.dataObject.task.PipTask;
import cd.casic.ci.process.process.service.pipeline.PipelineService; import cd.casic.ci.process.process.service.pipeline.PipelineService;
import cd.casic.ci.process.process.service.resource.impl.ResourceServiceImpl;
import cd.casic.ci.process.process.service.stage.impl.StageServiceImpl; import cd.casic.ci.process.process.service.stage.impl.StageServiceImpl;
import cd.casic.ci.process.process.service.task.impl.TaskServiceImpl; import cd.casic.ci.process.process.service.task.impl.TaskServiceImpl;
import cd.casic.ci.process.process.service.template.impl.TemplateManagerServiceImpl; import cd.casic.ci.process.process.service.template.impl.TemplateManagerServiceImpl;
@ -47,7 +44,11 @@ import org.springframework.util.ObjectUtils;
import java.time.Duration; import java.time.Duration;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/** /**
* @author HopeLi * @author HopeLi
@ -65,9 +66,6 @@ public class PipelineServiceImpl extends ServiceImpl<PipelineDao, PipPipeline> i
@Resource @Resource
private TaskServiceImpl taskService; private TaskServiceImpl taskService;
@Resource
private ResourceServiceImpl resourceService;
@Resource @Resource
private PipelineDao pipelineDao; private PipelineDao pipelineDao;
@ -77,9 +75,6 @@ public class PipelineServiceImpl extends ServiceImpl<PipelineDao, PipPipeline> i
@Resource @Resource
private PipTaskDao pipTaskDao; private PipTaskDao pipTaskDao;
@Resource
private PipResourceDao pipResourceDao;
@Resource @Resource
private AdminUserServiceImpl adminUserService; private AdminUserServiceImpl adminUserService;
@Resource @Resource
@ -105,17 +100,6 @@ public class PipelineServiceImpl extends ServiceImpl<PipelineDao, PipPipeline> i
pipeline.setState(1); pipeline.setState(1);
pipeline.setMachineId("1"); pipeline.setMachineId("1");
//新增对应的配置类数据
if (!ObjectUtils.isEmpty(pipelineReq.getResourceReq())){
PipResource resource = new PipResource();
BeanUtils.copyProperties(pipelineReq.getResourceReq(),resource);
resource.setCreator(pipeline.getCreator());
resource.setCreateTime(LocalDateTime.now());
resourceService.save(resource);
pipeline.setResourceId(resource.getId());
}
this.save(pipeline); this.save(pipeline);
//根据模板ID初始化 //根据模板ID初始化
@ -286,15 +270,6 @@ public class PipelineServiceImpl extends ServiceImpl<PipelineDao, PipPipeline> i
List<String> list = task.stream().map(PipTask::getId).toList(); List<String> list = task.stream().map(PipTask::getId).toList();
pipTaskDao.deleteByIds(list); pipTaskDao.deleteByIds(list);
} }
//删除resource表数据
if (StringUtils.isNotEmpty(pipeline.getResourceId())){
PipResource pipResource = pipResourceDao.selectById(pipeline.getResourceId());
if (!ObjectUtils.isEmpty(pipResource)){
pipResourceDao.deleteById(pipeline.getResourceId());
}
}
} }
@Override @Override

View File

@ -1,7 +1,14 @@
package cd.casic.ci.process.process.service.resource; package cd.casic.ci.process.process.service.resource;
import cd.casic.ci.process.process.dataObject.resource.PipResource; import cd.casic.ci.process.dal.req.resource.ResourceQueryReq;
import cd.casic.ci.process.dal.req.resource.ResourceReq;
import cd.casic.ci.process.dal.resp.resource.ResourceFindResp;
import cd.casic.ci.process.process.dataObject.resource.PipResourceTemp;
import cd.casic.framework.commons.pojo.PageResult;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import jakarta.validation.Valid;
import java.util.List;
/** /**
* @author HopeLi * @author HopeLi
@ -10,5 +17,16 @@ import com.baomidou.mybatisplus.extension.service.IService;
* @Date: 2025/5/13 10:27 * @Date: 2025/5/13 10:27
* @Description: * @Description:
*/ */
public interface ResourceService extends IService<PipResource> { public interface ResourceService extends IService<PipResourceTemp> {
String createResource(@Valid ResourceReq resourceReq);
void deleteResource(String id);
void updateResource(@Valid ResourceReq resourceReq);
ResourceFindResp findResourceById(String id);
List<ResourceFindResp> findResourceList(@Valid ResourceQueryReq req);
PageResult<ResourceFindResp> findResourcePage(@Valid ResourceQueryReq req);
} }

View File

@ -1,14 +1,39 @@
package cd.casic.ci.process.process.service.resource.impl; package cd.casic.ci.process.process.service.resource.impl;
import cd.casic.ci.process.process.dal.pipeline.PipResourceDao; import cd.casic.ci.process.dal.req.resource.ResourceQueryReq;
import cd.casic.ci.process.process.dataObject.resource.PipResource; import cd.casic.ci.process.dal.req.resource.ResourceReq;
import cd.casic.ci.process.dal.resp.resource.ResourceFindResp;
import cd.casic.ci.process.enums.ResourceTypeEnum;
import cd.casic.ci.process.process.converter.ResourceConverter;
import cd.casic.ci.process.process.dal.pipeline.PipResourceCloudDao;
import cd.casic.ci.process.process.dal.pipeline.PipResourceDockerEndpointDao;
import cd.casic.ci.process.process.dal.pipeline.PipResourceK8SDao;
import cd.casic.ci.process.process.dal.pipeline.PipResourceMachineDao;
import cd.casic.ci.process.process.dal.pipeline.PipResourceTempDao;
import cd.casic.ci.process.process.dataObject.resource.PipResourceCloud;
import cd.casic.ci.process.process.dataObject.resource.PipResourceK8S;
import cd.casic.ci.process.process.dataObject.resource.PipResourceMachine;
import cd.casic.ci.process.process.dataObject.resource.PipResourceTemp;
import cd.casic.ci.process.process.dataObject.resource.PipelineDockerEndpoint;
import cd.casic.ci.process.process.service.resource.ResourceService; import cd.casic.ci.process.process.service.resource.ResourceService;
import cd.casic.ci.process.process.service.stage.impl.StageServiceImpl; import cd.casic.framework.commons.exception.ServiceException;
import cd.casic.ci.process.process.service.task.impl.TaskServiceImpl; import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants;
import cd.casic.framework.commons.pojo.PageResult;
import cd.casic.framework.security.dal.user.AdminUserDO;
import cd.casic.framework.tenant.core.service.AdminUserServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import java.util.ArrayList;
import java.util.List;
/** /**
* @author HopeLi * @author HopeLi
@ -19,11 +44,299 @@ import org.springframework.stereotype.Service;
*/ */
@Service @Service
@Slf4j @Slf4j
public class ResourceServiceImpl extends ServiceImpl<PipResourceDao, PipResource> implements ResourceService { public class ResourceServiceImpl extends ServiceImpl<PipResourceTempDao, PipResourceTemp> implements ResourceService {
@Resource @Resource
private StageServiceImpl stageService; private PipResourceTempDao tempDao;
@Resource @Resource
private TaskServiceImpl taskService; private PipResourceMachineDao machineDao;
@Resource
private PipResourceDockerEndpointDao dockerEndpointDao;
@Resource
private PipResourceK8SDao k8SDao;
@Resource
private PipResourceCloudDao cloudDao;
@Resource
private AdminUserServiceImpl adminUserService;
@Autowired
private PipResourceDockerEndpointDao pipResourceDockerEndpointDao;
@Override
@Transactional(rollbackFor = Exception.class)
public String createResource(ResourceReq resourceReq) {
if (ObjectUtils.isEmpty(resourceReq.getResourceName())){
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源类型不可为空");
}
PipResourceTemp pipResourceTemp = new PipResourceTemp();
pipResourceTemp.setResourceName(resourceReq.getResourceName());
pipResourceTemp.setResourceType(resourceReq.getResourceType());
//如果资源类型不属于弹性云则新增如果属于弹性云则走申请流程
if (resourceReq.getResourceType().equals(ResourceTypeEnum.MACHINE.getCode())){
if (!ObjectUtils.isEmpty(resourceReq.getResourceMachine())){
PipResourceMachine resourceMachine = resourceReq.getResourceMachine();
machineDao.insert(resourceMachine);
pipResourceTemp.setResourceId(resourceMachine.getId());
}
tempDao.insert(pipResourceTemp);
}else if (resourceReq.getResourceType().equals(ResourceTypeEnum.K8S.getCode())) {
if (!ObjectUtils.isEmpty(resourceReq.getPipResourceK8S())) {
PipResourceK8S pipResourceK8S = resourceReq.getPipResourceK8S();
k8SDao.insert(pipResourceK8S);
pipResourceTemp.setResourceId(pipResourceK8S.getId());
}
tempDao.insert(pipResourceTemp);
}else if (resourceReq.getResourceType().equals(ResourceTypeEnum.DOCKER.getCode())) {
if (!ObjectUtils.isEmpty(resourceReq.getDockerEndpoint())) {
PipelineDockerEndpoint dockerEndpoint = resourceReq.getDockerEndpoint();
dockerEndpointDao.insert(dockerEndpoint);
pipResourceTemp.setResourceId(dockerEndpoint.getId());
}
tempDao.insert(pipResourceTemp);
}else if (resourceReq.getResourceType().equals(ResourceTypeEnum.CLOUD.getCode())){
PipResourceCloud pipResourceCloud = resourceReq.getPipResourceCloud();
cloudDao.insert(pipResourceCloud);
pipResourceTemp.setResourceId(pipResourceCloud.getId());
}
return pipResourceTemp.getId();
}
@Override
public void deleteResource(String id) {
PipResourceTemp pipResourceTemp = tempDao.selectById(id);
if (pipResourceTemp.getResourceType().equals(ResourceTypeEnum.MACHINE.getCode())){
machineDao.deleteById(pipResourceTemp.getResourceId());
}else if (pipResourceTemp.getResourceType().equals(ResourceTypeEnum.K8S.getCode())) {
k8SDao.deleteById(pipResourceTemp.getResourceId());
}else if (pipResourceTemp.getResourceType().equals(ResourceTypeEnum.DOCKER.getCode())) {
dockerEndpointDao.deleteById(pipResourceTemp.getResourceId());
} else if (pipResourceTemp.getResourceType().equals(ResourceTypeEnum.CLOUD.getCode())) {
cloudDao.deleteById(pipResourceTemp.getResourceId());
}
tempDao.deleteById(id);
}
@Override
public void updateResource(ResourceReq resourceReq) {
if (ObjectUtils.isEmpty(resourceReq.getResourceType())){
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源类型不可为空");
}
PipResourceTemp temp = tempDao.selectById(resourceReq.getId());
temp.setResourceName(resourceReq.getResourceName());
//先删除旧的资源信息
if (temp.getResourceType().equals(ResourceTypeEnum.MACHINE.getCode())){
machineDao.deleteById(temp.getResourceId());
}else if (temp.getResourceType().equals(ResourceTypeEnum.K8S.getCode())) {
k8SDao.deleteById(temp.getResourceId());
if (!ObjectUtils.isEmpty(resourceReq.getPipResourceK8S())) {
PipResourceK8S pipResourceK8S = resourceReq.getPipResourceK8S();
k8SDao.updateById(pipResourceK8S);
}
}else if (temp.getResourceType().equals(ResourceTypeEnum.DOCKER.getCode())) {
dockerEndpointDao.deleteById(temp.getResourceId());
if (!ObjectUtils.isEmpty(resourceReq.getDockerEndpoint())) {
PipelineDockerEndpoint dockerEndpoint = resourceReq.getDockerEndpoint();
dockerEndpointDao.updateById(dockerEndpoint);
}
}else if (temp.getResourceType().equals(ResourceTypeEnum.CLOUD.getCode())){
cloudDao.deleteById(temp.getResourceId());
}
//根据新资源信息新增
if (resourceReq.getResourceType().equals(ResourceTypeEnum.MACHINE.getCode())){
//新增
if (!ObjectUtils.isEmpty(resourceReq.getResourceMachine())){
PipResourceMachine resourceMachine = resourceReq.getResourceMachine();
machineDao.insert(resourceMachine);
temp.setResourceId(resourceMachine.getId());
}
}else if (resourceReq.getResourceType().equals(ResourceTypeEnum.K8S.getCode())){
//新增
if (!ObjectUtils.isEmpty(resourceReq.getPipResourceK8S())){
PipResourceK8S resourceK8S = resourceReq.getPipResourceK8S();
k8SDao.insert(resourceK8S);
temp.setResourceId(resourceK8S.getId());
}
}else if (resourceReq.getResourceType().equals(ResourceTypeEnum.DOCKER.getCode())){
//新增
if (!ObjectUtils.isEmpty(resourceReq.getDockerEndpoint())){
PipelineDockerEndpoint dockerEndpoint = resourceReq.getDockerEndpoint();
dockerEndpointDao.insert(dockerEndpoint);
temp.setResourceId(dockerEndpoint.getId());
}
}else if (resourceReq.getResourceType().equals(ResourceTypeEnum.CLOUD.getCode())){
//新增
if (!ObjectUtils.isEmpty(resourceReq.getPipResourceCloud())){
PipResourceCloud resourceCloud = resourceReq.getPipResourceCloud();
cloudDao.insert(resourceCloud);
temp.setResourceId(resourceCloud.getId());
}
}
temp.setResourceType(resourceReq.getResourceType());
tempDao.updateById(temp);
}
@Override
public ResourceFindResp findResourceById(String id) {
ResourceFindResp resp = new ResourceFindResp();
PipResourceTemp pipResourceTemp = tempDao.selectById(id);
if (ObjectUtils.isEmpty(pipResourceTemp)){
throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"资源不存在");
}
resp.setId(pipResourceTemp.getId());
resp.setResourceType(pipResourceTemp.getResourceType());
resp.setResourceId(pipResourceTemp.getResourceId());
resp.setResourceName(pipResourceTemp.getResourceName());
setResource(resp);
setUserName(resp);
return resp;
}
@Override
public List<ResourceFindResp> findResourceList(ResourceQueryReq query) {
QueryWrapper<PipResourceTemp> wrapper = new QueryWrapper<>();
if (!ObjectUtils.isEmpty(query.getId())){
wrapper.eq("id",query.getId());
}
if (!ObjectUtils.isEmpty(query.getIdList())){
wrapper.in("id",query.getId());
}
if (!ObjectUtils.isEmpty(query.getResourceName())){
wrapper.like("resource_name",query.getResourceName());
}
if (!ObjectUtils.isEmpty(query.getResourceId())){
wrapper.eq("resource_id",query.getResourceId());
}
if (!ObjectUtils.isEmpty(query.getResourceType())){
wrapper.eq("resource_type",query.getResourceType());
}
if (!ObjectUtils.isEmpty(query.getCreator())){
wrapper.eq("creator",query.getCreator());
}
List<PipResourceTemp> pipResourceTempList = tempDao.selectList(wrapper);
if (ObjectUtils.isEmpty(pipResourceTempList)){
return new ArrayList<>(0);
}
List<ResourceFindResp> respList = ResourceConverter.INSTANCE.toRespList(pipResourceTempList);
//对资源进行赋值
respList.forEach(this::setResource);
respList.forEach(this::setUserName);
return respList;
}
@Override
public PageResult<ResourceFindResp> findResourcePage(ResourceQueryReq query) {
Page<ResourceFindResp> respPage = new Page<>();
QueryWrapper<PipResourceTemp> wrapper = new QueryWrapper<>();
if (!ObjectUtils.isEmpty(query.getId())){
wrapper.eq("id",query.getId());
}
if (!ObjectUtils.isEmpty(query.getIdList())){
wrapper.in("id",query.getId());
}
if (!ObjectUtils.isEmpty(query.getResourceName())){
wrapper.like("resource_name",query.getResourceName());
}
if (!ObjectUtils.isEmpty(query.getResourceId())){
wrapper.eq("resource_id",query.getResourceId());
}
if (!ObjectUtils.isEmpty(query.getResourceType())){
wrapper.eq("resource_type",query.getResourceType());
}
if (!ObjectUtils.isEmpty(query.getCreator())){
wrapper.eq("creator",query.getCreator());
}
Page<PipResourceTemp> pipResourceTempPage = tempDao.selectPage(new Page<>(query.getPageNo(), query.getPageSize()), wrapper);
if (ObjectUtils.isEmpty(pipResourceTempPage)){
return new PageResult<>();
}
List<ResourceFindResp> respList = ResourceConverter.INSTANCE.toRespList(pipResourceTempPage.getRecords());
//对资源进行赋值
respList.forEach(this::setResource);
respList.forEach(this::setUserName);
respPage.setRecords(respList);
respPage.setTotal(pipResourceTempPage.getTotal());
respPage.setCurrent(pipResourceTempPage.getCurrent());
respPage.setSize(pipResourceTempPage.getSize());
PageResult<ResourceFindResp> pageResult = new PageResult<>(respList,pipResourceTempPage.getTotal());
return pageResult;
}
private void setResource(ResourceFindResp resourceFindResp) {
if (resourceFindResp.getResourceType().equals(ResourceTypeEnum.MACHINE.getCode())){
PipResourceMachine resourceMachine = machineDao.selectById(resourceFindResp.getResourceId());
resourceFindResp.setResourceMachine(resourceMachine);
}else if (resourceFindResp.getResourceType().equals(ResourceTypeEnum.K8S.getCode())) {
PipResourceK8S pipResourceK8S = k8SDao.selectById(resourceFindResp.getResourceId());
resourceFindResp.setPipResourceK8S(pipResourceK8S);
}else if (resourceFindResp.getResourceType().equals(ResourceTypeEnum.DOCKER.getCode())) {
PipelineDockerEndpoint dockerEndpoint = dockerEndpointDao.selectById(resourceFindResp.getResourceId());
resourceFindResp.setDockerEndpoint(dockerEndpoint);
}else if (resourceFindResp.getResourceType().equals(ResourceTypeEnum.CLOUD.getCode())) {
PipResourceCloud resourceCloud = cloudDao.selectById(resourceFindResp.getResourceId());
resourceFindResp.setPipResourceCloud(resourceCloud);
}
}
private void setUserName(ResourceFindResp resp) {
if (!StringUtils.isEmpty(resp.getCreator())){
AdminUserDO user = adminUserService.getUser(Long.valueOf(resp.getCreator()));
if (!ObjectUtils.isEmpty(user)){
resp.setCreatorName(user.getUsername());
}
}
if (!StringUtils.isEmpty(resp.getUpdater())){
AdminUserDO user = adminUserService.getUser(Long.valueOf(resp.getUpdater()));
if (!ObjectUtils.isEmpty(user)){
resp.setUpdaterName(user.getUsername());
}
}
}
} }

View File

@ -3,9 +3,12 @@ package cd.casic.server.controller;
import cd.casic.ci.process.dal.req.resource.ResourceQueryReq; import cd.casic.ci.process.dal.req.resource.ResourceQueryReq;
import cd.casic.ci.process.dal.req.resource.ResourceReq; import cd.casic.ci.process.dal.req.resource.ResourceReq;
import cd.casic.ci.process.dal.resp.resource.ResourceResp; import cd.casic.ci.process.dal.resp.resource.ResourceFindResp;
import cd.casic.ci.process.process.dataObject.base.BaseIdReq;
import cd.casic.ci.process.process.service.resource.ResourceService;
import cd.casic.framework.commons.pojo.CommonResult; import cd.casic.framework.commons.pojo.CommonResult;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import cd.casic.framework.commons.pojo.PageResult;
import jakarta.annotation.Resource;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
@ -13,7 +16,6 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@ -27,33 +29,32 @@ import java.util.List;
@RequestMapping("/resource") @RequestMapping("/resource")
public class ResourceController { public class ResourceController {
@Resource
private ResourceService resourceService;
@PostMapping(path="/createResource") @PostMapping(path="/createResource")
public CommonResult<String> createResource(@RequestBody @NotNull @Valid ResourceReq resourceReq){ public CommonResult<String> createResource(@RequestBody @Valid ResourceReq resourceReq){
// String pipelineAuthHostId = envService.createEnv(env); String resourceId = resourceService.createResource(resourceReq);
String resourceId = "1";
return CommonResult.success(resourceId); return CommonResult.success(resourceId);
} }
@PostMapping(path="/deleteResource") @PostMapping(path="/deleteResource")
public CommonResult<Void> deleteResource(@NotNull String resourceId){ public CommonResult<Void> deleteResource(@RequestBody @Valid BaseIdReq req){
// envService.deleteEnv(envId); resourceService.deleteResource(req.getId());
return CommonResult.success(); return CommonResult.success();
} }
@PostMapping(path="/findResourceList") @PostMapping(path="/findResourceList")
public CommonResult<List<ResourceResp>> findResourceList(@NotNull ResourceQueryReq query){ public CommonResult<List<ResourceFindResp>> findResourceList(@RequestBody @Valid ResourceQueryReq req){
// List<Env> envList = envService.findEnvList(envQuery); List<ResourceFindResp> ResourceFindRespList = resourceService.findResourceList(req);
List<ResourceResp> resourceRespList = new ArrayList<>(0);
ResourceResp resourceResp = new ResourceResp();
resourceRespList.add(resourceResp);
return CommonResult.success(resourceRespList); return CommonResult.success(ResourceFindRespList);
} }
@ -61,23 +62,26 @@ public class ResourceController {
@PostMapping(path="/updateResource") @PostMapping(path="/updateResource")
public CommonResult<Void> updateResource(@RequestBody @NotNull @Valid ResourceReq resourceReq){ public CommonResult<Void> updateResource(@RequestBody @NotNull @Valid ResourceReq resourceReq){
// this.envService.updateEnv(env); resourceService.updateResource(resourceReq);
return CommonResult.success(); return CommonResult.success();
} }
@PostMapping(path="/findResourcePage") @PostMapping(path="/findResourcePage")
public CommonResult<Page<ResourceResp>> findResourcePage(@RequestBody @NotNull @Valid ResourceQueryReq query){ public CommonResult<PageResult<ResourceFindResp>> findResourcePage(@RequestBody @NotNull @Valid ResourceQueryReq req){
// Pagination<Env> envPage = envService.findEnvPage(envQuery); PageResult<ResourceFindResp> respPage = resourceService.findResourcePage(req);
Page<ResourceResp> respPage = new Page<>();
List<ResourceResp> resourceRespList = new ArrayList<>(0);
ResourceResp resourceResp = new ResourceResp();
resourceResp.setId("1");
resourceRespList.add(resourceResp);
respPage.setRecords(resourceRespList);
return CommonResult.success(respPage); return CommonResult.success(respPage);
} }
@PostMapping(path="/findResourceById")
public CommonResult<ResourceFindResp> findResourceById(@RequestBody @Valid BaseIdReq req){
ResourceFindResp resp = resourceService.findResourceById(req.getId());
return CommonResult.success(resp);
}
} }