schema-mysql.sql 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. -- ========================================================
  2. -- MySQL 建表脚本(带注释)
  3. -- 适用于 MySQL 5.7+
  4. -- ========================================================
  5. -- ----------------------------
  6. -- 1. 系统用户表
  7. -- ----------------------------
  8. CREATE TABLE IF NOT EXISTS sys_user (
  9. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
  10. username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',
  11. password VARCHAR(100) NOT NULL COMMENT '密码(加密存储)',
  12. real_name VARCHAR(50) COMMENT '真实姓名',
  13. phone VARCHAR(20) COMMENT '手机号',
  14. email VARCHAR(100) COMMENT '邮箱',
  15. dept_id BIGINT DEFAULT NULL COMMENT '所属部门ID,NULL表示无部门',
  16. employee_type VARCHAR(20) DEFAULT 'common_user' COMMENT '员工类型:super_admin/flow_manager/dept_manager/common_user',
  17. status TINYINT DEFAULT 0 COMMENT '状态:0-正常,1-禁用',
  18. wecom_user_id VARCHAR(100) COMMENT '企业微信用户ID',
  19. wecom_remind_enabled TINYINT DEFAULT 1 COMMENT '是否开启企微提醒:0-否 1-是',
  20. create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  21. update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  22. UNIQUE KEY uk_user_phone (phone)
  23. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统用户表';
  24. -- ----------------------------
  25. -- 2. 系统角色表
  26. -- ----------------------------
  27. CREATE TABLE IF NOT EXISTS sys_role (
  28. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '角色ID',
  29. role_code VARCHAR(50) NOT NULL UNIQUE COMMENT '角色编码',
  30. role_name VARCHAR(50) NOT NULL COMMENT '角色名称',
  31. role_scope VARCHAR(20) DEFAULT 'tenant' COMMENT '角色范围:platform-平台级 tenant-租户级',
  32. parent_id BIGINT DEFAULT 0 COMMENT '父角色ID,0表示顶级角色',
  33. dept_id BIGINT DEFAULT 0 COMMENT '所属部门ID',
  34. username VARCHAR(50) COMMENT '角色账号登录名',
  35. phone VARCHAR(20) COMMENT '手机号',
  36. password VARCHAR(100) COMMENT '角色账号密码(加密存储)',
  37. status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
  38. wecom_user_id VARCHAR(100) COMMENT '企业微信用户ID',
  39. wecom_remind_enabled TINYINT DEFAULT 1 COMMENT '是否开启企微提醒:0-否 1-是',
  40. create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  41. UNIQUE KEY uk_role_phone (phone)
  42. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统角色表';
  43. -- ----------------------------
  44. -- 3. 用户角色关联表
  45. -- ----------------------------
  46. CREATE TABLE IF NOT EXISTS sys_user_role (
  47. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '关联ID',
  48. user_id BIGINT NOT NULL COMMENT '用户ID',
  49. role_id BIGINT NOT NULL COMMENT '角色ID',
  50. UNIQUE KEY uk_user_role (user_id, role_id) COMMENT '用户角色唯一索引'
  51. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表';
  52. -- ----------------------------
  53. -- 4. 部门表
  54. -- ----------------------------
  55. CREATE TABLE IF NOT EXISTS sys_dept (
  56. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '部门ID',
  57. dept_name VARCHAR(50) NOT NULL COMMENT '部门名称',
  58. dept_code VARCHAR(50) COMMENT '部门编码',
  59. parent_id BIGINT DEFAULT 0 COMMENT '父部门ID,0表示顶级部门',
  60. leader_id BIGINT COMMENT '部门负责人ID',
  61. sort_order INT DEFAULT 0 COMMENT '排序号',
  62. status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
  63. create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
  64. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门表';
  65. -- ----------------------------
  66. -- 5. 流程定义表
  67. -- ----------------------------
  68. CREATE TABLE IF NOT EXISTS bpm_process_definition (
  69. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '流程定义ID',
  70. process_code VARCHAR(50) NOT NULL COMMENT '流程编码',
  71. process_name VARCHAR(100) NOT NULL COMMENT '流程名称',
  72. category VARCHAR(50) COMMENT '流程分类',
  73. form_id BIGINT COMMENT '关联表单ID',
  74. form_schema TEXT COMMENT '流程表单字段定义 JSON',
  75. model_json TEXT NOT NULL COMMENT '流程模型JSON',
  76. version INT DEFAULT 1 COMMENT '版本号',
  77. status TINYINT DEFAULT 0 COMMENT '状态:0-设计中 1-启用中 2-历史',
  78. description VARCHAR(500) COMMENT '流程描述',
  79. create_by BIGINT COMMENT '创建人ID',
  80. create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  81. update_by BIGINT COMMENT '更新人ID',
  82. update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  83. deleted TINYINT DEFAULT 0 COMMENT '逻辑删除:0-未删除,1-已删除',
  84. UNIQUE KEY uk_process_code_version (process_code, version, deleted) COMMENT '流程编码+版本+删除标记唯一索引'
  85. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流程定义表';
  86. -- ----------------------------
  87. -- 6. 流程实例表
  88. -- ----------------------------
  89. CREATE TABLE IF NOT EXISTS bpm_process_instance (
  90. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '流程实例ID',
  91. instance_no VARCHAR(50) NOT NULL UNIQUE COMMENT '实例编号(业务单号)',
  92. process_definition_id BIGINT NOT NULL COMMENT '流程定义ID',
  93. version INT NOT NULL COMMENT '流程版本号',
  94. title VARCHAR(200) COMMENT '实例标题',
  95. applicant_id BIGINT NOT NULL COMMENT '申请人ID',
  96. applicant_dept_id BIGINT COMMENT '申请人部门ID',
  97. form_data TEXT COMMENT '表单数据JSON',
  98. attachment_urls TEXT COMMENT '附件URL列表JSON',
  99. current_node_id VARCHAR(50) COMMENT '当前节点ID',
  100. status TINYINT DEFAULT 0 COMMENT '实例状态:0待接收 1待处理 2已通过 3已拒绝 4已回退 5整体完成 6已撤回 7已终止',
  101. result VARCHAR(20) COMMENT '审批结果:PASS/REJECT/RETURN/TRANSFER',
  102. start_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '流程启动时间',
  103. end_time TIMESTAMP NULL COMMENT '流程结束时间',
  104. create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  105. update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  106. deleted TINYINT DEFAULT 0 COMMENT '逻辑删除:0-未删除,1-已删除',
  107. KEY idx_instance_definition_id (process_definition_id),
  108. KEY idx_instance_applicant (applicant_id),
  109. KEY idx_instance_status (status),
  110. KEY idx_instance_current_node (current_node_id),
  111. KEY idx_instance_status_end_definition (status, end_time, process_definition_id)
  112. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流程实例表';
  113. -- ----------------------------
  114. -- 7. 审批任务表
  115. -- ----------------------------
  116. CREATE TABLE IF NOT EXISTS bpm_approval_task (
  117. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '任务ID',
  118. instance_id BIGINT NOT NULL COMMENT '流程实例ID',
  119. node_id VARCHAR(50) NOT NULL COMMENT '节点ID(流程模型中的节点标识)',
  120. node_name VARCHAR(100) COMMENT '节点名称',
  121. node_type VARCHAR(20) COMMENT '节点类型:start/approval/cc/condition/end',
  122. assignee_id BIGINT COMMENT '任务处理人ID',
  123. assignee_type VARCHAR(20) COMMENT '处理人类型:USER-指定用户 ROLE-角色 SELF-发起人 LEADER-部门主管',
  124. task_status TINYINT DEFAULT 0 COMMENT '任务状态:0待处理 1已处理 2已转办 3已跳过 4已回退',
  125. sub_node_id VARCHAR(50) COMMENT '子节点ID(父审批节点下的子节点标识)',
  126. approval_result VARCHAR(20) COMMENT '审批结果:PASS/REJECT/RETURN/TRANSFER',
  127. version INT DEFAULT 0 COMMENT '乐观锁版本号',
  128. approval_comment TEXT COMMENT '审批意见',
  129. attachment_urls TEXT COMMENT '附件URL列表(JSON数组)',
  130. timeout_time TIMESTAMP NULL COMMENT '超时时间',
  131. timeout_action VARCHAR(20) COMMENT '超时动作:pass-自动通过,reject-自动驳回,remind-提醒等',
  132. create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(任务生成时间)',
  133. handle_time TIMESTAMP NULL COMMENT '处理时间',
  134. deleted TINYINT DEFAULT 0 COMMENT '逻辑删除:0-未删除,1-已删除',
  135. KEY idx_task_instance_id (instance_id),
  136. KEY idx_task_assignee_type_status (assignee_id, assignee_type, task_status),
  137. KEY idx_task_node (node_id),
  138. KEY idx_task_status_node_create (task_status, node_type, create_time),
  139. KEY idx_task_status_timeout (task_status, timeout_time)
  140. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审批任务表';
  141. -- ----------------------------
  142. -- 8. 审批记录表
  143. -- ----------------------------
  144. CREATE TABLE IF NOT EXISTS bpm_approval_record (
  145. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '记录ID',
  146. task_id BIGINT NOT NULL COMMENT '关联审批任务ID',
  147. instance_id BIGINT NOT NULL COMMENT '关联流程实例ID',
  148. node_id VARCHAR(50) NOT NULL COMMENT '节点ID',
  149. node_name VARCHAR(100) COMMENT '节点名称',
  150. operator_id BIGINT NOT NULL COMMENT '操作人ID',
  151. operator_name VARCHAR(50) COMMENT '操作人姓名',
  152. action_type VARCHAR(20) NOT NULL COMMENT '动作类型:APPROVE/REJECT/RETURN/TRANSFER/ADD_SIGN',
  153. action_result VARCHAR(20) COMMENT '动作结果:PASS/REJECT/RETURN/TRANSFER',
  154. comment TEXT COMMENT '审批意见',
  155. attachment_urls TEXT COMMENT '附件URL列表(JSON数组)',
  156. create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
  157. deleted TINYINT DEFAULT 0 COMMENT '逻辑删除:0-未删除,1-已删除',
  158. KEY idx_record_instance_id (instance_id),
  159. KEY idx_record_task_id (task_id),
  160. KEY idx_record_operator (operator_id)
  161. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审批记录表(操作日志/历史记录)';
  162. -- ----------------------------
  163. -- 9. 流程附件表
  164. -- ----------------------------
  165. CREATE TABLE IF NOT EXISTS bpm_attachment (
  166. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '附件ID',
  167. instance_id BIGINT NOT NULL COMMENT '流程实例ID',
  168. task_id BIGINT COMMENT '关联任务ID',
  169. record_id BIGINT COMMENT '关联审批记录ID',
  170. node_id VARCHAR(50) COMMENT '节点ID',
  171. node_name VARCHAR(100) COMMENT '节点名称',
  172. file_name VARCHAR(500) NOT NULL COMMENT '原始文件名',
  173. file_url VARCHAR(500) NOT NULL COMMENT '文件访问URL',
  174. file_size BIGINT COMMENT '文件大小(字节)',
  175. uploader_id BIGINT COMMENT '上传人ID',
  176. uploader_name VARCHAR(50) COMMENT '上传人姓名',
  177. uploader_type VARCHAR(20) COMMENT '上传人类型:SYSTEM/ROLE',
  178. create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
  179. deleted TINYINT DEFAULT 0 COMMENT '逻辑删除:0-未删除,1-已删除',
  180. KEY idx_attachment_instance_id (instance_id),
  181. KEY idx_attachment_task_id (task_id),
  182. KEY idx_attachment_record_id (record_id)
  183. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流程附件表';
  184. -- 兼容已存在的 MySQL 数据库:补充审批任务子节点字段
  185. SET @sql = (
  186. SELECT IF(COUNT(*) = 0,
  187. 'ALTER TABLE bpm_approval_task ADD COLUMN sub_node_id VARCHAR(50) COMMENT ''子节点ID(父审批节点下的子节点标识)''',
  188. 'SELECT 1'
  189. )
  190. FROM INFORMATION_SCHEMA.COLUMNS
  191. WHERE TABLE_NAME = 'bpm_approval_task'
  192. AND COLUMN_NAME = 'sub_node_id'
  193. AND TABLE_SCHEMA = DATABASE()
  194. );
  195. PREPARE stmt FROM @sql;
  196. EXECUTE stmt;
  197. DEALLOCATE PREPARE stmt;
  198. -- 兼容已存在的 MySQL 数据库:补充角色企业微信字段
  199. SET @sql = (
  200. SELECT IF(COUNT(*) = 0,
  201. 'ALTER TABLE sys_role ADD COLUMN wecom_user_id VARCHAR(100) COMMENT ''企业微信用户ID''',
  202. 'SELECT 1'
  203. )
  204. FROM INFORMATION_SCHEMA.COLUMNS
  205. WHERE TABLE_NAME = 'sys_role'
  206. AND COLUMN_NAME = 'wecom_user_id'
  207. AND TABLE_SCHEMA = DATABASE()
  208. );
  209. PREPARE stmt FROM @sql;
  210. EXECUTE stmt;
  211. DEALLOCATE PREPARE stmt;
  212. SET @sql = (
  213. SELECT IF(COUNT(*) = 0,
  214. 'ALTER TABLE sys_role ADD COLUMN wecom_remind_enabled TINYINT DEFAULT 1 COMMENT ''是否开启企微提醒:0-否 1-是''',
  215. 'SELECT 1'
  216. )
  217. FROM INFORMATION_SCHEMA.COLUMNS
  218. WHERE TABLE_NAME = 'sys_role'
  219. AND COLUMN_NAME = 'wecom_remind_enabled'
  220. AND TABLE_SCHEMA = DATABASE()
  221. );
  222. PREPARE stmt FROM @sql;
  223. EXECUTE stmt;
  224. DEALLOCATE PREPARE stmt;
  225. -- ----------------------------
  226. -- 9. 通知配置表
  227. -- ----------------------------
  228. CREATE TABLE IF NOT EXISTS sys_notification_config (
  229. id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '配置ID',
  230. config_key VARCHAR(100) NOT NULL UNIQUE COMMENT '配置键',
  231. config_value VARCHAR(500) COMMENT '配置值',
  232. config_type VARCHAR(50) COMMENT '配置类型:WECOM/EMAIL/SMS',
  233. description VARCHAR(200) COMMENT '配置说明',
  234. status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
  235. create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  236. update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
  237. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通知配置表';