154 lines
3.2 KiB
Markdown
154 lines
3.2 KiB
Markdown
|
|
# 设计文档: 执行利率设定接口
|
|||
|
|
|
|||
|
|
## 数据库设计
|
|||
|
|
|
|||
|
|
### 表结构变更
|
|||
|
|
|
|||
|
|
**表名**: `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`
|
|||
|
|
- 自动记录操作人和操作时间
|