合并账户库为单表

This commit is contained in:
wkc
2026-04-17 10:18:13 +08:00
parent cc1a4538af
commit 4c6ca52e7e
24 changed files with 1285 additions and 377 deletions

View File

@@ -0,0 +1,94 @@
# 2026-04-14 后端运行与打包约定实施记录
## 1. 改动目标
- 固化本地后端继续走 `ruoyi-admin.jar + 内嵌 Tomcat` 启动链路
- 固化 `mvn -pl ruoyi-admin -am package -DskipTests` 同时产出 `jar``war`
- 固化部署脚本统一消费 `ruoyi-admin.war`
- 固化 `bin/restart_java_backend.sh` 默认跟随后端日志,并支持 `FOLLOW_LOGS=false`
## 2. 实施内容
### 2.1 Maven 打包链路
涉及文件:
- `ruoyi-admin/pom.xml`
实施内容:
- 保持 `ruoyi-admin``<packaging>jar</packaging>` 不变,确保本地运行仍使用可执行 `jar`
-`maven-war-plugin` 增加 `package` 阶段显式执行 `war` 目标,确保执行 `mvn -pl ruoyi-admin -am package -DskipTests` 时额外生成 `ruoyi-admin.war`
- 保留 `spring-boot-maven-plugin repackage`,继续生成可执行 `ruoyi-admin.jar`
### 2.2 本地后端重启脚本
涉及文件:
- `bin/restart_java_backend.sh`
实施内容:
- 新增 `FOLLOW_LOGS="${FOLLOW_LOGS:-true}"` 默认开关
- `start``restart` 成功后默认执行 `tail -F` 持续输出后端日志
- 当外部传入 `FOLLOW_LOGS=false` 时,仅启动后端,不进入日志跟随
### 2.3 部署产物切换
涉及文件:
- `deploy/deploy-to-nas.sh`
- `deploy/deploy.ps1`
- `docker/backend/Dockerfile`
实施内容:
- 部署目录组装时由复制 `ruoyi-admin.jar` 改为复制 `ruoyi-admin.war`
- Docker 后端镜像改为消费 `ruoyi-admin.war`
- 保证部署脚本不再把 `ruoyi-admin.jar` 当作生产部署产物
### 2.4 项目约定同步
涉及文件:
- `AGENTS.md`
实施内容:
- 补充本地运行、双产物打包、部署使用 `war``FOLLOW_LOGS` 开关等仓库级约定
- 在 Build / Run / Test Commands 中补充主应用定向打包命令
## 3. 验证记录
### 3.1 脚本检查
执行:
```bash
sh docs/tests/scripts/test-restart-java-backend.sh
sh docs/tests/scripts/test-backend-package-and-deploy-conventions.sh
```
结果:
- 两个脚本均通过
### 3.2 Maven 双产物验证
执行:
```bash
mvn -pl ruoyi-admin -am package -DskipTests
```
结果:
- 构建成功
- 生成 `ruoyi-admin/target/ruoyi-admin.jar`
- 生成 `ruoyi-admin/target/ruoyi-admin.war`
## 4. 结论
- 本地开发链路继续保持 `jar + 内嵌 Tomcat`
- 部署链路统一切换为 `war`
- 后端重启脚本默认跟日志,且支持显式关闭

View File

@@ -0,0 +1,62 @@
# 2026-04-14 NAS TongWeb 部署脚本实施记录
## 1. 目标
- 新增一套独立于 Docker 的 NAS 部署脚本
- 部署链路固定使用 `ruoyi-admin.war`
- 远端通过 `TongWeb` 自动部署目录发布应用,并使用 `stopserver.sh` / `startservernohup.sh` 重启服务
## 2. 实施内容
### 2.1 新增 TongWeb NAS 部署入口
涉及文件:
- `deploy/deploy-to-nas-tongweb.sh`
实施内容:
- 提供与现有 NAS 脚本一致的 SSH 连接参数风格
- 默认执行 `mvn -pl ruoyi-admin -am package -DskipTests`
- 本地仅校验并上传 `ruoyi-admin/target/ruoyi-admin.war`
- 支持 `--dry-run` 预览参数
### 2.2 新增 TongWeb 远端执行器
涉及文件:
- `deploy/remote-deploy-tongweb.py`
实施内容:
- 通过 SFTP 将 `war` 上传到 NAS 临时目录 `${remoteRoot}/backend/`
- 远端复制 `war``${TONGWEB_HOME}/autodeploy/${appName}.war`
- 清理 `${TONGWEB_HOME}/autodeploy/${appName}` 旧解压目录
- 依次执行 `stopserver.sh``startservernohup.sh`
### 2.3 新增脚本回归测试
涉及文件:
- `tests/deploy/test_deploy_to_nas_tongweb.py`
实施内容:
- 覆盖默认参数 `dry-run`
- 覆盖自定义参数 `dry-run`
- 校验部署入口已调用 `remote-deploy-tongweb.py`
- 校验远端执行器包含 `autodeploy``stopserver.sh``startservernohup.sh`
## 3. 验证命令
```bash
python3 -m pytest tests/deploy/test_deploy_to_nas_tongweb.py -q
bash -n deploy/deploy-to-nas-tongweb.sh
bash deploy/deploy-to-nas-tongweb.sh --dry-run
```
## 4. 说明
- 默认 `TongWebHome``/opt/TongWeb`,可通过第 6 个位置参数或环境变量 `TONGWEB_HOME` 覆盖
- 默认应用名为 `ruoyi-admin`,可通过第 7 个位置参数或环境变量 `APP_NAME` 覆盖
- 本次只新增 `TongWeb` 后端部署链路,不改动现有 Docker NAS 部署脚本

View File

@@ -0,0 +1,26 @@
# LSFX Mock Server `ccdi_account_info` 异常账户字段补迁移后端实施文档
## 背景
- `lsfx-mock-server` 上传接口 `/watson/api/project/remoteUploadSplitFile` 在写入 `ccdi_account_info` 时使用了 `is_self_account``trans_risk_level` 字段。
- 当前开发库中的 `ccdi_account_info` 为历史表结构,不包含这两列,导致 `AbnormalAccountBaselineService.apply(...)` 执行 upsert 时依次抛出 `Unknown column 'is_self_account' in 'field list'``Unknown column 'trans_risk_level' in 'field list'`,上传接口直接返回 500。
## 本次修改
- 新增增量脚本 `sql/migration/2026-04-15-sync-ccdi-account-info-abnormal-account-columns.sql`
- 脚本以最短路径为已有 `ccdi_account_info` 表补齐异常账户同步当前必需的字段,并保持可重复执行:
- 使用 `information_schema.columns` 判断字段是否已存在
- 通过 `PREPARE / EXECUTE` 仅在缺列时执行 `ALTER TABLE`
- 补齐 `is_self_account``trans_risk_level`
- 列位置与当前写库 SQL 保持一致
- 新增回归测试 `lsfx-mock-server/tests/test_schema_migration_scripts.py`,锁定该增量脚本必须存在且包含两条补列语句。
## 验证
- `python3 -m pytest /Users/wkc/Desktop/ccdi/ccdi/lsfx-mock-server/tests/test_schema_migration_scripts.py -q`
- 使用 `bin/mysql_utf8_exec.sh` 执行增量脚本后,复查 `SHOW COLUMNS FROM ccdi_account_info`,确认存在 `is_self_account``trans_risk_level` 字段。
## 影响范围
- 仅影响 `lsfx-mock-server` 依赖的 `ccdi_account_info` 历史表结构补齐。
- 不修改接口协议,不改动前端。

View File

@@ -0,0 +1,53 @@
# 账户库双表合单表后端实施计划
## 1. 目标
将账户库由 `ccdi_account_info` + `ccdi_account_result` 双表结构收敛为单表 `ccdi_account_info`,迁移完成后删除旧表,同时保持现有账户库接口、字段名和前端交互不变。
## 2. 实施范围
- 数据库增量迁移脚本
- 账户库后端实体、Mapper XML、服务层
- 外部场景种子脚本
- 账户库相关回归测试
本次不调整前端页面、接口路径和接口字段名。
## 3. 实施步骤
### 3.1 数据库迁移
1. 新增 `sql/migration/2026-04-16-merge-ccdi-account-result-into-info.sql`
2. 在脚本中先校验 `ccdi_account_info.account_no` 无重复
3.`ccdi_account_info` 补齐分析字段
4.`account_no``ccdi_account_result` 回填数据
5. 回填完成后删除 `ccdi_account_result`
### 3.2 后端代码调整
1. `CcdiAccountInfo` 实体吸收分析字段映射
2. 删除 `CcdiAccountResult` 实体与 `CcdiAccountResultMapper`
3. `CcdiAccountInfoMapper.xml` 去掉对 `ccdi_account_result` 的联表
4. `CcdiAccountInfoServiceImpl` 去掉结果表双写逻辑
5. 保持原有业务语义:
- `bankScope = EXTERNAL` 时补齐默认分析字段
- `bankScope != EXTERNAL` 时清空分析字段,避免误写
### 3.3 配套脚本与测试
1.`2026-04-13` 外部账户场景种子脚本改为单表写入
2. 新增 SQL 脚本文本断言测试
3. 新增账户库服务层与 Mapper SQL 结构测试
## 4. 验证要点
- 迁移脚本包含“补字段、回填、删旧表”三步
- 账户库列表/详情/导出查询均只读 `ccdi_account_info`
- 行外账户保存分析字段
- 行内账户清空分析字段
- 外部场景种子脚本不再写入 `ccdi_account_result`
## 5. 风险说明
- 仓库当前 `ccdi-info-collection` 模块存在既有依赖缺失问题,可能影响常规 Maven 全量编译与测试执行
- 本次需要将“账户库改动验证结果”和“仓库原有构建阻塞”分开记录