diff --git a/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/enums/AuthSystemType.java b/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/enums/AuthSystemType.java new file mode 100644 index 0000000..801c481 --- /dev/null +++ b/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/enums/AuthSystemType.java @@ -0,0 +1,17 @@ +package cd.casic.ci.common.pipeline.enums; + +public enum AuthSystemType { + // v0权限中心 + V0_AUTH_TYPE("v0"), + + // v3权限中心 + V3_AUTH_TYPE("v3"), + + // rbac权限中心 + RBAC_AUTH_TYPE("rbac"); + private String value; + + AuthSystemType(String value) { + this.value = value; + } +} diff --git a/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/pojo/Pagination.java b/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/pojo/Pagination.java new file mode 100644 index 0000000..6898138 --- /dev/null +++ b/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/pojo/Pagination.java @@ -0,0 +1,23 @@ +package cd.casic.ci.common.pipeline.pojo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(title = "分页数据包装模型") +public class Pagination { + + @Schema(title = "是否有下一页", required = true) + private boolean hasNext; + + @Schema(title = "数据", required = true) + private List records; + + @Schema(title = "总记录行数", required = false) + private Long count; +} \ No newline at end of file diff --git a/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/pojo/auth/ProjectConditionDTO.java b/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/pojo/auth/ProjectConditionDTO.java new file mode 100644 index 0000000..6ab3ad7 --- /dev/null +++ b/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/pojo/auth/ProjectConditionDTO.java @@ -0,0 +1,62 @@ +package cd.casic.ci.common.pipeline.pojo.auth; + + +import cd.casic.ci.common.pipeline.enums.AuthSystemType; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(title = "筛选项目条件实体") +public class ProjectConditionDTO { + + @Schema(title = "中心ID") + private Long centerId; + + @Schema(title = "部门ID") + private Long deptId; + + @Schema(title = "bgId") + private Long bgId; + + @Schema(title = "bg列表") + private List bgIdList; + + @Schema(title = "项目创建人") + private String projectCreator; + + @Schema(title = "排除项目code") + private List excludedProjectCodes; + + @Schema(title = "项目ID列表") + private List projectCodes; + + @Schema(title = "资源类型") + private String resourceType; + + @Schema(title = "路由tag") + private AuthSystemType routerTag; + + @Schema(title = "是否包含router_tag为null") + private Boolean includeNullRouterTag = false; + + @Schema(title = "是否关联产品") + private Boolean relatedProduct; + + @Schema(title = "排除创建时间大于该值的项目") + private String excludedCreateTime; + + @Schema(title = "是否启用") + private Boolean enabled; + + @Schema(title = "渠道代码") + private String channelCode; + + @Schema(title = "remoteDev相关") + private Boolean queryRemoteDevFlag; +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/event/engine/control/CallBackControl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/control/CallBackControl.java similarity index 99% rename from modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/event/engine/control/CallBackControl.java rename to modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/control/CallBackControl.java index 8f7c132..7166cc1 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/event/engine/control/CallBackControl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/engine/control/CallBackControl.java @@ -1,4 +1,4 @@ -package cd.casic.ci.process.process.event.engine.control; +package cd.casic.ci.process.engine.control; import cd.casic.ci.common.pipeline.Model; @@ -27,9 +27,6 @@ import cd.casic.ci.process.process.service.base.pojo.*; import cd.casic.ci.process.process.service.base.pojo.constant.CallbackConstants; import cd.casic.ci.project.service.ServiceAllocIdResource; import cd.casic.framework.commons.util.watcher.Watcher; -import com.alibaba.fastjson.JSON; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import io.github.resilience4j.circuitbreaker.CallNotPermittedException; diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/callback/listener/ProjectCallbackEventListener.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/callback/listener/ProjectCallbackEventListener.java new file mode 100644 index 0000000..3b074b1 --- /dev/null +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/callback/listener/ProjectCallbackEventListener.java @@ -0,0 +1,94 @@ +package cd.casic.ci.process.process.callback.listener; + + +import cd.casic.ci.process.engine.control.CallBackControl; +import cd.casic.ci.project.dal.pojo.ProjectCreateInfo; +import cd.casic.ci.project.dal.pojo.ProjectVO; +import cd.casic.ci.project.pojo.ProjectUpdateInfo; +import cd.casic.ci.project.pojo.mq.ProjectBroadCastEvent; +import cd.casic.ci.project.pojo.mq.ProjectCreateBroadCastEvent; +import cd.casic.ci.project.pojo.mq.ProjectEnableStatusBroadCastEvent; +import cd.casic.ci.project.pojo.mq.ProjectUpdateBroadCastEvent; +import cd.casic.ci.project.service.ProjectService; +import cd.casic.framework.mq.redis.core.stream.AbstractRedisStreamMessageListener; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class ProjectCallbackEventListener extends AbstractRedisStreamMessageListener { + @Resource + private CallBackControl callBackControl; + private ProjectService projectService; + @Override + public void onMessage(ProjectBroadCastEvent event) { + log.info("Receive ProjectEvent from MQ [$event]"); + try { + if (event instanceof ProjectUpdateBroadCastEvent) { + onReceiveProjectUpdate((ProjectUpdateBroadCastEvent)event); + } else if (event instanceof ProjectEnableStatusBroadCastEvent) { + onReceiveProjectEnable((ProjectEnableStatusBroadCastEvent)event); + } else if (event instanceof ProjectCreateBroadCastEvent) { + onReceiveProjectCreate((ProjectCreateBroadCastEvent)event); + } + } catch (Exception e) { + log.error("BKSystemMonitor| project callback listener execute error", e); + } + } + /** + * 处理创建项目事件 + * @param event ProjectCreateBroadCastEvent + */ + private void onReceiveProjectCreate(ProjectCreateBroadCastEvent event){ + ProjectCreateInfo projectInfo = event.getProjectInfo(); + callBackControl.projectCreate( + projectInfo.getEnglishName(), + projectInfo.getProjectName(), + event.getUserId()); + } + /** + * 处理更新项目事件 + * @param event ProjectUpdateBroadCastEvent + */ + private void onReceiveProjectUpdate(ProjectUpdateBroadCastEvent event){ + ProjectUpdateInfo projectInfo = event.getProjectInfo(); + callBackControl.projectUpdate( + projectInfo.getEnglishName(), + projectInfo.getProjectName(), + event.getUserId() + ); + } + /** + * 处理项目禁用事件 + * @param event ProjectEnableStatusBroadCastEvent + */ + private void onReceiveProjectEnable(ProjectEnableStatusBroadCastEvent event){ + ProjectVO project = getProject(event.getProjectId()); + if (project!=null) { + if (event.getEnable()) { + callBackControl.projectEnable(event.getProjectId(),project.getProjectName(),event.getUserId()); + } else { + callBackControl.projectDisable(event.getProjectId(),project.getProjectName(),event.getUserId()); + } + } + } + + + private ProjectVO getProject(String projectEnglishName){ + if (StringUtils.isEmpty(projectEnglishName)) { + return null; + } + try { + return projectService.getByEnglishName(projectEnglishName); + } catch (Exception e) { + log.warn( + "fail to get project info|projectEnglishName[$projectEnglishName]", + e + ); + return null; + } + } +} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/event/callback/listener/ProjectCallbackEventListener.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/event/callback/listener/ProjectCallbackEventListener.java deleted file mode 100644 index 9804f0d..0000000 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/event/callback/listener/ProjectCallbackEventListener.java +++ /dev/null @@ -1,43 +0,0 @@ -package cd.casic.ci.process.process.event.callback.listener; - - -import cd.casic.ci.project.pojo.mq.ProjectBroadCastEvent; -import cd.casic.ci.project.pojo.mq.ProjectCreateBroadCastEvent; -import cd.casic.ci.project.pojo.mq.ProjectEnableStatusBroadCastEvent; -import cd.casic.ci.project.pojo.mq.ProjectUpdateBroadCastEvent; -import cd.casic.framework.mq.redis.core.stream.AbstractRedisStreamMessageListener; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -@Service -@Slf4j -public class ProjectCallbackEventListener extends AbstractRedisStreamMessageListener { - @Override - public void onMessage(ProjectBroadCastEvent message) { - log.info("Receive ProjectEvent from MQ [$event]"); - try { - if (message instanceof ProjectUpdateBroadCastEvent) { - - } else if (message instanceof ProjectEnableStatusBroadCastEvent) { - - } else if (message instanceof ProjectCreateBroadCastEvent) { - - } -// when (event) { -// is ProjectUpdateBroadCastEvent -> { -// onReceiveProjectUpdate(event) -// } -// -// is ProjectEnableStatusBroadCastEvent -> { -// onReceiveProjectEnable(event) -// } -// -// is ProjectCreateBroadCastEvent -> { -// onReceiveProjectCreate(event) -// } -// } - } catch (Exception e) { - log.error("BKSystemMonitor| project callback listener execute error", e); - } - } -} diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/TProjectRecord.java b/modules/module-ci-project/src/main/java/cd/casic/ci/project/dal/dto/TProjectRecord.java similarity index 98% rename from modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/TProjectRecord.java rename to modules/module-ci-project/src/main/java/cd/casic/ci/project/dal/dto/TProjectRecord.java index 2d5d515..71c5764 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/TProjectRecord.java +++ b/modules/module-ci-project/src/main/java/cd/casic/ci/project/dal/dto/TProjectRecord.java @@ -1,4 +1,4 @@ -package cd.casic.ci.process.process.dataObject; +package cd.casic.ci.project.dal.dto; import java.util.Date; diff --git a/modules/module-ci-project/src/main/java/cd/casic/ci/project/enums/PluginDetailsDisplayOrder.java b/modules/module-ci-project/src/main/java/cd/casic/ci/project/enums/PluginDetailsDisplayOrder.java new file mode 100644 index 0000000..6d6d6b5 --- /dev/null +++ b/modules/module-ci-project/src/main/java/cd/casic/ci/project/enums/PluginDetailsDisplayOrder.java @@ -0,0 +1,7 @@ +package cd.casic.ci.project.enums; + +public enum PluginDetailsDisplayOrder { + LOG, + ARTIFACT, + CONFIG +} \ No newline at end of file diff --git a/modules/module-ci-project/src/main/java/cd/casic/ci/project/enums/ProjectCollation.java b/modules/module-ci-project/src/main/java/cd/casic/ci/project/enums/ProjectCollation.java new file mode 100644 index 0000000..c3fb5d7 --- /dev/null +++ b/modules/module-ci-project/src/main/java/cd/casic/ci/project/enums/ProjectCollation.java @@ -0,0 +1,9 @@ +package cd.casic.ci.project.enums; + +public enum ProjectCollation { + DEFAULT, + + ASC, + + DESC; +} diff --git a/modules/module-ci-project/src/main/java/cd/casic/ci/project/enums/ProjectSortType.java b/modules/module-ci-project/src/main/java/cd/casic/ci/project/enums/ProjectSortType.java new file mode 100644 index 0000000..51ff386 --- /dev/null +++ b/modules/module-ci-project/src/main/java/cd/casic/ci/project/enums/ProjectSortType.java @@ -0,0 +1,6 @@ +package cd.casic.ci.project.enums; + +public enum ProjectSortType { + PROJECT_NAME, + ENGLISH_NAME +} diff --git a/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/OperationalProductVO.java b/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/OperationalProductVO.java new file mode 100644 index 0000000..c39552b --- /dev/null +++ b/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/OperationalProductVO.java @@ -0,0 +1,46 @@ +package cd.casic.ci.project.pojo; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(title = "运营产品") +public class OperationalProductVO { + + @Schema(title = "运营产品ID") + @JsonProperty(value = "ProductId", required = false) + private Integer productId; + + @Schema(title = "运营产品ID") + @JsonProperty(value = "ProductName", required = false) + private String productName; + + @Schema(title = "运营产品ID") + @JsonProperty(value = "PlanProductId", required = false) + private Integer planProductId; + + @Schema(title = "规划产品名称") + @JsonProperty(value = "PlanProductName", required = false) + private String planProductName; + + @Schema(title = "部门ID") + @JsonProperty(value = "DeptId", required = false) + private String deptId; + + @Schema(title = "部门名称") + @JsonProperty(value = "DeptName", required = false) + private String deptName; + + @Schema(title = "BgId") + @JsonProperty(value = "BgId", required = false) + private String bgId; + + @Schema(title = "Bg名称") + @JsonProperty(value = "BgName", required = false) + private String bgName; +} \ No newline at end of file diff --git a/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/ProjectBaseInfo.java b/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/ProjectBaseInfo.java new file mode 100644 index 0000000..6b32d60 --- /dev/null +++ b/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/ProjectBaseInfo.java @@ -0,0 +1,25 @@ +package cd.casic.ci.project.pojo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(title = "项目基本信息") +public class ProjectBaseInfo { + + @Schema(title = "主键ID") + private Long id; + + @Schema(title = "英文缩写") + private String englishName; + + @Schema(title = "项目名称") + private String projectName; + + @Schema(title = "是否启用") + private Boolean enabled; +} \ No newline at end of file diff --git a/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/ProjectByConditionDTO.java b/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/ProjectByConditionDTO.java new file mode 100644 index 0000000..ad0774a --- /dev/null +++ b/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/ProjectByConditionDTO.java @@ -0,0 +1,31 @@ +package cd.casic.ci.project.pojo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(title = "项目--权限") +public class ProjectByConditionDTO { + + @Schema(title = "项目名称") + private String projectName; + + @Schema(title = "项目英文名称") + private String englishName; + + @Schema(title = "权限") + private boolean permission; + + @Schema(title = "环境路由") + private String routerTag; + + @Schema(title = "bgId") + private Long bgId; + + @Schema(title = "remotedev管理员") + private String remotedevManager; +} \ No newline at end of file diff --git a/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/ProjectCreateUserInfo.java b/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/ProjectCreateUserInfo.java new file mode 100644 index 0000000..31be476 --- /dev/null +++ b/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/ProjectCreateUserInfo.java @@ -0,0 +1,40 @@ +package cd.casic.ci.project.pojo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema +public class ProjectCreateUserInfo { + + @Schema(title = "操作人") + private String createUserId; + + @Schema(title = "待分配的角色名称") + private String roleName; + + @Schema(title = "角色Id") + private Integer roleId; + + @Schema(title = "组ID") + private Integer groupId; + + @Schema(title = "目标用户") + private List userIds = new ArrayList<>(); + + @Schema(title = "目标部门") + private List deptIds = new ArrayList<>(); + + @Schema(title = "资源类型") + private String resourceType; + + @Schema(title = "资源ID") + private String resourceCode; +} diff --git a/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/ProjectLogo.java b/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/ProjectLogo.java new file mode 100644 index 0000000..0826272 --- /dev/null +++ b/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/ProjectLogo.java @@ -0,0 +1,12 @@ +package cd.casic.ci.project.pojo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ProjectLogo { + private String logoAddr; +} diff --git a/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/ProjectOrganizationInfo.java b/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/ProjectOrganizationInfo.java new file mode 100644 index 0000000..500fb40 --- /dev/null +++ b/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/ProjectOrganizationInfo.java @@ -0,0 +1,40 @@ +package cd.casic.ci.project.pojo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(title = "项目组织") +public class ProjectOrganizationInfo { + + @Schema(title = "事业群ID") + private Long bgId; + + @Schema(title = "事业群名字") + private String bgName; + + @Schema(title = "业务线ID") + private Long businessLineId; + + @Schema(title = "业务线名称") + private String businessLineName; + + @Schema(title = "中心ID") + private Long centerId; + + @Schema(title = "中心名称") + private String centerName; + + @Schema(title = "部门ID") + private Long deptId; + + @Schema(title = "部门名称") + private String deptName; + + @Schema(title = "是否需要更正组织") + private boolean needFix = true; +} diff --git a/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/ProjectUpdateCreatorDTO.java b/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/ProjectUpdateCreatorDTO.java new file mode 100644 index 0000000..2eb8ac2 --- /dev/null +++ b/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/ProjectUpdateCreatorDTO.java @@ -0,0 +1,12 @@ +package cd.casic.ci.project.pojo; + +import io.swagger.v3.oas.annotations.media.Schema; + +@Schema(title = "修改项目创建人") +public class ProjectUpdateCreatorDTO { + @Schema(title = "项目code") + private String projectCode; + @Schema(title = "创建人") + private String creator; +} + diff --git a/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/vo/ProjectDiffVO.java b/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/vo/ProjectDiffVO.java new file mode 100644 index 0000000..678e7a7 --- /dev/null +++ b/modules/module-ci-project/src/main/java/cd/casic/ci/project/pojo/vo/ProjectDiffVO.java @@ -0,0 +1,173 @@ +package cd.casic.ci.project.pojo.vo; + +import cd.casic.ci.project.dal.pojo.SubjectScopeInfo; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(title = "项目-显示模型") +@SuppressWarnings("ALL") +public class ProjectDiffVO { + + @Schema(title = "主键ID") + private Long id; + + @Schema(title = "项目ID") + private String projectId; + + @Schema(title = "项目名称") + private String projectName; + + @Schema(title = "审批中项目名称") + private String afterProjectName; + + @Schema(title = "项目代码") + private String projectCode; + + @Schema(title = "审批状态") + private Integer approvalStatus; + + @Schema(title = "审批时间") + private String approvalTime; + + @Schema(title = "审批人") + private String approver; + + @Schema(title = "创建时间") + private String createdAt; + + @Schema(title = "创建人") + private String creator; + + @Schema(title = "事业群ID") + private String bgId; + + @Schema(title = "审批中事业群ID") + private String afterBgId; + + @Schema(title = "事业群名字") + private String bgName; + + @Schema(title = "审批中事业群名字") + private String afterBgName; + + @Schema(title = "事业线ID") + private String businessLineId; + + @Schema(title = "审批中事业线ID") + private Long afterBusinessLineId; + + @Schema(title = "事业线名称") + private String businessLineName; + + @Schema(title = "审批中事业线名称") + private String afterBusinessLineName; + + @Schema(title = "中心ID") + private String centerId; + + @Schema(title = "审批中中心ID") + private String afterCenterId; + + @Schema(title = "中心名称") + private String centerName; + + @Schema(title = "审批中中心名称") + private String afterCenterName; + + @Schema(title = "部门ID") + private String deptId; + + @Schema(title = "审批中部门ID") + private String afterDeptId; + + @Schema(title = "部门名称") + private String deptName; + + @Schema(title = "审批中部门名称") + private String afterDeptName; + + @Schema(title = "描述") + private String description; + + @Schema(title = "审批中描述") + private String afterDescription; + + @Schema(title = "英文缩写") + private String englishName; + + @Schema(title = "logo地址") + private String logoAddr; + + @Schema(title = "审批中logo地址") + private String afterLogoAddr; + + @Schema(title = "评论") + private String remark; + + @Schema(title = "修改时间") + private String updatedAt; + + @Schema(title = "修改人") + private String updator; + + @Schema(title = "项目最大可授权人员范围") + private List subjectScopes; + + @Schema(title = "审批中的项目最大可授权人员范围") + private List afterSubjectScopes; + + @Schema(title = "项目性质") + private Integer authSecrecy; + + @Schema(title = "审批中项目性质") + private Integer afterAuthSecrecy; + + @Schema(title = "项目类型") + private Integer projectType; + + @Schema(title = "审批中项目类型") + private Integer afterProjectType; + + @Schema(title = "运营产品ID") + private Integer productId; + + @Schema(title = "审批中运营产品ID") + private Integer afterProductId; + + @Schema(title = "运营产品名称") + private String productName; + + @Schema(title = "审批中运营产品名称") + private String afterProductName; + + @Schema(title = "流水线语言风格") + private String pipelineDialect; + + @Schema(title = "审批中流水线语言风格") + private String afterPipelineDialect; + + @Schema(title = "是否开启流水线命名提示") + private Boolean enablePipelineNameTips = false; + + @Schema(title = "审批中是否开启流水线命名提示") + private Boolean afterEnablePipelineNameTips = false; + + @Schema(title = "流水线命名格式") + private String pipelineNameFormat; + + @Schema(title = "审批中流水线命名格式") + private String afterPipelineNameFormat; + + @Schema(title = "构建日志归档阈值(单位:万)") + private Integer loggingLineLimit; + + @Schema(title = "审批中构建日志归档阈值(单位:万)") + private Integer afterLoggingLineLimit; +} diff --git a/modules/module-ci-project/src/main/java/cd/casic/ci/project/service/ProjectService.java b/modules/module-ci-project/src/main/java/cd/casic/ci/project/service/ProjectService.java new file mode 100644 index 0000000..bf7a7fd --- /dev/null +++ b/modules/module-ci-project/src/main/java/cd/casic/ci/project/service/ProjectService.java @@ -0,0 +1,259 @@ +package cd.casic.ci.project.service; + + + + +import cd.casic.ci.common.pipeline.pojo.Pagination; +import cd.casic.ci.common.pipeline.pojo.auth.ProjectConditionDTO; +import cd.casic.ci.project.dal.dto.TProjectRecord; +import cd.casic.ci.project.dal.pojo.*; +import cd.casic.ci.project.enums.*; +import cd.casic.ci.project.pojo.*; +import cd.casic.ci.project.pojo.vo.ProjectDiffVO; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import javax.annotation.Nullable; +import javax.security.auth.AuthPermission; +import java.io.InputStream; +import java.util.HashMap; +import java.util.List; +import java.util.Set; + +@SuppressWarnings("ALL") +public interface ProjectService { + + /** + * 校验项目名称/英文名称是否合法 + */ + void validate(ProjectValidateType validateType, String name, @Nullable String projectId); + + /** + * 创建项目信息 + */ + String create( + String userId, + ProjectCreateInfo projectCreateInfo, + @Nullable String accessToken, + ProjectCreateExtInfo createExtInfo, + @Nullable String defaultProjectId, + ProjectChannelCode projectChannel + ); + + ProjectVO createExtProject( + String userId, + String projectCode, + ProjectCreateInfo projectCreateInfo, + boolean needAuth, + boolean needValidate, + ProjectChannelCode channel + ); + + /** + * 根据项目ID/英文ID获取项目信息对象 + * @param englishName projectCode 英文ID + * @return ProjectVO 如果没有则为null + */ + ProjectVO getByEnglishName( + String userId, + String englishName, + @Nullable String accessToken + ); + + /** + * 根据项目ID/英文ID获取项目信息对象 + * @param englishName projectCode 英文ID + * @return ProjectVO 如果没有则为null + */ + ProjectVO show( + String userId, + String englishName, + @Nullable String accessToken + ); + + /** + * 根据项目ID/英文ID获取项目审批中对比信息 + * @param englishName projectCode 英文ID + * @return ProjectDiffVO 如果没有则为null + */ + ProjectDiffVO diff(String userId, String englishName, @Nullable String accessToken); + + /** + * 根据项目ID/英文ID获取项目信息对象 + * @param englishName projectCode 英文ID + * @return ProjectVO 如果没有则为null + */ + ProjectVO getByEnglishName(String englishName); + + /** + * 修改项目信息 englishName是项目英文名,目前平台在api接口上会把他命名成projectId,实际上与t_project表中的project_id字段不同 + * 后续会统一 + */ + boolean update( + String userId, + String englishName, + ProjectUpdateInfo projectUpdateInfo, + @Nullable String accessToken, + @Nullable Boolean needApproval + ); + +// /** +// * 更新Logo TODO FormDataContentDisposition类是 org.glassfish库的, +// 涉及文件上传模块相关内容先空着后续在看具体解决方案 +// */ +// ProjectLogo updateLogo( +// String userId, +// String englishName, +// InputStream inputStream, +// FormDataContentDisposition disposition, +// @Nullable String accessToken +// ); + + /** + * 上传Logo + */ + String uploadLogo( + String userId, + InputStream inputStream, + @Nullable String accessToken + ); + + boolean updateProjectName(String userId, String projectId, String projectName); + + /** + * 获取所有项目信息 + */ + List list( + String userId, + @Nullable String accessToken, + @Nullable Boolean enabled, + boolean unApproved, + @Nullable ProjectSortType sortType, + @Nullable ProjectCollation collation + ); + + Pagination listProjectsForApply( + String userId, + @Nullable String accessToken, + @Nullable String projectName, + @Nullable String projectId, + int page, + int pageSize + ); + + List list(String userId); + + List list(Set projectCodes, @Nullable Boolean enabled); + + List listOnlyByProjectCode(Set projectCodes); + + List list(List projectCodes); + + Page list(int limit, int offset); + + Page listByChannel(int limit, int offset, List projectChannelCode); + + List getAllProject(); + + List listProjectsByCondition( + ProjectConditionDTO projectConditionDTO, + int limit, + int offset + ); + + /** + * 获取用户已的可访问项目列表 + */ + List getProjectByUser(String userName); + + HashMap getNameByCode(String projectCodes); + + void updateUsableStatus( + @Nullable String userId, + String englishName, + boolean enabled, + boolean checkPermission + ); + + Page searchProjectByProjectName(String projectName, int limit, int offset); + + boolean hasCreatePermission(String userId); + + long getMinId(); + + long getMaxId(); + + List getProjectListById(long minId, long maxId); + + boolean verifyUserProjectPermission( + String userId, + String projectId, + AuthPermission permission, + @Nullable String accessToken + ); + + Set listSecrecyProject(); + + boolean createProjectUser(String projectId, ProjectCreateUserInfo createInfo); + + boolean relationIamProject(String projectCode, String relationId); + + ProjectVO getProjectByName(String projectName); + + boolean updateProjectProperties(@Nullable String userId, String projectCode, ProjectProperties properties); + + boolean setDisableWhenInactiveFlag(List projectCodes); + + boolean cancelCreateProject(String userId, String projectId); + + boolean cancelUpdateProject(String userId, String projectId); + + boolean isRbacPermission(String projectId); + + boolean updateProjectSubjectScopes( + String projectId, + List subjectScopes + ); + + boolean updateProjectCreator(List projectUpdateCreatorDtoList); + + List getOperationalProducts(); + + OperationalProductVO getProductByProductId(int productId); + + List getOperationalProductsByBgName(String bgName); + + void updateProjectProductId( + String englishName, + @Nullable String productName, + @Nullable Integer productId + ); + + void updateOrganizationByEnglishName( + String englishName, + ProjectOrganizationInfo projectOrganizationInfo + ); + + ProjectOrganizationInfo fixProjectOrganization( + TProjectRecord tProjectRecord + ); + + List getProjectListByProductId( + int productId + ); + + List getExistedEnglishName( + List englishNameList + ); + + boolean remindUserOfRelatedProduct( + String userId, + String englishName + ); + + boolean updatePluginDetailsDisplay( + String englishName, + List pluginDetailsDisplayOrder + ); + + String getPipelineDialect(String projectId); +} diff --git a/modules/module-ci-project/src/main/java/cd/casic/ci/project/service/impl/ServiceAllocIdResourceImpl.java b/modules/module-ci-project/src/main/java/cd/casic/ci/project/service/impl/ServiceAllocIdResourceImpl.java new file mode 100644 index 0000000..df9a890 --- /dev/null +++ b/modules/module-ci-project/src/main/java/cd/casic/ci/project/service/impl/ServiceAllocIdResourceImpl.java @@ -0,0 +1,30 @@ +package cd.casic.ci.project.service.impl; + + + +import cd.casic.ci.project.service.ServiceAllocIdResource; +import cd.casic.framework.redis.core.RedisTemplateUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +@Service +public class ServiceAllocIdResourceImpl implements ServiceAllocIdResource { + RedisTemplateUtils redisTemplateUtils; + + @Override + public Long generateSegmentId(String bizTag) { + return redisTemplateUtils.incr(bizTag,1); + } + + @Override + public List batchGenerateSegmentId(String bizTag, Integer number) { + List idList = new ArrayList<>(number); + // 可以改成批处理 + for (int i = 0; i < number; i++) { + long incr = redisTemplateUtils.incr(bizTag, 1); + idList.add(incr); + } + return idList; + } +}