refactor(flow): migrate durable workspace services to MyBatis Plus

(cherry picked from commit 1b0f4b664cb310fe236dfb046bef9c8248543d71)
This commit is contained in:
PIGCLOUD committed 2026-11-03 14:56:16 +08:00
1 parent b04588ffae
commit e0d43f41a1
30 files changed
+1235 -657

No files matched your search

+69 -28
View File
@@ -287,32 +287,73 @@ CREATE TABLE `bmp_oa_leave` (
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='请假表单';
SET FOREIGN_KEY_CHECKS = 1;
-- ----------------------------
-- Table structure for flow_draft
-- ----------------------------
DROP TABLE IF EXISTS `flow_draft`;
CREATE TABLE `flow_draft` (
`id` varchar(36) COLLATE utf8mb4_general_ci NOT NULL COMMENT '草稿ID',
`tenant_id` bigint NOT NULL COMMENT '所属租户ID',
`user_id` bigint NOT NULL COMMENT '草稿所属用户ID',
`kind` varchar(16) COLLATE utf8mb4_general_ci NOT NULL COMMENT '草稿类型:DESIGN 流程设计,APPLICATION 申请',
`flow_id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '关联流程ID,未建立流程时为空串',
`title` varchar(200) COLLATE utf8mb4_general_ci NOT NULL COMMENT '草稿标题',
`payload` longtext COLLATE utf8mb4_general_ci NOT NULL COMMENT '草稿内容 JSON,最多 1 MB',
`revision` bigint NOT NULL COMMENT '乐观锁版本号',
`updated_at` timestamp(3) NOT NULL COMMENT '最后保存时间',
PRIMARY KEY (`id`),
KEY `idx_draft_owner` (`tenant_id`,`user_id`,`kind`,`updated_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='个人流程草稿';
-- 第一批持久化能力:三张业务表。已安装旧五表版本时,建表后另执行 20261014_flow_merge_tables.sql。
-- 升级前备份并停写,先执行 DDL 再部署应用;不自动迁移运行中的任务。
CREATE TABLE IF NOT EXISTS flow_draft (
id varchar(36) NOT NULL, tenant_id bigint NOT NULL, user_id bigint NOT NULL,
kind varchar(16) NOT NULL, flow_id varchar(64) NOT NULL DEFAULT '', title varchar(200) NOT NULL,
payload longtext NOT NULL, revision bigint NOT NULL, updated_at timestamp(3) NOT NULL,
PRIMARY KEY(id), KEY idx_draft_owner(tenant_id,user_id,kind,updated_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE IF NOT EXISTS flow_notice (
id varchar(36) NOT NULL, tenant_id bigint NOT NULL, user_id varchar(64) NOT NULL,
event_key varchar(180) NOT NULL, kind varchar(16) NOT NULL, title varchar(200) NOT NULL,
task_id varchar(64) NOT NULL, instance_id varchar(64) NOT NULL,
created_at timestamp(3) NOT NULL, read_at timestamp(3) NULL,
status varchar(16) NOT NULL DEFAULT 'SENT', scheduled_at timestamp(3) NULL, sent_at timestamp(3) NULL,
reminder_key varchar(64) NULL,
PRIMARY KEY(id), UNIQUE KEY uk_notice_event(tenant_id,user_id,event_key), KEY idx_notice_owner(tenant_id,user_id,created_at),
UNIQUE KEY uk_notice_reminder(tenant_id,reminder_key), KEY idx_notice_due(status,scheduled_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE IF NOT EXISTS flow_callback (
id varchar(36) NOT NULL, tenant_id bigint NOT NULL, task_id varchar(64) NOT NULL,
instance_id varchar(64) NOT NULL, target_url varchar(2000) NOT NULL, payload longtext NOT NULL,
status varchar(16) NOT NULL, attempts int NOT NULL DEFAULT 0, max_attempts int NOT NULL DEFAULT 5, next_at timestamp(3) NOT NULL,
history longtext NULL,
lease_token varchar(36) NULL, lease_until timestamp(3) NULL, last_error varchar(500) NULL,
created_at timestamp(3) NOT NULL, updated_at timestamp(3) NOT NULL,
PRIMARY KEY(id), UNIQUE KEY uk_callback_task(tenant_id,task_id), KEY idx_callback_due(status,next_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- ----------------------------
-- Table structure for flow_notice
-- ----------------------------
DROP TABLE IF EXISTS `flow_notice`;
CREATE TABLE `flow_notice` (
`id` varchar(36) COLLATE utf8mb4_general_ci NOT NULL COMMENT '通知事件ID',
`tenant_id` bigint NOT NULL COMMENT '所属租户ID',
`user_id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '接收人ID,超时提醒到期前为空串',
`event_key` varchar(180) COLLATE utf8mb4_general_ci NOT NULL COMMENT '事件去重键',
`kind` varchar(16) COLLATE utf8mb4_general_ci NOT NULL COMMENT '通知类型:TODO 待办,URGE 催办,OVERDUE 超时提醒',
`title` varchar(200) COLLATE utf8mb4_general_ci NOT NULL COMMENT '通知标题',
`task_id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '引擎任务ID',
`instance_id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '引擎流程实例ID',
`created_at` timestamp(3) NOT NULL COMMENT '创建时间',
`status` varchar(16) COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'SENT' COMMENT '状态:PENDING 待到期,READY 待投递,SENT 已投递,CANCELLED 已取消,DISABLED 已停用',
`scheduled_at` timestamp(3) NULL DEFAULT NULL COMMENT '计划投递或到期时间',
`sent_at` timestamp(3) NULL DEFAULT NULL COMMENT '投递到统一站内信的时间',
`reminder_key` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '超时提醒任务ID,每个任务最多一条',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_notice_event` (`tenant_id`,`user_id`,`event_key`),
UNIQUE KEY `uk_notice_reminder` (`tenant_id`,`reminder_key`),
KEY `idx_notice_owner` (`tenant_id`,`user_id`,`created_at`),
KEY `idx_notice_due` (`status`,`scheduled_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='流程通知事件';
-- ----------------------------
-- Table structure for flow_callback
-- ----------------------------
DROP TABLE IF EXISTS `flow_callback`;
CREATE TABLE `flow_callback` (
`id` varchar(36) COLLATE utf8mb4_general_ci NOT NULL COMMENT '回调事件ID,同时作为接收方幂等键',
`tenant_id` bigint NOT NULL COMMENT '所属租户ID',
`task_id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '引擎任务ID',
`instance_id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '引擎流程实例ID',
`target_url` varchar(2000) COLLATE utf8mb4_general_ci NOT NULL COMMENT '回调目标地址',
`payload` longtext COLLATE utf8mb4_general_ci NOT NULL COMMENT '回调请求体 JSON',
`status` varchar(16) COLLATE utf8mb4_general_ci NOT NULL COMMENT '状态:PENDING 待投递,SENDING 投递中,DELIVERED 已送达,FAILED 失败',
`attempts` int NOT NULL DEFAULT '0' COMMENT '已尝试次数',
`max_attempts` int NOT NULL DEFAULT '5' COMMENT '最大尝试次数',
`next_at` timestamp(3) NOT NULL COMMENT '下次投递时间',
`history` longtext COLLATE utf8mb4_general_ci COMMENT '投递历史 JSON',
`lease_token` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '投递租约令牌',
`lease_until` timestamp(3) NULL DEFAULT NULL COMMENT '租约到期时间',
`last_error` varchar(500) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '最近一次失败原因',
`created_at` timestamp(3) NOT NULL COMMENT '创建时间',
`updated_at` timestamp(3) NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_callback_task` (`tenant_id`,`task_id`),
KEY `idx_callback_due` (`status`,`next_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='流程节点 HTTP 回调';
SET FOREIGN_KEY_CHECKS = 1;