Files
loan-pricing/openspec/changes/add-execute-rate/design.md

154 lines
3.2 KiB
Markdown
Raw Normal View History

2026-01-22 15:04:40 +08:00
# 设计文档: 执行利率设定接口
## 数据库设计
### 表结构变更
**表名**: `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`
- 自动记录操作人和操作时间