Parcourir la source

feat: 生成 mysql脚本,dockerfile

wuwenyi il y a 2 semaines
Parent
commit
7b93118f42

+ 6 - 0
.dockerignore

@@ -0,0 +1,6 @@
+target
+.git
+.idea
+*.iml
+data
+logs

+ 12 - 0
Dockerfile

@@ -0,0 +1,12 @@
+FROM maven:3.9-eclipse-temurin-17 AS build
+WORKDIR /app
+COPY pom.xml .
+RUN mvn dependency:go-offline -B
+COPY src ./src
+RUN mvn package -DskipTests -B
+
+FROM eclipse-temurin:17-jre
+WORKDIR /app
+COPY --from=build /app/target/*.jar app.jar
+EXPOSE 8080
+ENTRYPOINT ["java", "-jar", "app.jar"]

+ 8 - 7
src/main/resources/application-dev.yml

@@ -3,18 +3,19 @@ server:
 
 spring:
   datasource:
-    url: jdbc:h2:file:./data/devdb;MODE=MySQL;AUTO_SERVER=TRUE
-    driver-class-name: org.h2.Driver
-    username: sa
-    password:
+    url: jdbc:mysql://localhost:3306/qqflowengine?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=Asia/Shanghai&createDatabaseIfNotExist=true
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    username: root
+    password: root
   sql:
     init:
       mode: always
       schema-locations: classpath:schema-dev.sql
       data-locations: classpath:data-dev.sql
-  redis:
-    host: localhost
-    port: 6379
+  data:
+    redis:
+      host: localhost
+      port: 6379
 
 mybatis-plus:
   mapper-locations: classpath*:/mapper/**/*.xml

+ 4 - 4
src/main/resources/application.yml

@@ -5,10 +5,10 @@ spring:
   application:
     name: qqflowengine-backend
   datasource:
-    url: jdbc:h2:file:./data/devdb;MODE=MySQL;AUTO_SERVER=TRUE
-    driver-class-name: org.h2.Driver
-    username: sa
-    password:
+    url: jdbc:mysql://localhost:3306/qqflowengine?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=Asia/Shanghai&createDatabaseIfNotExist=true
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    username: root
+    password: root
   sql:
     init:
       mode: always

+ 6 - 7
src/main/resources/data-dev.sql

@@ -1,4 +1,4 @@
-MERGE INTO sys_dept (id, dept_name, dept_code, parent_id, sort_order, status) KEY(id) VALUES
+REPLACE INTO sys_dept (id, dept_name, dept_code, parent_id, sort_order, status) VALUES
 (1, '总裁办', 'CEO', 0, 1, 1),
 (2, '技术部', 'TECH', 0, 2, 1),
 (3, '财务部', 'FIN', 0, 3, 1),
@@ -6,19 +6,19 @@ MERGE INTO sys_dept (id, dept_name, dept_code, parent_id, sort_order, status) KE
 (5, '前端组', 'FE', 2, 1, 1),
 (6, '后端组', 'BE', 2, 2, 1);
 
-MERGE INTO sys_user (id, username, password, real_name, phone, email, dept_id, employee_type, status) KEY(id) VALUES
+REPLACE INTO sys_user (id, username, password, real_name, phone, email, dept_id, employee_type, status) VALUES
 (1, 'admin', '$2a$10$Wnh8Jnt2AGHNNu1XTyyNveqkXvE1BnuzvHt1xS5AL3YdDif/7iXta', '超级管理员', '13800138000', 'admin@qqflow.com', 1, 'super_admin', 0),
 (2, 'zhangsan', '$2a$10$Wnh8Jnt2AGHNNu1XTyyNveqkXvE1BnuzvHt1xS5AL3YdDif/7iXta', '张三', '13800138001', 'zhangsan@qqflow.com', 2, 'common_user', 0),
 (3, 'lisi', '$2a$10$Wnh8Jnt2AGHNNu1XTyyNveqkXvE1BnuzvHt1xS5AL3YdDif/7iXta', '李四', '13800138002', 'lisi@qqflow.com', 3, 'dept_manager', 0),
 (4, 'wangwu', '$2a$10$Wnh8Jnt2AGHNNu1XTyyNveqkXvE1BnuzvHt1xS5AL3YdDif/7iXta', '王五', '13800138003', 'wangwu@qqflow.com', 4, 'flow_manager', 0);
 
-MERGE INTO sys_role (id, role_code, role_name, role_scope, parent_id, dept_id, username, password, status) KEY(id) VALUES
+REPLACE INTO sys_role (id, role_code, role_name, role_scope, parent_id, dept_id, username, password, status) VALUES
 (1, 'super_admin', '超级管理员', 'platform', 0, 1, 'role_super_admin', '$2a$10$Wnh8Jnt2AGHNNu1XTyyNveqkXvE1BnuzvHt1xS5AL3YdDif/7iXta', 1),
 (2, 'flow_admin', '流程管理员', 'tenant', 0, 1, 'role_flow_admin', '$2a$10$Wnh8Jnt2AGHNNu1XTyyNveqkXvE1BnuzvHt1xS5AL3YdDif/7iXta', 1),
 (3, 'normal_user', '普通用户', 'tenant', 0, 2, 'role_normal_user', '$2a$10$Wnh8Jnt2AGHNNu1XTyyNveqkXvE1BnuzvHt1xS5AL3YdDif/7iXta', 1),
 (4, 'dept_manager', '部门经理', 'tenant', 3, 3, 'role_dept_manager', '$2a$10$Wnh8Jnt2AGHNNu1XTyyNveqkXvE1BnuzvHt1xS5AL3YdDif/7iXta', 1);
 
-MERGE INTO sys_menu (id, menu_name, menu_type, permission, parent_id, sort_order, component, icon, status) KEY(id) VALUES
+REPLACE INTO sys_menu (id, menu_name, menu_type, permission, parent_id, sort_order, component, icon, status) VALUES
 (1, '系统管理', 0, NULL, 0, 1, NULL, 'Setting', 1),
 (2, '用户管理', 1, 'system:user:list', 1, 1, 'system/user/index', 'User', 1),
 (3, '角色管理', 1, 'system:role:list', 1, 2, 'system/role/index', 'Role', 1),
@@ -37,14 +37,13 @@ MERGE INTO sys_menu (id, menu_name, menu_type, permission, parent_id, sort_order
 (15, '审批通过', 2, 'flow:task:approve', 8, 1, NULL, NULL, 1),
 (16, '审批拒绝', 2, 'flow:task:reject', 8, 2, NULL, NULL, 1);
 
-MERGE INTO sys_user_role (id, user_id, role_id) KEY(id) VALUES
+REPLACE INTO sys_user_role (id, user_id, role_id) VALUES
 (1, 1, 1),
 (2, 2, 4),
 (3, 3, 3),
 (4, 4, 3);
 
-
-MERGE INTO sys_role_menu (id, role_id, menu_id) KEY(id) VALUES
+REPLACE INTO sys_role_menu (id, role_id, menu_id) VALUES
 (1, 1, 1), (2, 1, 2), (3, 1, 3), (4, 1, 4), (5, 1, 5), (6, 1, 6), (7, 1, 7), (8, 1, 8), (9, 1, 9),
 (10, 1, 10), (11, 1, 11), (12, 1, 12), (13, 1, 13), (14, 1, 14), (15, 1, 15), (16, 1, 16), (32, 1, 17),
 (17, 2, 4), (18, 2, 5), (19, 2, 6), (20, 2, 13), (21, 2, 14),

+ 17 - 17
src/main/resources/schema-dev.sql

@@ -9,8 +9,8 @@ CREATE TABLE IF NOT EXISTS sys_user (
     employee_type VARCHAR(20) DEFAULT 'common_user',
     status TINYINT DEFAULT 0,
     create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
-);
+    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 CREATE TABLE IF NOT EXISTS sys_role (
     id BIGINT PRIMARY KEY AUTO_INCREMENT,
@@ -23,7 +23,7 @@ CREATE TABLE IF NOT EXISTS sys_role (
     password VARCHAR(100),
     status TINYINT DEFAULT 1,
     create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
-);
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 CREATE TABLE IF NOT EXISTS sys_menu (
     id BIGINT PRIMARY KEY AUTO_INCREMENT,
@@ -35,21 +35,21 @@ CREATE TABLE IF NOT EXISTS sys_menu (
     component VARCHAR(200),
     icon VARCHAR(50),
     status TINYINT DEFAULT 1
-);
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 CREATE TABLE IF NOT EXISTS sys_user_role (
     id BIGINT PRIMARY KEY AUTO_INCREMENT,
     user_id BIGINT NOT NULL,
     role_id BIGINT NOT NULL,
     UNIQUE KEY uk_user_role (user_id, role_id)
-);
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 CREATE TABLE IF NOT EXISTS sys_role_menu (
     id BIGINT PRIMARY KEY AUTO_INCREMENT,
     role_id BIGINT NOT NULL,
     menu_id BIGINT NOT NULL,
     UNIQUE KEY uk_role_menu (role_id, menu_id)
-);
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 CREATE TABLE IF NOT EXISTS sys_dept (
     id BIGINT PRIMARY KEY AUTO_INCREMENT,
@@ -60,7 +60,7 @@ CREATE TABLE IF NOT EXISTS sys_dept (
     sort_order INT DEFAULT 0,
     status TINYINT DEFAULT 1,
     create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
-);
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 CREATE TABLE IF NOT EXISTS bpm_process_definition (
     id BIGINT PRIMARY KEY AUTO_INCREMENT,
@@ -75,9 +75,9 @@ CREATE TABLE IF NOT EXISTS bpm_process_definition (
     create_by BIGINT,
     create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
     update_by BIGINT,
-    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
     deleted TINYINT DEFAULT 0
-);
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 CREATE TABLE IF NOT EXISTS bpm_process_instance (
     id BIGINT PRIMARY KEY AUTO_INCREMENT,
@@ -92,11 +92,11 @@ CREATE TABLE IF NOT EXISTS bpm_process_instance (
     status TINYINT DEFAULT 0,
     result VARCHAR(20),
     start_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-    end_time TIMESTAMP,
+    end_time TIMESTAMP NULL,
     create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
     deleted TINYINT DEFAULT 0
-);
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 CREATE TABLE IF NOT EXISTS bpm_approval_task (
     id BIGINT PRIMARY KEY AUTO_INCREMENT,
@@ -110,15 +110,15 @@ CREATE TABLE IF NOT EXISTS bpm_approval_task (
     approval_result VARCHAR(20),
     approval_comment TEXT,
     attachment_urls TEXT,
-    timeout_time TIMESTAMP,
+    timeout_time TIMESTAMP NULL,
     timeout_action VARCHAR(20),
     create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-    handle_time TIMESTAMP,
+    handle_time TIMESTAMP NULL,
     deleted TINYINT DEFAULT 0
-);
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
 CREATE TABLE IF NOT EXISTS bpm_approval_record (
-    id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
+    id BIGINT PRIMARY KEY AUTO_INCREMENT,
     task_id BIGINT NOT NULL,
     instance_id BIGINT NOT NULL,
     node_id VARCHAR(50) NOT NULL,
@@ -131,4 +131,4 @@ CREATE TABLE IF NOT EXISTS bpm_approval_record (
     attachment_urls TEXT,
     create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
     deleted TINYINT DEFAULT 0
-);
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

+ 167 - 0
src/main/resources/schema-mysql.sql

@@ -0,0 +1,167 @@
+-- ========================================================
+-- MySQL 建表脚本(带注释)
+-- 基于 schema-test.sql 适配,适用于 MySQL 5.7+
+-- ========================================================
+
+-- ----------------------------
+-- 1. 系统用户表
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS sys_user (
+    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
+    username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',
+    password VARCHAR(100) NOT NULL COMMENT '密码(加密存储)',
+    real_name VARCHAR(50) COMMENT '真实姓名',
+    phone VARCHAR(20) COMMENT '手机号',
+    email VARCHAR(100) COMMENT '邮箱',
+    dept_id BIGINT DEFAULT 0 COMMENT '所属部门ID,0表示无部门',
+    employee_type VARCHAR(20) DEFAULT 'common_user' COMMENT '员工类型:common_user-普通用户等',
+    status TINYINT DEFAULT 0 COMMENT '状态:0-正常,1-禁用',
+    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统用户表';
+
+-- ----------------------------
+-- 2. 系统角色表
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS sys_role (
+    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '角色ID',
+    role_code VARCHAR(50) NOT NULL UNIQUE COMMENT '角色编码',
+    role_name VARCHAR(50) NOT NULL COMMENT '角色名称',
+    role_scope VARCHAR(20) DEFAULT 'tenant' COMMENT '角色范围:tenant-租户级等',
+    parent_id BIGINT DEFAULT 0 COMMENT '父角色ID,0表示顶级角色',
+    dept_id BIGINT DEFAULT 0 COMMENT '所属部门ID',
+    status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
+    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统角色表';
+
+-- ----------------------------
+-- 3. 系统菜单表
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS sys_menu (
+    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '菜单ID',
+    menu_name VARCHAR(50) NOT NULL COMMENT '菜单名称',
+    menu_type TINYINT COMMENT '菜单类型:1-目录,2-菜单,3-按钮',
+    permission VARCHAR(100) COMMENT '权限标识,如 sys:user:add',
+    parent_id BIGINT DEFAULT 0 COMMENT '父菜单ID,0表示顶级菜单',
+    sort_order INT DEFAULT 0 COMMENT '排序号,数字越小越靠前',
+    component VARCHAR(200) COMMENT '前端组件路径',
+    icon VARCHAR(50) COMMENT '菜单图标',
+    status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统菜单表';
+
+-- ----------------------------
+-- 4. 用户角色关联表
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS sys_user_role (
+    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '关联ID',
+    user_id BIGINT NOT NULL COMMENT '用户ID',
+    role_id BIGINT NOT NULL COMMENT '角色ID',
+    UNIQUE KEY uk_user_role (user_id, role_id) COMMENT '用户角色唯一索引'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表';
+
+-- ----------------------------
+-- 5. 角色菜单关联表
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS sys_role_menu (
+    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '关联ID',
+    role_id BIGINT NOT NULL COMMENT '角色ID',
+    menu_id BIGINT NOT NULL COMMENT '菜单ID',
+    UNIQUE KEY uk_role_menu (role_id, menu_id) COMMENT '角色菜单唯一索引'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色菜单关联表';
+
+-- ----------------------------
+-- 6. 部门表
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS sys_dept (
+    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '部门ID',
+    dept_name VARCHAR(50) NOT NULL COMMENT '部门名称',
+    dept_code VARCHAR(50) COMMENT '部门编码',
+    parent_id BIGINT DEFAULT 0 COMMENT '父部门ID,0表示顶级部门',
+    leader_id BIGINT COMMENT '部门负责人ID',
+    sort_order INT DEFAULT 0 COMMENT '排序号',
+    status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
+    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门表';
+
+-- ----------------------------
+-- 7. 流程定义表
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS bpm_process_definition (
+    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '流程定义ID',
+    process_code VARCHAR(50) NOT NULL UNIQUE COMMENT '流程编码',
+    process_name VARCHAR(100) NOT NULL COMMENT '流程名称',
+    category VARCHAR(50) COMMENT '流程分类',
+    form_id BIGINT COMMENT '关联表单ID',
+    model_json TEXT NOT NULL COMMENT '流程模型JSON(BPMN/Flowable模型)',
+    version INT DEFAULT 1 COMMENT '版本号',
+    status TINYINT DEFAULT 0 COMMENT '状态:0-草稿,1-已发布,2-已禁用',
+    description VARCHAR(500) COMMENT '流程描述',
+    create_by BIGINT COMMENT '创建人ID',
+    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+    update_by BIGINT COMMENT '更新人ID',
+    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+    deleted TINYINT DEFAULT 0 COMMENT '逻辑删除:0-未删除,1-已删除'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流程定义表';
+
+-- ----------------------------
+-- 8. 流程实例表
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS bpm_process_instance (
+    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '流程实例ID',
+    instance_no VARCHAR(50) NOT NULL UNIQUE COMMENT '实例编号(业务单号)',
+    process_definition_id BIGINT NOT NULL COMMENT '流程定义ID',
+    version INT NOT NULL COMMENT '流程版本号',
+    title VARCHAR(200) COMMENT '实例标题',
+    applicant_id BIGINT NOT NULL COMMENT '申请人ID',
+    applicant_dept_id BIGINT COMMENT '申请人部门ID',
+    form_data TEXT COMMENT '表单数据JSON',
+    current_node_id VARCHAR(50) COMMENT '当前节点ID',
+    status TINYINT DEFAULT 0 COMMENT '实例状态:0-进行中,1-已完成,2-已驳回,3-已撤回',
+    result TINYINT COMMENT '审批结果:0-不通过,1-通过',
+    start_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '流程启动时间',
+    end_time TIMESTAMP NULL COMMENT '流程结束时间',
+    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+    deleted TINYINT DEFAULT 0 COMMENT '逻辑删除:0-未删除,1-已删除'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流程实例表';
+
+-- ----------------------------
+-- 9. 审批任务表
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS bpm_approval_task (
+    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '任务ID',
+    instance_id BIGINT NOT NULL COMMENT '流程实例ID',
+    node_id VARCHAR(50) NOT NULL COMMENT '节点ID(流程模型中的节点标识)',
+    node_name VARCHAR(100) COMMENT '节点名称',
+    node_type VARCHAR(20) COMMENT '节点类型:user_task-用户任务等',
+    assignee_id BIGINT COMMENT '任务处理人ID',
+    assignee_type VARCHAR(20) COMMENT '处理人类型:user-指定用户,role-角色,dept-部门等',
+    task_status TINYINT DEFAULT 0 COMMENT '任务状态:0-待处理,1-已处理,2-已转交',
+    approval_result TINYINT COMMENT '审批结果:0-驳回,1-同意,2-转交',
+    approval_comment TEXT COMMENT '审批意见',
+    attachment_urls TEXT COMMENT '附件URL列表(JSON数组)',
+    timeout_time TIMESTAMP NULL COMMENT '超时时间',
+    timeout_action VARCHAR(20) COMMENT '超时动作:pass-自动通过,reject-自动驳回,remind-提醒等',
+    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(任务生成时间)',
+    handle_time TIMESTAMP NULL COMMENT '处理时间',
+    deleted TINYINT DEFAULT 0 COMMENT '逻辑删除:0-未删除,1-已删除'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审批任务表';
+
+-- ----------------------------
+-- 10. 审批记录表
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS bpm_approval_record (
+    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '记录ID',
+    task_id BIGINT NOT NULL COMMENT '关联审批任务ID',
+    instance_id BIGINT NOT NULL COMMENT '关联流程实例ID',
+    node_id VARCHAR(50) NOT NULL COMMENT '节点ID',
+    node_name VARCHAR(100) COMMENT '节点名称',
+    operator_id BIGINT NOT NULL COMMENT '操作人ID',
+    operator_name VARCHAR(50) COMMENT '操作人姓名',
+    action_type VARCHAR(20) NOT NULL COMMENT '动作类型:approve-同意,reject-驳回,transfer-转交等',
+    action_result VARCHAR(20) COMMENT '动作结果:同意/驳回/转交等',
+    comment TEXT COMMENT '审批意见',
+    attachment_urls TEXT COMMENT '附件URL列表(JSON数组)',
+    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
+    deleted TINYINT DEFAULT 0 COMMENT '逻辑删除:0-未删除,1-已删除'
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审批记录表(操作日志/历史记录)';