349 lines
12 KiB
Markdown
349 lines
12 KiB
Markdown
|
|
# 模型参数配置功能 - 设计文档
|
||
|
|
|
||
|
|
## 1. 功能概述
|
||
|
|
|
||
|
|
### 1.1 功能定位
|
||
|
|
|
||
|
|
模型参数配置管理功能,用于配置风险监测模型的阈值参数,支持多模型参数管理,为未来的项目级自定义参数预留扩展能力。
|
||
|
|
|
||
|
|
### 1.2 核心能力
|
||
|
|
|
||
|
|
- ✅ 支持多模型参数配置(大额交易、可疑兼职、可疑外汇等)
|
||
|
|
- ✅ 参数持久化存储到数据库
|
||
|
|
- ✅ 按模型查询和修改参数
|
||
|
|
- ✅ 只允许修改阈值,其他信息只读
|
||
|
|
- ✅ 为未来项目级配置预留扩展能力
|
||
|
|
|
||
|
|
### 1.3 用户场景
|
||
|
|
|
||
|
|
1. **系统管理员** 选择需要配置的模型
|
||
|
|
2. **系统管理员** 修改模型的阈值参数
|
||
|
|
3. **系统管理员** 保存配置,参数立即生效
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 2. 需求分析
|
||
|
|
|
||
|
|
### 2.1 业务需求
|
||
|
|
|
||
|
|
根据需求截图,系统需要支持多个风险监测模型的参数配置:
|
||
|
|
|
||
|
|
**模型清单:**
|
||
|
|
|
||
|
|
- 大额交易模型
|
||
|
|
- 可疑兼职模型
|
||
|
|
- 可疑外汇交易模型
|
||
|
|
- (未来可能新增其他模型)
|
||
|
|
|
||
|
|
**参数特征:**
|
||
|
|
|
||
|
|
- 每个模型有固定数量的参数项(3-6个不等)
|
||
|
|
- 每个参数包含:监测项名称、描述、阈值设置、单位
|
||
|
|
- 只有阈值可以修改,其他信息只读
|
||
|
|
|
||
|
|
### 2.2 功能需求
|
||
|
|
|
||
|
|
| 需求项 | 说明 |
|
||
|
|
|-------|------------------------|
|
||
|
|
| 数据存储 | 参数配置需要持久化存储到数据库 |
|
||
|
|
| 参数项管理 | 参数项固定,在开发时确定,后期不频繁增减 |
|
||
|
|
| 新增模型 | 需要开发介入,通过代码和数据库脚本实现 |
|
||
|
|
| 权限控制 | 统一权限控制,有菜单权限即可修改所有模型参数 |
|
||
|
|
| 修改历史 | 不需要记录修改历史,只保存当前状态 |
|
||
|
|
| 恢复默认 | 不需要开发恢复默认功能 |
|
||
|
|
| 其他功能 | 只需要基本的查询、修改、保存功能 |
|
||
|
|
|
||
|
|
### 2.3 非功能需求
|
||
|
|
|
||
|
|
| 需求项 | 说明 |
|
||
|
|
|------|-----------------------------|
|
||
|
|
| 性能 | 单表查询,响应时间 < 500ms |
|
||
|
|
| 安全性 | 后端只能修改阈值字段,其他字段不可修改 |
|
||
|
|
| 可扩展性 | 预留 project_id 字段,支持未来的项目级配置 |
|
||
|
|
| 易用性 | 界面简洁,操作直观 |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 3. 架构设计
|
||
|
|
|
||
|
|
### 3.1 模块架构
|
||
|
|
|
||
|
|
**新建模块:** `ccdi-project`
|
||
|
|
|
||
|
|
**模块定位:** 项目相关功能模块,包含参数配置等项目管理功能
|
||
|
|
|
||
|
|
**依赖关系:**
|
||
|
|
|
||
|
|
```
|
||
|
|
ruoyi-admin (启动模块)
|
||
|
|
├── ruoyi-framework
|
||
|
|
├── ruoyi-system
|
||
|
|
├── ruoyi-common
|
||
|
|
├── ccdi-project (新建模块) ⭐
|
||
|
|
│ └── ruoyi-common
|
||
|
|
└── ruoyi-info-collection
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3.2 分层架构
|
||
|
|
|
||
|
|
```
|
||
|
|
前端 (Vue.js)
|
||
|
|
↓ HTTP请求
|
||
|
|
Controller (CcdiModelParamController)
|
||
|
|
↓ 调用
|
||
|
|
Service (ICcdiModelParamService)
|
||
|
|
↓ 调用
|
||
|
|
Mapper (CcdiModelParamMapper)
|
||
|
|
↓ SQL
|
||
|
|
Database (ccdi_model_param)
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 4. 数据库设计
|
||
|
|
|
||
|
|
### 4.1 表结构
|
||
|
|
|
||
|
|
**表名:** `ccdi_model_param`
|
||
|
|
|
||
|
|
```sql
|
||
|
|
CREATE TABLE `ccdi_model_param` (
|
||
|
|
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||
|
|
`project_id` bigint DEFAULT 0 COMMENT '项目ID(0表示默认参数,其他值为具体项目ID)',
|
||
|
|
`model_code` varchar(100) NOT NULL COMMENT '模型编码',
|
||
|
|
`model_name` varchar(100) NOT NULL COMMENT '模型名称',
|
||
|
|
`param_code` varchar(100) NOT NULL COMMENT '参数编码',
|
||
|
|
`param_name` varchar(100) NOT NULL COMMENT '监测项名称',
|
||
|
|
`param_desc` varchar(500) DEFAULT NULL COMMENT '参数描述',
|
||
|
|
`param_value` varchar(200) NOT NULL COMMENT '参数值',
|
||
|
|
`param_unit` varchar(50) DEFAULT NULL COMMENT '参数单位',
|
||
|
|
`sort_order` int DEFAULT 0 COMMENT '排序号(参数展示顺序)',
|
||
|
|
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
|
||
|
|
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
|
|
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
|
||
|
|
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
|
|
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
UNIQUE KEY `uk_project_model_param` (`project_id`, `model_code`, `param_code`) COMMENT '同一项目下模型参数唯一',
|
||
|
|
KEY `idx_project_id` (`project_id`) COMMENT '项目ID索引',
|
||
|
|
KEY `idx_model_code` (`model_code`) COMMENT '模型编码索引'
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='模型参数配置表';
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4.2 字段说明
|
||
|
|
|
||
|
|
| 字段名 | 类型 | 说明 | 是否可修改 |
|
||
|
|
|-----------------|--------------|-------------|-------------|
|
||
|
|
| id | bigint | 主键ID | ❌ |
|
||
|
|
| project_id | bigint | 项目ID(0=默认) | ❌ |
|
||
|
|
| model_code | varchar(100) | 模型编码 | ❌ |
|
||
|
|
| model_name | varchar(100) | 模型名称 | ❌ |
|
||
|
|
| param_code | varchar(100) | 参数编码 | ❌ |
|
||
|
|
| param_name | varchar(100) | 监测项名称 | ❌ |
|
||
|
|
| param_desc | varchar(500) | 参数描述 | ❌ |
|
||
|
|
| **param_value** | varchar(200) | **参数值(阈值)** | ✅ **唯一可修改** |
|
||
|
|
| param_unit | varchar(50) | 参数单位 | ❌ |
|
||
|
|
| sort_order | int | 排序号 | ❌ |
|
||
|
|
| create_by | varchar(64) | 创建者 | ❌ |
|
||
|
|
| create_time | datetime | 创建时间 | ❌ |
|
||
|
|
| update_by | varchar(64) | 更新者 | 自动 |
|
||
|
|
| update_time | datetime | 更新时间 | 自动 |
|
||
|
|
| remark | varchar(500) | 备注 | ❌ |
|
||
|
|
|
||
|
|
### 4.3 索引设计
|
||
|
|
|
||
|
|
| 索引名 | 索引类型 | 字段 | 用途 |
|
||
|
|
|------------------------|------|------------------------------------|---------|
|
||
|
|
| PRIMARY | 主键 | id | 主键索引 |
|
||
|
|
| uk_project_model_param | 唯一索引 | project_id, model_code, param_code | 保证参数唯一性 |
|
||
|
|
| idx_project_id | 普通索引 | project_id | 加速项目查询 |
|
||
|
|
| idx_model_code | 普通索引 | model_code | 加速模型查询 |
|
||
|
|
|
||
|
|
### 4.4 初始化数据
|
||
|
|
|
||
|
|
参见开发计划文档中的数据初始化脚本。
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 5. 后端设计
|
||
|
|
|
||
|
|
### 5.1 模块结构
|
||
|
|
|
||
|
|
```
|
||
|
|
ccdi-project/
|
||
|
|
├── pom.xml
|
||
|
|
└── src/main/
|
||
|
|
├── java/com/ruoyi/ccdi/project/
|
||
|
|
│ ├── controller/
|
||
|
|
│ │ └── CcdiModelParamController.java
|
||
|
|
│ ├── service/
|
||
|
|
│ │ ├── ICcdiModelParamService.java
|
||
|
|
│ │ └── impl/
|
||
|
|
│ │ └── CcdiModelParamServiceImpl.java
|
||
|
|
│ ├── mapper/
|
||
|
|
│ │ └── CcdiModelParamMapper.java
|
||
|
|
│ └── domain/
|
||
|
|
│ ├── CcdiModelParam.java
|
||
|
|
│ ├── dto/
|
||
|
|
│ │ ├── ModelParamQueryDTO.java
|
||
|
|
│ │ └── ModelParamSaveDTO.java
|
||
|
|
│ └── vo/
|
||
|
|
│ ├── ModelParamVO.java
|
||
|
|
│ └── ModelListVO.java
|
||
|
|
└── resources/
|
||
|
|
└── mapper/ccdi/project/
|
||
|
|
└── CcdiModelParamMapper.xml
|
||
|
|
```
|
||
|
|
|
||
|
|
### 5.2 核心接口
|
||
|
|
|
||
|
|
| 接口路径 | 方法 | 说明 |
|
||
|
|
|----------------------------|------|---------------|
|
||
|
|
| /ccdi/modelParam/modelList | GET | 查询模型列表 |
|
||
|
|
| /ccdi/modelParam/list | GET | 查询指定模型的参数列表 |
|
||
|
|
| /ccdi/modelParam/save | POST | 保存参数配置(只更新阈值) |
|
||
|
|
|
||
|
|
### 5.3 安全保障
|
||
|
|
|
||
|
|
**三层防护确保只能修改阈值:**
|
||
|
|
|
||
|
|
1. **Mapper XML 层**
|
||
|
|
```xml
|
||
|
|
<update id="batchUpdateParamValues">
|
||
|
|
update ccdi_model_param
|
||
|
|
set param_value = #{item.paramValue}, <!-- 只更新这个字段 -->
|
||
|
|
update_by = #{item.updateBy},
|
||
|
|
update_time = sysdate()
|
||
|
|
where id = #{item.id}
|
||
|
|
</update>
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **Service 层**
|
||
|
|
```java
|
||
|
|
// 只设置需要更新的字段
|
||
|
|
updateParam.setParamValue(item.getParamValue());
|
||
|
|
updateParam.setUpdateBy(username);
|
||
|
|
updateParam.setUpdateTime(now);
|
||
|
|
// 其他字段不设置
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **前端层**
|
||
|
|
```vue
|
||
|
|
<!-- 表格只有"阈值设置"列使用 el-input -->
|
||
|
|
<el-table-column label="阈值设置" width="200">
|
||
|
|
<template #default="{ row }">
|
||
|
|
<el-input v-model="row.paramValue" />
|
||
|
|
</template>
|
||
|
|
</el-table-column>
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 6. 前端设计
|
||
|
|
|
||
|
|
### 6.1 页面布局
|
||
|
|
|
||
|
|
```
|
||
|
|
┌─────────────────────────────────────┐
|
||
|
|
│ 模型参数管理 ← 返回项目管理 │
|
||
|
|
├─────────────────────────────────────┤
|
||
|
|
│ 模型名称: [下拉选择] [查询] │
|
||
|
|
├─────────────────────────────────────┤
|
||
|
|
│ 阈值参数配置 │
|
||
|
|
│ ┌─────┬──────┬────────┬────┐ │
|
||
|
|
│ │监测项│ 描述 │阈值设置 │单位│ │
|
||
|
|
│ ├─────┼──────┼────────┼────┤ │
|
||
|
|
│ │单笔 │单笔超│[输入框] │ 元 │ │
|
||
|
|
│ │交易额│该金额│ │ │ │
|
||
|
|
│ └─────┴──────┴────────┴────┘ │
|
||
|
|
├─────────────────────────────────────┤
|
||
|
|
│ [保存配置] │
|
||
|
|
└─────────────────────────────────────┘
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6.2 交互流程
|
||
|
|
|
||
|
|
1. 用户选择模型 → 点击"查询"
|
||
|
|
2. 系统加载该模型的参数列表
|
||
|
|
3. 用户修改阈值(只有这一列可编辑)
|
||
|
|
4. 用户点击"保存配置"
|
||
|
|
5. 系统提交修改的参数值
|
||
|
|
6. 保存成功后显示提示
|
||
|
|
|
||
|
|
### 6.3 用户体验优化
|
||
|
|
|
||
|
|
- 修改跟踪:只提交变更的参数
|
||
|
|
- 防重复提交:保存中禁用按钮
|
||
|
|
- 成功提示:保存成功后清空修改标记
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 7. 实施计划
|
||
|
|
|
||
|
|
本功能拆分为以下3个子任务,每个子任务有独立的开发计划:
|
||
|
|
|
||
|
|
1. **数据库设计与后端实体类创建** - 参见 `01-数据库设计与后端实体类创建.md`
|
||
|
|
2. **后端业务逻辑开发** - 参见 `02-后端业务逻辑开发.md`
|
||
|
|
3. **后端功能测试** - 参见 `03-后端功能测试.md`
|
||
|
|
4. **前端代码开发** - 参见 `04-前端代码开发.md`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 8. 风险与应对
|
||
|
|
|
||
|
|
| 风险 | 影响 | 应对措施 |
|
||
|
|
|-----------|----|---------------------|
|
||
|
|
| 参数值格式不统一 | 中 | 前端验证输入格式,后端也做校验 |
|
||
|
|
| 并发修改冲突 | 低 | 使用乐观锁或最后修改覆盖策略 |
|
||
|
|
| 新增模型需要改代码 | 低 | 符合设计预期,通过数据库脚本和代码发布 |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 9. 未来扩展
|
||
|
|
|
||
|
|
### 9.1 项目级参数配置
|
||
|
|
|
||
|
|
通过 `project_id` 字段预留了扩展能力:
|
||
|
|
|
||
|
|
- `project_id = 0`: 系统默认参数
|
||
|
|
- `project_id > 0`: 具体项目的自定义参数
|
||
|
|
|
||
|
|
**扩展步骤:**
|
||
|
|
|
||
|
|
1. 添加项目管理界面
|
||
|
|
2. 允许用户为具体项目复制默认参数
|
||
|
|
3. 修改参数时指定 `project_id`
|
||
|
|
|
||
|
|
### 9.2 参数修改历史
|
||
|
|
|
||
|
|
如需添加审计功能:
|
||
|
|
|
||
|
|
1. 创建 `ccdi_model_param_history` 表
|
||
|
|
2. 在更新参数前先插入历史记录
|
||
|
|
3. 提供历史查询界面
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 10. 附录
|
||
|
|
|
||
|
|
### 10.1 参考文档
|
||
|
|
|
||
|
|
- 若依框架官方文档
|
||
|
|
- 项目 CLAUDE.md 规范文档
|
||
|
|
- 需求截图(见 doc/参数配置功能/ 目录)
|
||
|
|
|
||
|
|
### 10.2 术语说明
|
||
|
|
|
||
|
|
| 术语 | 说明 |
|
||
|
|
|------------|-------------------------|
|
||
|
|
| 模型 | 风险监测模型,如大额交易模型、可疑兼职模型等 |
|
||
|
|
| 参数 | 模型的阈值配置项,如单笔交易额、累计交易额等 |
|
||
|
|
| 阈值 | 参数的具体数值,是唯一可修改的字段 |
|
||
|
|
| project_id | 项目ID,用于区分系统默认参数和项目自定义参数 |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**文档版本:** v1.0
|
||
|
|
**创建日期:** 2026-02-26
|
||
|
|
**创建人:** Claude Code
|