diff --git a/zz-resource/db-scripts/botp-rule-kernel-tables-script.sql b/zz-resource/db-scripts/botp-rule-kernel-tables-script.sql new file mode 100644 index 0000000..cf2a635 --- /dev/null +++ b/zz-resource/db-scripts/botp-rule-kernel-tables-script.sql @@ -0,0 +1,380 @@ +-- ---------------------------- +-- BOTP 业务规则内核:10 张表的完整建表语句(建库用) +-- +-- 用途: +-- 1) 全新环境建库:直接执行本脚本即得到 BOTP 的完整表结构; +-- 2) 存量环境结构比对:本脚本是「应然结构」,与线上 SHOW CREATE TABLE 比对可发现缺列。 +-- +-- ⚠ 存量环境不要直接执行本脚本: +-- - 本脚本不带 IF NOT EXISTS,表已存在会报错(不会覆盖数据,但会中断后续语句); +-- - 存量环境请按顺序执行增量脚本: +-- ① botp-reverse-writing-tables-script.sql (反写三表,表不存在则建) +-- ② botp-rule-version-script.sql (rule_version + 两张快照表) +-- ③ convert-relation-entry-writeback-script.sql(convert_relation_entry 两列) +-- ④ botp-rule-columns-script.sql (其余 11 列 + 2 个索引) +-- ⑤ botp-migration-data-script.sql (存量数据兜底 + 插件回填,会改数据,先备份) +-- ⑥ closed_flag 补列(见升级说明 §1.6,仓库内无脚本,需逐表 ALTER) +-- +-- 涉及 10 张表: +-- convert_rule / convert_fieldmapping_entry / convert_plugin_entry +-- convert_relation / convert_relation_entry +-- reverse_writing_rules / reverse_writing_formula / reverse_writing_business +-- convert_rule_ver / reverse_writing_rules_ver +-- +-- 执行位置:tenant-admin 服务指向的默认数据库。多租户部署时每个租户库都要执行。 +-- 建表顺序:无外键依赖,可任意顺序;表间关系靠 parent_id / rules_id / rule_id 逻辑关联。 +-- +-- 关于列类型(与实体逐项核对过,详见升级说明 §1.3): +-- - 枚举编码一律 varchar 存数字字符串('1'/'2'/'3'),不是 int; +-- - convert_rule.enabled 是 String、convert_plugin_entry.serial_number 是 String(按字符串排序); +-- - convert_fieldmapping_entry.serial_number 是 Integer(int,默认 10); +-- - reverse_writing_*.enable 是 int,与历史口径一致,勿改成 varchar; +-- - reverse_writing_rules.rollback_on_revoke 是 Integer(tinyint),不是 Boolean; +-- - convert_relation.source_id / target_id 是 varchar,不是 bigint; +-- - convert_relation_entry 的列名是 targe_entry_*(少一个 t,是实体既有拼写,勿改); +-- - 审计四列来自 BaseModel;反写三表与 convert_relation 的 create_user_id / create_time 为 NOT NULL。 +-- +-- 回滚段:文件末尾。 +-- ---------------------------- +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ============================================================================ +-- 一、规则配置表 +-- ============================================================================ + +-- ---------------------------- +-- 1. 转换规则主表 +-- source_entity_id / target_entity_id 存 OnlFormHead.id(单元数据主键),不是表名 +-- auto_save:'1' 或 'true' 视为开(下推即落库),空值与其它值视为关(前端手动保存) +-- split_merge_strategy:1 一对一 / 2 多对一 / 3 按规则分组合并 +-- group_by_field 存源单字段 OnlFormField.id;group_by_field_name 仅展示,执行侧不读 +-- enable_condition_json / select_filter_json 留空(NULL)表示不限制;空串会被当成「配了但解析失败」 +-- ---------------------------- +CREATE TABLE `convert_rule` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `deleted_flag` int(11) DEFAULT '1' COMMENT '逻辑删除标记(1:正常 -1:已删除)', + `number` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '规则编码', + `name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '规则名称', + `source_entity_id` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '源单(OnlFormHead.id)', + `source_table` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '源单表名', + `target_entity_id` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '目标单(OnlFormHead.id)', + `enabled` varchar(10) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '启动状态(1:启用)', + `is_default` varchar(10) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '是否默认', + `auto_save` varchar(10) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '下推自动保存(1/true:是 其它或空:否)', + `visible` varchar(10) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '运行时可见', + `up_interface_type` varchar(10) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '上游界面类型', + `down_interface_type` varchar(10) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '下游界面类型', + `up_route_interface` bigint(20) DEFAULT NULL COMMENT '上游路由界面(xy_sys_menu.id)', + `down_route_interface` bigint(20) DEFAULT NULL COMMENT '下游路由界面(xy_sys_menu.id)', + `up_list_interface` bigint(20) DEFAULT NULL COMMENT '上游在线列表界面(OnlineForm.id)', + `up_edit_interface` bigint(20) DEFAULT NULL COMMENT '上游在线编辑界面(OnlineForm.id)', + `down_list_interface` bigint(20) DEFAULT NULL COMMENT '下游在线列表界面(OnlineForm.id)', + `down_edit_interface` bigint(20) DEFAULT NULL COMMENT '下游在线编辑界面(OnlineForm.id)', + `split_merge_strategy` varchar(10) COLLATE utf8mb4_bin NOT NULL DEFAULT '1' COMMENT '分单策略(1:一对一 2:多对一 3:按规则分组合并)', + `group_by_field` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '分单字段(源单OnlFormField.id;策略为3时必填)', + `group_by_field_name` varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '分单字段名称(仅展示)', + `enable_condition_json` text COLLATE utf8mb4_bin COMMENT '规则启用条件JSON;留空表示始终启用', + `select_filter_json` text COLLATE utf8mb4_bin COMMENT '选单过滤JSON;留空表示全部通过;下推与拉式共用', + `rule_version` int(11) NOT NULL DEFAULT '1' COMMENT '规则版本号(@Version乐观锁)', + `create_user_id` bigint(20) DEFAULT NULL COMMENT '创建者Id', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_user_id` bigint(20) DEFAULT NULL COMMENT '更新者Id', + `update_time` datetime DEFAULT NULL COMMENT '最后更新时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `uk_convert_rule_number` (`number`) USING BTREE, + KEY `idx_convert_rule_target` (`target_entity_id`) USING BTREE, + KEY `idx_convert_rule_source` (`source_entity_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='转换规则存值主表'; + +-- ---------------------------- +-- 2. 字段映射分录 +-- parent_id 指向 convert_rule.id +-- value_method:1 源单字段 / 2 常量 / 3 计算公式 / 4 按条件取值 +-- calculation_json:以 { 开头是计算公式对象(valueMethod=3),以 [ 开头是条件分支数组(valueMethod=4) +-- merge_method:1 直接取 / 2 求和 / 3 拼接(仅策略 2/3 且有合并场景时生效) +-- entry_target 存目标单据 OnlFormHead.id(与 target_entity_id 同口径),单分录时可留空 +-- serial_number 参与「是否同一映射」判定,使同一目标字段的多条映射不再互相覆盖 +-- ---------------------------- +CREATE TABLE `convert_fieldmapping_entry` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `deleted_flag` int(11) DEFAULT '1' COMMENT '逻辑删除标记(1:正常 -1:已删除)', + `oldfield_number` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '源单字段(OnlFormField.id)', + `oldfield_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '源单字段名称', + `newfield_number` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '目标单字段(OnlFormField.id)', + `newfield_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '目标单字段名称', + `calculation` text COLLATE utf8mb4_bin COMMENT '计算公式(原文)', + `calculation_json` text COLLATE utf8mb4_bin COMMENT '取值方式3:计算公式对象{...} 取值方式4:条件分支数组[...]', + `value_method` varchar(10) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '取值方式(1:源单字段 2:常量 3:计算公式 4:按条件取值)', + `clt_value` varchar(500) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '常量值/未命中分支时的兜底取值', + `parent_id` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '所属转换规则(convert_rule.id)', + `merge_method` varchar(10) COLLATE utf8mb4_bin NOT NULL DEFAULT '1' COMMENT '合并方式(1:直接取 2:求和 3:拼接)', + `entry_target` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '目标分录(目标单据OnlFormHead.id)', + `serial_number` int(11) DEFAULT '10' COMMENT '执行顺序;数字越小越先执行', + `create_user_id` bigint(20) DEFAULT NULL COMMENT '创建者Id', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_user_id` bigint(20) DEFAULT NULL COMMENT '更新者Id', + `update_time` datetime DEFAULT NULL COMMENT '最后更新时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_fieldmapping_parent` (`parent_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='转换规则-字段映射分录'; + +-- ---------------------------- +-- 3. 插件分录(转换插件与反写插件共用本表,靠 type 区分) +-- parent_id:type=convert 时指向 convert_rule.id;type=writeback 时指向 reverse_writing_rules.id +-- commen:插件参数「键=列名,键=列名」。原先写死在 Java 里的表名/字段名改从这里取, +-- 升级后必须由 botp-migration-data-script.sql 回填,否则插件取不到字段而静默失效 +-- serial_number:注意是 varchar 不是 int,按字符串排序(实体 ConvertPluginEntry 即 String) +-- ---------------------------- +CREATE TABLE `convert_plugin_entry` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `deleted_flag` int(11) DEFAULT '1' COMMENT '逻辑删除标记(1:正常 -1:已删除)', + `enable` varchar(10) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '是否启用(true/1:是)', + `type` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '插件类型(convert:转换 writeback:反写)', + `class_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '插件类全限定名', + `plugin_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '插件名称', + `commen` varchar(500) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '插件参数(键=列名,键=列名);原先硬编码的字段名从这里取', + `serial_number` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '执行顺序(注意:实体是String不是Integer)', + `parent_id` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '所属规则(转换规则id或反写规则id,由type区分)', + `create_user_id` bigint(20) DEFAULT NULL COMMENT '创建者Id', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_user_id` bigint(20) DEFAULT NULL COMMENT '更新者Id', + `update_time` datetime DEFAULT NULL COMMENT '最后更新时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_plugin_parent` (`parent_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='规则插件分录(转换/反写共用)'; + +-- ---------------------------- +-- 4. 反写规则主表 +-- source_documents / target_doc 存 OnlFormHead.id(单元数据主键),不是表名 +-- trigger_timing:1 保存即反写 / 2 审核即反写 +-- enable:1 启用 / 0 停用(int,与历史口径一致,勿改成 varchar) +-- rollback_on_revoke:1 开 / 0 关(Integer),空值按「开启」处理 +-- source_close_json 成立时写源单主表 closed_flag=1,不成立写 0(整单关闭语义) +-- ---------------------------- +CREATE TABLE `reverse_writing_rules` ( + `id` bigint(20) NOT NULL COMMENT '主键Id', + `name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '规则名称', + `source_documents` bigint(20) DEFAULT NULL COMMENT '来源单据(OnlFormHead.id)', + `target_doc` bigint(20) DEFAULT NULL COMMENT '目标单据(OnlFormHead.id)', + `trigger_timing` varchar(10) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '触发时机(1:保存即反写 2:审核即反写)', + `enable` int(11) NOT NULL DEFAULT '1' COMMENT '是否启用(1:是 0:否)', + `excess_check_json` text COLLATE utf8mb4_bin COMMENT '超额检查JSON;留空表示不检查', + `excess_action` varchar(10) COLLATE utf8mb4_bin NOT NULL DEFAULT '1' COMMENT '超额动作(1:拦截报错 2:仅告警)', + `source_close_json` text COLLATE utf8mb4_bin COMMENT '源单关闭条件JSON;留空表示不关闭', + `rollback_on_revoke` tinyint(1) NOT NULL DEFAULT '1' COMMENT '撤销回滚(1:是 0:否)', + `rule_version` int(11) NOT NULL DEFAULT '1' COMMENT '规则版本号(@Version乐观锁)', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者Id', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) DEFAULT NULL COMMENT '更新者Id', + `update_time` datetime DEFAULT NULL COMMENT '最后更新时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_target_doc` (`target_doc`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='反写规则配置主表'; + +-- ---------------------------- +-- 5. 反写公式分录 +-- rules_id 指向 reverse_writing_rules.id +-- condition / formula 等列名是 MySQL 保留字,必须加反引号(实体已用 @TableField("`condition`")) +-- formula / formula_english = 回写位置(源单);source_single_field = 取值位置(目标单) +-- ⚠ 方向与直觉相反,配反了表现为「反写执行了但源单没变」 +-- mode:1 累加 / 2 扣减 / 3 覆盖(覆盖方式会把原值记到 convert_relation_entry.before_value) +-- exec_order:Integer,数字越小越先执行 +-- *_text / *_english / *_field 是展示镜像列,前端需与 *_json 同步写入,不要只写 JSON +-- ---------------------------- +CREATE TABLE `reverse_writing_formula` ( + `id` bigint(20) NOT NULL COMMENT '主键Id', + `rules_id` bigint(20) NOT NULL COMMENT '反写规则Id(reverse_writing_rules.id)', + `condition` text COLLATE utf8mb4_bin COMMENT '条件(原始)', + `condition_text` text COLLATE utf8mb4_bin COMMENT '条件(展示文本)', + `condition_english` text COLLATE utf8mb4_bin COMMENT '条件(英文表达式)', + `condition_field` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '条件字段', + `condition_json` text COLLATE utf8mb4_bin COMMENT '条件JSON(运行时只读这一列)', + `formula` text COLLATE utf8mb4_bin COMMENT '反写公式(回写位置;指向源单)', + `formula_text` text COLLATE utf8mb4_bin COMMENT '反写公式(展示文本)', + `formula_english` text COLLATE utf8mb4_bin COMMENT '反写公式(英文表达式;指向源单字段)', + `formula_field` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '反写公式字段', + `formula_json` text COLLATE utf8mb4_bin COMMENT '反写公式JSON(运行时只读这一列)', + `mode` varchar(10) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '反写方式(1:累加 2:扣减 3:覆盖)', + `source_single_field` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '源单字段(取值位置;实际指向目标单字段)', + `source_single_field_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '源单字段名称', + `enable` int(11) NOT NULL DEFAULT '1' COMMENT '是否启用(1:是 0:否)', + `exec_order` int(11) DEFAULT '10' COMMENT '执行顺序;数字越小越先执行', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者Id', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) DEFAULT NULL COMMENT '更新者Id', + `update_time` datetime DEFAULT NULL COMMENT '最后更新时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_rules_id` (`rules_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='反写规则-反写公式分录'; + +-- ---------------------------- +-- 6. 业务规则分录 +-- preconditions / established / not_established 三组:前置条件、条件成立、条件不成立 +-- 前置条件为空时按「成立」分支处理;两个分支都真实写入并持久化 +-- 本表没有 exec_order:业务规则按返回顺序执行,本次不新增 +-- ---------------------------- +CREATE TABLE `reverse_writing_business` ( + `id` bigint(20) NOT NULL COMMENT '主键Id', + `rules_id` bigint(20) NOT NULL COMMENT '反写规则Id(reverse_writing_rules.id)', + `preconditions` text COLLATE utf8mb4_bin COMMENT '前置条件(原始)', + `preconditions_text` text COLLATE utf8mb4_bin COMMENT '前置条件(展示文本)', + `preconditions_english` text COLLATE utf8mb4_bin COMMENT '前置条件(英文表达式)', + `preconditions_field` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '前置条件字段', + `preconditions_json` text COLLATE utf8mb4_bin COMMENT '前置条件JSON(运行时只读这一列)', + `established` text COLLATE utf8mb4_bin COMMENT '条件成立(原始)', + `established_text` text COLLATE utf8mb4_bin COMMENT '条件成立(展示文本)', + `established_english` text COLLATE utf8mb4_bin COMMENT '条件成立(英文表达式)', + `established_field` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '条件成立字段', + `established_json` text COLLATE utf8mb4_bin COMMENT '条件成立JSON(运行时只读这一列)', + `not_established` text COLLATE utf8mb4_bin COMMENT '条件不成立(原始)', + `not_established_text` text COLLATE utf8mb4_bin COMMENT '条件不成立(展示文本)', + `not_established_english` text COLLATE utf8mb4_bin COMMENT '条件不成立(英文表达式)', + `not_established_field` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '条件不成立字段', + `not_established_json` text COLLATE utf8mb4_bin COMMENT '条件不成立JSON(运行时只读这一列)', + `enable` int(11) NOT NULL DEFAULT '1' COMMENT '是否启用(1:是 0:否)', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者Id', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) DEFAULT NULL COMMENT '更新者Id', + `update_time` datetime DEFAULT NULL COMMENT '最后更新时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_rules_id` (`rules_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='反写规则-业务规则分录'; + +-- ============================================================================ +-- 二、转换关系表(反写定位源单的权威依据) +-- ============================================================================ + +-- ---------------------------- +-- 7. 转换关系(单据级) +-- target_number 实际存的是目标单的 OnlFormHead.id(不是表名),与 target_id 组成组合索引 +-- rule_version:本次转换实际使用的规则版本,供事后回溯 +-- ---------------------------- +CREATE TABLE `convert_relation` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `convert_rule_id` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '转换规则id', + `source_number` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '源单表名', + `source_id` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '源单id', + `target_number` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '目标单表名/OnlFormHead.id', + `target_id` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '目标单id', + `rule_version` int(11) DEFAULT NULL COMMENT '本次转换实际使用的规则版本', + `create_user_id` bigint(20) NOT NULL COMMENT '创建者Id', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_user_id` bigint(20) DEFAULT NULL COMMENT '更新者Id', + `update_time` datetime DEFAULT NULL COMMENT '最后更新时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_relation_target` (`target_number`, `target_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='转换关系(单据级)'; + +-- ---------------------------- +-- 8. 转换关系(分录行级) +-- ⚠ 列名是 targe_entry_number / targe_entry_id(少一个 t,不是 target_entry_*), +-- 这是实体 ConvertRelationEntry 的既有拼写,建表必须照抄,改了代码就找不到列 +-- before_value:反写前的源单字段原值,只有「覆盖」方式需要(累加/扣减天然可逆) +-- writeback_rule_version:本次反写实际使用的规则版本,撤销时按同一版本取快照执行 +-- ---------------------------- +CREATE TABLE `convert_relation_entry` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `convert_rule_id` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '转换规则id', + `source_number` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '源单表名', + `source_id` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '源单id', + `source_entry_number` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '源分录表名', + `source_entry_id` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '源分录行id', + `target_number` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '目标单表名', + `target_id` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '目标单id', + `targe_entry_number` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '目标分录表名(列名少一个t,是实体既有拼写)', + `targe_entry_id` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '目标分录行id(列名少一个t,是实体既有拼写)', + `before_value` decimal(24,8) DEFAULT NULL COMMENT '反写前的源单字段原值(仅覆盖方式),供撤销回滚恢复', + `writeback_rule_version` int(11) DEFAULT NULL COMMENT '本次反写使用的反写规则版本,撤销时按同一版本执行', + `create_user_id` bigint(20) DEFAULT NULL COMMENT '创建者Id', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_user_id` bigint(20) DEFAULT NULL COMMENT '更新者Id', + `update_time` datetime DEFAULT NULL COMMENT '最后更新时间', + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_relation_entry_target` (`target_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='转换关系(分录行级)'; + +-- ============================================================================ +-- 三、规则版本快照表 +-- 每次保存规则时版本号 +1 并追加一条全量快照,快照以 JSON 内联存储规则主表 + 全部子表分录 +-- 唯一索引 (rule_id, rule_version) 保证版本号单调且不重复 +-- remark 只有两个值:新增保存 / 修改保存 +-- ============================================================================ + +-- ---------------------------- +-- 9. 转换规则版本快照 +-- snapshot_json 分区:rule / fieldMappings / pluginEntries +-- ---------------------------- +CREATE TABLE `convert_rule_ver` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `rule_id` bigint(20) NOT NULL COMMENT '所属转换规则Id(convert_rule.id)', + `rule_version` int(11) NOT NULL COMMENT '规则版本号', + `snapshot_json` longtext COLLATE utf8mb4_bin COMMENT '全量快照JSON:rule/fieldMappings/pluginEntries', + `remark` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注(新增保存/修改保存)', + `create_user_id` bigint(20) DEFAULT NULL COMMENT '创建者Id', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_user_id` bigint(20) DEFAULT NULL COMMENT '更新者Id', + `update_time` datetime DEFAULT NULL COMMENT '最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_convert_rule_ver_rule_version` (`rule_id`, `rule_version`) USING BTREE, + KEY `idx_convert_rule_ver_rule_id` (`rule_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='转换规则版本快照'; + +-- ---------------------------- +-- 10. 反写规则版本快照 +-- snapshot_json 分区:rule / formulas / businesses +-- 撤销/弃审回滚时按 convert_relation_entry.writeback_rule_version 到本表取当时的快照执行 +-- ---------------------------- +CREATE TABLE `reverse_writing_rules_ver` ( + `id` bigint(20) NOT NULL COMMENT '主键', + `rule_id` bigint(20) NOT NULL COMMENT '所属反写规则Id(reverse_writing_rules.id)', + `rule_version` int(11) NOT NULL COMMENT '规则版本号', + `snapshot_json` longtext COLLATE utf8mb4_bin COMMENT '全量快照JSON:rule/formulas/businesses', + `remark` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注(新增保存/修改保存)', + `create_user_id` bigint(20) DEFAULT NULL COMMENT '创建者Id', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_user_id` bigint(20) DEFAULT NULL COMMENT '更新者Id', + `update_time` datetime DEFAULT NULL COMMENT '最后更新时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_reverse_writing_rules_ver_rule_version` (`rule_id`, `rule_version`) USING BTREE, + KEY `idx_reverse_writing_rules_ver_rule_id` (`rule_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='反写规则版本快照'; + +SET FOREIGN_KEY_CHECKS = 1; + +-- ============================================================================ +-- 建后自检:应返回 10 行,每行一张表 +-- ============================================================================ +SELECT e.table_name, IF(c.table_name IS NULL, '缺失', '已建') AS status +FROM ( + SELECT 'convert_rule' AS table_name +UNION ALL SELECT 'convert_fieldmapping_entry' +UNION ALL SELECT 'convert_plugin_entry' +UNION ALL SELECT 'reverse_writing_rules' +UNION ALL SELECT 'reverse_writing_formula' +UNION ALL SELECT 'reverse_writing_business' +UNION ALL SELECT 'convert_relation' +UNION ALL SELECT 'convert_relation_entry' +UNION ALL SELECT 'convert_rule_ver' +UNION ALL SELECT 'reverse_writing_rules_ver' +) e +LEFT JOIN information_schema.tables c + ON c.table_schema = DATABASE() AND c.table_name = e.table_name; + +-- ---------------------------- +-- 回滚段(仅在确认 10 张表都是本次新建、且无业务数据时使用)。 +-- 有存量数据时禁止直接 DROP:规则配置与转换关系会一起丢失,应先导出。 +-- 注意:convert_plugin_entry 的反写插件分录(type=writeback)也一并丢失。 +-- ---------------------------- +-- SET FOREIGN_KEY_CHECKS = 0; +-- DROP TABLE IF EXISTS `reverse_writing_rules_ver`; +-- DROP TABLE IF EXISTS `convert_rule_ver`; +-- DROP TABLE IF EXISTS `convert_relation_entry`; +-- DROP TABLE IF EXISTS `convert_relation`; +-- DROP TABLE IF EXISTS `reverse_writing_business`; +-- DROP TABLE IF EXISTS `reverse_writing_formula`; +-- DROP TABLE IF EXISTS `reverse_writing_rules`; +-- DROP TABLE IF EXISTS `convert_plugin_entry`; +-- DROP TABLE IF EXISTS `convert_fieldmapping_entry`; +-- DROP TABLE IF EXISTS `convert_rule`; +-- SET FOREIGN_KEY_CHECKS = 1;