Files
loan-pricing/doc/2026-04-15-全量迁移892-without-redis后端实施计划.md

588 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 全量迁移 `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: 写出模块接入失败测试条件**
在计划执行时,先确认当前工程不存在贷款定价模块:
```bash
test -d ruoyi-loan-pricing || echo "ruoyi-loan-pricing missing"
```
Expected: 输出 `ruoyi-loan-pricing missing`
- [ ] **Step 2: 建立最小模块骨架**
创建:
```text
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` 最小内容应包含:
```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`
```xml
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-loan-pricing</artifactId>
<version>${ruoyi.version}</version>
</dependency>
```
以及:
```xml
<module>ruoyi-loan-pricing</module>
```
修改 `ruoyi-admin/pom.xml` 增加:
```xml
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-loan-pricing</artifactId>
</dependency>
```
- [ ] **Step 4: 运行 Maven 校验模块被识别**
Run:
```bash
mvn -pl ruoyi-loan-pricing -am -DskipTests package
```
Expected: Maven 能识别 `ruoyi-loan-pricing` 模块;若后续类未补齐可先因编译缺类失败,但不能再是“模块不存在”。
- [ ] **Step 5: 提交**
```bash
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` 中先写断言,覆盖:
```java
assertThat(xml).contains("calculate_rate");
assertThat(xml).contains("execute_rate");
assertThat(xml).contains("update_time");
assertThat(xml).contains("final_calculate_rate");
```
以及在 `LoanPricingWorkflowServiceImplTest` 中先写:
```java
assertEquals("个人", workflow.getCustType());
assertEquals("1", dto.getRunType());
```
- [ ] **Step 2: 创建 DTO / Entity / VO / Mapper 骨架**
最小要保证这些字段到位:
```java
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` 中明确写联表,不做前端拼装:
```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
```
个人列表测算利率按目标分支行为取:
```sql
CASE WHEN lpw.cust_type = '个人' THEN mr.final_calculate_rate
WHEN lpw.cust_type = '企业' THEN mc.calculate_rate
END AS calculateRate
```
并返回:
```sql
lpw.execute_rate AS executeRate,
lpw.update_time AS updateTime
```
- [ ] **Step 4: 实现建单与模型调用链路**
`PersonalLoanPricingCreateDTO` 至少补齐:
```java
private String loanPurpose;
private Integer loanTerm;
private String loanLoop;
private String collThirdParty;
```
`ModelInvokeDTO` 至少补齐:
```java
private String loanPurpose;
private Integer loanTerm;
private String loanLoop;
```
`LoanPricingConverter``LoanPricingModelService` 保证个人入参完整透传。
- [ ] **Step 5: 跑定向测试**
Run:
```bash
mvn -pl ruoyi-loan-pricing -Dtest=LoanPricingWorkflowMapperXmlTest,LoanPricingWorkflowServiceImplTest,LoanPricingModelServicePersonalParamsTest test
```
Expected: 以上测试通过。
- [ ] **Step 6: 提交**
```bash
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: 先写加解密和脱敏失败测试**
```java
assertThat(crypto.encrypt("张三")).isNotEqualTo("张三");
assertThat(crypto.decrypt(cipher)).isEqualTo("张三");
assertThat(display.maskIdNum("330102199001011234")).contains("****");
```
再补个人输出字段断言:
```java
assertThat(fieldsClassText).contains("loanRateHistory");
assertThat(fieldsClassText).contains("minRateProduct");
assertThat(fieldsClassText).contains("smoothRange");
assertThat(fieldsClassText).contains("finalCalculateRate");
assertThat(fieldsClassText).contains("referenceRate");
```
- [ ] **Step 2: 实现敏感字段服务**
`SensitiveFieldCryptoService` 只做:
```java
String encrypt(String plainText)
String decrypt(String cipherText)
```
`LoanPricingSensitiveDisplayService` 只做:
```java
String maskName(String name)
String maskIdNum(String idNum)
void maskWorkflow(LoanPricingWorkflowVO vo)
```
- [ ] **Step 3: 接入流程创建、详情、列表、模型调用**
`LoanPricingWorkflowServiceImpl` 中:
```java
workflow.setCustName(cryptoService.encrypt(workflow.getCustName()));
workflow.setIdNum(cryptoService.encrypt(workflow.getIdNum()));
```
在返回前:
```java
sensitiveDisplayService.maskWorkflow(vo);
```
`LoanPricingModelService` 调模型前:
```java
invokeDTO.setCustName(cryptoService.decrypt(workflow.getCustName()));
invokeDTO.setIdNum(cryptoService.decrypt(workflow.getIdNum()));
```
- [ ] **Step 4: 补实体字段与详情组装**
`ModelRetailOutputFields` 增加:
```java
private BigDecimal loanRateHistory;
private BigDecimal minRateProduct;
private BigDecimal smoothRange;
private BigDecimal finalCalculateRate;
private BigDecimal referenceRate;
```
- [ ] **Step 5: 跑定向测试**
Run:
```bash
mvn -pl ruoyi-loan-pricing -Dtest=SensitiveFieldCryptoServiceTest,LoanPricingSensitiveDisplayServiceTest,ModelRetailOutputFieldsTest,LoanPricingModelServiceTest test
```
Expected: 以上测试通过。
- [ ] **Step 6: 提交**
```bash
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: 先写密码透传失败测试**
每个测试至少断言控制器能接收透传后的密码字段:
```java
assertEquals("plain-password", body.getPassword());
```
或断言 controller 调 service 前已拿到预期值。
- [ ] **Step 2: 调整请求体与控制器**
`LoginBody` / `RegisterBody` 保证可承接前端密码传输字段,控制器保持接口路径不变,只修正入参读取与传递行为。
- [ ] **Step 3: 校准缓存监控行为**
按当前分支去 Redis 底座整合目标分支缓存监控效果,不回退到 Redis 实现。`CacheController` 只输出内存缓存统计所需字段。
- [ ] **Step 4: 跑 admin 定向测试**
Run:
```bash
mvn -pl ruoyi-admin -am -Dtest=SysLoginControllerPasswordTransferTest,SysRegisterControllerPasswordTransferTest,SysProfileControllerPasswordTransferTest,SysUserControllerPasswordTransferTest,CacheControllerTest test
```
Expected: 以上测试通过。
- [ ] **Step 5: 提交**
```bash
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:
```bash
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
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: 提交**
```bash
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:
```bash
mvn test
```
Expected: 全仓后端测试通过;若存在外部依赖导致个别测试不可跑,必须记录具体模块与原因。
- [ ] **Step 2: 运行后端启动验证**
Run:
```bash
mvn -pl ruoyi-admin -am spring-boot:run
```
Expected: 服务启动成功,贷款定价相关 Bean 可加载;验证后主动停止进程。
- [ ] **Step 3: 补实施记录**
`doc/2026-04-15-全量迁移892-without-redis后端实施记录.md` 至少记录:
- 实际迁入模块
- 与目标分支不做原样复制的整合点
- 测试命令与结果
- 启动验证结果
- [ ] **Step 4: 提交**
```bash
git add doc/2026-04-15-全量迁移892-without-redis后端实施计划.md doc/2026-04-15-全量迁移892-without-redis后端实施记录.md
git commit -m "补充全量迁移后端实施记录"
```