修改成application分类

This commit is contained in:
dengqichen 2025-10-28 17:33:46 +08:00
parent d499d6b759
commit 24eab092da
22 changed files with 326 additions and 353 deletions

View File

@ -0,0 +1,29 @@
package com.qqchen.deploy.backend.deploy.api;
import com.qqchen.deploy.backend.deploy.dto.ApplicationCategoryDTO;
import com.qqchen.deploy.backend.deploy.entity.ApplicationCategory;
import com.qqchen.deploy.backend.deploy.query.ApplicationCategoryQuery;
import com.qqchen.deploy.backend.framework.controller.BaseController;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 应用分类API控制器
*/
@Slf4j
@RestController
@RequestMapping("/api/v1/application-category")
@Tag(name = "应用分类管理", description = "应用分类的增删改查接口")
public class ApplicationCategoryApiController extends BaseController<ApplicationCategory, ApplicationCategoryDTO, Long, ApplicationCategoryQuery> {
@Override
protected void exportData(HttpServletResponse response, List<ApplicationCategoryDTO> data) {
// TODO: 实现导出功能
}
}

View File

@ -1,23 +0,0 @@
package com.qqchen.deploy.backend.deploy.api;
import com.qqchen.deploy.backend.deploy.dto.ProjectGroupDTO;
import com.qqchen.deploy.backend.deploy.entity.ProjectGroup;
import com.qqchen.deploy.backend.deploy.query.ProjectGroupQuery;
import com.qqchen.deploy.backend.framework.controller.BaseController;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Tag(name = "项目组管理", description = "项目组管理相关接口")
@RestController
@RequestMapping("/api/v1/project-group")
public class ProjectGroupApiController extends BaseController<ProjectGroup, ProjectGroupDTO, Long, ProjectGroupQuery> {
@Override
protected void exportData(HttpServletResponse response, List<ProjectGroupDTO> data) {
// TODO: 实现导出逻辑
}
}

View File

@ -0,0 +1,14 @@
package com.qqchen.deploy.backend.deploy.converter;
import com.qqchen.deploy.backend.deploy.dto.ApplicationCategoryDTO;
import com.qqchen.deploy.backend.deploy.entity.ApplicationCategory;
import com.qqchen.deploy.backend.framework.converter.BaseConverter;
import org.mapstruct.Mapper;
/**
* 应用分类Converter
*/
@Mapper(config = BaseConverter.class)
public interface ApplicationCategoryConverter extends BaseConverter<ApplicationCategory, ApplicationCategoryDTO> {
}

View File

@ -1,10 +0,0 @@
package com.qqchen.deploy.backend.deploy.converter;
import com.qqchen.deploy.backend.deploy.dto.ProjectGroupDTO;
import com.qqchen.deploy.backend.deploy.entity.ProjectGroup;
import com.qqchen.deploy.backend.framework.converter.BaseConverter;
import org.mapstruct.Mapper;
@Mapper(config = BaseConverter.class)
public interface ProjectGroupConverter extends BaseConverter<ProjectGroup, ProjectGroupDTO> {
}

View File

@ -0,0 +1,43 @@
package com.qqchen.deploy.backend.deploy.dto;
import com.qqchen.deploy.backend.framework.dto.BaseDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 应用分类DTO
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "应用分类DTO")
public class ApplicationCategoryDTO extends BaseDTO {
@Schema(description = "分类编码")
@NotBlank(message = "分类编码不能为空")
private String code;
@Schema(description = "分类名称")
@NotBlank(message = "分类名称不能为空")
private String name;
@Schema(description = "分类描述")
private String description;
@Schema(description = "图标")
private String icon;
@Schema(description = "是否启用")
@NotNull(message = "启用状态不能为空")
private Boolean enabled;
@Schema(description = "排序号")
@NotNull(message = "排序号不能为空")
private Integer sort;
@Schema(description = "应用数量")
private Long applicationCount;
}

View File

@ -29,8 +29,8 @@ public class ApplicationDTO extends BaseDTO {
@Schema(description = "代码仓库项目ID") @Schema(description = "代码仓库项目ID")
private Long repoProjectId; private Long repoProjectId;
@NotNull(message = "所属项目组ID不能为空") @Schema(description = "应用分类ID")
private Long projectGroupId; private Long applicationCategoryId;
@Schema(description = "是否启用") @Schema(description = "是否启用")
private Boolean enabled; private Boolean enabled;
@ -42,6 +42,6 @@ public class ApplicationDTO extends BaseDTO {
private RepositoryProjectDTO repositoryProject; private RepositoryProjectDTO repositoryProject;
private ProjectGroupDTO projectGroup; private ApplicationCategoryDTO applicationCategory;
} }

View File

@ -1,38 +0,0 @@
package com.qqchen.deploy.backend.deploy.dto;
import com.qqchen.deploy.backend.deploy.enums.ProjectGroupTypeEnum;
import com.qqchen.deploy.backend.framework.dto.BaseDTO;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = true)
public class ProjectGroupDTO extends BaseDTO {
// @NotNull(message = "租户ID不能为空")
private String tenantCode;
@NotNull(message = "项目组类型不能为空")
private ProjectGroupTypeEnum type;
@NotBlank(message = "项目组编码不能为空")
private String projectGroupCode;
@NotBlank(message = "项目组名称不能为空")
private String projectGroupName;
private String projectGroupDesc;
private Integer totalEnvironments;
private Integer totalApplications;
private Boolean enabled;
@NotNull(message = "排序号不能为空")
private Integer sort;
}

View File

@ -55,10 +55,10 @@ public class Application extends Entity<Long> {
private Long repoProjectId; private Long repoProjectId;
/** /**
* 项目组ID * 应用分类ID
*/ */
@Column(name = "project_group_id", nullable = false) @Column(name = "application_category_id")
private Long projectGroupId; private Long applicationCategoryId;
/** /**
* 排序号 * 排序号

View File

@ -0,0 +1,54 @@
package com.qqchen.deploy.backend.deploy.entity;
import com.qqchen.deploy.backend.framework.domain.Entity;
import jakarta.persistence.Column;
import jakarta.persistence.Table;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 应用分类实体
*/
@Data
@EqualsAndHashCode(callSuper = true)
@jakarta.persistence.Entity
@Table(name = "deploy_application_category")
public class ApplicationCategory extends Entity<Long> {
/**
* 分类编码
*/
@Column(name = "code", nullable = false)
private String code;
/**
* 分类名称
*/
@Column(name = "name", nullable = false)
private String name;
/**
* 分类描述
*/
@Column(name = "description")
private String description;
/**
* 图标
*/
@Column(name = "icon")
private String icon;
/**
* 是否启用
*/
@Column(nullable = false)
private Boolean enabled = true;
/**
* 排序号
*/
@Column(name = "sort", nullable = false)
private Integer sort = 0;
}

View File

@ -1,60 +0,0 @@
package com.qqchen.deploy.backend.deploy.entity;
import com.qqchen.deploy.backend.deploy.enums.ProjectGroupTypeEnum;
import com.qqchen.deploy.backend.framework.annotation.LogicDelete;
import com.qqchen.deploy.backend.framework.domain.Entity;
import jakarta.persistence.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 项目组实体
*/
@Data
@EqualsAndHashCode(callSuper = true)
@jakarta.persistence.Entity
@Table(name = "deploy_project_group")
public class ProjectGroup extends Entity<Long> {
/**
* 租户ID
*/
@Column(name = "tenant_code")
private String tenantCode;
@Column(name = "type", nullable = false)
@Enumerated(EnumType.STRING)
private ProjectGroupTypeEnum type;
/**
* 项目组编码
*/
@Column(name = "project_group_code", nullable = false)
private String projectGroupCode;
/**
* 项目组名称
*/
@Column(name = "project_group_name", nullable = false)
private String projectGroupName;
/**
* 项目组描述
*/
@Column(name = "project_group_desc")
private String projectGroupDesc;
/**
* 项目组状态
*/
@Column(nullable = false)
private Boolean enabled = true;
/**
* 排序号
*/
@Column(name = "sort", nullable = false)
private Integer sort;
}

View File

@ -1,19 +0,0 @@
package com.qqchen.deploy.backend.deploy.enums;
import lombok.Getter;
@Getter
public enum ProjectGroupTypeEnum {
PRODUCT("PRODUCT", "产品"),
PROJECT("PROJECT", "项目");
private final String code;
private final String description;
ProjectGroupTypeEnum(String code, String description) {
this.code = code;
this.description = description;
}
}

View File

@ -0,0 +1,30 @@
package com.qqchen.deploy.backend.deploy.query;
import com.qqchen.deploy.backend.framework.annotation.QueryField;
import com.qqchen.deploy.backend.framework.enums.QueryType;
import com.qqchen.deploy.backend.framework.query.BaseQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 应用分类查询条件
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "应用分类查询条件")
public class ApplicationCategoryQuery extends BaseQuery {
@QueryField(field = "code", type = QueryType.LIKE)
@Schema(description = "分类编码(模糊查询)")
private String code;
@QueryField(field = "name", type = QueryType.LIKE)
@Schema(description = "分类名称(模糊查询)")
private String name;
@QueryField(field = "enabled")
@Schema(description = "是否启用")
private Boolean enabled;
}

View File

@ -1,24 +0,0 @@
package com.qqchen.deploy.backend.deploy.query;
import com.qqchen.deploy.backend.framework.annotation.QueryField;
import com.qqchen.deploy.backend.framework.enums.QueryType;
import com.qqchen.deploy.backend.framework.query.BaseQuery;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
public class ProjectGroupQuery extends BaseQuery {
@QueryField(field = "projectGroupCode", type = QueryType.LIKE)
private String projectGroupCode;
@QueryField(field = "projectGroupName", type = QueryType.LIKE)
private String projectGroupName;
@QueryField(field = "projectGroupStatus")
private String projectGroupStatus;
@QueryField(field = "tenantCode")
private Long tenantCode;
}

View File

@ -0,0 +1,25 @@
package com.qqchen.deploy.backend.deploy.repository;
import com.qqchen.deploy.backend.deploy.entity.ApplicationCategory;
import com.qqchen.deploy.backend.framework.repository.IBaseRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
/**
* 应用分类Repository
*/
@Repository
public interface IApplicationCategoryRepository extends IBaseRepository<ApplicationCategory, Long> {
/**
* 根据编码查询忽略已删除
*/
Optional<ApplicationCategory> findByCodeAndDeletedFalse(String code);
/**
* 检查编码是否存在
*/
boolean existsByCodeAndDeletedFalse(String code);
}

View File

@ -9,6 +9,9 @@ import java.util.List;
@Repository @Repository
public interface IApplicationRepository extends IBaseRepository<Application, Long> { public interface IApplicationRepository extends IBaseRepository<Application, Long> {
Integer countByProjectGroupId(Long projectGroupId); /**
* 统计应用分类下的应用数量
*/
Long countByApplicationCategoryIdAndDeletedFalse(Long applicationCategoryId);
} }

View File

@ -1,16 +0,0 @@
package com.qqchen.deploy.backend.deploy.repository;
import com.qqchen.deploy.backend.deploy.entity.ProjectGroup;
import com.qqchen.deploy.backend.framework.repository.IBaseRepository;
import com.querydsl.core.types.Predicate;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface IProjectGroupRepository extends IBaseRepository<ProjectGroup, Long> {
}

View File

@ -0,0 +1,13 @@
package com.qqchen.deploy.backend.deploy.service;
import com.qqchen.deploy.backend.deploy.dto.ApplicationCategoryDTO;
import com.qqchen.deploy.backend.deploy.entity.ApplicationCategory;
import com.qqchen.deploy.backend.deploy.query.ApplicationCategoryQuery;
import com.qqchen.deploy.backend.framework.service.IBaseService;
/**
* 应用分类Service
*/
public interface IApplicationCategoryService extends IBaseService<ApplicationCategory, ApplicationCategoryDTO, ApplicationCategoryQuery, Long> {
}

View File

@ -1,12 +0,0 @@
package com.qqchen.deploy.backend.deploy.service;
import com.qqchen.deploy.backend.deploy.dto.ProjectGroupDTO;
import com.qqchen.deploy.backend.deploy.entity.ProjectGroup;
import com.qqchen.deploy.backend.deploy.query.ProjectGroupQuery;
import com.qqchen.deploy.backend.framework.service.IBaseService;
import org.springframework.data.domain.Page;
public interface IProjectGroupService extends IBaseService<ProjectGroup, ProjectGroupDTO, ProjectGroupQuery, Long> {
Page<ProjectGroupDTO> page(ProjectGroupQuery query);
}

View File

@ -0,0 +1,61 @@
package com.qqchen.deploy.backend.deploy.service.impl;
import com.qqchen.deploy.backend.deploy.dto.ApplicationCategoryDTO;
import com.qqchen.deploy.backend.deploy.entity.ApplicationCategory;
import com.qqchen.deploy.backend.deploy.query.ApplicationCategoryQuery;
import com.qqchen.deploy.backend.deploy.repository.IApplicationCategoryRepository;
import com.qqchen.deploy.backend.deploy.repository.IApplicationRepository;
import com.qqchen.deploy.backend.deploy.service.IApplicationCategoryService;
import com.qqchen.deploy.backend.framework.enums.ResponseCode;
import com.qqchen.deploy.backend.framework.exception.BusinessException;
import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
* 应用分类Service实现
*/
@Slf4j
@Service
public class ApplicationCategoryServiceImpl extends BaseServiceImpl<ApplicationCategory, ApplicationCategoryDTO, ApplicationCategoryQuery, Long>
implements IApplicationCategoryService {
@Resource
private IApplicationCategoryRepository applicationCategoryRepository;
@Resource
private IApplicationRepository applicationRepository;
@Override
@Transactional
public ApplicationCategoryDTO create(ApplicationCategoryDTO dto) {
// 检查编码唯一性
if (applicationCategoryRepository.existsByCodeAndDeletedFalse(dto.getCode())) {
throw new RuntimeException("分类编码已存在: " + dto.getCode());
}
return super.create(dto);
}
@Override
public Page<ApplicationCategoryDTO> page(ApplicationCategoryQuery query) {
Page<ApplicationCategoryDTO> page = super.page(query);
// 统计每个分类的应用数量
List<ApplicationCategoryDTO> content = page.getContent().stream()
.peek(category -> {
Long count = applicationRepository.countByApplicationCategoryIdAndDeletedFalse(category.getId());
category.setApplicationCount(count);
})
.collect(Collectors.toList());
return new PageImpl<>(content, page.getPageable(), page.getTotalElements());
}
}

View File

@ -1,21 +1,18 @@
package com.qqchen.deploy.backend.deploy.service.impl; package com.qqchen.deploy.backend.deploy.service.impl;
import com.qqchen.deploy.backend.deploy.converter.ExternalSystemConverter; import com.qqchen.deploy.backend.deploy.converter.ApplicationCategoryConverter;
import com.qqchen.deploy.backend.deploy.converter.ProjectGroupConverter;
import com.qqchen.deploy.backend.deploy.converter.RepositoryGroupConverter; import com.qqchen.deploy.backend.deploy.converter.RepositoryGroupConverter;
import com.qqchen.deploy.backend.deploy.converter.RepositoryProjectConverter; import com.qqchen.deploy.backend.deploy.converter.RepositoryProjectConverter;
import com.qqchen.deploy.backend.deploy.dto.ApplicationDTO; import com.qqchen.deploy.backend.deploy.dto.ApplicationDTO;
import com.qqchen.deploy.backend.deploy.dto.DevelopmentLanguageTypeDTO; import com.qqchen.deploy.backend.deploy.dto.DevelopmentLanguageTypeDTO;
import com.qqchen.deploy.backend.deploy.entity.Application; import com.qqchen.deploy.backend.deploy.entity.Application;
import com.qqchen.deploy.backend.deploy.entity.ExternalSystem; import com.qqchen.deploy.backend.deploy.entity.ApplicationCategory;
import com.qqchen.deploy.backend.deploy.entity.ProjectGroup;
import com.qqchen.deploy.backend.deploy.entity.RepositoryGroup; import com.qqchen.deploy.backend.deploy.entity.RepositoryGroup;
import com.qqchen.deploy.backend.deploy.entity.RepositoryProject; import com.qqchen.deploy.backend.deploy.entity.RepositoryProject;
import com.qqchen.deploy.backend.deploy.enums.DevelopmentLanguageTypeEnum; import com.qqchen.deploy.backend.deploy.enums.DevelopmentLanguageTypeEnum;
import com.qqchen.deploy.backend.deploy.query.ApplicationQuery; import com.qqchen.deploy.backend.deploy.query.ApplicationQuery;
import com.qqchen.deploy.backend.deploy.repository.IApplicationCategoryRepository;
import com.qqchen.deploy.backend.deploy.repository.IApplicationRepository; import com.qqchen.deploy.backend.deploy.repository.IApplicationRepository;
import com.qqchen.deploy.backend.deploy.repository.IExternalSystemRepository;
import com.qqchen.deploy.backend.deploy.repository.IProjectGroupRepository;
import com.qqchen.deploy.backend.deploy.repository.IRepositoryGroupRepository; import com.qqchen.deploy.backend.deploy.repository.IRepositoryGroupRepository;
import com.qqchen.deploy.backend.deploy.repository.IRepositoryProjectRepository; import com.qqchen.deploy.backend.deploy.repository.IRepositoryProjectRepository;
import com.qqchen.deploy.backend.deploy.service.IApplicationService; import com.qqchen.deploy.backend.deploy.service.IApplicationService;
@ -36,10 +33,10 @@ import static java.util.stream.Collectors.toList;
public class ApplicationServiceImpl extends BaseServiceImpl<Application, ApplicationDTO, ApplicationQuery, Long> implements IApplicationService { public class ApplicationServiceImpl extends BaseServiceImpl<Application, ApplicationDTO, ApplicationQuery, Long> implements IApplicationService {
@Resource @Resource
private IProjectGroupRepository projectGroupRepository; private IApplicationCategoryRepository applicationCategoryRepository;
@Resource @Resource
private ProjectGroupConverter projectGroupConverter; private ApplicationCategoryConverter applicationCategoryConverter;
@Resource @Resource
private IRepositoryGroupRepository repositoryGroupRepository; private IRepositoryGroupRepository repositoryGroupRepository;
@ -53,21 +50,17 @@ public class ApplicationServiceImpl extends BaseServiceImpl<Application, Applica
@Resource @Resource
private RepositoryProjectConverter repositoryProjectConverter; private RepositoryProjectConverter repositoryProjectConverter;
@Resource
private IExternalSystemRepository externalSystemRepository;
@Resource
private ExternalSystemConverter externalSystemConverter;
@Resource @Resource
private IApplicationRepository applicationRepository; private IApplicationRepository applicationRepository;
public Page<ApplicationDTO> page(ApplicationQuery query) { public Page<ApplicationDTO> page(ApplicationQuery query) {
Page<ApplicationDTO> page = super.page(query); Page<ApplicationDTO> page = super.page(query);
List<ApplicationDTO> result = page.getContent().stream().peek(application -> { List<ApplicationDTO> result = page.getContent().stream().peek(application -> {
// 查询并设置项目组信息 // 查询并设置应用分类信息
Optional<ProjectGroup> projectGroupOptional = projectGroupRepository.findById(application.getProjectGroupId()); if (application.getApplicationCategoryId() != null) {
projectGroupOptional.ifPresent(projectGroup -> application.setProjectGroup(projectGroupConverter.toDto(projectGroup))); Optional<ApplicationCategory> categoryOptional = applicationCategoryRepository.findById(application.getApplicationCategoryId());
categoryOptional.ifPresent(category -> application.setApplicationCategory(applicationCategoryConverter.toDto(category)));
}
// 查询并设置代码仓库组信息 // 查询并设置代码仓库组信息
if (application.getRepoGroupId() != null) { if (application.getRepoGroupId() != null) {

View File

@ -1,63 +0,0 @@
package com.qqchen.deploy.backend.deploy.service.impl;
import com.qqchen.deploy.backend.deploy.dto.ProjectGroupDTO;
import com.qqchen.deploy.backend.deploy.entity.Application;
import com.qqchen.deploy.backend.deploy.entity.ProjectGroup;
import com.qqchen.deploy.backend.deploy.query.ProjectGroupQuery;
import com.qqchen.deploy.backend.deploy.repository.IApplicationRepository;
import com.qqchen.deploy.backend.deploy.repository.IEnvironmentRepository;
import com.qqchen.deploy.backend.deploy.repository.IProjectGroupRepository;
import com.qqchen.deploy.backend.deploy.service.IEnvironmentService;
import com.qqchen.deploy.backend.deploy.service.IProjectGroupService;
import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl;
import jakarta.annotation.Resource;
import jakarta.persistence.Query;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import static java.util.stream.Collectors.toList;
@Service
public class ProjectGroupServiceImpl extends BaseServiceImpl<ProjectGroup, ProjectGroupDTO, ProjectGroupQuery, Long> implements IProjectGroupService {
@Resource
private IProjectGroupRepository projectGroupRepository;
@Resource
private IApplicationRepository applicationRepository;
@Resource
private IEnvironmentRepository environmentRepository;
@Override
public Page<ProjectGroupDTO> page(ProjectGroupQuery query) {
Page<ProjectGroupDTO> page = super.page(query);
List<ProjectGroupDTO> result = page.getContent().stream().map(projectGroupDTO -> {
projectGroupDTO.setTotalApplications(applicationRepository.countByProjectGroupId(projectGroupDTO.getId()));
projectGroupDTO.setTotalEnvironments(environmentRepository.countByProjectGroupId(projectGroupDTO.getId()));
return projectGroupDTO;
}).collect(toList());
return new PageImpl<>(result, page.getPageable(), page.getTotalElements());
}
@Override
@Transactional
public void delete(Long id) {
// 1. 先删除中间表数据
Query query = entityManager.createNativeQuery(
"DELETE FROM deploy_project_group_environment WHERE project_group_id = :projectGroupId"
);
query.setParameter("projectGroupId", id);
query.executeUpdate();
// 2. 再调用父类的删除方法逻辑删除ProjectGroup
super.delete(id);
}
}

View File

@ -675,8 +675,8 @@ CREATE TABLE workflow_log
-- 项目管理相关表 -- 项目管理相关表
-- -------------------------------------------------------------------------------------- -- --------------------------------------------------------------------------------------
-- 项目组 -- 应用分类
CREATE TABLE deploy_project_group CREATE TABLE deploy_application_category
( (
-- 基础字段 -- 基础字段
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID', id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
@ -688,16 +688,17 @@ CREATE TABLE deploy_project_group
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除0-未删除1-已删除', deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除0-未删除1-已删除',
-- 业务字段 -- 业务字段
tenant_code VARCHAR(50) DEFAULT NULL COMMENT '租户CODE', code VARCHAR(50) NOT NULL COMMENT '分类编码',
type VARCHAR(50) NULL COMMENT '项目组类型', name VARCHAR(100) NOT NULL COMMENT '分类名称',
project_group_code VARCHAR(50) NOT NULL COMMENT '项目组编码', description VARCHAR(500) NULL COMMENT '分类描述',
project_group_name VARCHAR(100) NOT NULL COMMENT '项目组名称', icon VARCHAR(50) NULL COMMENT '图标',
project_group_desc VARCHAR(255) NULL COMMENT '项目组描述',
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用0禁用1启用', enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用0禁用1启用',
sort INT NOT NULL DEFAULT 0 COMMENT '排序号' sort INT NOT NULL DEFAULT 0 COMMENT '排序号',
UNIQUE INDEX uk_code (code)
) ENGINE = InnoDB ) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT ='项目组'; COLLATE = utf8mb4_unicode_ci COMMENT ='应用分类';
-- 应用表 -- 应用表
CREATE TABLE deploy_application CREATE TABLE deploy_application
@ -710,7 +711,7 @@ CREATE TABLE deploy_application
language VARCHAR(50) NULL COMMENT '开发语言JAVA、PYTHON、NODEJS', language VARCHAR(50) NULL COMMENT '开发语言JAVA、PYTHON、NODEJS',
repo_group_id BIGINT NULL COMMENT '代码仓库组ID', repo_group_id BIGINT NULL COMMENT '代码仓库组ID',
repo_project_id BIGINT NULL COMMENT '代码仓库项目ID', repo_project_id BIGINT NULL COMMENT '代码仓库项目ID',
project_group_id BIGINT NOT NULL COMMENT '所属项目组ID', application_category_id BIGINT NULL COMMENT '所属应用分类ID',
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用0禁用1启用', enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用0禁用1启用',
sort INT NOT NULL DEFAULT 0 COMMENT '排序号', sort INT NOT NULL DEFAULT 0 COMMENT '排序号',
-- 基础字段 -- 基础字段
@ -722,11 +723,11 @@ CREATE TABLE deploy_application
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除0-未删除1-已删除', deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除0-未删除1-已删除',
-- 索引 -- 索引
INDEX idx_project_group_id (project_group_id) COMMENT '项目ID索引', INDEX idx_application_category_id (application_category_id) COMMENT '应用分类ID索引',
UNIQUE INDEX uk_app_code (project_group_id, app_code) COMMENT '项目下应用编码唯一', UNIQUE INDEX uk_app_code (application_category_id, app_code) COMMENT '分类下应用编码唯一',
-- 外键约束 -- 外键约束
CONSTRAINT fk_application_project_group FOREIGN KEY (project_group_id) REFERENCES deploy_project_group (id) CONSTRAINT fk_application_category FOREIGN KEY (application_category_id) REFERENCES deploy_application_category (id)
) ENGINE = InnoDB ) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT ='应用表'; COLLATE = utf8mb4_unicode_ci COMMENT ='应用表';
@ -754,34 +755,6 @@ CREATE TABLE deploy_environment
-- 索引 -- 索引
UNIQUE INDEX uk_env_code (env_code) COMMENT '环境编码唯一' UNIQUE INDEX uk_env_code (env_code) COMMENT '环境编码唯一'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='环境表'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='环境表';
-- 项目环境关联表
CREATE TABLE deploy_project_group_environment
(
-- 业务字段
project_group_id BIGINT NOT NULL COMMENT '项目ID',
environment_id BIGINT NOT NULL COMMENT '环境ID',
-- 基础字段
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
create_by VARCHAR(100) NULL COMMENT '创建人',
create_time DATETIME(6) NULL COMMENT '创建时间',
update_by VARCHAR(100) NULL COMMENT '更新人',
update_time DATETIME(6) NULL COMMENT '更新时间',
version INT NOT NULL DEFAULT 1 COMMENT '版本号',
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除',
-- 索引
UNIQUE INDEX uk_project_group_environment (project_group_id, environment_id) COMMENT '项目组环境关联唯一',
-- 外键约束
CONSTRAINT fk_project_env_project FOREIGN KEY (project_group_id)
REFERENCES deploy_project_group (id),
CONSTRAINT fk_project_env_environment FOREIGN KEY (environment_id)
REFERENCES deploy_environment (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='项目组环境关联表';
CREATE TABLE deploy_log CREATE TABLE deploy_log
( (
-- 基础字段 -- 基础字段