588 lines
22 KiB
Markdown
588 lines
22 KiB
Markdown
# 全量迁移 `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 "补充全量迁移后端实施记录"
|
||
```
|