# 模型参数配置功能 - 后端实体类创建 ## 任务概述 **任务编号:** 01 **任务名称:** 数据库设计与后端实体类创建 **前置任务:** 无 **预计工时:** 1.5小时 ## 任务目标 创建模型参数配置功能的数据库表和初始化数据,以及所有后端实体类、DTO、VO和Maven模块配置。 --- ## 开发步骤 ### 1. 创建 Maven 模块 #### 1.1 创建模块目录 在项目根目录下创建 `ccdi-project` 模块: ``` ccdi-project/ ├── pom.xml └── src/main/ ├── java/ └── resources/ ``` #### 1.2 编写 pom.xml **文件路径:** `ccdi-project/pom.xml` ```xml ccdi com.ruoyi 1.0.0 4.0.0 ccdi-project com.ruoyi ruoyi-common ``` #### 1.3 修改根 pom.xml **文件路径:** `pom.xml` (项目根目录) 在 `` 标签中添加: ```xml ... ccdi-project ``` #### 1.4 修改 ruoyi-admin/pom.xml **文件路径:** `ruoyi-admin/pom.xml` 在 `` 标签中添加: ```xml com.ruoyi ccdi-project ``` --- ### 2. 创建数据库脚本 #### 2.1 编写建表脚本 **文件路径:** `sql/ccdi_model_param.sql` ```sql -- ---------------------------- -- 1. 创建模型参数配置表 -- ---------------------------- DROP TABLE IF EXISTS `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='模型参数配置表'; -- ---------------------------- -- 2. 初始化大额交易模型参数 -- ---------------------------- INSERT INTO ccdi_model_param (project_id, model_code, model_name, param_code, param_name, param_desc, param_value, param_unit, sort_order, create_by, remark) VALUES (0, 'LARGE_TRANSACTION', '大额交易模型', 'SINGLE_TRANSACTION_AMOUNT', '单笔交易额', '单笔超过该金额视为大额交易', '50000', '元', 1, 'admin', '系统默认参数'), (0, 'LARGE_TRANSACTION', '大额交易模型', 'CUMULATIVE_TRANSACTION_AMOUNT', '累计交易额', '年累计交易额超过该金额', '5000000', '元', 2, 'admin', '系统默认参数'), (0, 'LARGE_TRANSACTION', '大额交易模型', 'LARGE_CASH_DEPOSIT', '大额存现', '单笔存现金额超过', '200000', '元', 3, 'admin', '系统默认参数'), (0, 'LARGE_TRANSACTION', '大额交易模型', 'FREQUENT_CASH_DEPOSIT', '短时多次存现', '24小时内累计存现超过', '100000', '元/4小时', 4, 'admin', '系统默认参数'), (0, 'LARGE_TRANSACTION', '大额交易模型', 'FREQUENT_TRANSFER', '频繁转账', '单日转账次数超过', '10', '次/日', 5, 'admin', '系统默认参数'), (0, 'LARGE_TRANSACTION', '大额交易模型', 'TRANSFER_FREQUENCY', '转账频率', '单日累计转账金额超过', '1000000', '元/日', 6, 'admin', '系统默认参数'); -- ---------------------------- -- 3. 初始化可疑兼职模型参数 -- ---------------------------- INSERT INTO ccdi_model_param (project_id, model_code, model_name, param_code, param_name, param_desc, param_value, param_unit, sort_order, create_by, remark) VALUES (0, 'SUSPICIOUS_PART_TIME', '可疑兼职模型', 'MONTHLY_FIXED_INCOME', '月度固定收入', '除本行工资外,每月固定收入超过', '5000', '元/月', 1, 'admin', '系统默认参数'), (0, 'SUSPICIOUS_PART_TIME', '可疑兼职模型', 'FIXED_COUNTERPARTY_TRANSFER', '固定对手转入', '每季从固定交易对手转入金额', '15000', '元/季', 2, 'admin', '系统默认参数'), (0, 'SUSPICIOUS_PART_TIME', '可疑兼职模型', 'SUSPICIOUS_TIME_TRANSACTION', '非工作时间交易', '非工作时间(22:00-06:00)交易次数', '20', '次/月', 3, 'admin', '系统默认参数'); -- ---------------------------- -- 4. 初始化可疑外汇交易模型参数 -- ---------------------------- INSERT INTO ccdi_model_param (project_id, model_code, model_name, param_code, param_name, param_desc, param_value, param_unit, sort_order, create_by, remark) VALUES (0, 'SUSPICIOUS_FOREIGN_EXCHANGE', '可疑外汇交易模型', 'SINGLE_PURCHASE_AMOUNT', '单笔购汇金额', '单笔购汇超过该金额', '50000', '美元/笔', 1, 'admin', '系统默认参数'), (0, 'SUSPICIOUS_FOREIGN_EXCHANGE', '可疑外汇交易模型', 'SINGLE_SETTLEMENT_AMOUNT', '单笔结汇金额', '单笔结汇超过该金额', '50000', '美元/笔', 2, 'admin', '系统默认参数'), (0, 'SUSPICIOUS_FOREIGN_EXCHANGE', '可疑外汇交易模型', 'CROSS_BORDER_REMITTANCE', '跨境汇款金额', '跨境汇款金额超过', '200000', '美元/笔', 3, 'admin', '系统默认参数'), (0, 'SUSPICIOUS_FOREIGN_EXCHANGE', '可疑外汇交易模型', 'MONTHLY_PURCHASE_TOTAL', '月度购汇总额', '月度购汇总额超过', '100000', '美元/月', 4, 'admin', '系统默认参数'), (0, 'SUSPICIOUS_FOREIGN_EXCHANGE', '可疑外汇交易模型', 'MONTHLY_SETTLEMENT_TOTAL', '月度结汇总额', '月度结汇总额超过', '100000', '美元/月', 5, 'admin', '系统默认参数'), (0, 'SUSPICIOUS_FOREIGN_EXCHANGE', '可疑外汇交易模型', 'FREQUENT_FOREX_TRADE', '频繁外汇交易', '单日外汇交易次数超过', '5', '次/日', 6, 'admin', '系统默认参数'); ``` #### 2.2 执行数据库脚本 **使用MCP连接数据库执行:** ```bash # 通过MCP工具连接数据库并执行SQL脚本 # 注意:不使用命令行的mysql,使用MCP连接项目配置文件中的数据库 ``` --- ### 3. 创建实体类 #### 3.1 创建包结构 ``` ccdi-project/src/main/java/com/ruoyi/ccdi/project/ ├── domain/ │ ├── CcdiModelParam.java │ ├── dto/ │ └── vo/ ``` #### 3.2 创建 Entity **文件路径:** `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/CcdiModelParam.java` ```java package com.ruoyi.ccdi.project.domain; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.util.Date; /** * 模型参数配置 ccdi_model_param */ @Data @TableName("ccdi_model_param") public class CcdiModelParam { /** 主键ID */ @TableId(type = IdType.AUTO) private Long id; /** 项目ID(0表示默认参数) */ private Long projectId; /** 模型编码 */ private String modelCode; /** 模型名称 */ private String modelName; /** 参数编码 */ private String paramCode; /** 监测项名称 */ private String paramName; /** 参数描述 */ private String paramDesc; /** 参数值 */ private String paramValue; /** 参数单位 */ private String paramUnit; /** 排序号 */ private Integer sortOrder; /** 创建者 */ private String createBy; /** 创建时间 */ private Date createTime; /** 更新者 */ private String updateBy; /** 更新时间 */ private Date updateTime; /** 备注 */ private String remark; } ``` --- ### 4. 创建 DTO #### 4.1 查询 DTO **文件路径:** `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/dto/ModelParamQueryDTO.java` ```java package com.ruoyi.ccdi.project.domain.dto; import lombok.Data; import jakarta.validation.constraints.NotBlank; /** * 模型参数查询DTO */ @Data public class ModelParamQueryDTO { /** 项目ID */ private Long projectId; /** 模型编码 */ @NotBlank(message = "模型编码不能为空") private String modelCode; } ``` #### 4.2 保存 DTO **文件路径:** `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/dto/ModelParamSaveDTO.java` ```java package com.ruoyi.ccdi.project.domain.dto; import lombok.Data; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import java.util.List; /** * 模型参数保存DTO */ @Data public class ModelParamSaveDTO { /** 项目ID */ private Long projectId; /** 模型编码 */ @NotBlank(message = "模型编码不能为空") private String modelCode; /** 模型名称 */ @NotBlank(message = "模型名称不能为空") private String modelName; /** 参数列表 */ @NotNull(message = "参数列表不能为空") private List params; @Data public static class ParamItem { /** 参数编码 */ @NotBlank(message = "参数编码不能为空") private String paramCode; /** 监测项名称 */ private String paramName; /** 参数描述 */ private String paramDesc; /** 参数值 - 唯一可修改字段 */ @NotBlank(message = "参数值不能为空") private String paramValue; /** 参数单位 */ private String paramUnit; /** 排序号 */ private Integer sortOrder; } } ``` --- ### 5. 创建 VO #### 5.1 参数 VO **文件路径:** `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/ModelParamVO.java` ```java package com.ruoyi.ccdi.project.domain.vo; import lombok.Data; /** * 模型参数VO */ @Data public class ModelParamVO { /** 主键ID */ private Long id; /** 模型编码 */ private String modelCode; /** 模型名称 */ private String modelName; /** 参数编码 */ private String paramCode; /** 监测项名称 */ private String paramName; /** 参数描述 */ private String paramDesc; /** 参数值 */ private String paramValue; /** 参数单位 */ private String paramUnit; /** 排序号 */ private Integer sortOrder; } ``` #### 5.2 模型列表 VO **文件路径:** `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/ModelListVO.java` ```java package com.ruoyi.ccdi.project.domain.vo; import lombok.Data; /** * 模型列表VO */ @Data public class ModelListVO { /** 模型编码 */ private String modelCode; /** 模型名称 */ private String modelName; } ``` --- ## 验证清单 完成以下验证后,本任务才算完成: **数据库部分:** - [ ] sql/ccdi_model_param.sql 脚本创建完成 - [ ] 数据库表创建成功 - [ ] 初始化数据插入成功(3个模型共15条参数) **后端部分:** - [ ] ccdi-project 模块创建成功 - [ ] 根 pom.xml 已添加模块 - [ ] ruoyi-admin/pom.xml 已添加依赖 - [ ] CcdiModelParam 实体类创建完成 - [ ] ModelParamQueryDTO 创建完成 - [ ] ModelParamSaveDTO 创建完成 - [ ] ModelParamVO 创建完成 - [ ] ModelListVO 创建完成 - [ ] 项目编译无错误: `mvn clean compile` --- ## 注意事项 **数据库部分:** 1. **执行顺序**: 必须先创建数据库表,再创建实体类 2. **使用MCP**: 使用MCP连接数据库执行SQL,不使用命令行mysql 3. **数据验证**: 执行后验证3个模型的15条参数数据是否正确插入 **后端部分:** 1. **包名规范**: 必须使用 `com.ruoyi.ccdi.project` 作为基础包名 2. **注解使用**: 实体类使用 `@Data` 注解,不继承 BaseEntity 3. **字段验证**: DTO 中必须添加验证注解 `@NotBlank`、`@NotNull` 4. **注释完整**: 所有字段必须添加注释说明 5. **导入语句**: 禁止使用全限定类名,必须使用 import 语句 --- ## 下一步 完成本任务后,进入下一个任务: **02-后端业务逻辑开发.md**