12 KiB
12 KiB
模型参数配置功能 - 设计文档
1. 功能概述
1.1 功能定位
模型参数配置管理功能,用于配置风险监测模型的阈值参数,支持多模型参数管理,为未来的项目级自定义参数预留扩展能力。
1.2 核心能力
- ✅ 支持多模型参数配置(大额交易、可疑兼职、可疑外汇等)
- ✅ 参数持久化存储到数据库
- ✅ 按模型查询和修改参数
- ✅ 只允许修改阈值,其他信息只读
- ✅ 为未来项目级配置预留扩展能力
1.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
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 安全保障
三层防护确保只能修改阈值:
-
Mapper 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> -
Service 层
// 只设置需要更新的字段 updateParam.setParamValue(item.getParamValue()); updateParam.setUpdateBy(username); updateParam.setUpdateTime(now); // 其他字段不设置 -
前端层
<!-- 表格只有"阈值设置"列使用 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 交互流程
- 用户选择模型 → 点击"查询"
- 系统加载该模型的参数列表
- 用户修改阈值(只有这一列可编辑)
- 用户点击"保存配置"
- 系统提交修改的参数值
- 保存成功后显示提示
6.3 用户体验优化
- 修改跟踪:只提交变更的参数
- 防重复提交:保存中禁用按钮
- 成功提示:保存成功后清空修改标记
7. 实施计划
本功能拆分为以下3个子任务,每个子任务有独立的开发计划:
- 数据库设计与后端实体类创建 - 参见
01-数据库设计与后端实体类创建.md - 后端业务逻辑开发 - 参见
02-后端业务逻辑开发.md - 后端功能测试 - 参见
03-后端功能测试.md - 前端代码开发 - 参见
04-前端代码开发.md
8. 风险与应对
| 风险 | 影响 | 应对措施 |
|---|---|---|
| 参数值格式不统一 | 中 | 前端验证输入格式,后端也做校验 |
| 并发修改冲突 | 低 | 使用乐观锁或最后修改覆盖策略 |
| 新增模型需要改代码 | 低 | 符合设计预期,通过数据库脚本和代码发布 |
9. 未来扩展
9.1 项目级参数配置
通过 project_id 字段预留了扩展能力:
project_id = 0: 系统默认参数project_id > 0: 具体项目的自定义参数
扩展步骤:
- 添加项目管理界面
- 允许用户为具体项目复制默认参数
- 修改参数时指定
project_id
9.2 参数修改历史
如需添加审计功能:
- 创建
ccdi_model_param_history表 - 在更新参数前先插入历史记录
- 提供历史查询界面
10. 附录
10.1 参考文档
- 若依框架官方文档
- 项目 CLAUDE.md 规范文档
- 需求截图(见 doc/参数配置功能/ 目录)
10.2 术语说明
| 术语 | 说明 |
|---|---|
| 模型 | 风险监测模型,如大额交易模型、可疑兼职模型等 |
| 参数 | 模型的阈值配置项,如单笔交易额、累计交易额等 |
| 阈值 | 参数的具体数值,是唯一可修改的字段 |
| project_id | 项目ID,用于区分系统默认参数和项目自定义参数 |
文档版本: v1.0 创建日期: 2026-02-26 创建人: Claude Code