修改成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")
private Long repoProjectId;
@NotNull(message = "所属项目组ID不能为空")
private Long projectGroupId;
@Schema(description = "应用分类ID")
private Long applicationCategoryId;
@Schema(description = "是否启用")
private Boolean enabled;
@ -42,6 +42,6 @@ public class ApplicationDTO extends BaseDTO {
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;
/**
* 项目组ID
* 应用分类ID
*/
@Column(name = "project_group_id", nullable = false)
private Long projectGroupId;
@Column(name = "application_category_id")
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
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;
import com.qqchen.deploy.backend.deploy.converter.ExternalSystemConverter;
import com.qqchen.deploy.backend.deploy.converter.ProjectGroupConverter;
import com.qqchen.deploy.backend.deploy.converter.ApplicationCategoryConverter;
import com.qqchen.deploy.backend.deploy.converter.RepositoryGroupConverter;
import com.qqchen.deploy.backend.deploy.converter.RepositoryProjectConverter;
import com.qqchen.deploy.backend.deploy.dto.ApplicationDTO;
import com.qqchen.deploy.backend.deploy.dto.DevelopmentLanguageTypeDTO;
import com.qqchen.deploy.backend.deploy.entity.Application;
import com.qqchen.deploy.backend.deploy.entity.ExternalSystem;
import com.qqchen.deploy.backend.deploy.entity.ProjectGroup;
import com.qqchen.deploy.backend.deploy.entity.ApplicationCategory;
import com.qqchen.deploy.backend.deploy.entity.RepositoryGroup;
import com.qqchen.deploy.backend.deploy.entity.RepositoryProject;
import com.qqchen.deploy.backend.deploy.enums.DevelopmentLanguageTypeEnum;
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.IExternalSystemRepository;
import com.qqchen.deploy.backend.deploy.repository.IProjectGroupRepository;
import com.qqchen.deploy.backend.deploy.repository.IRepositoryGroupRepository;
import com.qqchen.deploy.backend.deploy.repository.IRepositoryProjectRepository;
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 {
@Resource
private IProjectGroupRepository projectGroupRepository;
private IApplicationCategoryRepository applicationCategoryRepository;
@Resource
private ProjectGroupConverter projectGroupConverter;
private ApplicationCategoryConverter applicationCategoryConverter;
@Resource
private IRepositoryGroupRepository repositoryGroupRepository;
@ -53,21 +50,17 @@ public class ApplicationServiceImpl extends BaseServiceImpl<Application, Applica
@Resource
private RepositoryProjectConverter repositoryProjectConverter;
@Resource
private IExternalSystemRepository externalSystemRepository;
@Resource
private ExternalSystemConverter externalSystemConverter;
@Resource
private IApplicationRepository applicationRepository;
public Page<ApplicationDTO> page(ApplicationQuery query) {
Page<ApplicationDTO> page = super.page(query);
List<ApplicationDTO> result = page.getContent().stream().peek(application -> {
// 查询并设置项目组信息
Optional<ProjectGroup> projectGroupOptional = projectGroupRepository.findById(application.getProjectGroupId());
projectGroupOptional.ifPresent(projectGroup -> application.setProjectGroup(projectGroupConverter.toDto(projectGroup)));
// 查询并设置应用分类信息
if (application.getApplicationCategoryId() != null) {
Optional<ApplicationCategory> categoryOptional = applicationCategoryRepository.findById(application.getApplicationCategoryId());
categoryOptional.ifPresent(category -> application.setApplicationCategory(applicationCategoryConverter.toDto(category)));
}
// 查询并设置代码仓库组信息
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',
@ -688,16 +688,17 @@ CREATE TABLE deploy_project_group
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除0-未删除1-已删除',
-- 业务字段
tenant_code VARCHAR(50) DEFAULT NULL COMMENT '租户CODE',
type VARCHAR(50) NULL COMMENT '项目组类型',
project_group_code VARCHAR(50) NOT NULL COMMENT '项目组编码',
project_group_name VARCHAR(100) NOT NULL COMMENT '项目组名称',
project_group_desc VARCHAR(255) NULL COMMENT '项目组描述',
code VARCHAR(50) NOT NULL COMMENT '分类编码',
name VARCHAR(100) NOT NULL COMMENT '分类名称',
description VARCHAR(500) NULL COMMENT '分类描述',
icon VARCHAR(50) NULL COMMENT '图标',
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
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT ='项目组';
COLLATE = utf8mb4_unicode_ci COMMENT ='应用分类';
-- 应用表
CREATE TABLE deploy_application
@ -710,7 +711,7 @@ CREATE TABLE deploy_application
language VARCHAR(50) NULL COMMENT '开发语言JAVA、PYTHON、NODEJS',
repo_group_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启用',
sort INT NOT NULL DEFAULT 0 COMMENT '排序号',
-- 基础字段
@ -722,11 +723,11 @@ CREATE TABLE deploy_application
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除0-未删除1-已删除',
-- 索引
INDEX idx_project_group_id (project_group_id) COMMENT '项目ID索引',
UNIQUE INDEX uk_app_code (project_group_id, app_code) COMMENT '项目下应用编码唯一',
INDEX idx_application_category_id (application_category_id) COMMENT '应用分类ID索引',
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
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT ='应用表';
@ -754,34 +755,6 @@ CREATE TABLE deploy_environment
-- 索引
UNIQUE INDEX uk_env_code (env_code) 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
(
-- 基础字段