Files
loan-pricing/docs/superpowers/plans/2026-03-31-production-db-init-export-backend-plan.md

10 KiB
Raw Blame History

Production DB Init Export Backend Implementation Plan

For agentic workers: REQUIRED: Use superpowers:executing-plans to implement this plan in this repository. Do not use subagents. Steps use checkbox (- [ ]) syntax for tracking.

Goal: 产出一个可直接执行的生产初始化单文件 SQL基于若依基础脚本补齐贷款定价 3 张业务表结构,且不包含任何业务数据。

Architecture: 直接复用 sql/ry_20250522.sql 作为若依基础内容来源,再从当前项目最终结构来源中抽取 loan_pricing_workflowmodel_corp_output_fieldsmodel_retail_output_fields 三张业务表结构,拼装为新的生产初始化总脚本。完成后通过静态检查和临时数据库导入验证,确认脚本既能完整建库建表,又不会写入业务数据。

Tech Stack: MySQL 5.7/8.0、SQL、shell、mysql 客户端、rg


Task 1: 锁定业务表最终结构来源

Files:

  • Inspect: sql/loan_pricing_schema_20260328.sql

  • Inspect: sql/loan_pricing_workflow.sql

  • Inspect: sql/model_corp.sql

  • Inspect: sql/model_retail.sql

  • Inspect: sql/add_missing_fields.sql

  • Inspect: sql/add_execute_rate_field.sql

  • Inspect: sql/fix_comments.sql

  • Inspect: sql/fix_comments_utf8.sql

  • Inspect: sql/fix_all_comments.sql

  • Step 1: 比对 3 张业务表在各 SQL 文件中的定义

Run: rg -n "CREATE TABLE \loan_pricing_workflow`|CREATE TABLE `model_corp_output_fields`|CREATE TABLE `model_retail_output_fields`|ALTER TABLE `loan_pricing_workflow`|ALTER TABLE loan_pricing_workflow" sql/loan_pricing_schema_20260328.sql sql/loan_pricing_workflow.sql sql/model_corp.sql sql/model_retail.sql sql/add_missing_fields.sql sql/add_execute_rate_field.sql sql/fix_comments.sql sql/fix_comments_utf8.sql sql/fix_all_comments.sqlExpected: 能定位 3 张业务表的最终建表来源以及loan_pricing_workflow` 的后续字段修正脚本。

  • Step 2: 以 loan_pricing_schema_20260328.sql 作为最终结构主来源

核对至少以下字段必须存在于最终结构中:

`loan_term` varchar(50) DEFAULT NULL COMMENT '贷款期限',
`is_tech_ent` varchar(10) DEFAULT NULL COMMENT '科技型企业: true/false科技型企业最多下降5BP',
`is_green_loan` varchar(10) DEFAULT NULL COMMENT '绿色贷款: true/false绿色贷款最多下降5BP',
`is_trade_construction` varchar(10) DEFAULT NULL COMMENT '贸易和建筑业企业标识: true/false抵质押类上调20BP',
`loan_loop` varchar(10) DEFAULT NULL COMMENT '循环功能: true/false贷款合同是否开通循环功能',
`id_num` varchar(100) DEFAULT NULL COMMENT '证件号码',
`execute_rate` varchar(20) DEFAULT NULL COMMENT '执行利率(%)',

Expected: loan_pricing_schema_20260328.sql 能完整反映当前 3 张业务表最终结构,不需要再从带数据文件中提取。

  • Step 3: 记录本次只导出结构、不导出业务数据的边界

Run: rg -n "INSERT INTO \loan_pricing_workflow`|INSERT INTO `model_corp_output_fields`|INSERT INTO `model_retail_output_fields`" sql/loan_pricing_required_data_20260328.sql` Expected: 仅在历史必要数据脚本中看到业务表插数语句,作为本次明确排除项。

  • Step 4: 提交本任务
git add docs/superpowers/plans/2026-03-31-production-db-init-export-backend-plan.md
git commit -m "补充生产初始化数据库导出后端计划"

Task 2: 生成生产初始化总脚本

Files:

  • Create: sql/loan_pricing_prod_init_20260331.sql

  • Inspect: sql/ry_20250522.sql

  • Inspect: sql/loan_pricing_schema_20260328.sql

  • Step 1: 确认目标文件尚不存在,避免覆盖已有发布资产

Run: test ! -f sql/loan_pricing_prod_init_20260331.sql && echo "missing" Expected: 输出 missing,说明目标文件可安全新建。

  • Step 2: 创建脚本头部说明和数据库上下文

在新文件头部写入类似说明:

-- 说明:
-- 1. 本文件用于生产环境数据库初始化
-- 2. 基于 sql/ry_20250522.sql 追加贷款定价业务表结构生成
-- 3. 包含若依基础初始化数据,不包含任何贷款定价业务数据

并补齐:

CREATE DATABASE IF NOT EXISTS `loan-pricing` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE `loan-pricing`;
  • Step 3: 追加若依基础脚本内容

直接将 sql/ry_20250522.sql 的主体内容复制到目标文件数据库上下文之后,不新增、不删减其中的基础初始化数据。

  • Step 4: 追加 3 张业务表的最终 DROP TABLECREATE TABLE

sql/loan_pricing_schema_20260328.sql 提取并追加以下 3 段:

DROP TABLE IF EXISTS `loan_pricing_workflow`;
CREATE TABLE `loan_pricing_workflow` (...);
DROP TABLE IF EXISTS `model_corp_output_fields`;
CREATE TABLE `model_corp_output_fields` (...);
DROP TABLE IF EXISTS `model_retail_output_fields`;
CREATE TABLE `model_retail_output_fields` (...);

要求:

  • 保留最终字段定义和注释

  • 不带 AUTO_INCREMENT=13AUTO_INCREMENT=7 这类依赖现存数据的值

  • 不带任何 INSERT INTO 业务数据

  • Step 5: 做静态完整性检查

Run: rg -n "loan_pricing_workflow|model_corp_output_fields|model_retail_output_fields|INSERT INTO \loan_pricing_workflow`|INSERT INTO `model_corp_output_fields`|INSERT INTO `model_retail_output_fields`" sql/loan_pricing_prod_init_20260331.sqlExpected: 能看到 3 张业务表的结构定义;看不到 3 张业务表的INSERT INTO`。

  • Step 6: 提交本任务
git add sql/loan_pricing_prod_init_20260331.sql
git commit -m "新增生产初始化数据库脚本"

Task 3: 校验脚本范围与重复定义

Files:

  • Modify: sql/loan_pricing_prod_init_20260331.sql

  • Step 1: 检查 3 张业务表在目标文件中只定义一次

Run: python - <<'PY'\nfrom pathlib import Path\ntext = Path('sql/loan_pricing_prod_init_20260331.sql').read_text()\nfor name in ['loan_pricing_workflow','model_corp_output_fields','model_retail_output_fields']:\n print(name, text.count(f'CREATE TABLE {name}'))\nPY Expected: 3 行输出都为 1

  • Step 2: 检查目标文件未引入历史必要数据脚本中的业务插数

Run: rg -n "INSERT INTO \loan_pricing_workflow`|INSERT INTO `model_corp_output_fields`|INSERT INTO `model_retail_output_fields`|DELETE FROM `loan_pricing_workflow`|DELETE FROM `model_corp_output_fields`|DELETE FROM `model_retail_output_fields`" sql/loan_pricing_prod_init_20260331.sql` Expected: 无输出。

  • Step 3: 检查目标文件仍保留若依基础初始化数据

Run: rg -n "insert into sys_user values|insert into sys_role values|insert into sys_menu values" sql/loan_pricing_prod_init_20260331.sql Expected: 能定位若依基础用户、角色、菜单初始化语句,说明基础初始化数据未被误删。

  • Step 4: 如静态检查发现重复或缺失,立即修正脚本

只允许修正以下问题:

-- 删除重复的业务表建表段
-- 补回遗漏的 CREATE DATABASE / USE / DROP TABLE / CREATE TABLE
-- 删除误写入的业务表 DELETE / INSERT
  • Step 5: 提交本任务
git add sql/loan_pricing_prod_init_20260331.sql
git commit -m "校验并修正生产初始化数据库脚本"

Task 4: 用临时数据库验证脚本可执行性

Files:

  • Modify: sql/loan_pricing_prod_init_20260331.sql

  • Create: doc/implementation-report-2026-03-31-production-db-init-export-backend.md

  • Step 1: 设置临时验证库环境变量

在执行前准备:

export DB_HOST=116.62.17.81
export DB_PORT=3307
export DB_USER=root
export DB_PASSWORD='******'
export VERIFY_DB=loan_pricing_prod_init_verify_20260331

要求:

  • DB_PASSWORD 从现有环境配置读取后在当前 shell 设置

  • 不把密码写回仓库文件

  • Step 2: 创建临时验证库并导入脚本

Run:

MYSQL_PWD="$DB_PASSWORD" mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -e "DROP DATABASE IF EXISTS \`$VERIFY_DB\`; CREATE DATABASE \`$VERIFY_DB\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
perl -0pe "s/CREATE DATABASE IF NOT EXISTS `loan-pricing` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;/CREATE DATABASE IF NOT EXISTS `$VERIFY_DB` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;/; s/USE `loan-pricing`;/USE `$VERIFY_DB`;/;" sql/loan_pricing_prod_init_20260331.sql | MYSQL_PWD="$DB_PASSWORD" mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER"

Expected: 两条命令都成功返回,无 SQL 执行报错。

  • Step 3: 校验基础初始化数据和业务空表

Run:

MYSQL_PWD="$DB_PASSWORD" mysql -N -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" "$VERIFY_DB" -e "SELECT COUNT(*) FROM sys_user; SELECT COUNT(*) FROM sys_role; SELECT COUNT(*) FROM sys_menu; SELECT COUNT(*) FROM loan_pricing_workflow; SELECT COUNT(*) FROM model_corp_output_fields; SELECT COUNT(*) FROM model_retail_output_fields;"

Expected:

  • sys_usersys_rolesys_menu 结果大于 0

  • loan_pricing_workflowmodel_corp_output_fieldsmodel_retail_output_fields 结果都为 0

  • Step 4: 清理临时验证库

Run: MYSQL_PWD="$DB_PASSWORD" mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -e "DROP DATABASE IF EXISTS \$VERIFY_DB`;"` Expected: PASS验证结束后临时库被删除。

  • Step 5: 编写后端实施记录

doc/implementation-report-2026-03-31-production-db-init-export-backend.md 记录至少以下内容:

- 新增生产初始化总脚本 `sql/loan_pricing_prod_init_20260331.sql`
- 基础部分直接复用 `sql/ry_20250522.sql`
- 新增 3 张业务表结构:`loan_pricing_workflow``model_corp_output_fields``model_retail_output_fields`
- 明确未导出任何业务数据
- 已完成静态检查和临时库导入验证
  • Step 6: 核对实施记录路径

Run: ls doc/implementation-report-2026-03-31-production-db-init-export-backend.md Expected: 文件存在于仓库 doc/ 目录。

  • Step 7: 提交本任务
git add sql/loan_pricing_prod_init_20260331.sql doc/implementation-report-2026-03-31-production-db-init-export-backend.md
git commit -m "完成生产初始化数据库脚本验证"