22 KiB
全量迁移 892-without-redis 后端实施计划
For agentic workers: REQUIRED: Use superpowers:subagent-driven-development (if subagents available) or superpowers:executing-plans to implement this plan. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: 在保留当前分支 JDK8 与去 Redis 基线的前提下,把 origin/892-without-redis 的后端业务、脚本、SQL、配置能力完整迁移到当前分支,并保证行为对齐。
Architecture: 以后端主工程为基线,新增 ruoyi-loan-pricing 业务模块并接入 ruoyi-admin、根 pom.xml 与 SQL/脚本目录。所有与 Redis 或高版本 JDK 冲突的实现只迁业务行为,不回退当前分支的技术底座;同文件冲突采用手工整合,不做整文件覆盖。
Tech Stack: Java 8, Spring Boot 2.5.x, Maven multi-module, MyBatis/XML Mapper, JUnit, Shell scripts, SQL
仓库约束补充:本仓库
AGENTS.md明确要求不开启 subagent,因此执行本计划时应在当前会话内分批完成,不走子代理评审流。
文件结构映射
根工程与模块接入
- Modify:
pom.xml - Modify:
ruoyi-admin/pom.xml - Create:
ruoyi-loan-pricing/pom.xml
贷款定价后端模块
- Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/controller/LoanPricingWorkflowController.java - Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/controller/LoanRatePricingMockController.java - Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/dto/CorporateLoanPricingCreateDTO.java - Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/dto/PersonalLoanPricingCreateDTO.java - Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/dto/ModelInvokeDTO.java - Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/LoanPricingWorkflow.java - Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/ModelRetailOutputFields.java - Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/ModelCorpOutputFields.java - Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowListVO.java - Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowVO.java - Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/mapper/LoanPricingWorkflowMapper.java - Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/mapper/ModelRetailOutputFieldsMapper.java - Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/mapper/ModelCorpOutputFieldsMapper.java - Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/ILoanPricingWorkflowService.java - Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/LoanPricingModelService.java - Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/ModelService.java - Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/SensitiveFieldCryptoService.java - Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/LoanPricingSensitiveDisplayService.java - Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImpl.java - Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/util/LoanPricingConverter.java - Create:
ruoyi-loan-pricing/src/main/resources/mapper/loanpricing/LoanPricingWorkflowMapper.xml - Create:
ruoyi-loan-pricing/src/main/resources/data/corp_output.json - Create:
ruoyi-loan-pricing/src/main/resources/data/retail_output.json
登录密码传输与系统接口调整
- Modify:
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java - Modify:
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java - Modify:
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java - Modify:
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java - Modify:
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java - Modify:
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java
缓存、配置、部署与 SQL
- Modify:
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java - Modify:
ruoyi-admin/src/main/resources/application.yml - Create:
ruoyi-admin/src/main/resources/application-pro.yml - Create:
ruoyi-admin/src/main/resources/application-uat.yml - Modify:
bin/restart_java_backend.sh - Create:
bin/restart_java_backend_test.sh - Create:
bin/prod/deploy_from_package.sh - Create:
bin/prod/deploy_from_package_test.sh - Create:
bin/prod/deploy_release.sh - Create:
bin/prod/install_env.sh - Create:
bin/prod/restart_java.sh - Create:
bin/prod/restart_java_test.sh - Create:
deploy/nginx.conf - Create:
deploy/2026-03-31-local-nginx-java-install-manual.md - Create:
sql/loan_pricing_schema_20260328.sql - Create:
sql/loan_pricing_required_data_20260328.sql - Create:
sql/loan_pricing_prod_init_20260331.sql - Create:
sql/loan_pricing_menu.sql - Create:
sql/loan_pricing_workflow.sql - Create:
sql/model_retail.sql - Create:
sql/model_corp.sql
后端测试
- Create:
ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/domain/entity/ModelRetailOutputFieldsTest.java - Create:
ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowListVOTest.java - Create:
ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/mapper/LoanPricingWorkflowMapperXmlTest.java - Create:
ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/LoanPricingModelServicePersonalParamsTest.java - Create:
ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/LoanPricingModelServiceTest.java - Create:
ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/LoanPricingSensitiveDisplayServiceTest.java - Create:
ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/SensitiveFieldCryptoServiceTest.java - Create:
ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImplTest.java - Create:
ruoyi-admin/src/test/java/com/ruoyi/web/controller/system/SysLoginControllerPasswordTransferTest.java - Create:
ruoyi-admin/src/test/java/com/ruoyi/web/controller/system/SysRegisterControllerPasswordTransferTest.java - Create:
ruoyi-admin/src/test/java/com/ruoyi/web/controller/system/SysProfileControllerPasswordTransferTest.java - Create:
ruoyi-admin/src/test/java/com/ruoyi/web/controller/system/SysUserControllerPasswordTransferTest.java - Modify:
ruoyi-admin/src/test/java/com/ruoyi/web/controller/monitor/CacheControllerTest.java
后端实施记录
- Create:
doc/2026-04-15-全量迁移892-without-redis后端实施记录.md
Task 1: 接入 ruoyi-loan-pricing 模块到底座工程
Files:
-
Modify:
pom.xml -
Modify:
ruoyi-admin/pom.xml -
Create:
ruoyi-loan-pricing/pom.xml -
Step 1: 写出模块接入失败测试条件
在计划执行时,先确认当前工程不存在贷款定价模块:
test -d ruoyi-loan-pricing || echo "ruoyi-loan-pricing missing"
Expected: 输出 ruoyi-loan-pricing missing
- Step 2: 建立最小模块骨架
创建:
ruoyi-loan-pricing/
ruoyi-loan-pricing/pom.xml
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/
ruoyi-loan-pricing/src/main/resources/
ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/
ruoyi-loan-pricing/pom.xml 最小内容应包含:
<artifactId>ruoyi-loan-pricing</artifactId>
<dependencies>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-framework</artifactId>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-system</artifactId>
</dependency>
</dependencies>
- Step 3: 把模块接入聚合与启动工程
修改 pom.xml:
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-loan-pricing</artifactId>
<version>${ruoyi.version}</version>
</dependency>
以及:
<module>ruoyi-loan-pricing</module>
修改 ruoyi-admin/pom.xml 增加:
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-loan-pricing</artifactId>
</dependency>
- Step 4: 运行 Maven 校验模块被识别
Run:
mvn -pl ruoyi-loan-pricing -am -DskipTests package
Expected: Maven 能识别 ruoyi-loan-pricing 模块;若后续类未补齐可先因编译缺类失败,但不能再是“模块不存在”。
- Step 5: 提交
git add pom.xml ruoyi-admin/pom.xml ruoyi-loan-pricing
git commit -m "接入贷款定价后端模块骨架"
Task 2: 落地贷款定价后端主链与 Mapper
Files:
-
Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/controller/LoanPricingWorkflowController.java -
Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/controller/LoanRatePricingMockController.java -
Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/dto/CorporateLoanPricingCreateDTO.java -
Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/dto/PersonalLoanPricingCreateDTO.java -
Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/dto/ModelInvokeDTO.java -
Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/LoanPricingWorkflow.java -
Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/ModelRetailOutputFields.java -
Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/ModelCorpOutputFields.java -
Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowListVO.java -
Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/vo/LoanPricingWorkflowVO.java -
Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/mapper/LoanPricingWorkflowMapper.java -
Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/mapper/ModelRetailOutputFieldsMapper.java -
Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/mapper/ModelCorpOutputFieldsMapper.java -
Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/ILoanPricingWorkflowService.java -
Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/LoanPricingModelService.java -
Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/ModelService.java -
Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImpl.java -
Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/util/LoanPricingConverter.java -
Create:
ruoyi-loan-pricing/src/main/resources/mapper/loanpricing/LoanPricingWorkflowMapper.xml -
Test:
ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/mapper/LoanPricingWorkflowMapperXmlTest.java -
Test:
ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImplTest.java -
Step 1: 先写列表/详情契约失败测试
在 LoanPricingWorkflowMapperXmlTest 中先写断言,覆盖:
assertThat(xml).contains("calculate_rate");
assertThat(xml).contains("execute_rate");
assertThat(xml).contains("update_time");
assertThat(xml).contains("final_calculate_rate");
以及在 LoanPricingWorkflowServiceImplTest 中先写:
assertEquals("个人", workflow.getCustType());
assertEquals("1", dto.getRunType());
- Step 2: 创建 DTO / Entity / VO / Mapper 骨架
最小要保证这些字段到位:
private String serialNum;
private String custIsn;
private String custName;
private String idNum;
private String custType;
private BigDecimal executeRate;
private BigDecimal calculateRate;
private BigDecimal finalCalculateRate;
private Date updateTime;
- Step 3: 实现列表 SQL 与详情装配
LoanPricingWorkflowMapper.xml 中明确写联表,不做前端拼装:
LEFT JOIN model_retail_output_fields mr ON lpw.model_output_id = mr.id
LEFT JOIN model_corp_output_fields mc ON lpw.model_output_id = mc.id
个人列表测算利率按目标分支行为取:
CASE WHEN lpw.cust_type = '个人' THEN mr.final_calculate_rate
WHEN lpw.cust_type = '企业' THEN mc.calculate_rate
END AS calculateRate
并返回:
lpw.execute_rate AS executeRate,
lpw.update_time AS updateTime
- Step 4: 实现建单与模型调用链路
PersonalLoanPricingCreateDTO 至少补齐:
private String loanPurpose;
private Integer loanTerm;
private String loanLoop;
private String collThirdParty;
ModelInvokeDTO 至少补齐:
private String loanPurpose;
private Integer loanTerm;
private String loanLoop;
LoanPricingConverter 和 LoanPricingModelService 保证个人入参完整透传。
- Step 5: 跑定向测试
Run:
mvn -pl ruoyi-loan-pricing -Dtest=LoanPricingWorkflowMapperXmlTest,LoanPricingWorkflowServiceImplTest,LoanPricingModelServicePersonalParamsTest test
Expected: 以上测试通过。
- Step 6: 提交
git add ruoyi-loan-pricing
git commit -m "迁移贷款定价后端主链"
Task 3: 落地敏感字段加密脱敏与个人展示字段
Files:
-
Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/SensitiveFieldCryptoService.java -
Create:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/LoanPricingSensitiveDisplayService.java -
Modify:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/impl/LoanPricingWorkflowServiceImpl.java -
Modify:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/service/LoanPricingModelService.java -
Modify:
ruoyi-loan-pricing/src/main/java/com/ruoyi/loanpricing/domain/entity/ModelRetailOutputFields.java -
Test:
ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/SensitiveFieldCryptoServiceTest.java -
Test:
ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/service/LoanPricingSensitiveDisplayServiceTest.java -
Test:
ruoyi-loan-pricing/src/test/java/com/ruoyi/loanpricing/domain/entity/ModelRetailOutputFieldsTest.java -
Step 1: 先写加解密和脱敏失败测试
assertThat(crypto.encrypt("张三")).isNotEqualTo("张三");
assertThat(crypto.decrypt(cipher)).isEqualTo("张三");
assertThat(display.maskIdNum("330102199001011234")).contains("****");
再补个人输出字段断言:
assertThat(fieldsClassText).contains("loanRateHistory");
assertThat(fieldsClassText).contains("minRateProduct");
assertThat(fieldsClassText).contains("smoothRange");
assertThat(fieldsClassText).contains("finalCalculateRate");
assertThat(fieldsClassText).contains("referenceRate");
- Step 2: 实现敏感字段服务
SensitiveFieldCryptoService 只做:
String encrypt(String plainText)
String decrypt(String cipherText)
LoanPricingSensitiveDisplayService 只做:
String maskName(String name)
String maskIdNum(String idNum)
void maskWorkflow(LoanPricingWorkflowVO vo)
- Step 3: 接入流程创建、详情、列表、模型调用
在 LoanPricingWorkflowServiceImpl 中:
workflow.setCustName(cryptoService.encrypt(workflow.getCustName()));
workflow.setIdNum(cryptoService.encrypt(workflow.getIdNum()));
在返回前:
sensitiveDisplayService.maskWorkflow(vo);
在 LoanPricingModelService 调模型前:
invokeDTO.setCustName(cryptoService.decrypt(workflow.getCustName()));
invokeDTO.setIdNum(cryptoService.decrypt(workflow.getIdNum()));
- Step 4: 补实体字段与详情组装
ModelRetailOutputFields 增加:
private BigDecimal loanRateHistory;
private BigDecimal minRateProduct;
private BigDecimal smoothRange;
private BigDecimal finalCalculateRate;
private BigDecimal referenceRate;
- Step 5: 跑定向测试
Run:
mvn -pl ruoyi-loan-pricing -Dtest=SensitiveFieldCryptoServiceTest,LoanPricingSensitiveDisplayServiceTest,ModelRetailOutputFieldsTest,LoanPricingModelServiceTest test
Expected: 以上测试通过。
- Step 6: 提交
git add ruoyi-loan-pricing
git commit -m "补齐贷款定价敏感信息与详情字段"
Task 4: 迁移登录密码传输与缓存监控后端行为
Files:
-
Modify:
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java -
Modify:
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java -
Modify:
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java -
Modify:
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java -
Modify:
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java -
Modify:
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java -
Modify:
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java -
Test:
ruoyi-admin/src/test/java/com/ruoyi/web/controller/system/SysLoginControllerPasswordTransferTest.java -
Test:
ruoyi-admin/src/test/java/com/ruoyi/web/controller/system/SysRegisterControllerPasswordTransferTest.java -
Test:
ruoyi-admin/src/test/java/com/ruoyi/web/controller/system/SysProfileControllerPasswordTransferTest.java -
Test:
ruoyi-admin/src/test/java/com/ruoyi/web/controller/system/SysUserControllerPasswordTransferTest.java -
Test:
ruoyi-admin/src/test/java/com/ruoyi/web/controller/monitor/CacheControllerTest.java -
Step 1: 先写密码透传失败测试
每个测试至少断言控制器能接收透传后的密码字段:
assertEquals("plain-password", body.getPassword());
或断言 controller 调 service 前已拿到预期值。
- Step 2: 调整请求体与控制器
LoginBody / RegisterBody 保证可承接前端密码传输字段,控制器保持接口路径不变,只修正入参读取与传递行为。
- Step 3: 校准缓存监控行为
按当前分支去 Redis 底座整合目标分支缓存监控效果,不回退到 Redis 实现。CacheController 只输出内存缓存统计所需字段。
- Step 4: 跑 admin 定向测试
Run:
mvn -pl ruoyi-admin -am -Dtest=SysLoginControllerPasswordTransferTest,SysRegisterControllerPasswordTransferTest,SysProfileControllerPasswordTransferTest,SysUserControllerPasswordTransferTest,CacheControllerTest test
Expected: 以上测试通过。
- Step 5: 提交
git add ruoyi-admin ruoyi-common
git commit -m "迁移登录密码传输与缓存监控后端逻辑"
Task 5: 迁移环境配置、脚本和 SQL 资产
Files:
-
Modify:
ruoyi-admin/src/main/resources/application.yml -
Create:
ruoyi-admin/src/main/resources/application-pro.yml -
Create:
ruoyi-admin/src/main/resources/application-uat.yml -
Modify:
bin/restart_java_backend.sh -
Create:
bin/restart_java_backend_test.sh -
Create:
bin/prod/deploy_from_package.sh -
Create:
bin/prod/deploy_from_package_test.sh -
Create:
bin/prod/deploy_release.sh -
Create:
bin/prod/install_env.sh -
Create:
bin/prod/restart_java.sh -
Create:
bin/prod/restart_java_test.sh -
Create:
deploy/nginx.conf -
Create:
deploy/2026-03-31-local-nginx-java-install-manual.md -
Create:
sql/loan_pricing_schema_20260328.sql -
Create:
sql/loan_pricing_required_data_20260328.sql -
Create:
sql/loan_pricing_prod_init_20260331.sql -
Create:
sql/loan_pricing_menu.sql -
Create:
sql/loan_pricing_workflow.sql -
Create:
sql/model_retail.sql -
Create:
sql/model_corp.sql -
Create:
test_api/test_personal_create.http -
Create:
test_api/test_personal_create.sh -
Create:
test_api/test_corporate_create.http -
Create:
test_api/test_corporate_create.sh -
Step 1: 先校验当前文件缺失
Run:
ls ruoyi-admin/src/main/resources/application-pro.yml bin/prod sql/loan_pricing_schema_20260328.sql test_api 2>/dev/null || true
Expected: 当前分支大部分路径不存在。
- Step 2: 迁入配置与脚本骨架
先把文件原样引入,再逐个检查:
- 端口
- profile 名称
- jar 名称
- 目录路径
ps -ef/ 端口识别逻辑
禁止直接照搬掉当前分支去 Redis 配置。
- Step 3: 迁入 SQL 与 API 示例
SQL 必须覆盖:
- 贷款定价表结构
- 初始化基础数据
- 菜单
- 模型输出表字段补齐
测试脚本只作为联调辅助,不允许替代单元测试。
- Step 4: 跑脚本与 SQL 静态自检
Run:
bash -n bin/restart_java_backend.sh
bash -n bin/prod/deploy_from_package.sh
bash -n bin/prod/deploy_release.sh
Expected: Shell 语法检查通过。
- Step 5: 提交
git add ruoyi-admin/src/main/resources bin deploy sql test_api
git commit -m "迁移部署脚本与贷款定价SQL资产"
Task 6: 后端总验收与实施记录
Files:
-
Modify:
doc/2026-04-15-全量迁移892-without-redis后端实施计划.md -
Create:
doc/2026-04-15-全量迁移892-without-redis后端实施记录.md -
Step 1: 运行后端回归测试
Run:
mvn test
Expected: 全仓后端测试通过;若存在外部依赖导致个别测试不可跑,必须记录具体模块与原因。
- Step 2: 运行后端启动验证
Run:
mvn -pl ruoyi-admin -am spring-boot:run
Expected: 服务启动成功,贷款定价相关 Bean 可加载;验证后主动停止进程。
- Step 3: 补实施记录
doc/2026-04-15-全量迁移892-without-redis后端实施记录.md 至少记录:
-
实际迁入模块
-
与目标分支不做原样复制的整合点
-
测试命令与结果
-
启动验证结果
-
Step 4: 提交
git add doc/2026-04-15-全量迁移892-without-redis后端实施计划.md doc/2026-04-15-全量迁移892-without-redis后端实施记录.md
git commit -m "补充全量迁移后端实施记录"