动态路由
This commit is contained in:
parent
8a9c7113e9
commit
99cc4f3e7e
@ -1,55 +0,0 @@
|
||||
package com.qqchen.deploy.backend.deploy.api;
|
||||
|
||||
import com.qqchen.deploy.backend.deploy.dto.BuildConfigDefinedDTO;
|
||||
import com.qqchen.deploy.backend.deploy.dto.DeployAppBuildDTO;
|
||||
import com.qqchen.deploy.backend.deploy.dto.DeployAppConfigDTO;
|
||||
import com.qqchen.deploy.backend.deploy.entity.DeployAppConfig;
|
||||
import com.qqchen.deploy.backend.deploy.query.DeployAppConfigQuery;
|
||||
import com.qqchen.deploy.backend.deploy.service.IDeployAppConfigService;
|
||||
import com.qqchen.deploy.backend.framework.api.Response;
|
||||
import com.qqchen.deploy.backend.framework.controller.BaseController;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 应用配置控制器
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/deploy-app-config")
|
||||
@Tag(name = "应用配置管理", description = "应用配置管理相关接口")
|
||||
public class DeployAppConfigApiController extends BaseController<DeployAppConfig, DeployAppConfigDTO, Long, DeployAppConfigQuery> {
|
||||
|
||||
|
||||
@Resource
|
||||
private IDeployAppConfigService deployAppConfigService;
|
||||
|
||||
@Operation(summary = "获取构建类型Schema定义")
|
||||
@GetMapping("/defined")
|
||||
public Response<List<BuildConfigDefinedDTO>> defined() {
|
||||
return Response.success(deployAppConfigService.defined());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void exportData(HttpServletResponse response, List<DeployAppConfigDTO> data) {
|
||||
|
||||
}
|
||||
|
||||
@Operation(summary = "部署服务")
|
||||
@PostMapping("/deploy")
|
||||
public Response<Void> deploy(@Validated @RequestBody DeployAppBuildDTO dto) {
|
||||
deployAppConfigService.deploy(dto);
|
||||
return Response.success();
|
||||
}
|
||||
}
|
||||
@ -1,29 +0,0 @@
|
||||
package com.qqchen.deploy.backend.deploy.api;
|
||||
|
||||
import com.qqchen.deploy.backend.framework.controller.BaseController;
|
||||
import com.qqchen.deploy.backend.deploy.entity.DeployLog;
|
||||
import com.qqchen.deploy.backend.deploy.dto.DeployLogDTO;
|
||||
import com.qqchen.deploy.backend.deploy.query.DeployLogQuery;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 部署日志 Controller
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/deploy-log")
|
||||
@Tag(name = "部署日志管理", description = "部署日志管理相关接口")
|
||||
public class DeployLogApiController extends BaseController<DeployLog, DeployLogDTO, Long, DeployLogQuery> {
|
||||
|
||||
@Override
|
||||
protected void exportData(HttpServletResponse response, List<DeployLogDTO> data) {
|
||||
// TODO: 实现导出逻辑
|
||||
log.info("导出部署日志数据,数据量:{}", data.size());
|
||||
}
|
||||
}
|
||||
@ -1,20 +0,0 @@
|
||||
package com.qqchen.deploy.backend.deploy.converter;
|
||||
|
||||
import com.qqchen.deploy.backend.deploy.dto.DeployAppConfigDTO;
|
||||
import com.qqchen.deploy.backend.deploy.entity.DeployAppConfig;
|
||||
import com.qqchen.deploy.backend.framework.converter.BaseConverter;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
import org.mapstruct.MappingTarget;
|
||||
import org.mapstruct.NullValuePropertyMappingStrategy;
|
||||
|
||||
/**
|
||||
* 应用配置转换器
|
||||
*/
|
||||
@Mapper(config = BaseConverter.class, nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
|
||||
public interface DeployAppConfigConverter extends BaseConverter<DeployAppConfig, DeployAppConfigDTO> {
|
||||
|
||||
@Override
|
||||
@Mapping(target = "formVariablesSchema", nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
|
||||
void updateEntity(@MappingTarget DeployAppConfig entity, DeployAppConfigDTO dto);
|
||||
}
|
||||
@ -1,13 +0,0 @@
|
||||
package com.qqchen.deploy.backend.deploy.converter;
|
||||
|
||||
import com.qqchen.deploy.backend.framework.converter.BaseConverter;
|
||||
import com.qqchen.deploy.backend.deploy.entity.DeployLog;
|
||||
import com.qqchen.deploy.backend.deploy.dto.DeployLogDTO;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
* 部署日志 Converter
|
||||
*/
|
||||
@Mapper(config = BaseConverter.class)
|
||||
public interface DeployLogConverter extends BaseConverter<DeployLog, DeployLogDTO> {
|
||||
}
|
||||
@ -1,67 +0,0 @@
|
||||
package com.qqchen.deploy.backend.deploy.dto;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.qqchen.deploy.backend.deploy.enums.BuildTypeEnum;
|
||||
import com.qqchen.deploy.backend.deploy.enums.DevelopmentLanguageTypeEnum;
|
||||
import com.qqchen.deploy.backend.framework.dto.BaseDTO;
|
||||
import com.qqchen.deploy.backend.workflow.dto.WorkflowDefinitionDTO;
|
||||
import com.qqchen.deploy.backend.workflow.enums.WorkflowInstanceStatusEnums;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 应用配置DTO
|
||||
*/
|
||||
@Data
|
||||
@Schema(description = "应用配置")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class DeployAppConfigDTO extends BaseDTO {
|
||||
|
||||
@Schema(description = "应用")
|
||||
private ApplicationDTO application;
|
||||
|
||||
@Schema(description = "构建类型")
|
||||
@NotNull(message = "构建类型不能为空")
|
||||
private BuildTypeEnum buildType;
|
||||
|
||||
@NotNull(message = "应用语言不能为空")
|
||||
private DevelopmentLanguageTypeEnum languageType;
|
||||
|
||||
@Schema(description = "已发布的流程定义")
|
||||
private WorkflowDefinitionDTO publishedWorkflowDefinition;
|
||||
|
||||
@Schema(description = "最后一次部署状态")
|
||||
private WorkflowInstanceStatusEnums lastBuildStatus;
|
||||
|
||||
@Schema(description = "最后一次部署开始时间")
|
||||
private LocalDateTime lastBuildStartTime;
|
||||
|
||||
@Schema(description = "最后一次部署结束时间")
|
||||
private LocalDateTime LastBuildEndTime;
|
||||
|
||||
@Schema(description = "表单配置")
|
||||
private JsonNode formVariablesSchema;
|
||||
|
||||
@Schema(description = "构建配置")
|
||||
@NotNull(message = "构建配置不能为空")
|
||||
private JsonNode buildVariables;
|
||||
|
||||
@Schema(description = "环境ID")
|
||||
@NotNull(message = "环境ID不能为空")
|
||||
private Long environmentId;
|
||||
|
||||
@Schema(description = "应用ID")
|
||||
@NotNull(message = "应用ID不能为空")
|
||||
private Long applicationId;
|
||||
|
||||
@NotNull(message = "已发布的流程定义ID")
|
||||
private Long workflowDefinitionId;
|
||||
|
||||
@NotNull(message = "启用字段不能为空")
|
||||
private Boolean enabled = true;
|
||||
|
||||
}
|
||||
@ -1,49 +0,0 @@
|
||||
package com.qqchen.deploy.backend.deploy.dto;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.qqchen.deploy.backend.deploy.enums.DeployStatusEnum;
|
||||
import com.qqchen.deploy.backend.framework.dto.BaseDTO;
|
||||
import com.vladmihalcea.hibernate.type.json.JsonType;
|
||||
import jakarta.persistence.Column;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.hibernate.annotations.Type;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 部署日志 DTO
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class DeployLogDTO extends BaseDTO {
|
||||
|
||||
/**
|
||||
* 环境ID
|
||||
*/
|
||||
private Long workflowInstanceId;
|
||||
|
||||
/**
|
||||
* 环境ID
|
||||
*/
|
||||
private Long environmentId;
|
||||
|
||||
/**
|
||||
* 应用ID
|
||||
*/
|
||||
private Long applicationId;
|
||||
|
||||
/**
|
||||
* 部署版本号
|
||||
*/
|
||||
private String deployVersion;
|
||||
|
||||
private JsonNode variables;
|
||||
|
||||
private JsonNode formVariables;
|
||||
|
||||
/**
|
||||
* 部署参数(JSON)
|
||||
*/
|
||||
private JsonNode deployVariables;
|
||||
}
|
||||
@ -1,51 +0,0 @@
|
||||
package com.qqchen.deploy.backend.deploy.entity;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.qqchen.deploy.backend.deploy.enums.BuildTypeEnum;
|
||||
import com.qqchen.deploy.backend.deploy.enums.DevelopmentLanguageTypeEnum;
|
||||
import com.qqchen.deploy.backend.framework.annotation.LogicDelete;
|
||||
import com.qqchen.deploy.backend.framework.domain.Entity;
|
||||
import com.vladmihalcea.hibernate.type.json.JsonType;
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.EnumType;
|
||||
import jakarta.persistence.Enumerated;
|
||||
import jakarta.persistence.Table;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.hibernate.annotations.Type;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@jakarta.persistence.Entity
|
||||
@Table(name = "deploy_app_config")
|
||||
public class DeployAppConfig extends Entity<Long> {
|
||||
|
||||
@Column(name = "build_type", nullable = false)
|
||||
@Enumerated(EnumType.STRING)
|
||||
private BuildTypeEnum buildType;
|
||||
|
||||
@Column(name = "language_type", nullable = false)
|
||||
@Enumerated(EnumType.STRING)
|
||||
private DevelopmentLanguageTypeEnum languageType;
|
||||
|
||||
@Type(JsonType.class)
|
||||
@Column(name = "form_variables_schema", columnDefinition = "text")
|
||||
private JsonNode formVariablesSchema;
|
||||
|
||||
@Type(JsonType.class)
|
||||
@Column(name = "build_variables", columnDefinition = "text", nullable = false)
|
||||
private JsonNode buildVariables;
|
||||
|
||||
@Column(name = "environment_id", nullable = false)
|
||||
private Long environmentId;
|
||||
|
||||
@Column(name = "application_id", nullable = false)
|
||||
private Long applicationId;
|
||||
|
||||
@Column(name = "workflow_definition_id", nullable = false)
|
||||
private Long workflowDefinitionId;
|
||||
|
||||
@Column(name = "enabled", nullable = false)
|
||||
private Boolean enabled;
|
||||
}
|
||||
@ -1,59 +0,0 @@
|
||||
package com.qqchen.deploy.backend.deploy.entity;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.qqchen.deploy.backend.deploy.enums.DeployStatusEnum;
|
||||
import com.qqchen.deploy.backend.framework.domain.Entity;
|
||||
import com.vladmihalcea.hibernate.type.json.JsonType;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.hibernate.annotations.Type;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 部署日志实体
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@jakarta.persistence.Entity
|
||||
@Table(name = "deploy_log")
|
||||
public class DeployLog extends Entity<Long> {
|
||||
|
||||
|
||||
/**
|
||||
* 环境ID
|
||||
*/
|
||||
@Column(name = "workflow_instance_id", nullable = false)
|
||||
private Long workflowInstanceId;
|
||||
|
||||
/**
|
||||
* 环境ID
|
||||
*/
|
||||
@Column(name = "environment_id", nullable = false)
|
||||
private Long environmentId;
|
||||
|
||||
/**
|
||||
* 应用ID
|
||||
*/
|
||||
@Column(name = "application_id", nullable = false)
|
||||
private Long applicationId;
|
||||
|
||||
/**
|
||||
* 部署版本号
|
||||
*/
|
||||
@Column(name = "deploy_version", nullable = false)
|
||||
private String deployVersion;
|
||||
|
||||
@Type(JsonType.class)
|
||||
@Column(name = "form_variables", columnDefinition = "text", nullable = false)
|
||||
private JsonNode formVariables;
|
||||
|
||||
/**
|
||||
* 部署参数(JSON)
|
||||
*/
|
||||
@Type(JsonType.class)
|
||||
@Column(name = "deploy_variables", columnDefinition = "text", nullable = false)
|
||||
private JsonNode deployVariables;
|
||||
|
||||
}
|
||||
@ -1,34 +0,0 @@
|
||||
package com.qqchen.deploy.backend.deploy.query;
|
||||
|
||||
import com.qqchen.deploy.backend.deploy.enums.BuildTypeEnum;
|
||||
import com.qqchen.deploy.backend.deploy.enums.DevelopmentLanguageTypeEnum;
|
||||
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
|
||||
@Schema(description = "应用配置查询")
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class DeployAppConfigQuery extends BaseQuery {
|
||||
|
||||
@Schema(description = "环境ID")
|
||||
@QueryField(field = "environmentId")
|
||||
private Long environmentId;
|
||||
|
||||
@Schema(description = "应用ID")
|
||||
@QueryField(field = "applicationId")
|
||||
private Long applicationId;
|
||||
|
||||
@Schema(description = "构建类型")
|
||||
@QueryField(field = "buildType")
|
||||
private BuildTypeEnum buildType;
|
||||
|
||||
@QueryField(field = "languageType", type = QueryType.EQUAL)
|
||||
private DevelopmentLanguageTypeEnum languageType;
|
||||
}
|
||||
@ -1,18 +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;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 部署日志查询对象
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class DeployLogQuery extends BaseQuery {
|
||||
|
||||
|
||||
}
|
||||
@ -1,13 +0,0 @@
|
||||
package com.qqchen.deploy.backend.deploy.repository;
|
||||
|
||||
import com.qqchen.deploy.backend.deploy.entity.DeployAppConfig;
|
||||
import com.qqchen.deploy.backend.framework.repository.IBaseRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* 应用配置仓库接口
|
||||
*/
|
||||
@Repository
|
||||
public interface IDeployAppConfigRepository extends IBaseRepository<DeployAppConfig, Long> {
|
||||
|
||||
}
|
||||
@ -1,16 +0,0 @@
|
||||
package com.qqchen.deploy.backend.deploy.repository;
|
||||
|
||||
import com.qqchen.deploy.backend.framework.repository.IBaseRepository;
|
||||
import com.qqchen.deploy.backend.deploy.entity.DeployLog;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* 部署日志 Repository
|
||||
*/
|
||||
@Repository
|
||||
public interface IDeployLogRepository extends IBaseRepository<DeployLog, Long> {
|
||||
Optional<DeployLog> findTop1ByApplicationIdOrderByCreateTimeDesc(Long id);
|
||||
|
||||
}
|
||||
@ -1,26 +0,0 @@
|
||||
package com.qqchen.deploy.backend.deploy.service;
|
||||
|
||||
import com.qqchen.deploy.backend.deploy.dto.BuildConfigDefinedDTO;
|
||||
import com.qqchen.deploy.backend.deploy.dto.DeployAppBuildDTO;
|
||||
import com.qqchen.deploy.backend.deploy.dto.DeployAppConfigDTO;
|
||||
import com.qqchen.deploy.backend.deploy.entity.DeployAppConfig;
|
||||
import com.qqchen.deploy.backend.deploy.query.DeployAppConfigQuery;
|
||||
import com.qqchen.deploy.backend.framework.service.IBaseService;
|
||||
import com.qqchen.deploy.backend.workflow.dto.WorkflowNodeTypeDefinedDTO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 应用配置服务接口
|
||||
*/
|
||||
public interface IDeployAppConfigService extends IBaseService<DeployAppConfig, DeployAppConfigDTO, DeployAppConfigQuery, Long> {
|
||||
|
||||
/**
|
||||
* 获取构建类型Schema定义
|
||||
*
|
||||
* @return Schema定义列表
|
||||
*/
|
||||
List<BuildConfigDefinedDTO> defined();
|
||||
|
||||
void deploy(DeployAppBuildDTO dto);
|
||||
}
|
||||
@ -1,12 +0,0 @@
|
||||
package com.qqchen.deploy.backend.deploy.service;
|
||||
|
||||
import com.qqchen.deploy.backend.framework.service.IBaseService;
|
||||
import com.qqchen.deploy.backend.deploy.entity.DeployLog;
|
||||
import com.qqchen.deploy.backend.deploy.dto.DeployLogDTO;
|
||||
import com.qqchen.deploy.backend.deploy.query.DeployLogQuery;
|
||||
|
||||
/**
|
||||
* 部署日志 Service接口
|
||||
*/
|
||||
public interface IDeployLogService extends IBaseService<DeployLog, DeployLogDTO, DeployLogQuery, Long> {
|
||||
}
|
||||
@ -1,183 +0,0 @@
|
||||
package com.qqchen.deploy.backend.deploy.service.impl;
|
||||
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.qqchen.deploy.backend.deploy.converter.ApplicationConverter;
|
||||
import com.qqchen.deploy.backend.deploy.converter.DeployLogConverter;
|
||||
import com.qqchen.deploy.backend.deploy.dto.BuildConfigDefinedDTO;
|
||||
import com.qqchen.deploy.backend.deploy.dto.DeployAppBuildDTO;
|
||||
import com.qqchen.deploy.backend.deploy.dto.DeployAppConfigDTO;
|
||||
import com.qqchen.deploy.backend.deploy.dto.DeployLogDTO;
|
||||
import com.qqchen.deploy.backend.deploy.entity.Application;
|
||||
import com.qqchen.deploy.backend.deploy.entity.DeployAppConfig;
|
||||
import com.qqchen.deploy.backend.deploy.entity.DeployLog;
|
||||
import com.qqchen.deploy.backend.deploy.entity.Environment;
|
||||
import com.qqchen.deploy.backend.deploy.enums.BuildTypeEnum;
|
||||
import com.qqchen.deploy.backend.deploy.enums.DevelopmentLanguageTypeEnum;
|
||||
import com.qqchen.deploy.backend.deploy.query.DeployAppConfigQuery;
|
||||
import com.qqchen.deploy.backend.deploy.repository.IApplicationRepository;
|
||||
import com.qqchen.deploy.backend.deploy.repository.IDeployLogRepository;
|
||||
import com.qqchen.deploy.backend.deploy.repository.IEnvironmentRepository;
|
||||
import com.qqchen.deploy.backend.deploy.service.IDeployAppConfigService;
|
||||
import com.qqchen.deploy.backend.deploy.service.IDeployLogService;
|
||||
import com.qqchen.deploy.backend.framework.annotation.formily.FormilySchemaFactory;
|
||||
import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl;
|
||||
import com.qqchen.deploy.backend.workflow.converter.WorkflowDefinitionConverter;
|
||||
import com.qqchen.deploy.backend.workflow.dto.WorkflowInstanceDTO;
|
||||
import com.qqchen.deploy.backend.workflow.dto.WorkflowInstanceStartRequest;
|
||||
import com.qqchen.deploy.backend.workflow.entity.WorkflowDefinition;
|
||||
import com.qqchen.deploy.backend.workflow.entity.WorkflowInstance;
|
||||
import com.qqchen.deploy.backend.workflow.repository.IWorkflowDefinitionRepository;
|
||||
import com.qqchen.deploy.backend.workflow.repository.IWorkflowInstanceRepository;
|
||||
import com.qqchen.deploy.backend.workflow.service.IWorkflowInstanceService;
|
||||
import com.qqchen.deploy.backend.workflow.util.GenerateSchemaUtils;
|
||||
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.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import static java.util.stream.Collectors.toList;
|
||||
|
||||
/**
|
||||
* 应用配置服务实现类
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class DeployAppConfigServiceImpl extends BaseServiceImpl<DeployAppConfig, DeployAppConfigDTO, DeployAppConfigQuery, Long> implements IDeployAppConfigService {
|
||||
|
||||
@Resource
|
||||
private IApplicationRepository applicationRepository;
|
||||
|
||||
@Resource
|
||||
private ApplicationConverter applicationConverter;
|
||||
|
||||
@Resource
|
||||
private IWorkflowDefinitionRepository workflowDefinitionRepository;
|
||||
|
||||
@Resource
|
||||
private IWorkflowInstanceService workflowInstanceService;
|
||||
|
||||
@Resource
|
||||
private WorkflowDefinitionConverter workflowDefinitionConverter;
|
||||
|
||||
@Resource
|
||||
private IEnvironmentRepository environmentRepository;
|
||||
|
||||
@Resource
|
||||
private IDeployLogService deployLogService;
|
||||
|
||||
@Resource
|
||||
private IDeployLogRepository deployLogRepository;
|
||||
|
||||
@Resource
|
||||
private DeployLogConverter deployLogConverter;
|
||||
|
||||
@Resource
|
||||
private IWorkflowInstanceRepository workflowInstanceRepository;
|
||||
|
||||
@Resource
|
||||
private ObjectMapper objectMapper;
|
||||
|
||||
@Override
|
||||
public Page<DeployAppConfigDTO> page(DeployAppConfigQuery query) {
|
||||
Page<DeployAppConfigDTO> page = super.page(query);
|
||||
List<DeployAppConfigDTO> result = page.getContent().stream().peek(deployAppConfig -> {
|
||||
Optional<WorkflowDefinition> optionalWorkflowDefinition = workflowDefinitionRepository.findById(deployAppConfig.getWorkflowDefinitionId());
|
||||
optionalWorkflowDefinition.ifPresent(workflowDefinition -> deployAppConfig.setPublishedWorkflowDefinition(workflowDefinitionConverter.toDto(workflowDefinition)));
|
||||
Optional<Application> optionalApplication = applicationRepository.findById(deployAppConfig.getApplicationId());
|
||||
if (optionalApplication.isPresent()) {
|
||||
Application application = optionalApplication.get();
|
||||
deployAppConfig.setApplication(applicationConverter.toDto(application));
|
||||
Optional<DeployLog> lastDeployLogOptional = deployLogRepository.findTop1ByApplicationIdOrderByCreateTimeDesc(application.getId());
|
||||
if (lastDeployLogOptional.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
DeployLog lastDeployLog = lastDeployLogOptional.get();
|
||||
Optional<WorkflowInstance> optionalWorkflowInstance = workflowInstanceRepository.findById(lastDeployLog.getWorkflowInstanceId());
|
||||
if (optionalWorkflowInstance.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
WorkflowInstance workflowInstance = optionalWorkflowInstance.get();
|
||||
deployAppConfig.setLastBuildStatus(workflowInstance.getStatus());
|
||||
deployAppConfig.setLastBuildStartTime(workflowInstance.getStartTime());
|
||||
deployAppConfig.setLastBuildEndTime(workflowInstance.getEndTime());
|
||||
}
|
||||
}).collect(toList());
|
||||
return new PageImpl<>(result, page.getPageable(), page.getTotalElements());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BuildConfigDefinedDTO> defined() {
|
||||
List<BuildConfigDefinedDTO> result = new ArrayList<>();
|
||||
|
||||
for (BuildTypeEnum buildType : BuildTypeEnum.values()) {
|
||||
try {
|
||||
// 获取支持的语言和对应的构建变量类
|
||||
DevelopmentLanguageTypeEnum[] languages = buildType.getSupportedLanguages();
|
||||
Class<?>[] buildVariablesClasses = buildType.getBuildVariables();
|
||||
// 如果支持的语言不为空,则处理每种语言对应的Schema
|
||||
if (languages != null && buildVariablesClasses != null) {
|
||||
for (int i = 0; i < languages.length; i++) {
|
||||
if (buildVariablesClasses[i] != null) {
|
||||
BuildConfigDefinedDTO definedDTO = new BuildConfigDefinedDTO();
|
||||
definedDTO.setCode(buildType.getCode());
|
||||
definedDTO.setName(buildType.getName());
|
||||
definedDTO.setBuildType(buildType);
|
||||
definedDTO.setLanguageType(languages[i]);
|
||||
// 使用新的FormilySchemaFactory生成Schema
|
||||
JsonNode schema = FormilySchemaFactory.generateSchema(buildVariablesClasses[i]);
|
||||
definedDTO.setBuildVariablesSchema(schema);
|
||||
result.add(definedDTO);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("Error processing build type: " + buildType, e);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void deploy(DeployAppBuildDTO dto) {
|
||||
WorkflowDefinition workflowDefinition = workflowDefinitionRepository.findById(dto.getWorkflowDefinitionId()).orElseThrow(() -> new RuntimeException("Workflow definition not found: " + dto.getWorkflowDefinitionId()));
|
||||
Environment environment = environmentRepository.findById(dto.getEnvironmentId()).orElseThrow(() -> new RuntimeException("Environment not found: " + dto.getEnvironmentId()));
|
||||
Application application = applicationRepository.findById(dto.getApplicationId()).orElseThrow(() -> new RuntimeException("Application not found: " + dto.getApplicationId()));
|
||||
WorkflowInstanceStartRequest request = new WorkflowInstanceStartRequest();
|
||||
request.setProcessKey(workflowDefinition.getKey());
|
||||
request.setBusinessKey(environment.getEnvCode() + "_" + application.getAppCode() + "_" + System.currentTimeMillis() / 1000);
|
||||
request.setFormData(objectMapper.convertValue(dto.getBuildVariables(), new TypeReference<>() {
|
||||
}));
|
||||
WorkflowInstanceDTO workflowInstanceDTO = workflowInstanceService.startWorkflow(request);
|
||||
buildAndSaveDeployLog(dto, environment, application, workflowInstanceDTO);
|
||||
}
|
||||
|
||||
private void buildAndSaveDeployLog(DeployAppBuildDTO deployAppBuild, Environment environment, Application application, WorkflowInstanceDTO workflowInstance) {
|
||||
DeployLogDTO deployLog = new DeployLogDTO();
|
||||
deployLog.setEnvironmentId(environment.getId());
|
||||
deployLog.setApplicationId(application.getId());
|
||||
deployLog.setWorkflowInstanceId(workflowInstance.getId());
|
||||
deployLog.setVariables(deployAppBuild.getBuildVariables());
|
||||
deployLog.setDeployVersion(application.getAppCode() + "_" + System.currentTimeMillis() / 1000);
|
||||
deployLog.setDeployVariables(deployAppBuild.getBuildVariables());
|
||||
deployLog.setFormVariables(deployAppBuild.getFormVariables());
|
||||
deployLogService.create(deployLog);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DeployAppConfigDTO create(DeployAppConfigDTO dto) {
|
||||
DeployAppConfig entity = converter.toEntity(dto);
|
||||
// 使用新的FormilySchemaFactory生成Schema
|
||||
entity.setFormVariablesSchema(GenerateSchemaUtils.generateSchema(dto.getBuildType().getFormVariablesSchema()));
|
||||
this.repository.save(entity);
|
||||
return converter.toDto(entity);
|
||||
}
|
||||
}
|
||||
@ -1,17 +0,0 @@
|
||||
package com.qqchen.deploy.backend.deploy.service.impl;
|
||||
|
||||
import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl;
|
||||
import com.qqchen.deploy.backend.deploy.entity.DeployLog;
|
||||
import com.qqchen.deploy.backend.deploy.dto.DeployLogDTO;
|
||||
import com.qqchen.deploy.backend.deploy.query.DeployLogQuery;
|
||||
import com.qqchen.deploy.backend.deploy.service.IDeployLogService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* 部署日志 Service实现
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class DeployLogServiceImpl extends BaseServiceImpl<DeployLog, DeployLogDTO, DeployLogQuery, Long> implements IDeployLogService {
|
||||
}
|
||||
@ -49,48 +49,48 @@ DELETE FROM sys_menu;
|
||||
INSERT INTO sys_menu (id, name, path, component, icon, type, parent_id, sort, hidden, enabled, create_by, create_time, version, deleted)
|
||||
VALUES
|
||||
-- 首页
|
||||
(99, '工作台', '/dashboard', '/src/pages/dashboard/index', 'DashboardOutlined', 2, NULL, 0, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
(99, '工作台', '/dashboard', 'Dashboard', 'DashboardOutlined', 2, NULL, 0, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
|
||||
-- 工作流管理
|
||||
(100, '工作流管理', '/workflow', 'Layout', 'DeploymentUnitOutlined', 1, NULL, 1, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
(100, '工作流管理', '/workflow', NULL, 'DeploymentUnitOutlined', 1, NULL, 1, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
-- 工作流设计
|
||||
(101, '工作流设计', '/workflow/definition', '/src/pages/workflow/definition/index', 'EditOutlined', 2, 100, 10, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
(101, '工作流设计', '/workflow/definitions', 'Workflow/Definition', 'EditOutlined', 2, 100, 10, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
-- 工作流实例
|
||||
(102, '工作流实例', '/workflow/instance', '/src/pages/workflow/instance/index', 'BranchesOutlined', 2, 100, 20, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
(102, '工作流实例', '/workflow/instances', 'Workflow/Instance', 'BranchesOutlined', 2, 100, 20, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
-- 表单管理
|
||||
(104, '表单管理', '/workflow/form', '/src/pages/workflow/form/index', 'FormOutlined', 2, 100, 30, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
(104, '表单管理', '/workflow/form', 'Form/Definition', 'FormOutlined', 2, 100, 30, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
-- 运维管理
|
||||
(200, '运维管理', '/deploy', 'Layout', 'DeploymentUnitOutlined', 1, NULL, 2, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
(200, '运维管理', '/deploy', NULL, 'DeploymentUnitOutlined', 1, NULL, 2, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
-- 团队管理
|
||||
(201, '团队管理', '/deploy/teams', '/src/pages/Deploy/Team/List/index', 'TeamOutlined', 2, 200, 1, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
(201, '团队管理', '/deploy/teams', 'Deploy/Team/List', 'TeamOutlined', 2, 200, 1, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
-- 应用管理
|
||||
(202, '应用管理', '/deploy/applications', '/src/pages/Deploy/Application/List/index', 'AppstoreOutlined', 2, 200, 2, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
(202, '应用管理', '/deploy/applications', 'Deploy/Application/List', 'AppstoreOutlined', 2, 200, 2, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
-- 定时任务管理
|
||||
(203, '定时任务管理', '/deploy/schedule-jobs', '/src/pages/Deploy/ScheduleJob/List/index', 'ClockCircleOutlined', 2, 200, 3, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
-- 服务器管理
|
||||
(204, '服务器管理', '/deploy/servers', '/src/pages/Deploy/Server/List/index', 'CloudServerOutlined', 2, 200, 4, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
(203, '定时任务管理', '/deploy/schedule-jobs', 'Deploy/ScheduleJob/List', 'ClockCircleOutlined', 2, 200, 3, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
-- 环境管理
|
||||
(204, '环境管理', '/deploy/environments', 'Deploy/Environment/List', 'CloudOutlined', 2, 200, 4, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
|
||||
-- 资源管理
|
||||
(300, '资源管理', '/resource', 'Layout', 'DatabaseOutlined', 1, NULL, 3, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
-- 环境管理
|
||||
(301, '环境管理', '/resource/environments', '/src/pages/Deploy/Environment/List/index', 'CloudOutlined', 2, 300, 1, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
(300, '资源管理', '/resource', NULL, 'DatabaseOutlined', 1, NULL, 3, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
-- 服务器管理
|
||||
(301, '服务器管理', '/resource/servers', 'Deploy/Server/List', 'CloudServerOutlined', 2, 300, 1, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
-- Jenkins管理
|
||||
(302, 'Jenkins管理', '/resource/jenkins-manager', '/src/pages/Deploy/JenkinsManager/List', 'BuildOutlined', 2, 300, 2, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
(302, 'Jenkins管理', '/resource/jenkins', 'Deploy/JenkinsManager/List', 'BuildOutlined', 2, 300, 2, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
-- Git管理
|
||||
(303, 'Git管理', '/resource/git-manager', '/src/pages/Deploy/GitManager/List', 'GithubOutlined', 2, 300, 3, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
(303, 'Git管理', '/resource/git', 'Deploy/GitManager/List', 'GithubOutlined', 2, 300, 3, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
-- 三方系统管理
|
||||
(304, '三方系统管理', '/resource/external', '/src/pages/Deploy/external/index', 'ApiOutlined', 2, 300, 4, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
(304, '三方系统管理', '/resource/external', 'Deploy/External', 'ApiOutlined', 2, 300, 4, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
|
||||
-- 系统管理
|
||||
(1, '系统管理', '/system', 'Layout', 'SettingOutlined', 1, NULL, 99, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
(1, '系统管理', '/system', NULL, 'SettingOutlined', 1, NULL, 99, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
-- 用户管理
|
||||
(2, '用户管理', '/system/user', '/src/pages/system/user/index', 'UserOutlined', 2, 1, 10, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
(2, '用户管理', '/system/users', 'System/User', 'UserOutlined', 2, 1, 10, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
-- 角色管理
|
||||
(3, '角色管理', '/system/role', '/src/pages/system/role/index', 'TeamOutlined', 2, 1, 20, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
(3, '角色管理', '/system/roles', 'System/Role', 'TeamOutlined', 2, 1, 20, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
-- 菜单管理
|
||||
(4, '菜单管理', '/system/menu', '/src/pages/system/menu/index', 'MenuOutlined', 2, 1, 30, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
(4, '菜单管理', '/system/menus', 'System/Menu', 'MenuOutlined', 2, 1, 30, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
-- 部门管理
|
||||
(5, '部门管理', '/system/department', '/src/pages/system/department/index', 'ApartmentOutlined', 2, 1, 40, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE);
|
||||
(5, '部门管理', '/system/departments', 'System/Department', 'ApartmentOutlined', 2, 1, 40, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE);
|
||||
|
||||
-- 初始化角色数据
|
||||
INSERT INTO sys_role (id, create_time, code, name, type, description, sort)
|
||||
|
||||
@ -851,49 +851,6 @@ CREATE TABLE deploy_team_config
|
||||
CONSTRAINT fk_team_config_team FOREIGN KEY (team_id) REFERENCES deploy_team(id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='团队配置表';
|
||||
|
||||
CREATE TABLE deploy_log
|
||||
(
|
||||
-- 基础字段
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
-- 业务字段
|
||||
workflow_instance_id BIGINT NULL COMMENT '工作流实例ID',
|
||||
environment_id BIGINT NOT NULL COMMENT '环境ID',
|
||||
application_id BIGINT NOT NULL COMMENT '应用ID',
|
||||
deploy_version VARCHAR(100) NOT NULL COMMENT '部署版本号',
|
||||
form_variables TEXT NULL COMMENT '部署参数(JSON)',
|
||||
deploy_variables TEXT NULL COMMENT '部署参数(JSON)',
|
||||
|
||||
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 '是否删除:0-未删除,1-已删除'
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT ='部署日志表';
|
||||
|
||||
|
||||
CREATE TABLE deploy_app_config
|
||||
(
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
|
||||
build_type VARCHAR(50) NOT NULL,
|
||||
build_variables TEXT NOT NULL,
|
||||
form_variables_schema TEXT NULL,
|
||||
language_type VARCHAR(50) NOT NULL,
|
||||
workflow_definition_id BIGINT NOT NULL,
|
||||
|
||||
environment_id BIGINT NOT NULL,
|
||||
application_id BIGINT NOT NULL,
|
||||
enabled BIT NOT NULL,
|
||||
|
||||
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 '是否删除:0-未删除,1-已删除'
|
||||
);
|
||||
|
||||
-- --------------------------------------------------------------------------------------
|
||||
-- 通知渠道表
|
||||
-- --------------------------------------------------------------------------------------
|
||||
|
||||
Loading…
Reference in New Issue
Block a user