添加通知管理功能
This commit is contained in:
parent
ff88de9aa8
commit
541a7f821a
@ -174,13 +174,10 @@
|
||||
<artifactId>guava</artifactId>
|
||||
<version>32.1.3-jre</version>
|
||||
</dependency>
|
||||
<!-- Liquibase -->
|
||||
<dependency>
|
||||
<groupId>org.flywaydb</groupId>
|
||||
<artifactId>flyway-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.flywaydb</groupId>
|
||||
<artifactId>flyway-mysql</artifactId>
|
||||
<groupId>org.liquibase</groupId>
|
||||
<artifactId>liquibase-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
|
||||
@ -0,0 +1,88 @@
|
||||
package com.qqchen.deploy.backend.notification.api;
|
||||
|
||||
import com.qqchen.deploy.backend.framework.api.Response;
|
||||
import com.qqchen.deploy.backend.framework.controller.BaseController;
|
||||
import com.qqchen.deploy.backend.notification.dto.NotificationChannelDTO;
|
||||
import com.qqchen.deploy.backend.notification.dto.NotificationChannelQuery;
|
||||
import com.qqchen.deploy.backend.notification.entity.NotificationChannel;
|
||||
import com.qqchen.deploy.backend.notification.enums.NotificationChannelTypeEnum;
|
||||
import com.qqchen.deploy.backend.notification.service.INotificationChannelService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
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.web.bind.annotation.*;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 通知渠道API控制器
|
||||
*
|
||||
* @author qqchen
|
||||
* @since 2025-10-22
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/notification-channel")
|
||||
@Tag(name = "通知渠道管理", description = "通知渠道管理相关接口")
|
||||
public class NotificationChannelApiController
|
||||
extends BaseController<NotificationChannel, NotificationChannelDTO, Long, NotificationChannelQuery> {
|
||||
|
||||
@Resource
|
||||
private INotificationChannelService notificationChannelService;
|
||||
|
||||
@Operation(summary = "获取所有渠道类型")
|
||||
@GetMapping("/types")
|
||||
public Response<List<Map<String, Object>>> getChannelTypes() {
|
||||
List<Map<String, Object>> types = Arrays.stream(NotificationChannelTypeEnum.values())
|
||||
.map(type -> {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("code", type.name());
|
||||
map.put("label", type.getLabel());
|
||||
map.put("description", type.getDescription());
|
||||
return map;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
return Response.success(types);
|
||||
}
|
||||
|
||||
@Operation(summary = "测试通知渠道连接")
|
||||
@PostMapping("/{id}/test")
|
||||
public Response<Boolean> testConnection(
|
||||
@Parameter(description = "渠道ID", required = true) @PathVariable Long id
|
||||
) {
|
||||
boolean result = notificationChannelService.testConnection(id);
|
||||
return Response.success(result);
|
||||
}
|
||||
|
||||
@Operation(summary = "启用通知渠道")
|
||||
@PostMapping("/{id}/enable")
|
||||
public Response<Void> enable(
|
||||
@Parameter(description = "渠道ID", required = true) @PathVariable Long id
|
||||
) {
|
||||
notificationChannelService.enable(id);
|
||||
return Response.success();
|
||||
}
|
||||
|
||||
@Operation(summary = "禁用通知渠道")
|
||||
@PostMapping("/{id}/disable")
|
||||
public Response<Void> disable(
|
||||
@Parameter(description = "渠道ID", required = true) @PathVariable Long id
|
||||
) {
|
||||
notificationChannelService.disable(id);
|
||||
return Response.success();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void exportData(HttpServletResponse response, List<NotificationChannelDTO> data) {
|
||||
// TODO: 实现导出功能
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,17 @@
|
||||
package com.qqchen.deploy.backend.notification.converter;
|
||||
|
||||
import com.qqchen.deploy.backend.framework.converter.BaseConverter;
|
||||
import com.qqchen.deploy.backend.notification.dto.NotificationChannelDTO;
|
||||
import com.qqchen.deploy.backend.notification.entity.NotificationChannel;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
* 通知渠道转换器
|
||||
*
|
||||
* @author qqchen
|
||||
* @since 2025-10-22
|
||||
*/
|
||||
@Mapper(config = BaseConverter.class)
|
||||
public interface NotificationChannelConverter extends BaseConverter<NotificationChannel, NotificationChannelDTO> {
|
||||
}
|
||||
|
||||
@ -0,0 +1,43 @@
|
||||
package com.qqchen.deploy.backend.notification.dto;
|
||||
|
||||
import com.qqchen.deploy.backend.framework.dto.BaseDTO;
|
||||
import com.qqchen.deploy.backend.notification.enums.NotificationChannelStatusEnum;
|
||||
import com.qqchen.deploy.backend.notification.enums.NotificationChannelTypeEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 通知渠道DTO
|
||||
*
|
||||
* @author qqchen
|
||||
* @since 2025-10-22
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Schema(description = "通知渠道DTO")
|
||||
public class NotificationChannelDTO extends BaseDTO {
|
||||
|
||||
@Schema(description = "渠道名称", example = "研发部企业微信群")
|
||||
@NotBlank(message = "渠道名称不能为空")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "渠道类型", example = "WEWORK")
|
||||
@NotNull(message = "渠道类型不能为空")
|
||||
private NotificationChannelTypeEnum channelType;
|
||||
|
||||
@Schema(description = "渠道配置(JSON格式)", example = "{\"webhookUrl\":\"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx\"}")
|
||||
@NotNull(message = "渠道配置不能为空")
|
||||
private Map<String, Object> config;
|
||||
|
||||
@Schema(description = "状态", example = "ENABLED")
|
||||
private NotificationChannelStatusEnum status;
|
||||
|
||||
@Schema(description = "描述", example = "研发部通知群,用于部署通知")
|
||||
private String description;
|
||||
}
|
||||
|
||||
@ -0,0 +1,35 @@
|
||||
package com.qqchen.deploy.backend.notification.dto;
|
||||
|
||||
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 com.qqchen.deploy.backend.notification.enums.NotificationChannelStatusEnum;
|
||||
import com.qqchen.deploy.backend.notification.enums.NotificationChannelTypeEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 通知渠道查询条件
|
||||
*
|
||||
* @author qqchen
|
||||
* @since 2025-10-22
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Schema(description = "通知渠道查询条件")
|
||||
public class NotificationChannelQuery extends BaseQuery {
|
||||
|
||||
@Schema(description = "渠道名称(模糊查询)")
|
||||
@QueryField(field = "name", type = QueryType.LIKE)
|
||||
private String name;
|
||||
|
||||
@Schema(description = "渠道类型")
|
||||
@QueryField(field = "channelType")
|
||||
private NotificationChannelTypeEnum channelType;
|
||||
|
||||
@Schema(description = "状态")
|
||||
@QueryField(field = "status")
|
||||
private NotificationChannelStatusEnum status;
|
||||
}
|
||||
|
||||
@ -0,0 +1,61 @@
|
||||
package com.qqchen.deploy.backend.notification.entity;
|
||||
|
||||
import com.qqchen.deploy.backend.framework.annotation.LogicDelete;
|
||||
import com.qqchen.deploy.backend.framework.domain.Entity;
|
||||
import com.qqchen.deploy.backend.notification.enums.NotificationChannelStatusEnum;
|
||||
import com.qqchen.deploy.backend.notification.enums.NotificationChannelTypeEnum;
|
||||
import com.vladmihalcea.hibernate.type.json.JsonType;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.hibernate.annotations.Type;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 通知渠道实体
|
||||
*
|
||||
* @author qqchen
|
||||
* @since 2025-10-22
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@jakarta.persistence.Entity
|
||||
@Table(name = "sys_notification_channel")
|
||||
@LogicDelete
|
||||
public class NotificationChannel extends Entity<Long> {
|
||||
|
||||
/**
|
||||
* 渠道名称
|
||||
*/
|
||||
@Column(nullable = false, length = 100)
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 渠道类型
|
||||
*/
|
||||
@Enumerated(EnumType.STRING)
|
||||
@Column(name = "channel_type", nullable = false, length = 50)
|
||||
private NotificationChannelTypeEnum channelType;
|
||||
|
||||
/**
|
||||
* 渠道配置(JSON格式,不同渠道存储不同字段)
|
||||
*/
|
||||
@Type(JsonType.class)
|
||||
@Column(nullable = false, columnDefinition = "JSON")
|
||||
private Map<String, Object> config;
|
||||
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
@Enumerated(EnumType.STRING)
|
||||
@Column(nullable = false, length = 20)
|
||||
private NotificationChannelStatusEnum status = NotificationChannelStatusEnum.ENABLED;
|
||||
|
||||
/**
|
||||
* 描述
|
||||
*/
|
||||
@Column(length = 500)
|
||||
private String description;
|
||||
}
|
||||
|
||||
@ -0,0 +1,54 @@
|
||||
package com.qqchen.deploy.backend.notification.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 通知渠道状态枚举
|
||||
*
|
||||
* @author qqchen
|
||||
* @since 2025-10-22
|
||||
*/
|
||||
@Getter
|
||||
public enum NotificationChannelStatusEnum {
|
||||
|
||||
/**
|
||||
* 启用
|
||||
*/
|
||||
ENABLED("ENABLED", "启用"),
|
||||
|
||||
/**
|
||||
* 禁用
|
||||
*/
|
||||
DISABLED("DISABLED", "禁用");
|
||||
|
||||
/**
|
||||
* 状态编码
|
||||
*/
|
||||
private final String code;
|
||||
|
||||
/**
|
||||
* 状态描述
|
||||
*/
|
||||
private final String description;
|
||||
|
||||
NotificationChannelStatusEnum(String code, String description) {
|
||||
this.code = code;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据编码获取枚举
|
||||
*
|
||||
* @param code 编码
|
||||
* @return 枚举实例
|
||||
*/
|
||||
public static NotificationChannelStatusEnum fromCode(String code) {
|
||||
for (NotificationChannelStatusEnum status : values()) {
|
||||
if (status.getCode().equals(code)) {
|
||||
return status;
|
||||
}
|
||||
}
|
||||
throw new IllegalArgumentException("Invalid notification channel status code: " + code);
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,74 @@
|
||||
package com.qqchen.deploy.backend.notification.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 通知渠道类型枚举
|
||||
*
|
||||
* @author qqchen
|
||||
* @since 2025-10-22
|
||||
*/
|
||||
@Getter
|
||||
public enum NotificationChannelTypeEnum {
|
||||
|
||||
/**
|
||||
* 企业微信
|
||||
*/
|
||||
WEWORK("企业微信", "通过企业微信群机器人发送消息");
|
||||
|
||||
// /**
|
||||
// * 飞书
|
||||
// */
|
||||
// FEISHU("飞书", "通过飞书群机器人发送消息"),
|
||||
//
|
||||
// /**
|
||||
// * 钉钉
|
||||
// */
|
||||
// DINGTALK("钉钉", "通过钉钉群机器人发送消息"),
|
||||
//
|
||||
// /**
|
||||
// * 短信
|
||||
// */
|
||||
// SMS("短信", "通过短信平台发送消息"),
|
||||
//
|
||||
// /**
|
||||
// * 邮件
|
||||
// */
|
||||
// EMAIL("邮件", "通过SMTP发送邮件"),
|
||||
//
|
||||
// /**
|
||||
// * Slack
|
||||
// */
|
||||
// SLACK("Slack", "通过Slack Webhook发送消息");
|
||||
|
||||
/**
|
||||
* 渠道标签
|
||||
*/
|
||||
private final String label;
|
||||
|
||||
/**
|
||||
* 渠道描述
|
||||
*/
|
||||
private final String description;
|
||||
|
||||
NotificationChannelTypeEnum(String label, String description) {
|
||||
this.label = label;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据编码获取枚举
|
||||
*
|
||||
* @param code 编码
|
||||
* @return 枚举实例
|
||||
*/
|
||||
public static NotificationChannelTypeEnum fromCode(String code) {
|
||||
for (NotificationChannelTypeEnum type : values()) {
|
||||
if (type.name().equals(code)) {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
throw new IllegalArgumentException("Invalid notification channel type code: " + code);
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,48 @@
|
||||
package com.qqchen.deploy.backend.notification.repository;
|
||||
|
||||
import com.qqchen.deploy.backend.framework.repository.IBaseRepository;
|
||||
import com.qqchen.deploy.backend.notification.entity.NotificationChannel;
|
||||
import com.qqchen.deploy.backend.notification.enums.NotificationChannelStatusEnum;
|
||||
import com.qqchen.deploy.backend.notification.enums.NotificationChannelTypeEnum;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 通知渠道Repository
|
||||
*
|
||||
* @author qqchen
|
||||
* @since 2025-10-22
|
||||
*/
|
||||
@Repository
|
||||
public interface INotificationChannelRepository extends IBaseRepository<NotificationChannel, Long> {
|
||||
|
||||
/**
|
||||
* 根据名称和删除标记查询是否存在
|
||||
*
|
||||
* @param name 渠道名称
|
||||
* @return 是否存在
|
||||
*/
|
||||
boolean existsByNameAndDeletedFalse(String name);
|
||||
|
||||
/**
|
||||
* 根据渠道类型和状态查询渠道列表
|
||||
*
|
||||
* @param channelType 渠道类型
|
||||
* @param status 状态
|
||||
* @return 渠道列表
|
||||
*/
|
||||
List<NotificationChannel> findByChannelTypeAndStatusAndDeletedFalse(
|
||||
NotificationChannelTypeEnum channelType,
|
||||
NotificationChannelStatusEnum status
|
||||
);
|
||||
|
||||
/**
|
||||
* 根据状态查询渠道列表
|
||||
*
|
||||
* @param status 状态
|
||||
* @return 渠道列表
|
||||
*/
|
||||
List<NotificationChannel> findByStatusAndDeletedFalse(NotificationChannelStatusEnum status);
|
||||
}
|
||||
|
||||
@ -0,0 +1,38 @@
|
||||
package com.qqchen.deploy.backend.notification.service;
|
||||
|
||||
import com.qqchen.deploy.backend.framework.service.IBaseService;
|
||||
import com.qqchen.deploy.backend.notification.dto.NotificationChannelDTO;
|
||||
import com.qqchen.deploy.backend.notification.dto.NotificationChannelQuery;
|
||||
import com.qqchen.deploy.backend.notification.entity.NotificationChannel;
|
||||
|
||||
/**
|
||||
* 通知渠道Service接口
|
||||
*
|
||||
* @author qqchen
|
||||
* @since 2025-10-22
|
||||
*/
|
||||
public interface INotificationChannelService extends IBaseService<NotificationChannel, NotificationChannelDTO, NotificationChannelQuery, Long> {
|
||||
|
||||
/**
|
||||
* 测试通知渠道连接
|
||||
*
|
||||
* @param id 渠道ID
|
||||
* @return 测试结果
|
||||
*/
|
||||
boolean testConnection(Long id);
|
||||
|
||||
/**
|
||||
* 启用渠道
|
||||
*
|
||||
* @param id 渠道ID
|
||||
*/
|
||||
void enable(Long id);
|
||||
|
||||
/**
|
||||
* 禁用渠道
|
||||
*
|
||||
* @param id 渠道ID
|
||||
*/
|
||||
void disable(Long id);
|
||||
}
|
||||
|
||||
@ -0,0 +1,85 @@
|
||||
package com.qqchen.deploy.backend.notification.service.impl;
|
||||
|
||||
import com.qqchen.deploy.backend.framework.annotation.ServiceType;
|
||||
import com.qqchen.deploy.backend.framework.enums.ResponseCode;
|
||||
import com.qqchen.deploy.backend.framework.exception.BusinessException;
|
||||
import com.qqchen.deploy.backend.framework.exception.UniqueConstraintException;
|
||||
import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl;
|
||||
import com.qqchen.deploy.backend.notification.converter.NotificationChannelConverter;
|
||||
import com.qqchen.deploy.backend.notification.dto.NotificationChannelDTO;
|
||||
import com.qqchen.deploy.backend.notification.dto.NotificationChannelQuery;
|
||||
import com.qqchen.deploy.backend.notification.entity.NotificationChannel;
|
||||
import com.qqchen.deploy.backend.notification.enums.NotificationChannelStatusEnum;
|
||||
import com.qqchen.deploy.backend.notification.repository.INotificationChannelRepository;
|
||||
import com.qqchen.deploy.backend.notification.service.INotificationChannelService;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import static com.qqchen.deploy.backend.framework.annotation.ServiceType.Type.DATABASE;
|
||||
|
||||
/**
|
||||
* 通知渠道Service实现
|
||||
*
|
||||
* @author qqchen
|
||||
* @since 2025-10-22
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@ServiceType(DATABASE)
|
||||
public class NotificationChannelServiceImpl
|
||||
extends BaseServiceImpl<NotificationChannel, NotificationChannelDTO, NotificationChannelQuery, Long>
|
||||
implements INotificationChannelService {
|
||||
|
||||
@Resource
|
||||
private INotificationChannelRepository notificationChannelRepository;
|
||||
|
||||
@Resource
|
||||
private NotificationChannelConverter notificationChannelConverter;
|
||||
|
||||
@Override
|
||||
protected void validateUniqueConstraints(NotificationChannelDTO dto) {
|
||||
// 检查渠道名称唯一性
|
||||
if (notificationChannelRepository.existsByNameAndDeletedFalse(dto.getName())) {
|
||||
throw new UniqueConstraintException(ResponseCode.CONFLICT, "name", dto.getName());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public boolean testConnection(Long id) {
|
||||
NotificationChannel channel = notificationChannelRepository.findById(id)
|
||||
.orElseThrow(() -> new BusinessException(ResponseCode.DATA_NOT_FOUND));
|
||||
|
||||
// TODO: 实现实际的连接测试逻辑
|
||||
log.info("测试通知渠道连接: id={}, type={}", id, channel.getChannelType());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void enable(Long id) {
|
||||
NotificationChannel channel = notificationChannelRepository.findById(id)
|
||||
.orElseThrow(() -> new BusinessException(ResponseCode.DATA_NOT_FOUND));
|
||||
|
||||
channel.setStatus(NotificationChannelStatusEnum.ENABLED);
|
||||
notificationChannelRepository.save(channel);
|
||||
|
||||
log.info("启用通知渠道: id={}, name={}", id, channel.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void disable(Long id) {
|
||||
NotificationChannel channel = notificationChannelRepository.findById(id)
|
||||
.orElseThrow(() -> new BusinessException(ResponseCode.DATA_NOT_FOUND));
|
||||
|
||||
channel.setStatus(NotificationChannelStatusEnum.DISABLED);
|
||||
notificationChannelRepository.save(channel);
|
||||
|
||||
log.info("禁用通知渠道: id={}, name={}", id, channel.getName());
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.qqchen.deploy.backend.workflow.dto.definition.workflow;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
@ -18,6 +19,11 @@ public class OutputField {
|
||||
|
||||
private String description;
|
||||
|
||||
/**
|
||||
* 枚举值列表
|
||||
* 注意:前端使用 "enum"(JSON关键字),Java中使用 enums 避免与 enum 关键字冲突
|
||||
*/
|
||||
@JsonProperty("enum")
|
||||
private List<String> enums;
|
||||
|
||||
private Object example;
|
||||
|
||||
@ -96,8 +96,8 @@ public enum NodeTypeEnums {
|
||||
NodeCategoryEnums.GATEWAY,
|
||||
"条件分支控制"
|
||||
),
|
||||
NOTIFICATION_NODE(
|
||||
"NOTIFICATION_NODE",
|
||||
NOTIFICATION(
|
||||
"NOTIFICATION",
|
||||
"通知节点",
|
||||
NotificationNodeLocalVariables.class,
|
||||
NotificationNodePanelVariables.class,
|
||||
|
||||
@ -55,15 +55,12 @@ spring:
|
||||
always-use-message-format: false
|
||||
use-code-as-default-message: true
|
||||
cache-duration: 3600
|
||||
flyway:
|
||||
liquibase:
|
||||
enabled: true
|
||||
baseline-on-migrate: true
|
||||
locations: classpath:db/migration
|
||||
table: flyway_schema_history
|
||||
baseline-version: 0
|
||||
validate-on-migrate: true
|
||||
placeholderPrefix: "#{"
|
||||
placeholderSuffix: "}"
|
||||
change-log: classpath:db/changelog/db.changelog-master.yaml
|
||||
drop-first: false
|
||||
default-schema: deploy-ease-platform
|
||||
contexts: default
|
||||
flowable:
|
||||
database-schema-update: true
|
||||
# id-generator: org.flowable.common.engine.impl.db.DbIdGenerator
|
||||
|
||||
@ -665,3 +665,28 @@ CREATE TABLE deploy_app_config
|
||||
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除:0-未删除,1-已删除'
|
||||
);
|
||||
|
||||
-- --------------------------------------------------------------------------------------
|
||||
-- 通知渠道表
|
||||
-- --------------------------------------------------------------------------------------
|
||||
|
||||
-- 通知渠道配置表
|
||||
CREATE TABLE sys_notification_channel (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
create_by VARCHAR(100) NULL COMMENT '创建人',
|
||||
create_time DATETIME(6) NULL COMMENT '创建时间',
|
||||
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除(0:未删除,1:已删除)',
|
||||
update_by VARCHAR(100) NULL COMMENT '更新人',
|
||||
update_time DATETIME(6) NULL COMMENT '更新时间',
|
||||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||||
|
||||
name VARCHAR(100) NOT NULL COMMENT '渠道名称(如:研发部企业微信群)',
|
||||
channel_type VARCHAR(50) NOT NULL COMMENT '渠道类型(WEWORK, FEISHU, DINGTALK, SMS, EMAIL, SLACK)',
|
||||
config JSON NOT NULL COMMENT '渠道配置(JSON格式,不同渠道存储不同字段)',
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'ENABLED' COMMENT '状态(ENABLED-启用, DISABLED-禁用)',
|
||||
description VARCHAR(500) NULL COMMENT '描述说明',
|
||||
|
||||
INDEX idx_channel_type (channel_type),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_deleted (deleted)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='通知渠道配置表';
|
||||
|
||||
@ -801,4 +801,30 @@ INSERT INTO workflow_node_definition (
|
||||
# 4, 'admin', NOW(),
|
||||
# 2, 'PLATFORM-WEB', '平台前端', '平台前端应用', 'ENABLED',
|
||||
# 'https://github.com/platform/platform-web.git', 'main', 'GIT', 'NPM', 'NODEJS', 'VUE', 2
|
||||
# );
|
||||
# );
|
||||
|
||||
-- --------------------------------------------------------------------------------------
|
||||
-- 初始化通知渠道数据
|
||||
-- --------------------------------------------------------------------------------------
|
||||
|
||||
-- 企业微信通知渠道示例
|
||||
INSERT INTO sys_notification_channel
|
||||
(name, channel_type, config, status, description, create_by, create_time, update_by, update_time, version, deleted)
|
||||
VALUES
|
||||
('研发部企业微信群', 'WEWORK',
|
||||
'{"webhookUrl":"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=example-key-please-replace"}',
|
||||
'DISABLED',
|
||||
'研发部通知群,用于部署通知(示例数据,请修改为实际的Webhook地址)',
|
||||
'admin', NOW(), 'admin', NOW(), 0, 0),
|
||||
|
||||
('运维飞书告警群', 'FEISHU',
|
||||
'{"webhookUrl":"https://open.feishu.cn/open-apis/bot/v2/hook/example-hook-id","secret":"example-secret"}',
|
||||
'DISABLED',
|
||||
'运维团队告警通知(示例数据,请修改为实际配置)',
|
||||
'admin', NOW(), 'admin', NOW(), 0, 0),
|
||||
|
||||
('管理员邮件通知', 'EMAIL',
|
||||
'{"smtpHost":"smtp.qq.com","smtpPort":465,"username":"notify@example.com","password":"example-password","fromEmail":"notify@example.com","ssl":true}',
|
||||
'DISABLED',
|
||||
'管理员邮件通知渠道(示例数据,请修改为实际配置)',
|
||||
'admin', NOW(), 'admin', NOW(), 0, 0);
|
||||
833
backend/src/main/resources/db/changelog/changes/v1.0.0-data.sql
Normal file
833
backend/src/main/resources/db/changelog/changes/v1.0.0-data.sql
Normal file
@ -0,0 +1,833 @@
|
||||
-- --------------------------------------------------------------------------------------
|
||||
-- 初始化系统基础数据
|
||||
-- --------------------------------------------------------------------------------------
|
||||
|
||||
-- 初始化租户数据
|
||||
INSERT INTO sys_tenant (id, create_time, code, name, address, contact_name, contact_phone, email, enabled)
|
||||
VALUES (1, NOW(), 'admin', '系统管理租户', '北京市朝阳区', '管理员', '13800138000', 'admin@system.com', 1);
|
||||
|
||||
-- 初始化部门数据
|
||||
INSERT INTO sys_department (id, create_time, code, name, description, sort, enabled)
|
||||
VALUES (1, NOW(), 'ROOT', '根部门', '系统根部门', 0, 1);
|
||||
|
||||
INSERT INTO sys_department (id, create_time, code, name, description, parent_id, sort, enabled)
|
||||
VALUES
|
||||
(2, NOW(), 'IT', '信息技术部', '负责公司IT系统的规划、建设和运维', 1, 1, 1),
|
||||
(3, NOW(), 'DEV', '研发部', '负责产品研发和技术创新', 1, 2, 1),
|
||||
(4, NOW(), 'OPS', '运维部', '负责系统运维和技术支持', 1, 3, 1);
|
||||
|
||||
-- 初始化用户数据(密码统一为:123456)
|
||||
INSERT INTO sys_user (id, create_time, username, password, nickname, email, phone, department_id, enabled)
|
||||
VALUES
|
||||
(1, NOW(), 'admin', '$2a$10$viWVqfZwQxViLQDk7hhVg.ENYT.3zUFf.aBetlarImKPSS0V2gbSa', '超级管理员', 'admin@system.com', '13800138000', 1, 1),
|
||||
(2, NOW(), 'it_manager', '$2a$10$viWVqfZwQxViLQDk7hhVg.ENYT.3zUFf.aBetlarImKPSS0V2gbSa', 'IT经理', 'it@system.com', '13800138001', 2, 1),
|
||||
(3, NOW(), 'dev_manager', '$2a$10$viWVqfZwQxViLQDk7hhVg.ENYT.3zUFf.aBetlarImKPSS0V2gbSa', '研发经理', 'dev@system.com', '13800138002', 3, 1),
|
||||
(4, NOW(), 'ops_manager', '$2a$10$viWVqfZwQxViLQDk7hhVg.ENYT.3zUFf.aBetlarImKPSS0V2gbSa', '运维经理', 'ops@system.com', '13800138003', 4, 1);
|
||||
|
||||
-- 初始化系统参数
|
||||
INSERT INTO sys_param (id, create_time, code, name, value, type, description, enabled)
|
||||
VALUES
|
||||
(1, NOW(), 'SYSTEM_NAME', '系统名称', 'Deploy Ease Platform', 'STRING', '系统显示名称', 1),
|
||||
(2, NOW(), 'SYSTEM_LOGO', '系统Logo', '/static/logo.png', 'STRING', '系统Logo路径', 1),
|
||||
(3, NOW(), 'LOGIN_BACKGROUND', '登录背景', '/static/login-bg.jpg', 'STRING', '登录页面背景图片', 1);
|
||||
|
||||
-- --------------------------------------------------------------------------------------
|
||||
-- 初始化权限管理数据
|
||||
-- --------------------------------------------------------------------------------------
|
||||
|
||||
-- --------------------------------------------------------------------------------------
|
||||
-- 初始化权限管理数据
|
||||
-- --------------------------------------------------------------------------------------
|
||||
|
||||
-- --------------------------------------------------------------------------------------
|
||||
-- 初始化权限管理数据
|
||||
-- --------------------------------------------------------------------------------------
|
||||
|
||||
-- 先清理已有数据
|
||||
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),
|
||||
|
||||
-- 系统管理
|
||||
(1, '系统管理', '/system', 'Layout', 'SettingOutlined', 1, NULL, 1, 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),
|
||||
-- 角色管理
|
||||
(3, '角色管理', '/system/role', '/src/pages/system/role/index', '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),
|
||||
-- 部门管理
|
||||
(5, '部门管理', '/system/department', '/src/pages/system/department/index', 'ApartmentOutlined', 2, 1, 40, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
|
||||
-- 工作流管理
|
||||
(100, '工作流管理', '/workflow', 'Layout', 'DeploymentUnitOutlined', 1, NULL, 2, 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),
|
||||
-- 工作流实例
|
||||
(102, '工作流实例', '/workflow/instance', '/src/pages/workflow/instance/index', 'BranchesOutlined', 2, 100, 20, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
-- 节点管理
|
||||
(103, '节点管理', '/workflow/node-design', '/src/pages/workflow/nodedesign/design/index', 'ControlOutlined', 2, 100, 40, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
|
||||
(200, '运维管理', '/deploy', '', 'DeploymentUnitOutlined', 2, 0, 50, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
|
||||
(201, '项目组管理', '/deploy/project-group', '/src/pages/Deploy/ProjectGroup/List/index', 'ProjectOutlined', 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),
|
||||
|
||||
(203, '环境管理', '/deploy/environments', '/src/pages/Deploy/Environment/List/index', 'CloudOutlined', 2, 200, 3, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
|
||||
(204, '部署配置管理', '/deploy/deployment', '/src/pages/Deploy/Deployment/List/index', 'CloudOutlined', 2, 200, 4, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
|
||||
(205, 'Jenkins管理', '/deploy/jenkins-manager', '/src/pages/Deploy/JenkinsManager/List', 'CloudOutlined', 2, 200, 5, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
|
||||
(206, 'Git管理', '/deploy/git-manager', '/src/pages/Deploy/GitManager/List', 'CloudOutlined', 2, 200, 6, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE),
|
||||
-- 三方系统
|
||||
(207, '三方系统管理', '/deploy/external', '/src/pages/Deploy/external/index', 'ApiOutlined', 2, 200, 7, FALSE, TRUE, 'system', '2024-01-01 00:00:00', 0, FALSE);
|
||||
|
||||
-- 初始化角色数据
|
||||
INSERT INTO sys_role (id, create_time, code, name, type, description, sort)
|
||||
VALUES
|
||||
(1, NOW(), 'SUPER_ADMIN', '超级管理员', 1, '系统超级管理员,拥有所有权限', 1),
|
||||
(2, NOW(), 'SYSTEM_ADMIN', '系统管理员', 1, '系统管理员,拥有大部分系统管理权限', 2),
|
||||
(3, NOW(), 'COMMON_USER', '普通用户', 2, '普通用,仅拥有基本操作权限', 3);
|
||||
|
||||
-- 初始化角色标签
|
||||
INSERT INTO sys_role_tag (id, create_time, name, color)
|
||||
VALUES
|
||||
(1, NOW(), '系统内置', '#ff4d4f'),
|
||||
(2, NOW(), '重要角色', '#ffa940'),
|
||||
(3, NOW(), '普通角色', '#73d13d');
|
||||
|
||||
-- 初始化角色标签关联
|
||||
INSERT INTO sys_role_tag_relation (role_id, tag_id)
|
||||
VALUES
|
||||
(1, 1),
|
||||
(2, 1),
|
||||
(2, 2),
|
||||
(3, 3);
|
||||
|
||||
-- 初始化用户角色关联
|
||||
INSERT INTO sys_user_role (user_id, role_id)
|
||||
VALUES
|
||||
( 1, 1),
|
||||
( 2, 2),
|
||||
(3, 2),
|
||||
(4, 3);
|
||||
|
||||
-- 初始化角色菜单关联
|
||||
INSERT INTO sys_role_menu (role_id, menu_id)
|
||||
SELECT 1, id FROM sys_menu; -- 超级管理员拥有所有菜单权限
|
||||
|
||||
INSERT INTO sys_role_menu (role_id, menu_id)
|
||||
VALUES
|
||||
(2, 1), (2, 2), (2, 3), (2, 4), (2, 5), -- 系统管理员拥有系统管理相关权限
|
||||
(3, 205); -- 普通用户拥有三方系统权限
|
||||
|
||||
-- 初始化权限模板
|
||||
INSERT INTO sys_permission_template (id, create_time, code, name, type, description, enabled)
|
||||
VALUES
|
||||
(1, NOW(), 'FULL_PERMISSION', '完整权限模板', 1, '包含所有系统权限的模板', 1),
|
||||
(2, NOW(), 'BASIC_PERMISSION', '基础权限模板', 1, '包含基本操作权限的模板', 1);
|
||||
|
||||
-- 初始化模板菜单关联
|
||||
INSERT INTO sys_template_menu (template_id, menu_id)
|
||||
SELECT 1, id FROM sys_menu; -- 完整权限模板关联所有菜单
|
||||
|
||||
INSERT INTO sys_template_menu (template_id, menu_id)
|
||||
VALUES (2, 205); -- 基础权限模板关联三方系统菜单
|
||||
|
||||
-- 初始化权限数据
|
||||
INSERT INTO sys_permission (id, create_time, menu_id, code, name, type, sort)
|
||||
VALUES
|
||||
-- 用户管理权限
|
||||
(1, NOW(), 2, 'system:user:list', '用户列表', 'FUNCTION', 1),
|
||||
(2, NOW(), 2, 'system:user:create', '用户创建', 'FUNCTION', 2),
|
||||
(3, NOW(), 2, 'system:user:update', '用户修改', 'FUNCTION', 3),
|
||||
(4, NOW(), 2, 'system:user:delete', '用户删除', 'FUNCTION', 4),
|
||||
|
||||
-- 角色管理权限
|
||||
(5, NOW(), 3, 'system:role:list', '角色列表', 'FUNCTION', 1),
|
||||
(6, NOW(), 3, 'system:role:create', '角色创建', 'FUNCTION', 2),
|
||||
(7, NOW(), 3, 'system:role:update', '角色修改', 'FUNCTION', 3),
|
||||
(8, NOW(), 3, 'system:role:delete', '角色删除', 'FUNCTION', 4),
|
||||
|
||||
-- 三方系统权限
|
||||
(9, NOW(), 205, 'system:external:list', '三方系统列表', 'FUNCTION', 1),
|
||||
(10, NOW(), 205, 'system:external:create', '三方系统创建', 'FUNCTION', 2),
|
||||
(11, NOW(), 205, 'system:external:update', '三方系统修改', 'FUNCTION', 3),
|
||||
(12, NOW(), 205, 'system:external:delete', '三方系统删除', 'FUNCTION', 4),
|
||||
(13, NOW(), 205, 'system:external:test', '连接测试', 'FUNCTION', 5),
|
||||
(14, NOW(), 205, 'system:external:sync', '数据同步', 'FUNCTION', 6);
|
||||
|
||||
-- --------------------------------------------------------------------------------------
|
||||
-- 初始化外部系统数据
|
||||
-- --------------------------------------------------------------------------------------
|
||||
|
||||
-- 初始化外部系统
|
||||
INSERT INTO sys_external_system (
|
||||
id, create_by, create_time, deleted, update_by, update_time, version,
|
||||
name, type, url, remark, sort, enabled, auth_type, username, password, token,
|
||||
sync_status, last_sync_time, last_connect_time, config
|
||||
) VALUES (
|
||||
1, 'admin', '2023-12-01 00:00:00', 0, 'admin', '2023-12-01 00:00:00', 0,
|
||||
'链宇JENKINS', 'JENKINS', 'https://ly-jenkins.iscmtech.com', '链宇JENKINS', 1, 1,
|
||||
'BASIC', 'admin', 'Lianyu!@#~123456', NULL,
|
||||
'SUCCESS', '2023-12-01 00:00:00', '2023-12-01 00:00:00', '{}'
|
||||
), (
|
||||
2, 'admin', '2023-12-01 00:00:00', 0, 'admin', '2023-12-01 00:00:00', 0,
|
||||
'GitLab测试环境', 'GIT', 'http://gitlab.test.com', '测试环境GitLab服务器', 2, 1,
|
||||
'TOKEN', NULL, NULL, 'test-token',
|
||||
'SUCCESS', '2023-12-01 00:00:00', '2023-12-01 00:00:00', '{}'
|
||||
), (
|
||||
3, 'admin', '2024-12-03 10:35:58.932966', 0, 'admin', '2024-12-03 10:35:58.932966', 0,
|
||||
'链宇GIT', 'GIT', 'http://119.3.203.210:8088/', NULL, 1, 1,
|
||||
'TOKEN', NULL, NULL, 'cNSud7D1GmYQKEMco7s5',
|
||||
NULL, NULL, NULL, '{}'
|
||||
);
|
||||
|
||||
-- --------------------------------------------------------------------------------------
|
||||
-- 初始化工作流相关数据
|
||||
-- --------------------------------------------------------------------------------------
|
||||
-- 工作流定义测试数据
|
||||
INSERT INTO workflow_definition (
|
||||
-- 基础信息
|
||||
name, `key`, process_definition_id, flow_version, description, category, triggers,
|
||||
-- 流程配置
|
||||
graph, local_variables_schema, tags,
|
||||
-- 流程属性
|
||||
status, is_executable, target_namespace,
|
||||
-- 审计字段
|
||||
created_at, updated_at, created_by, updated_by, is_deleted
|
||||
) VALUES
|
||||
-- 简单脚本流程:开始 -> 脚本任务 -> 结束
|
||||
(
|
||||
'简单脚本流程', 'simple_script_flow', null, 1, '一个包含脚本任务的简单流程', 'SCRIPT_EXECUTION', null,
|
||||
'{
|
||||
"nodes" : [ {
|
||||
"id" : "startEvent1",
|
||||
"code" : "START_EVENT",
|
||||
"type" : "START_EVENT",
|
||||
"name" : "开始",
|
||||
"graph" : {
|
||||
"shape" : "circle",
|
||||
"size" : {
|
||||
"width" : 40,
|
||||
"height" : 40
|
||||
},
|
||||
"style" : {
|
||||
"fill" : "#e8f7ff",
|
||||
"stroke" : "#1890ff",
|
||||
"icon" : "play-circle",
|
||||
"iconColor" : "#1890ff",
|
||||
"strokeWidth" : 2
|
||||
},
|
||||
"ports" : {
|
||||
"groups" : {
|
||||
"out" : {
|
||||
"position" : "right",
|
||||
"attrs" : {
|
||||
"circle" : {
|
||||
"r" : 4,
|
||||
"fill" : "#ffffff",
|
||||
"stroke" : "#1890ff"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"types" : [ "out" ]
|
||||
},
|
||||
"position" : {
|
||||
"x" : 100,
|
||||
"y" : 100
|
||||
}
|
||||
},
|
||||
"config" : {
|
||||
"name" : "开始节点",
|
||||
"description" : "启动流程"
|
||||
}
|
||||
}, {
|
||||
"id" : "scriptTask1",
|
||||
"code" : "SCRIPT_TASK",
|
||||
"type" : "SCRIPT_TASK",
|
||||
"name" : "执行脚本",
|
||||
"graph" : {
|
||||
"shape" : "rect",
|
||||
"size" : {
|
||||
"width" : 40,
|
||||
"height" : 40
|
||||
},
|
||||
"style" : {
|
||||
"fill" : "#fff1f0",
|
||||
"stroke" : "#ff4d4f",
|
||||
"icon" : "code",
|
||||
"iconColor" : "#ff4d4f",
|
||||
"strokeWidth" : 2
|
||||
},
|
||||
"ports" : {
|
||||
"groups" : {
|
||||
"in" : {
|
||||
"position" : "left",
|
||||
"attrs" : {
|
||||
"circle" : {
|
||||
"r" : 4,
|
||||
"fill" : "#ffffff",
|
||||
"stroke" : "#1890ff"
|
||||
}
|
||||
}
|
||||
},
|
||||
"out" : {
|
||||
"position" : "right",
|
||||
"attrs" : {
|
||||
"circle" : {
|
||||
"r" : 4,
|
||||
"fill" : "#ffffff",
|
||||
"stroke" : "#1890ff"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"types" : [ "in", "out" ]
|
||||
},
|
||||
"position" : {
|
||||
"x" : 300,
|
||||
"y" : 100
|
||||
}
|
||||
},
|
||||
"config" : {
|
||||
"name" : "脚本任务",
|
||||
"description" : "执行一个简单的Shell脚本",
|
||||
"language" : "shell",
|
||||
"script" : "echo ''Hello World''"
|
||||
}
|
||||
}, {
|
||||
"id" : "endEvent1",
|
||||
"code" : "END_EVENT",
|
||||
"type" : "END_EVENT",
|
||||
"name" : "结束",
|
||||
"graph" : {
|
||||
"shape" : "circle",
|
||||
"size" : {
|
||||
"width" : 40,
|
||||
"height" : 40
|
||||
},
|
||||
"style" : {
|
||||
"fill" : "#fff1f0",
|
||||
"stroke" : "#ff4d4f",
|
||||
"icon" : "stop",
|
||||
"iconColor" : "#ff4d4f",
|
||||
"strokeWidth" : 2
|
||||
},
|
||||
"ports" : {
|
||||
"groups" : {
|
||||
"in" : {
|
||||
"position" : "left",
|
||||
"attrs" : {
|
||||
"circle" : {
|
||||
"r" : 4,
|
||||
"fill" : "#ffffff",
|
||||
"stroke" : "#1890ff"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"types" : [ "in" ]
|
||||
},
|
||||
"position" : {
|
||||
"x" : 500,
|
||||
"y" : 100
|
||||
}
|
||||
},
|
||||
"config" : {
|
||||
"name" : "结束节点",
|
||||
"description" : "流程结束"
|
||||
}
|
||||
} ],
|
||||
"edges" : [ {
|
||||
"id" : "flow1",
|
||||
"from" : "startEvent1",
|
||||
"to" : "scriptTask1",
|
||||
"name" : "开始到脚本",
|
||||
"config" : {
|
||||
"type" : "sequence"
|
||||
},
|
||||
"properties" : null
|
||||
}, {
|
||||
"id" : "flow2",
|
||||
"from" : "scriptTask1",
|
||||
"to" : "endEvent1",
|
||||
"name" : "脚本到结束",
|
||||
"config" : {
|
||||
"type" : "sequence"
|
||||
},
|
||||
"properties" : null
|
||||
} ]
|
||||
}',
|
||||
'{"formItems":[]}',
|
||||
'["simple","script","test"]',
|
||||
'DRAFT', TRUE, 'http://www.flowable.org/test',
|
||||
NOW(), NOW(), 1, 1, FALSE
|
||||
),
|
||||
|
||||
-- 复杂业务流程:开始 -> 脚本任务A -> 脚本任务B -> 结束
|
||||
(
|
||||
'复杂业务流程', 'complex_business_flow', null, 1, '包含多个脚本任务节点的业务流程', 'SCRIPT_EXECUTION', null,
|
||||
'{
|
||||
"nodes" : [ {
|
||||
"id" : "startEvent1",
|
||||
"code" : "START_EVENT",
|
||||
"type" : "START_EVENT",
|
||||
"name" : "开始",
|
||||
"graph" : {
|
||||
"shape" : "circle",
|
||||
"size" : {
|
||||
"width" : 40,
|
||||
"height" : 40
|
||||
},
|
||||
"style" : {
|
||||
"fill" : "#e8f7ff",
|
||||
"stroke" : "#1890ff",
|
||||
"icon" : "play-circle",
|
||||
"iconColor" : "#1890ff",
|
||||
"strokeWidth" : 2
|
||||
},
|
||||
"ports" : {
|
||||
"groups" : {
|
||||
"out" : {
|
||||
"position" : "right",
|
||||
"attrs" : {
|
||||
"circle" : {
|
||||
"r" : 4,
|
||||
"fill" : "#ffffff",
|
||||
"stroke" : "#1890ff"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"types" : [ "out" ]
|
||||
},
|
||||
"position" : {
|
||||
"x" : 100,
|
||||
"y" : 100
|
||||
}
|
||||
},
|
||||
"config" : {
|
||||
"name" : "开始节点",
|
||||
"description" : "启动流程"
|
||||
}
|
||||
}, {
|
||||
"id" : "scriptTask1",
|
||||
"code" : "SCRIPT_TASK",
|
||||
"type" : "SCRIPT_TASK",
|
||||
"name" : "数据处理",
|
||||
"graph" : {
|
||||
"shape" : "rect",
|
||||
"size" : {
|
||||
"width" : 40,
|
||||
"height" : 40
|
||||
},
|
||||
"style" : {
|
||||
"fill" : "#fff1f0",
|
||||
"stroke" : "#ff4d4f",
|
||||
"icon" : "code",
|
||||
"iconColor" : "#ff4d4f",
|
||||
"strokeWidth" : 2
|
||||
},
|
||||
"ports" : {
|
||||
"groups" : {
|
||||
"in" : {
|
||||
"position" : "left",
|
||||
"attrs" : {
|
||||
"circle" : {
|
||||
"r" : 4,
|
||||
"fill" : "#ffffff",
|
||||
"stroke" : "#1890ff"
|
||||
}
|
||||
}
|
||||
},
|
||||
"out" : {
|
||||
"position" : "right",
|
||||
"attrs" : {
|
||||
"circle" : {
|
||||
"r" : 4,
|
||||
"fill" : "#ffffff",
|
||||
"stroke" : "#1890ff"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"types" : [ "in", "out" ]
|
||||
},
|
||||
"position" : {
|
||||
"x" : 300,
|
||||
"y" : 100
|
||||
}
|
||||
},
|
||||
"config" : {
|
||||
"name" : "脚本任务A",
|
||||
"description" : "数据处理",
|
||||
"language" : "shell",
|
||||
"script" : "process_data.sh"
|
||||
}
|
||||
}, {
|
||||
"id" : "scriptTask2",
|
||||
"code" : "SCRIPT_TASK",
|
||||
"type" : "SCRIPT_TASK",
|
||||
"name" : "生成报告",
|
||||
"graph" : {
|
||||
"shape" : "rect",
|
||||
"size" : {
|
||||
"width" : 40,
|
||||
"height" : 40
|
||||
},
|
||||
"style" : {
|
||||
"fill" : "#fff1f0",
|
||||
"stroke" : "#ff4d4f",
|
||||
"icon" : "code",
|
||||
"iconColor" : "#ff4d4f",
|
||||
"strokeWidth" : 2
|
||||
},
|
||||
"ports" : {
|
||||
"groups" : {
|
||||
"in" : {
|
||||
"position" : "left",
|
||||
"attrs" : {
|
||||
"circle" : {
|
||||
"r" : 4,
|
||||
"fill" : "#ffffff",
|
||||
"stroke" : "#1890ff"
|
||||
}
|
||||
}
|
||||
},
|
||||
"out" : {
|
||||
"position" : "right",
|
||||
"attrs" : {
|
||||
"circle" : {
|
||||
"r" : 4,
|
||||
"fill" : "#ffffff",
|
||||
"stroke" : "#1890ff"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"types" : [ "in", "out" ]
|
||||
},
|
||||
"position" : {
|
||||
"x" : 500,
|
||||
"y" : 100
|
||||
}
|
||||
},
|
||||
"config" : {
|
||||
"name" : "脚本任务B",
|
||||
"description" : "生成报告",
|
||||
"language" : "shell",
|
||||
"script" : "generate_report.sh"
|
||||
}
|
||||
}, {
|
||||
"id" : "endEvent1",
|
||||
"code" : "END_EVENT",
|
||||
"type" : "END_EVENT",
|
||||
"name" : "结束",
|
||||
"graph" : {
|
||||
"shape" : "circle",
|
||||
"size" : {
|
||||
"width" : 40,
|
||||
"height" : 40
|
||||
},
|
||||
"style" : {
|
||||
"fill" : "#fff1f0",
|
||||
"stroke" : "#ff4d4f",
|
||||
"icon" : "stop",
|
||||
"iconColor" : "#ff4d4f",
|
||||
"strokeWidth" : 2
|
||||
},
|
||||
"ports" : {
|
||||
"groups" : {
|
||||
"in" : {
|
||||
"position" : "left",
|
||||
"attrs" : {
|
||||
"circle" : {
|
||||
"r" : 4,
|
||||
"fill" : "#ffffff",
|
||||
"stroke" : "#1890ff"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"types" : [ "in" ]
|
||||
},
|
||||
"position" : {
|
||||
"x" : 700,
|
||||
"y" : 100
|
||||
}
|
||||
},
|
||||
"config" : {
|
||||
"name" : "结束节点",
|
||||
"description" : "流程结束"
|
||||
}
|
||||
} ],
|
||||
"edges" : [ {
|
||||
"id" : "flow1",
|
||||
"from" : "startEvent1",
|
||||
"to" : "scriptTask1",
|
||||
"name" : "开始到处理",
|
||||
"config" : {
|
||||
"type" : "sequence"
|
||||
},
|
||||
"properties" : null
|
||||
}, {
|
||||
"id" : "flow2",
|
||||
"from" : "scriptTask1",
|
||||
"to" : "scriptTask2",
|
||||
"name" : "处理到报告",
|
||||
"config" : {
|
||||
"type" : "sequence"
|
||||
},
|
||||
"properties" : null
|
||||
}, {
|
||||
"id" : "flow3",
|
||||
"from" : "scriptTask2",
|
||||
"to" : "endEvent1",
|
||||
"name" : "报告到结束",
|
||||
"config" : {
|
||||
"type" : "sequence"
|
||||
},
|
||||
"properties" : null
|
||||
} ]
|
||||
}',
|
||||
'{"formItems":[{"type":"input","label":"业务参数","name":"businessParam","required":true}]}',
|
||||
'["complex","business","multi-task"]',
|
||||
'DRAFT', TRUE, 'http://www.flowable.org/test',
|
||||
NOW(), NOW(), 1, 1, FALSE
|
||||
);
|
||||
|
||||
|
||||
-- --------------------------------------------------------------------------------------
|
||||
-- 初始化工作流节点定义数据
|
||||
-- --------------------------------------------------------------------------------------
|
||||
-- 初始化工作流节点定义数据
|
||||
INSERT INTO workflow_node_definition (
|
||||
node_type, node_code, node_name, description, category,
|
||||
ui_variables, panel_variables_schema, local_variables_schema,
|
||||
form_variables_schema, enabled,
|
||||
create_time, create_by, update_time, update_by, version, deleted
|
||||
) VALUES
|
||||
-- 开始节点
|
||||
(
|
||||
'START_EVENT', 'START_EVENT', '开始节点', '工作流的起点', 'EVENT',
|
||||
'{
|
||||
"shape": "circle",
|
||||
"size": {"width": 40, "height": 40},
|
||||
"style": {
|
||||
"fill": "#e8f7ff",
|
||||
"stroke": "#1890ff",
|
||||
"strokeWidth": 2,
|
||||
"icon": "play-circle",
|
||||
"iconColor": "#1890ff"
|
||||
},
|
||||
"ports": {
|
||||
"groups": {
|
||||
"out": {
|
||||
"position": "right",
|
||||
"attrs": {
|
||||
"circle": {"r": 4, "fill": "#ffffff", "stroke": "#1890ff"}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}',
|
||||
'{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"code": {"type": "string", "title": "节点Code"},
|
||||
"name": {"type": "string", "title": "节点名称"},
|
||||
"description": {"type": "string", "title": "节点描述"}
|
||||
},
|
||||
"required": ["code", "name"]
|
||||
}',
|
||||
'{}',
|
||||
'{"formItems": []}',
|
||||
1,
|
||||
NOW(), 'system', NOW(), 'system', 1, 0
|
||||
),
|
||||
-- 结束节点
|
||||
(
|
||||
'END_EVENT', 'END_EVENT', '结束节点', '工作流的终点', 'EVENT',
|
||||
'{
|
||||
"shape": "circle",
|
||||
"size": {"width": 40, "height": 40},
|
||||
"style": {
|
||||
"fill": "#fff1f0",
|
||||
"stroke": "#ff4d4f",
|
||||
"strokeWidth": 2,
|
||||
"icon": "stop",
|
||||
"iconColor": "#ff4d4f"
|
||||
},
|
||||
"ports": {
|
||||
"groups": {
|
||||
"in": {
|
||||
"position": "left",
|
||||
"attrs": {
|
||||
"circle": {"r": 4, "fill": "#ffffff", "stroke": "#1890ff"}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}',
|
||||
'{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"code": {"type": "string", "title": "节点Code"},
|
||||
"name": {"type": "string", "title": "节点名称"},
|
||||
"description": {"type": "string", "title": "节点描述"}
|
||||
},
|
||||
"required": ["code", "name"]
|
||||
}',
|
||||
'{}',
|
||||
'{"formItems": []}',
|
||||
1,
|
||||
NOW(), 'system', NOW(), 'system', 1, 0
|
||||
),
|
||||
-- 脚本任务节点
|
||||
(
|
||||
'SCRIPT_TASK', 'SCRIPT_TASK', '脚本任务', '脚本执行任务', 'TASK',
|
||||
'{
|
||||
"shape": "rect",
|
||||
"size": {"width": 120, "height": 60},
|
||||
"style": {
|
||||
"fill": "#ffffff",
|
||||
"stroke": "#1890ff",
|
||||
"strokeWidth": 2,
|
||||
"icon": "code",
|
||||
"iconColor": "#1890ff"
|
||||
},
|
||||
"ports": {
|
||||
"groups": {
|
||||
"in": {
|
||||
"position": "left",
|
||||
"attrs": {
|
||||
"circle": {"r": 4, "fill": "#ffffff", "stroke": "#1890ff"}
|
||||
}
|
||||
},
|
||||
"out": {
|
||||
"position": "right",
|
||||
"attrs": {
|
||||
"circle": {"r": 4, "fill": "#ffffff", "stroke": "#1890ff"}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}',
|
||||
'{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"code": {"type": "string", "title": "节点Code"},
|
||||
"name": {"type": "string", "title": "节点名称"},
|
||||
"description": {"type": "string", "title": "节点描述"},
|
||||
"script": {
|
||||
"type": "string",
|
||||
"title": "脚本内容",
|
||||
"format": "textarea",
|
||||
"description": "需要执行的脚本内容"
|
||||
},
|
||||
"language": {
|
||||
"type": "string",
|
||||
"title": "脚本语言",
|
||||
"default": "shell",
|
||||
"enum": ["shell", "python", "javascript"],
|
||||
"enumNames": ["Shell脚本", "Python脚本", "JavaScript脚本"]
|
||||
},
|
||||
"interpreter": {
|
||||
"type": "string",
|
||||
"title": "解释器路径",
|
||||
"description": "脚本解释器的路径,例如:/bin/bash"
|
||||
},
|
||||
"workingDirectory": {
|
||||
"type": "string",
|
||||
"title": "工作目录",
|
||||
"default": "/tmp"
|
||||
},
|
||||
"delegate": {
|
||||
"type": "string",
|
||||
"title": "执行委派者",
|
||||
"default": "${shellTaskDelegate}"
|
||||
}
|
||||
},
|
||||
"required": ["code", "name", "script", "language", "delegate"]
|
||||
}',
|
||||
'{
|
||||
"environment": {"type": "object", "additionalProperties": {"type": "string"}}
|
||||
}',
|
||||
'{"formItems": []}',
|
||||
1,
|
||||
NOW(), 'system', NOW(), 'system', 1, 0
|
||||
);
|
||||
|
||||
-- --------------------------------------------------------------------------------------
|
||||
-- 初始化项目管理数据
|
||||
-- --------------------------------------------------------------------------------------
|
||||
|
||||
-- 初始化项目组数据
|
||||
-- 注意:以下数据已注释,需要时请取消注释并修改为实际数据
|
||||
-- INSERT INTO deploy_project_group (id, create_by, create_time, tenant_code, type, project_group_code, project_group_name, project_group_desc, enabled, sort)
|
||||
-- VALUES
|
||||
-- (1, 'admin', NOW(), 'admin', 'PRODUCT', 'DEMO', '示例项目组', '用于演示的项目组', 1, 1),
|
||||
-- (2, 'admin', NOW(), 'admin', 'PRODUCT', 'PLATFORM', '平台项目组', '平台相关的项目组', 1, 2);
|
||||
|
||||
-- 初始化应用数据
|
||||
-- 注意:以下数据已注释,需要时请取消注释并修改为实际数据
|
||||
-- INSERT INTO deploy_application (
|
||||
-- id, create_by, create_time,
|
||||
-- project_group_id, app_code, app_name, app_desc, enabled,
|
||||
-- repo_url, repo_branch, repo_type, build_type, dev_language, dev_framework, sort
|
||||
-- )
|
||||
-- VALUES
|
||||
-- (
|
||||
-- 1, 'admin', NOW(),
|
||||
-- 1, 'DEMO-APP', '示例应用', '用于演示的应用', 1,
|
||||
-- 'https://github.com/demo/demo-app.git', 'main', 'GIT', 'MAVEN', 'JAVA', 'SPRING_BOOT', 1
|
||||
-- ),
|
||||
-- (
|
||||
-- 2, 'admin', NOW(),
|
||||
-- 1, 'DEMO-WEB', '示例前端', '用于演示的前端应用', 1,
|
||||
-- 'https://github.com/demo/demo-web.git', 'main', 'GIT', 'NPM', 'NODEJS', 'VUE', 2
|
||||
-- ),
|
||||
-- (
|
||||
-- 3, 'admin', NOW(),
|
||||
-- 2, 'PLATFORM-API', '平台API', '平台后端服务', 1,
|
||||
-- 'https://github.com/platform/platform-api.git', 'main', 'GIT', 'MAVEN', 'JAVA', 'SPRING_BOOT', 1
|
||||
-- ),
|
||||
-- (
|
||||
-- 4, 'admin', NOW(),
|
||||
-- 2, 'PLATFORM-WEB', '平台前端', '平台前端应用', 1,
|
||||
-- 'https://github.com/platform/platform-web.git', 'main', 'GIT', 'NPM', 'NODEJS', 'VUE', 2
|
||||
-- );
|
||||
|
||||
-- --------------------------------------------------------------------------------------
|
||||
-- 初始化通知渠道数据
|
||||
-- --------------------------------------------------------------------------------------
|
||||
|
||||
-- 企业微信通知渠道示例
|
||||
INSERT INTO sys_notification_channel
|
||||
(name, channel_type, config, status, description, create_by, create_time, update_by, update_time, version, deleted)
|
||||
VALUES
|
||||
('研发部企业微信群', 'WEWORK',
|
||||
'{"webhookUrl":"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=example-key-please-replace"}',
|
||||
'DISABLED',
|
||||
'研发部通知群,用于部署通知(示例数据,请修改为实际的Webhook地址)',
|
||||
'admin', NOW(), 'admin', NOW(), 0, 0);
|
||||
|
||||
-- 飞书、邮件等其他渠道类型暂未启用,等后续开启相应枚举后再添加示例数据
|
||||
-- ('运维飞书告警群', 'FEISHU',
|
||||
-- '{"webhookUrl":"https://open.feishu.cn/open-apis/bot/v2/hook/example-hook-id","secret":"example-secret"}',
|
||||
-- 'DISABLED',
|
||||
-- '运维团队告警通知(示例数据,请修改为实际配置)',
|
||||
-- 'admin', NOW(), 'admin', NOW(), 0, 0),
|
||||
--
|
||||
-- ('管理员邮件通知', 'EMAIL',
|
||||
-- '{"smtpHost":"smtp.qq.com","smtpPort":465,"username":"notify@example.com","password":"example-password","fromEmail":"notify@example.com","ssl":true}',
|
||||
-- 'DISABLED',
|
||||
-- '管理员邮件通知渠道(示例数据,请修改为实际配置)',
|
||||
-- 'admin', NOW(), 'admin', NOW(), 0, 0);
|
||||
@ -0,0 +1,692 @@
|
||||
-- --------------------------------------------------------------------------------------
|
||||
-- 系统基础表
|
||||
-- --------------------------------------------------------------------------------------
|
||||
|
||||
-- 租户表
|
||||
CREATE TABLE sys_tenant (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
create_by VARCHAR(255) NULL COMMENT '创建人',
|
||||
create_time DATETIME(6) NULL COMMENT '创建时间',
|
||||
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除(0:未删除,1:已删除)',
|
||||
update_by VARCHAR(255) NULL COMMENT '更新人',
|
||||
update_time DATETIME(6) NULL COMMENT '更新时间',
|
||||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||||
|
||||
code VARCHAR(50) NOT NULL COMMENT '租户编码',
|
||||
name VARCHAR(100) NOT NULL COMMENT '租户名称',
|
||||
address VARCHAR(255) NULL COMMENT '租户地址',
|
||||
contact_name VARCHAR(50) NULL COMMENT '联系人姓名',
|
||||
contact_phone VARCHAR(20) NULL COMMENT '联系人电话',
|
||||
email VARCHAR(100) NULL COMMENT '联系人邮箱',
|
||||
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用(0:禁用,1:启用)',
|
||||
|
||||
CONSTRAINT UK_tenant_code UNIQUE (code)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户表';
|
||||
|
||||
|
||||
-- 部门表
|
||||
CREATE TABLE sys_department
|
||||
(
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
create_by VARCHAR(255) NULL COMMENT '创建人',
|
||||
create_time DATETIME(6) NULL COMMENT '创建时间',
|
||||
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除(0:未删除,1:已删除)',
|
||||
update_by VARCHAR(255) NULL COMMENT '更新人',
|
||||
update_time DATETIME(6) NULL COMMENT '更新时间',
|
||||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||||
|
||||
code VARCHAR(50) NOT NULL COMMENT '部门编码',
|
||||
name VARCHAR(100) NOT NULL COMMENT '部门名称',
|
||||
description VARCHAR(255) NULL COMMENT '部门描述',
|
||||
leader_id BIGINT NULL COMMENT '部门负责人ID',
|
||||
leader_name VARCHAR(50) NULL COMMENT '部门负责人姓名',
|
||||
parent_id BIGINT NULL COMMENT '父部门ID',
|
||||
sort INT NOT NULL DEFAULT 0 COMMENT '显示顺序',
|
||||
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用(0:禁用,1:启用)',
|
||||
|
||||
CONSTRAINT UK_department_code UNIQUE (code)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='部门表';
|
||||
|
||||
-- 用户表
|
||||
CREATE TABLE sys_user (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
create_by VARCHAR(255) NULL COMMENT '创建人',
|
||||
create_time DATETIME(6) NULL COMMENT '创建时间',
|
||||
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除(0:未删除,1:已删除)',
|
||||
update_by VARCHAR(255) NULL COMMENT '更新人',
|
||||
update_time DATETIME(6) NULL COMMENT '更新时间',
|
||||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||||
|
||||
username VARCHAR(50) NOT NULL COMMENT '用户名',
|
||||
password VARCHAR(255) NOT NULL COMMENT '密码',
|
||||
nickname VARCHAR(50) NULL COMMENT '昵称',
|
||||
email VARCHAR(100) NULL COMMENT '邮箱',
|
||||
phone VARCHAR(20) NULL COMMENT '手机号',
|
||||
department_id BIGINT NULL COMMENT '所属部门ID',
|
||||
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用(0:禁用,1:启用)',
|
||||
|
||||
CONSTRAINT UK_user_username UNIQUE (username),
|
||||
CONSTRAINT FK_user_department FOREIGN KEY (department_id) REFERENCES sys_department(id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
|
||||
|
||||
-- 系统参数表
|
||||
CREATE TABLE sys_param
|
||||
(
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
create_by VARCHAR(255) NULL COMMENT '创建人',
|
||||
create_time DATETIME(6) NULL COMMENT '创建时间',
|
||||
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除(0:未删除,1:已删除)',
|
||||
update_by VARCHAR(255) NULL COMMENT '更新人',
|
||||
update_time DATETIME(6) NULL COMMENT '更新时间',
|
||||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||||
|
||||
code VARCHAR(100) NOT NULL COMMENT '参数编码',
|
||||
name VARCHAR(100) NOT NULL COMMENT '参数名称',
|
||||
value TEXT COMMENT '参数值',
|
||||
type VARCHAR(50) NOT NULL COMMENT '参数类型',
|
||||
description VARCHAR(255) NULL COMMENT '参数描述',
|
||||
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用(0:禁用,1:启用)',
|
||||
|
||||
CONSTRAINT UK_sys_param_code UNIQUE (code)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统参数表';
|
||||
|
||||
-- --------------------------------------------------------------------------------------
|
||||
-- 权限管理相关表
|
||||
-- --------------------------------------------------------------------------------------
|
||||
|
||||
-- 菜单表
|
||||
CREATE TABLE sys_menu
|
||||
(
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
create_by VARCHAR(255) NULL COMMENT '创建人',
|
||||
create_time DATETIME(6) NULL COMMENT '创建时间',
|
||||
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除(0:未删除,1:已删除)',
|
||||
update_by VARCHAR(255) NULL COMMENT '更新人',
|
||||
update_time DATETIME(6) NULL COMMENT '更新时间',
|
||||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||||
|
||||
name VARCHAR(100) NOT NULL COMMENT '菜单名称',
|
||||
path VARCHAR(200) NULL COMMENT '路由路径',
|
||||
component VARCHAR(255) NULL COMMENT '组件路径',
|
||||
icon VARCHAR(100) NULL COMMENT '菜单图标',
|
||||
permission VARCHAR(100) NULL COMMENT '权限标识',
|
||||
type TINYINT NOT NULL COMMENT '菜单类型(1:目录 2:菜单 3:按钮)',
|
||||
parent_id BIGINT NULL COMMENT '父菜单ID',
|
||||
sort INT NOT NULL DEFAULT 0 COMMENT '显示顺序',
|
||||
hidden BIT NOT NULL DEFAULT 0 COMMENT '是否隐藏(0:显示,1:隐藏)',
|
||||
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用(0:禁用,1:启用)',
|
||||
|
||||
INDEX IDX_parent_id (parent_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='菜单表';
|
||||
|
||||
-- 角色表
|
||||
CREATE TABLE sys_role
|
||||
(
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
create_by VARCHAR(255) NULL COMMENT '创建人',
|
||||
create_time DATETIME(6) NULL COMMENT '创建时间',
|
||||
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除(0:未删除,1:已删除)',
|
||||
update_by VARCHAR(255) NULL COMMENT '更新人',
|
||||
update_time DATETIME(6) NULL COMMENT '更新时间',
|
||||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||||
|
||||
code VARCHAR(100) NOT NULL COMMENT '角色编码',
|
||||
name VARCHAR(100) NOT NULL COMMENT '角色名称',
|
||||
type TINYINT NOT NULL DEFAULT 2 COMMENT '角色类型(1:系统角色,2:自定义角色)',
|
||||
description VARCHAR(255) NULL COMMENT '角色描述',
|
||||
sort INT NOT NULL DEFAULT 0 COMMENT '显示顺序',
|
||||
|
||||
CONSTRAINT UK_role_code UNIQUE (code)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色表';
|
||||
|
||||
-- 角色标签表
|
||||
CREATE TABLE sys_role_tag
|
||||
(
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
create_by VARCHAR(255) NULL COMMENT '创建人',
|
||||
create_time DATETIME(6) NULL COMMENT '创建时间',
|
||||
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除(0:未删除,1:已删除)',
|
||||
update_by VARCHAR(255) NULL COMMENT '更新人',
|
||||
update_time DATETIME(6) NULL COMMENT '更新时间',
|
||||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||||
|
||||
name VARCHAR(50) NOT NULL COMMENT '标签名称',
|
||||
color VARCHAR(20) NULL COMMENT '标签颜色'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色标签表';
|
||||
|
||||
-- 角色标签关联表
|
||||
CREATE TABLE sys_role_tag_relation
|
||||
(
|
||||
role_id BIGINT NOT NULL COMMENT '角色ID',
|
||||
tag_id BIGINT NOT NULL COMMENT '标签ID',
|
||||
|
||||
PRIMARY KEY (role_id, tag_id),
|
||||
CONSTRAINT FK_role_tag_role FOREIGN KEY (role_id) REFERENCES sys_role (id),
|
||||
CONSTRAINT FK_role_tag_tag FOREIGN KEY (tag_id) REFERENCES sys_role_tag (id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色标签关联表';
|
||||
|
||||
-- 用户角色关联表
|
||||
CREATE TABLE sys_user_role
|
||||
(
|
||||
|
||||
user_id BIGINT NOT NULL COMMENT '用户ID',
|
||||
role_id BIGINT NOT NULL COMMENT '角色ID',
|
||||
|
||||
CONSTRAINT UK_user_role UNIQUE (user_id, role_id),
|
||||
CONSTRAINT FK_user_role_user FOREIGN KEY (user_id) REFERENCES sys_user (id),
|
||||
CONSTRAINT FK_user_role_role FOREIGN KEY (role_id) REFERENCES sys_role (id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户角色关联表';
|
||||
|
||||
-- 角色菜单关联表
|
||||
CREATE TABLE sys_role_menu
|
||||
(
|
||||
role_id BIGINT NOT NULL COMMENT '角色ID',
|
||||
menu_id BIGINT NOT NULL COMMENT '菜单ID',
|
||||
|
||||
PRIMARY KEY (role_id, menu_id),
|
||||
CONSTRAINT FK_role_menu_role FOREIGN KEY (role_id) REFERENCES sys_role (id),
|
||||
CONSTRAINT FK_role_menu_menu FOREIGN KEY (menu_id) REFERENCES sys_menu (id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色菜单关联表';
|
||||
|
||||
-- 权限模板表
|
||||
CREATE TABLE sys_permission_template
|
||||
(
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
create_by VARCHAR(255) NULL COMMENT '创建人',
|
||||
create_time DATETIME(6) NULL COMMENT '创建时间',
|
||||
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除(0:未删除,1:已删除)',
|
||||
update_by VARCHAR(255) NULL COMMENT '更新人',
|
||||
update_time DATETIME(6) NULL COMMENT '更新时间',
|
||||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||||
|
||||
code VARCHAR(100) NOT NULL COMMENT '模板编码',
|
||||
name VARCHAR(100) NOT NULL COMMENT '模板名称',
|
||||
type TINYINT NOT NULL DEFAULT 1 COMMENT '模板类型(1:系统模板,2:自定义模板)',
|
||||
description VARCHAR(255) NULL COMMENT '模板描述',
|
||||
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用(0:禁用,1:启用)',
|
||||
|
||||
CONSTRAINT UK_template_code UNIQUE (code)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='权限模板表';
|
||||
|
||||
-- 模板菜单关联表
|
||||
CREATE TABLE sys_template_menu
|
||||
(
|
||||
template_id BIGINT NOT NULL COMMENT '模板ID',
|
||||
menu_id BIGINT NOT NULL COMMENT '菜单ID',
|
||||
|
||||
PRIMARY KEY (template_id, menu_id),
|
||||
CONSTRAINT FK_template_menu_template FOREIGN KEY (template_id) REFERENCES sys_permission_template (id),
|
||||
CONSTRAINT FK_template_menu_menu FOREIGN KEY (menu_id) REFERENCES sys_menu (id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='模板菜单关联表';
|
||||
|
||||
-- 权限表
|
||||
CREATE TABLE sys_permission
|
||||
(
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
create_by VARCHAR(255) NULL COMMENT '创建人',
|
||||
create_time DATETIME(6) NULL COMMENT '创建时间',
|
||||
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除(0:未删除,1:已删除)',
|
||||
update_by VARCHAR(255) NULL COMMENT '更新人',
|
||||
update_time DATETIME(6) NULL COMMENT '更新时间',
|
||||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||||
|
||||
menu_id BIGINT NOT NULL COMMENT '关联的菜单ID',
|
||||
code VARCHAR(100) NOT NULL COMMENT '权限编码',
|
||||
name VARCHAR(100) NOT NULL COMMENT '权限名称',
|
||||
type VARCHAR(50) NOT NULL DEFAULT 'FUNCTION' COMMENT '权限类型(MENU:菜单,FUNCTION:功能,API:接口)',
|
||||
sort INT NULL DEFAULT 0 COMMENT '排序',
|
||||
|
||||
CONSTRAINT UK_permission_code UNIQUE (code),
|
||||
CONSTRAINT FK_permission_menu FOREIGN KEY (menu_id) REFERENCES sys_menu (id),
|
||||
INDEX IDX_menu_id (menu_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统权限表';
|
||||
|
||||
-- --------------------------------------------------------------------------------------
|
||||
-- 外部系统集成相关表
|
||||
-- --------------------------------------------------------------------------------------
|
||||
|
||||
-- 外部系统表
|
||||
CREATE TABLE sys_external_system
|
||||
(
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
create_by VARCHAR(255) NULL COMMENT '创建人',
|
||||
create_time DATETIME(6) NULL COMMENT '创建时间',
|
||||
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除(0:未删除,1:已删除)',
|
||||
update_by VARCHAR(255) NULL COMMENT '更新人',
|
||||
update_time DATETIME(6) NULL COMMENT '更新时间',
|
||||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||||
|
||||
name VARCHAR(100) NOT NULL COMMENT '系统名称',
|
||||
type VARCHAR(50) NOT NULL COMMENT '系统类型(JENKINS/GIT/ZENTAO等)',
|
||||
url VARCHAR(255) NOT NULL COMMENT '系统访问地址',
|
||||
remark TEXT NULL COMMENT '备注说明',
|
||||
sort INT NULL DEFAULT 0 COMMENT '排序',
|
||||
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用(0:禁用,1:启用)',
|
||||
auth_type VARCHAR(50) NOT NULL COMMENT '认证方式(BASIC/TOKEN/OAUTH等)',
|
||||
username VARCHAR(100) NULL COMMENT '用户名',
|
||||
password VARCHAR(255) NULL COMMENT '密码',
|
||||
token VARCHAR(255) NULL COMMENT '访问令牌',
|
||||
sync_status VARCHAR(50) NULL COMMENT '同步状态(SUCCESS/FAILED/RUNNING)',
|
||||
last_sync_time DATETIME(6) NULL COMMENT '最后同步时间',
|
||||
last_connect_time DATETIME(6) NULL COMMENT '最近连接成功时间',
|
||||
config JSON NULL COMMENT '系统特有配置',
|
||||
|
||||
CONSTRAINT UK_external_system_name UNIQUE (name),
|
||||
CONSTRAINT UK_external_system_type_url UNIQUE (type, url)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='外部系统表';
|
||||
|
||||
-- 代码仓库组表
|
||||
|
||||
CREATE TABLE deploy_repo_group
|
||||
(
|
||||
-- 基础字段
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
-- 业务字段
|
||||
name VARCHAR(100) NOT NULL COMMENT '仓库组名',
|
||||
description VARCHAR(500) NULL COMMENT '仓库组描述',
|
||||
parent_id BIGINT NULL COMMENT '父级仓库组ID',
|
||||
full_name VARCHAR(255) NULL COMMENT '完整名称(包含层级关系)',
|
||||
full_path VARCHAR(255) NULL COMMENT '完整路径',
|
||||
path VARCHAR(200) NOT NULL COMMENT '仓库组路径',
|
||||
external_system_id BIGINT NOT NULL COMMENT '外部系统ID',
|
||||
avatar_url VARCHAR(255) NULL COMMENT '头像URL',
|
||||
web_url VARCHAR(255) NULL COMMENT '网页URL',
|
||||
visibility ENUM('private', 'internal', 'public') NOT NULL DEFAULT 'private' COMMENT '可见性:private-私有,internal-内部,public-公开',
|
||||
sort INT DEFAULT 0 COMMENT '排序号',
|
||||
repo_group_id BIGINT NOT NULL COMMENT 'Git系统中的组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 '是否删除:0-未删除,1-已删除'
|
||||
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='代码仓库组表';
|
||||
|
||||
-- 代码仓库项目表
|
||||
CREATE TABLE deploy_repo_project
|
||||
(
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
|
||||
name VARCHAR(255) NOT NULL COMMENT '项目名称',
|
||||
path VARCHAR(255) NOT NULL COMMENT '项目路径',
|
||||
description TEXT NULL COMMENT '项目描述',
|
||||
visibility VARCHAR(50) NULL COMMENT '可见性',
|
||||
default_branch VARCHAR(100) NULL COMMENT '默认分支',
|
||||
web_url VARCHAR(500) NULL COMMENT 'Web URL',
|
||||
ssh_url VARCHAR(500) NULL COMMENT 'SSH URL',
|
||||
http_url VARCHAR(500) NULL COMMENT 'HTTP URL',
|
||||
last_activity_at DATETIME(6) NULL COMMENT '最后活动时间',
|
||||
name_with_namespace VARCHAR(500) NULL COMMENT '带命名空间的名称',
|
||||
path_with_namespace VARCHAR(500) NULL COMMENT '带命名空间的路径',
|
||||
created_at DATETIME(6) NULL COMMENT '创建时间',
|
||||
|
||||
external_system_id BIGINT NOT NULL COMMENT '外部系统ID',
|
||||
repo_group_id BIGINT NOT NULL COMMENT '项目ID',
|
||||
repo_project_id BIGINT NOT NULL COMMENT '项目ID',
|
||||
|
||||
create_by VARCHAR(255) NULL COMMENT '创建人',
|
||||
create_time DATETIME(6) NULL COMMENT '创建时间',
|
||||
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除(0:未删除,1:已删除)',
|
||||
update_by VARCHAR(255) NULL COMMENT '更新人',
|
||||
update_time DATETIME(6) NULL COMMENT '更新时间',
|
||||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||||
|
||||
CONSTRAINT FK_repo_project_external_system FOREIGN KEY (external_system_id) REFERENCES sys_external_system (id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Git仓库项目表';
|
||||
|
||||
-- 代码仓库分支表
|
||||
CREATE TABLE deploy_repo_branch
|
||||
(
|
||||
-- 基础字段
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
-- 业务字段
|
||||
name VARCHAR(100) NOT NULL COMMENT '分支名称',
|
||||
is_default_branch BIT DEFAULT 0 COMMENT '是否为默认分支:0-否,1-是',
|
||||
can_push BIT DEFAULT 1 COMMENT '是否可推送:0-否,1-是',
|
||||
developers_can_push BIT DEFAULT 1 COMMENT '开发者是否可推送:0-否,1-是',
|
||||
developers_can_merge BIT DEFAULT 1 COMMENT '开发者是否可合并:0-否,1-是',
|
||||
last_commit_id VARCHAR(64) NULL COMMENT '最新提交ID',
|
||||
commit_message TEXT NULL COMMENT '最新提交信息',
|
||||
commit_author VARCHAR(100) NULL COMMENT '最新提交作者',
|
||||
commit_date DATETIME(6) NULL COMMENT '最新提交时间',
|
||||
last_update_time DATETIME(6) NULL COMMENT '分支最后更新时间',
|
||||
last_commit_time DATETIME(6) NULL COMMENT '分支最后提交时间',
|
||||
web_url VARCHAR(255) NULL COMMENT '网页URL',
|
||||
project_id BIGINT NOT NULL COMMENT '所属项目ID',
|
||||
external_system_id BIGINT NOT NULL COMMENT '外部系统ID',
|
||||
repo_project_id BIGINT NOT NULL COMMENT 'GitLab的真实project_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 '是否删除:0-未删除,1-已删除'
|
||||
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT ='代码仓库分支表';
|
||||
|
||||
-- --------------------------------------------------------------------------------------
|
||||
-- 工作流相关表
|
||||
-- --------------------------------------------------------------------------------------
|
||||
|
||||
-- 工作流定义表
|
||||
CREATE TABLE workflow_definition
|
||||
(
|
||||
-- 主键
|
||||
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
|
||||
|
||||
-- 基础信息
|
||||
name VARCHAR(255) NOT NULL COMMENT '流程名称',
|
||||
`key` VARCHAR(255) NOT NULL COMMENT '流程标识',
|
||||
category VARCHAR(100) COMMENT '流程分类',
|
||||
triggers VARCHAR(200) COMMENT '流程分类',
|
||||
process_definition_id VARCHAR(100) NULL COMMENT '工作流定义ID',
|
||||
flow_version INT NOT NULL COMMENT '流程版本',
|
||||
description TEXT COMMENT '流程描述',
|
||||
|
||||
-- 流程配置
|
||||
bpmn_xml TEXT COMMENT 'BPMN XML内容',
|
||||
graph JSON COMMENT '流程图数据,包含节点和连线的位置、样式等信息',
|
||||
local_variables_schema JSON COMMENT '节点变量Schema',
|
||||
tags JSON COMMENT '流程标签',
|
||||
|
||||
-- 流程属性
|
||||
status VARCHAR(50) NOT NULL COMMENT '流程状态(DRAFT-草稿、PUBLISHED-已发布、DISABLED-已禁用)',
|
||||
is_executable BOOLEAN NOT NULL DEFAULT TRUE COMMENT '是否可执行',
|
||||
target_namespace VARCHAR(255) DEFAULT 'http://www.flowable.org/test' COMMENT '目标命名空间',
|
||||
|
||||
-- 审计字段
|
||||
created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
|
||||
updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
|
||||
created_by BIGINT COMMENT '创建人',
|
||||
updated_by BIGINT COMMENT '更新人',
|
||||
is_deleted BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否删除',
|
||||
|
||||
-- 约束
|
||||
UNIQUE KEY uk_key_version (`key`, flow_version)
|
||||
) ENGINE = InnoDB
|
||||
DEFAULT CHARSET = utf8mb4
|
||||
COLLATE = utf8mb4_unicode_ci COMMENT ='工作流定义表';
|
||||
|
||||
-- 创建工作流节点定义表
|
||||
CREATE TABLE workflow_node_definition
|
||||
(
|
||||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
node_type VARCHAR(50) NOT NULL COMMENT '节点类型',
|
||||
node_code VARCHAR(50) NOT NULL COMMENT '节点编码',
|
||||
node_name VARCHAR(100) NOT NULL COMMENT '节点名称',
|
||||
description VARCHAR(500) COMMENT '节点描述',
|
||||
category VARCHAR(50) COMMENT '节点分类',
|
||||
ui_variables JSON NOT NULL COMMENT '节点UI',
|
||||
panel_variables_schema JSON NOT NULL COMMENT '节点属性',
|
||||
local_variables_schema JSON NOT NULL COMMENT '节点环境变量',
|
||||
form_variables_schema JSON COMMENT '节点表单',
|
||||
enabled BOOLEAN NOT NULL DEFAULT TRUE COMMENT '是否启用',
|
||||
|
||||
create_time DATETIME NOT NULL COMMENT '创建时间',
|
||||
create_by VARCHAR(50) NOT NULL COMMENT '创建人',
|
||||
update_time DATETIME NOT NULL COMMENT '更新时间',
|
||||
update_by VARCHAR(50) NOT NULL COMMENT '更新人',
|
||||
version INT NOT NULL DEFAULT 1 COMMENT '版本号',
|
||||
deleted BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否删除',
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_node_type (node_type)
|
||||
) ENGINE = InnoDB
|
||||
DEFAULT CHARSET = utf8mb4
|
||||
COLLATE = utf8mb4_unicode_ci COMMENT ='工作流节点定义表';
|
||||
|
||||
-- 工作流实例表
|
||||
CREATE TABLE workflow_instance
|
||||
(
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
create_by VARCHAR(255) NULL COMMENT '创建人',
|
||||
create_time DATETIME(6) NULL COMMENT '创建时间',
|
||||
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除(0:未删除,1:已删除)',
|
||||
update_by VARCHAR(255) NULL COMMENT '更新人',
|
||||
update_time DATETIME(6) NULL COMMENT '更新时间',
|
||||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||||
|
||||
process_instance_id VARCHAR(64) NOT NULL COMMENT '流程实例ID',
|
||||
process_definition_id VARCHAR(64) NOT NULL COMMENT '流程定义ID',
|
||||
workflow_definition_id BIGINT NOT NULL COMMENT '工作流定义ID',
|
||||
business_key VARCHAR(64) NULL COMMENT '业务标识',
|
||||
status VARCHAR(100) NOT NULL COMMENT '实例状态',
|
||||
variables TEXT NULL COMMENT '流程变量(JSON)',
|
||||
start_time DATETIME(6) NULL COMMENT '开始时间',
|
||||
end_time DATETIME(6) NULL COMMENT '结束时间'
|
||||
|
||||
-- CONSTRAINT FK_workflow_instance_definition FOREIGN KEY (process_definition_id) REFERENCES workflow_definition(id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流实例表';
|
||||
|
||||
-- 工作流节点实例表
|
||||
CREATE TABLE workflow_node_instance
|
||||
(
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
create_by VARCHAR(255) NULL COMMENT '创建人',
|
||||
create_time DATETIME(6) NULL COMMENT '创建时间',
|
||||
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除(0:未删除,1:已删除)',
|
||||
update_by VARCHAR(255) NULL COMMENT '更新人',
|
||||
update_time DATETIME(6) NULL COMMENT '更新时间',
|
||||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||||
|
||||
workflow_definition_id BIGINT NOT NULL COMMENT '工作流定义ID',
|
||||
workflow_instance_id BIGINT NOT NULL COMMENT '工作流实例ID',
|
||||
process_instance_id VARCHAR(64) NOT NULL COMMENT '流程实例ID',
|
||||
execution_id VARCHAR(100) NOT NULL COMMENT '执行实例ID',
|
||||
node_id VARCHAR(64) NOT NULL COMMENT '节点ID',
|
||||
node_name VARCHAR(100) NOT NULL COMMENT '节点名称',
|
||||
node_type VARCHAR(32) NOT NULL COMMENT '节点类型',
|
||||
status VARCHAR(32) NOT NULL COMMENT '节点状态',
|
||||
start_time DATETIME(6) NULL COMMENT '开始时间',
|
||||
end_time DATETIME(6) NULL COMMENT '结束时间',
|
||||
variables TEXT NULL COMMENT '节点变量(JSON)',
|
||||
error_message TEXT NULL COMMENT '错误信息',
|
||||
|
||||
CONSTRAINT FK_workflow_node_instance_instance FOREIGN KEY (workflow_instance_id) REFERENCES workflow_instance (id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流节点实例表';
|
||||
|
||||
-- 工作流日志表
|
||||
CREATE TABLE workflow_log
|
||||
(
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
create_by VARCHAR(255) NULL COMMENT '创建人',
|
||||
create_time DATETIME(6) NULL COMMENT '创建时间',
|
||||
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除(0:未删除,1:已删除)',
|
||||
update_by VARCHAR(255) NULL COMMENT '更新人',
|
||||
update_time DATETIME(6) NULL COMMENT '更新时间',
|
||||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||||
|
||||
workflow_instance_id BIGINT NULL COMMENT '工作流实例ID',
|
||||
node_instance_id BIGINT NULL COMMENT '节点实例ID',
|
||||
log_type VARCHAR(32) NOT NULL COMMENT '日志类型',
|
||||
log_level VARCHAR(32) NOT NULL COMMENT '日志级别',
|
||||
content TEXT NOT NULL COMMENT '日志内容',
|
||||
|
||||
CONSTRAINT FK_workflow_log_instance FOREIGN KEY (workflow_instance_id) REFERENCES workflow_instance (id),
|
||||
CONSTRAINT FK_workflow_log_node_instance FOREIGN KEY (node_instance_id) REFERENCES workflow_node_instance (id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流日志表';
|
||||
|
||||
-- --------------------------------------------------------------------------------------
|
||||
-- 项目管理相关表
|
||||
-- --------------------------------------------------------------------------------------
|
||||
|
||||
-- 项目组表
|
||||
CREATE TABLE deploy_project_group
|
||||
(
|
||||
-- 基础字段
|
||||
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 '是否删除: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 '项目组描述',
|
||||
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用(0:禁用,1:启用)',
|
||||
sort INT NOT NULL DEFAULT 0 COMMENT '排序号'
|
||||
) ENGINE = InnoDB
|
||||
DEFAULT CHARSET = utf8mb4
|
||||
COLLATE = utf8mb4_unicode_ci COMMENT ='项目组表';
|
||||
|
||||
-- 应用表
|
||||
CREATE TABLE deploy_application
|
||||
(
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
-- 业务字段
|
||||
app_code VARCHAR(50) NOT NULL COMMENT '应用编码',
|
||||
app_name VARCHAR(100) NOT NULL COMMENT '应用名称',
|
||||
app_desc VARCHAR(255) NULL COMMENT '应用描述',
|
||||
language VARCHAR(50) NULL COMMENT '开发语言:JAVA、PYTHON、NODEJS',
|
||||
repo_group_id BIGINT NOT NULL COMMENT '代码仓库项目ID',
|
||||
repo_project_id BIGINT NOT NULL COMMENT '代码仓库项目ID',
|
||||
project_group_id BIGINT NOT NULL COMMENT '所属项目组ID',
|
||||
external_system_id BIGINT NOT NULL COMMENT '外部系统ID',
|
||||
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用(0:禁用,1:启用)',
|
||||
sort INT NOT NULL DEFAULT 0 COMMENT '排序号',
|
||||
-- 基础字段
|
||||
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-已删除',
|
||||
|
||||
-- 索引
|
||||
INDEX idx_project_group_id (project_group_id) COMMENT '项目ID索引',
|
||||
UNIQUE INDEX uk_app_code (project_group_id, app_code) COMMENT '项目下应用编码唯一',
|
||||
|
||||
-- 外键约束
|
||||
CONSTRAINT fk_application_project_group FOREIGN KEY (project_group_id) REFERENCES deploy_project_group (id)
|
||||
) ENGINE = InnoDB
|
||||
DEFAULT CHARSET = utf8mb4
|
||||
COLLATE = utf8mb4_unicode_ci COMMENT ='应用表';
|
||||
|
||||
-- 环境表
|
||||
CREATE TABLE deploy_environment
|
||||
(
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
-- 业务字段
|
||||
tenant_code VARCHAR(50) DEFAULT NULL COMMENT '租户编码',
|
||||
env_code VARCHAR(50) NOT NULL COMMENT '环境编码',
|
||||
env_name VARCHAR(100) NOT NULL COMMENT '环境名称',
|
||||
env_desc VARCHAR(255) NULL COMMENT '环境描述',
|
||||
build_type VARCHAR(100) NULL COMMENT '构建类型:JENKINS-Jenkins构建,GITLAB_RUNNER-GitLab Runner构建,GITHUB_ACTION-GitHub Action构建',
|
||||
deploy_type VARCHAR(100) NULL COMMENT '部署方式:K8S-Kubernetes集群部署, DOCKER-Docker容器部署, VM-虚拟机部署',
|
||||
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用(0:禁用,1:启用)',
|
||||
sort INT NOT NULL DEFAULT 0 COMMENT '排序号',
|
||||
|
||||
-- 基础字段
|
||||
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_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
|
||||
(
|
||||
-- 基础字段
|
||||
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-已删除'
|
||||
);
|
||||
|
||||
-- --------------------------------------------------------------------------------------
|
||||
-- 通知渠道表
|
||||
-- --------------------------------------------------------------------------------------
|
||||
|
||||
-- 通知渠道配置表
|
||||
CREATE TABLE sys_notification_channel (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
create_by VARCHAR(100) NULL COMMENT '创建人',
|
||||
create_time DATETIME(6) NULL COMMENT '创建时间',
|
||||
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除(0:未删除,1:已删除)',
|
||||
update_by VARCHAR(100) NULL COMMENT '更新人',
|
||||
update_time DATETIME(6) NULL COMMENT '更新时间',
|
||||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||||
|
||||
name VARCHAR(100) NOT NULL COMMENT '渠道名称(如:研发部企业微信群)',
|
||||
channel_type VARCHAR(50) NOT NULL COMMENT '渠道类型(WEWORK, FEISHU, DINGTALK, SMS, EMAIL, SLACK)',
|
||||
config JSON NOT NULL COMMENT '渠道配置(JSON格式,不同渠道存储不同字段)',
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'ENABLED' COMMENT '状态(ENABLED-启用, DISABLED-禁用)',
|
||||
description VARCHAR(500) NULL COMMENT '描述说明',
|
||||
|
||||
INDEX idx_channel_type (channel_type),
|
||||
INDEX idx_status (status),
|
||||
INDEX idx_deleted (deleted)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='通知渠道配置表';
|
||||
|
||||
@ -0,0 +1,30 @@
|
||||
databaseChangeLog:
|
||||
- changeSet:
|
||||
id: v1.0.0-schema
|
||||
author: qqchen
|
||||
runOnChange: false
|
||||
failOnError: true
|
||||
comment: "初始化数据库表结构"
|
||||
sqlFile:
|
||||
path: db/changelog/changes/v1.0.0-schema.sql
|
||||
stripComments: false
|
||||
splitStatements: true
|
||||
endDelimiter: ";"
|
||||
rollback:
|
||||
- empty
|
||||
|
||||
- changeSet:
|
||||
id: v1.0.0-data
|
||||
author: qqchen
|
||||
runOnChange: false
|
||||
failOnError: true
|
||||
comment: "初始化基础数据"
|
||||
context: "!test"
|
||||
sqlFile:
|
||||
path: db/changelog/changes/v1.0.0-data.sql
|
||||
stripComments: false
|
||||
splitStatements: true
|
||||
endDelimiter: ";"
|
||||
rollback:
|
||||
- empty
|
||||
|
||||
@ -132,4 +132,11 @@ workflow.dependency.not.satisfied=工作流依赖条件未满足
|
||||
workflow.circular.dependency=工作流存在循环依赖
|
||||
workflow.schedule.invalid=工作流调度配置无效
|
||||
workflow.concurrent.limit.exceeded=工作流并发限制超出
|
||||
workflow.config.error=工作流配置错误:{0}
|
||||
workflow.config.error=工作流配置错误:{0}
|
||||
|
||||
# 通知渠道相关错误码 (5000-5099)
|
||||
notification.channel.not.found=通知渠道不存在
|
||||
notification.channel.name.exists=通知渠道名称已存在
|
||||
notification.channel.disabled=通知渠道已禁用
|
||||
notification.channel.connection.failed=通知渠道连接测试失败
|
||||
notification.send.failed=消息发送失败:{0}
|
||||
Loading…
Reference in New Issue
Block a user