diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dal/req/resource/ResourceQueryReq.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dal/req/resource/ResourceQueryReq.java index 136cc33b..e1ba38c7 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dal/req/resource/ResourceQueryReq.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dal/req/resource/ResourceQueryReq.java @@ -1,127 +1,37 @@ package cd.casic.ci.process.dal.req.resource; +import cd.casic.framework.commons.pojo.PageParam; import lombok.Data; -import java.time.LocalDateTime; +import java.util.List; @Data -public class ResourceQueryReq { +public class ResourceQueryReq extends PageParam { /** * 主键id */ private String id; - /** - * 虚拟机类型 - */ - private String vmType; + private List idList; /** - * 虚拟机名称 + * 资源类型 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 */ - private Long createUserId; - - private Long updateUserId; - - /** - * 创建时间 - */ - private LocalDateTime createTime; - - private LocalDateTime updateTime; + private String creator; } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dal/req/resource/ResourceReq.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dal/req/resource/ResourceReq.java index 5bc44d66..56b738a9 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dal/req/resource/ResourceReq.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dal/req/resource/ResourceReq.java @@ -1,111 +1,34 @@ 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; @Data public class ResourceReq { - /** - * 主键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 String expirationTime; + private PipResourceMachine resourceMachine; - /** - * 数量 - */ - private String sum; + private PipelineDockerEndpoint dockerEndpoint; - /** - * 平台 - */ - private String platform; + private PipResourceK8S pipResourceK8S; - /** - * 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; + private PipResourceCloud pipResourceCloud; } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dal/resp/resource/ResourceFindResp.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dal/resp/resource/ResourceFindResp.java new file mode 100644 index 00000000..063af41d --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dal/resp/resource/ResourceFindResp.java @@ -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; + +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dal/resp/resource/ResourceResp.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dal/resp/resource/ResourceResp.java index 6d72dc66..82ee04ac 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dal/resp/resource/ResourceResp.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/dal/resp/resource/ResourceResp.java @@ -1,9 +1,10 @@ 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 java.time.LocalDateTime; - @Data public class ResourceResp { /** @@ -12,116 +13,38 @@ public class ResourceResp { 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; - /** - * 数量 - */ - private String sum; + //创建人id + private String creator; - /** - * 平台 - */ - private String platform; + //创建人姓名 + private String creatorName; - /** - * cpu架构 - */ - private String cpuFramework; + //最后修改人id + private String updater; - /** - * GPU配置状态 - */ - private String gpuStatus; + //最后修改人姓名 + private String updaterName; - /** - * cpu内核数量 - */ - private String cpuCoreSum; + private String remark; - /** - * 内存 - */ - private String internalStorage; + private PipResourceMachine resourceMachine; - /** - * 操作系统 - */ - private String os; + private PipelineDockerEndpoint dockerEndpoint; - /** - * 系统盘类型 - */ - private String systemDiskType; + private PipResourceK8S pipResourceK8S; - /** - * 系统盘内存大小 - */ - 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; } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/enums/ResourceTypeEnum.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/enums/ResourceTypeEnum.java new file mode 100644 index 00000000..5b1c1b51 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/enums/ResourceTypeEnum.java @@ -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 getCodeMap(){ + Map map = new HashMap<>(); + for (ResourceTypeEnum value : values()) { + map.put(value.code, value); + } + return map; + } +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/ResourceConverter.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/ResourceConverter.java new file mode 100644 index 00000000..357935d8 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/converter/ResourceConverter.java @@ -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 toRespList(List pipResourceTemps); + +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dal/pipeline/PipResourceCloudDao.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dal/pipeline/PipResourceCloudDao.java new file mode 100644 index 00000000..0a445ef4 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dal/pipeline/PipResourceCloudDao.java @@ -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 { +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dal/pipeline/PipResourceDockerEndpointDao.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dal/pipeline/PipResourceDockerEndpointDao.java new file mode 100644 index 00000000..e954751e --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dal/pipeline/PipResourceDockerEndpointDao.java @@ -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 { +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dal/pipeline/PipResourceK8SDao.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dal/pipeline/PipResourceK8SDao.java new file mode 100644 index 00000000..2864aa5a --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dal/pipeline/PipResourceK8SDao.java @@ -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 { +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dal/pipeline/PipResourceMachineDao.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dal/pipeline/PipResourceMachineDao.java new file mode 100644 index 00000000..68cd0b78 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dal/pipeline/PipResourceMachineDao.java @@ -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 { +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dal/pipeline/PipResourceDao.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dal/pipeline/PipResourceTempDao.java similarity index 77% rename from modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dal/pipeline/PipResourceDao.java rename to modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dal/pipeline/PipResourceTempDao.java index cfa6e58d..475c70e5 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dal/pipeline/PipResourceDao.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dal/pipeline/PipResourceTempDao.java @@ -1,6 +1,6 @@ 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; /** @@ -10,5 +10,5 @@ import cd.casic.framework.mybatis.core.mapper.BaseMapperX; * @Date: 2025/5/13 14:39 * @Description: */ -public interface PipResourceDao extends BaseMapperX { +public interface PipResourceTempDao extends BaseMapperX { } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResource.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResourceCloud.java similarity index 82% rename from modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResource.java rename to modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResourceCloud.java index 52da9d4c..40574a0d 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResource.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResourceCloud.java @@ -1,18 +1,18 @@ package cd.casic.ci.process.process.dataObject.resource; 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.EqualsAndHashCode; +/** + * @ClassName PipResourceCloud + * @Author hopeli + * @Date 2025/5/31 22:19 + * @Version 1.0 + */ @Data -public class PipResource extends PipBaseElement { - /** - * 主键id - */ - @TableId(type = IdType.ASSIGN_ID) - private String id; - + @EqualsAndHashCode(callSuper = true) +public class PipResourceCloud extends PipBaseElement { /** * 虚拟机类型 */ @@ -107,9 +107,4 @@ public class PipResource extends PipBaseElement { * 反亲和组 */ private String antiAffinityGroup; - - /** - * 流水线id - */ - private String pipelineId; } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResourceK8S.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResourceK8S.java new file mode 100644 index 00000000..c6512114 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResourceK8S.java @@ -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 { + +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResourceMachine.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResourceMachine.java new file mode 100644 index 00000000..b539f4ab --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResourceMachine.java @@ -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; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResourceTemp.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResourceTemp.java new file mode 100644 index 00000000..5461f31f --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipResourceTemp.java @@ -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; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipelineDockerEndpoint.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipelineDockerEndpoint.java new file mode 100644 index 00000000..66237b31 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/resource/PipelineDockerEndpoint.java @@ -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; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/impl/PipelineServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/impl/PipelineServiceImpl.java index b2692c23..177585af 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/impl/PipelineServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/pipeline/impl/PipelineServiceImpl.java @@ -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.PipelineRunContext; 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.PipTaskDao; 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.resource.PipResource; import cd.casic.ci.process.process.dataObject.stage.PipStage; 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.resource.impl.ResourceServiceImpl; 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.template.impl.TemplateManagerServiceImpl; @@ -47,7 +44,11 @@ import org.springframework.util.ObjectUtils; import java.time.Duration; 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 @@ -65,9 +66,6 @@ public class PipelineServiceImpl extends ServiceImpl i @Resource private TaskServiceImpl taskService; - @Resource - private ResourceServiceImpl resourceService; - @Resource private PipelineDao pipelineDao; @@ -77,9 +75,6 @@ public class PipelineServiceImpl extends ServiceImpl i @Resource private PipTaskDao pipTaskDao; - @Resource - private PipResourceDao pipResourceDao; - @Resource private AdminUserServiceImpl adminUserService; @Resource @@ -105,17 +100,6 @@ public class PipelineServiceImpl extends ServiceImpl i pipeline.setState(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); //根据模板ID初始化 @@ -286,15 +270,6 @@ public class PipelineServiceImpl extends ServiceImpl i List list = task.stream().map(PipTask::getId).toList(); pipTaskDao.deleteByIds(list); } - - //删除resource表数据 - if (StringUtils.isNotEmpty(pipeline.getResourceId())){ - PipResource pipResource = pipResourceDao.selectById(pipeline.getResourceId()); - - if (!ObjectUtils.isEmpty(pipResource)){ - pipResourceDao.deleteById(pipeline.getResourceId()); - } - } } @Override diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/resource/ResourceService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/resource/ResourceService.java index bc0a88d4..29265cd9 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/resource/ResourceService.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/resource/ResourceService.java @@ -1,7 +1,14 @@ 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 jakarta.validation.Valid; + +import java.util.List; /** * @author HopeLi @@ -10,5 +17,16 @@ import com.baomidou.mybatisplus.extension.service.IService; * @Date: 2025/5/13 10:27 * @Description: */ -public interface ResourceService extends IService { +public interface ResourceService extends IService { + String createResource(@Valid ResourceReq resourceReq); + + void deleteResource(String id); + + void updateResource(@Valid ResourceReq resourceReq); + + ResourceFindResp findResourceById(String id); + + List findResourceList(@Valid ResourceQueryReq req); + + PageResult findResourcePage(@Valid ResourceQueryReq req); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/resource/impl/ResourceServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/resource/impl/ResourceServiceImpl.java index 5eafa065..b5b9677d 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/resource/impl/ResourceServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/resource/impl/ResourceServiceImpl.java @@ -1,14 +1,39 @@ package cd.casic.ci.process.process.service.resource.impl; -import cd.casic.ci.process.process.dal.pipeline.PipResourceDao; -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.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.stage.impl.StageServiceImpl; -import cd.casic.ci.process.process.service.task.impl.TaskServiceImpl; +import cd.casic.framework.commons.exception.ServiceException; +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 jakarta.annotation.Resource; 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.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; + +import java.util.ArrayList; +import java.util.List; /** * @author HopeLi @@ -19,11 +44,299 @@ import org.springframework.stereotype.Service; */ @Service @Slf4j -public class ResourceServiceImpl extends ServiceImpl implements ResourceService { +public class ResourceServiceImpl extends ServiceImpl implements ResourceService { @Resource - private StageServiceImpl stageService; + private PipResourceTempDao tempDao; @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 findResourceList(ResourceQueryReq query) { + QueryWrapper 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 pipResourceTempList = tempDao.selectList(wrapper); + + if (ObjectUtils.isEmpty(pipResourceTempList)){ + return new ArrayList<>(0); + } + + List respList = ResourceConverter.INSTANCE.toRespList(pipResourceTempList); + + //对资源进行赋值 + respList.forEach(this::setResource); + respList.forEach(this::setUserName); + + return respList; + } + + @Override + public PageResult findResourcePage(ResourceQueryReq query) { + Page respPage = new Page<>(); + + QueryWrapper 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 pipResourceTempPage = tempDao.selectPage(new Page<>(query.getPageNo(), query.getPageSize()), wrapper); + + if (ObjectUtils.isEmpty(pipResourceTempPage)){ + return new PageResult<>(); + } + + List 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 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()); + } + } + } } diff --git a/ops-server/src/main/java/cd/casic/server/controller/ResourceController.java b/ops-server/src/main/java/cd/casic/server/controller/ResourceController.java index 0dfcc06c..f728c4d8 100644 --- a/ops-server/src/main/java/cd/casic/server/controller/ResourceController.java +++ b/ops-server/src/main/java/cd/casic/server/controller/ResourceController.java @@ -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.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 com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import cd.casic.framework.commons.pojo.PageResult; +import jakarta.annotation.Resource; import jakarta.validation.Valid; import org.jetbrains.annotations.NotNull; 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.RestController; -import java.util.ArrayList; import java.util.List; /** @@ -27,33 +29,32 @@ import java.util.List; @RequestMapping("/resource") public class ResourceController { + @Resource + private ResourceService resourceService; + @PostMapping(path="/createResource") - public CommonResult createResource(@RequestBody @NotNull @Valid ResourceReq resourceReq){ + public CommonResult createResource(@RequestBody @Valid ResourceReq resourceReq){ -// String pipelineAuthHostId = envService.createEnv(env); + String resourceId = resourceService.createResource(resourceReq); - String resourceId = "1"; return CommonResult.success(resourceId); } @PostMapping(path="/deleteResource") - public CommonResult deleteResource(@NotNull String resourceId){ + public CommonResult deleteResource(@RequestBody @Valid BaseIdReq req){ -// envService.deleteEnv(envId); + resourceService.deleteResource(req.getId()); return CommonResult.success(); } @PostMapping(path="/findResourceList") - public CommonResult> findResourceList(@NotNull ResourceQueryReq query){ + public CommonResult> findResourceList(@RequestBody @Valid ResourceQueryReq req){ -// List envList = envService.findEnvList(envQuery); - List resourceRespList = new ArrayList<>(0); - ResourceResp resourceResp = new ResourceResp(); - resourceRespList.add(resourceResp); + List ResourceFindRespList = resourceService.findResourceList(req); - return CommonResult.success(resourceRespList); + return CommonResult.success(ResourceFindRespList); } @@ -61,23 +62,26 @@ public class ResourceController { @PostMapping(path="/updateResource") public CommonResult updateResource(@RequestBody @NotNull @Valid ResourceReq resourceReq){ -// this.envService.updateEnv(env); + resourceService.updateResource(resourceReq); return CommonResult.success(); } @PostMapping(path="/findResourcePage") - public CommonResult> findResourcePage(@RequestBody @NotNull @Valid ResourceQueryReq query){ + public CommonResult> findResourcePage(@RequestBody @NotNull @Valid ResourceQueryReq req){ -// Pagination envPage = envService.findEnvPage(envQuery); - Page respPage = new Page<>(); - List resourceRespList = new ArrayList<>(0); - ResourceResp resourceResp = new ResourceResp(); - resourceResp.setId("1"); - resourceRespList.add(resourceResp); - respPage.setRecords(resourceRespList); + PageResult respPage = resourceService.findResourcePage(req); return CommonResult.success(respPage); } + + @PostMapping(path="/findResourceById") + public CommonResult findResourceById(@RequestBody @Valid BaseIdReq req){ + + ResourceFindResp resp = resourceService.findResourceById(req.getId()); + + return CommonResult.success(resp); + } + }