Files
ccdi/doc/参数配置功能/01-数据库设计与后端实体类创建.md
2026-02-26 10:38:23 +08:00

13 KiB

模型参数配置功能 - 后端实体类创建

任务概述

任务编号: 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 version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>ccdi</artifactId>
        <groupId>com.ruoyi</groupId>
        <version>1.0.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>ccdi-project</artifactId>

    <dependencies>
        <!-- 通用工具 -->
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common</artifactId>
        </dependency>
    </dependencies>
</project>

1.3 修改根 pom.xml

文件路径: pom.xml (项目根目录)

<modules> 标签中添加:

<modules>
    ...
    <module>ccdi-project</module>
</modules>

1.4 修改 ruoyi-admin/pom.xml

文件路径: ruoyi-admin/pom.xml

<dependencies> 标签中添加:

<!-- 项目管理模块 -->
<dependency>
    <groupId>com.ruoyi</groupId>
    <artifactId>ccdi-project</artifactId>
</dependency>

2. 创建数据库脚本

2.1 编写建表脚本

文件路径: sql/ccdi_model_param.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连接数据库执行:

# 通过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

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

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

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<ParamItem> 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

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

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