Files
loan-pricing/openspec/changes/add-execute-rate/design.md
2026-01-22 15:04:40 +08:00

154 lines
3.2 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.
# 设计文档: 执行利率设定接口
## 数据库设计
### 表结构变更
**表名**: `loan_pricing_workflow`
**新增字段**:
| 字段名 | 类型 | 可空 | 默认值 | 说明 |
|--------------|-------------|----|------|---------|
| execute_rate | varchar(20) | 是 | NULL | 执行利率(%) |
**DDL**:
```sql
ALTER TABLE `loan_pricing_workflow`
ADD COLUMN `execute_rate` varchar(20) DEFAULT NULL COMMENT '执行利率(%)' AFTER `loan_rate`;
```
## 接口设计
### 设定执行利率接口
**请求方式**: `PUT /loanPricing/workflow/{serialNum}/executeRate`
**权限要求**: 无特殊权限要求(与查询接口一致)
**路径参数**:
| 参数名 | 类型 | 必填 | 说明 |
|-----------|--------|----|--------|
| serialNum | String | 是 | 业务方流水号 |
**请求体**:
```json
{
"executeRate": "4.20"
}
```
**参数说明**:
| 参数名 | 类型 | 必填 | 说明 |
|-------------|--------|----|----------------------|
| executeRate | String | 是 | 执行利率,字符串格式(如 "4.20" |
**响应示例**:
成功 (200):
```json
{
"code": 200,
"msg": "设定成功"
}
```
失败 (404):
```json
{
"code": 404,
"msg": "记录不存在"
}
```
失败 (500):
```json
{
"code": 500,
"msg": "设定失败"
}
```
## 代码设计
### Entity 层
**LoanPricingWorkflow.java**
```java
/** 执行利率(%) */
private String executeRate;
```
### Service 层
**ILoanPricingWorkflowService.java**
```java
/**
* 设定执行利率
* @param serialNum 业务方流水号
* @param executeRate 执行利率
* @return 是否成功
*/
boolean setExecuteRate(String serialNum, String executeRate);
```
**LoanPricingWorkflowServiceImpl.java**
- 实现上述方法
- 根据 `serialNum` 更新记录的 `execute_rate` 字段
- MyBatis Plus 会自动填充 `update_by``update_time`
### Controller 层
**LoanPricingWorkflowController.java**
```java
/**
* 设定执行利率
*/
@Operation(summary = "设定执行利率")
@Log(title = "利率定价流程", businessType = BusinessType.UPDATE)
@PutMapping("/{serialNum}/executeRate")
public AjaxResult setExecuteRate(
@Parameter(description = "业务方流水号")
@PathVariable("serialNum") String serialNum,
@RequestBody Map<String, String> request)
{
String executeRate = request.get("executeRate");
boolean success = loanPricingWorkflowService.setExecuteRate(serialNum, executeRate);
return success ? success() : error("设定失败");
}
```
### VO 层变更
**LoanPricingWorkflowVO.java**
- 添加 `executeRate` 字段到 VO确保详情接口返回执行利率
## 数据校验
1. **记录存在性**: 根据 `serialNum` 查询记录,不存在则返回 404
2. **更新结果检查**: 检查更新操作影响行数0 行表示记录不存在
3. **格式校验**: 执行利率为字符串格式,前端传递格式化后的值(如 "4.20"
## 事务处理
- 使用 MyBatis Plus 的 `updateById` 方法,自动处理事务
- 更新失败时抛出异常,由全局异常处理器处理
## 日志记录
- 使用 `@Log` 注解记录操作日志
- 日志类型: `BusinessType.UPDATE`
- 自动记录操作人和操作时间