feat: 新增流水标签核心表结构与实体映射

This commit is contained in:
wkc
2026-03-16 17:27:29 +08:00
parent 7b2f2e36c0
commit a01dd8dec3
5 changed files with 279 additions and 0 deletions

View File

@@ -0,0 +1,66 @@
package com.ruoyi.ccdi.project.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 流水标签结果实体
*/
@Data
@TableName("ccdi_bank_statement_tag_result")
public class CcdiBankTagResult implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@TableId(type = IdType.AUTO)
private Long id;
private Long projectId;
private String modelCode;
private String modelName;
private String ruleCode;
private String ruleName;
private String indicatorCode;
private String resultType;
private String riskLevel;
private Long bankStatementId;
private String objectType;
private String objectKey;
private Integer groupId;
private Integer logId;
private String reasonDetail;
private String businessCaliberSnapshot;
private String hitValueSnapshot;
private String createBy;
private Date createTime;
private String updateBy;
private Date updateTime;
private String remark;
}

View File

@@ -0,0 +1,54 @@
package com.ruoyi.ccdi.project.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 流水标签规则定义实体
*/
@Data
@TableName("ccdi_bank_tag_rule")
public class CcdiBankTagRule implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@TableId(type = IdType.AUTO)
private Long id;
private String modelCode;
private String modelName;
private String ruleCode;
private String ruleName;
private String indicatorCode;
private String resultType;
private String riskLevel;
private String businessCaliber;
private Integer enabled;
private Integer sortOrder;
private String createBy;
private Date createTime;
private String updateBy;
private Date updateTime;
private String remark;
}

View File

@@ -0,0 +1,54 @@
package com.ruoyi.ccdi.project.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 流水标签任务实体
*/
@Data
@TableName("ccdi_bank_tag_task")
public class CcdiBankTagTask implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@TableId(type = IdType.AUTO)
private Long id;
private Long projectId;
private String triggerType;
private String modelCode;
private String status;
private Integer needRerun;
private Integer successRuleCount;
private Integer failedRuleCount;
private Integer hitCount;
private String errorMessage;
private Date startTime;
private Date endTime;
private String createBy;
private Date createTime;
private String updateBy;
private Date updateTime;
}

View File

@@ -0,0 +1,24 @@
package com.ruoyi.ccdi.project.domain.entity;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
class CcdiBankTagEntityMappingTest {
@Test
void bankTagResult_shouldExposeStatementAndObjectFields() {
CcdiBankTagResult result = new CcdiBankTagResult();
result.setProjectId(40L);
result.setRuleCode("RULE_1");
result.setBankStatementId(10L);
result.setGroupId(40);
result.setLogId(40001);
result.setObjectType("STAFF_ID_CARD");
result.setObjectKey("330101198801010011");
assertEquals(40L, result.getProjectId());
assertEquals(40001, result.getLogId());
assertEquals("STAFF_ID_CARD", result.getObjectType());
}
}

View File

@@ -0,0 +1,81 @@
CREATE TABLE IF NOT EXISTS `ccdi_bank_tag_rule` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`model_code` VARCHAR(64) NOT NULL COMMENT '模型编码',
`model_name` VARCHAR(128) NOT NULL COMMENT '模型名称',
`rule_code` VARCHAR(64) NOT NULL COMMENT '规则编码',
`rule_name` VARCHAR(128) NOT NULL COMMENT '规则名称',
`indicator_code` VARCHAR(64) DEFAULT NULL COMMENT '指标编码',
`result_type` VARCHAR(32) NOT NULL COMMENT '结果类型',
`risk_level` VARCHAR(32) DEFAULT NULL COMMENT '风险等级',
`business_caliber` VARCHAR(1000) DEFAULT NULL COMMENT '业务口径',
`enabled` TINYINT NOT NULL DEFAULT 1 COMMENT '是否启用',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序',
`create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建者',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新者',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_ccdi_bank_tag_rule_code` (`rule_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流水标签规则定义表';
CREATE TABLE IF NOT EXISTS `ccdi_bank_statement_tag_result` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`project_id` BIGINT NOT NULL COMMENT '项目ID',
`model_code` VARCHAR(64) NOT NULL COMMENT '模型编码',
`model_name` VARCHAR(128) NOT NULL COMMENT '模型名称',
`rule_code` VARCHAR(64) NOT NULL COMMENT '规则编码',
`rule_name` VARCHAR(128) NOT NULL COMMENT '规则名称',
`indicator_code` VARCHAR(64) DEFAULT NULL COMMENT '指标编码',
`result_type` VARCHAR(32) NOT NULL COMMENT '结果类型',
`risk_level` VARCHAR(32) DEFAULT NULL COMMENT '风险等级',
`bank_statement_id` BIGINT DEFAULT NULL COMMENT '流水ID',
`object_type` VARCHAR(64) DEFAULT NULL COMMENT '对象类型',
`object_key` VARCHAR(128) DEFAULT NULL COMMENT '对象主键',
`group_id` INT DEFAULT NULL COMMENT '项目分组ID',
`log_id` INT DEFAULT NULL COMMENT '批次日志ID',
`reason_detail` VARCHAR(2000) DEFAULT NULL COMMENT '异常原因快照',
`business_caliber_snapshot` VARCHAR(2000) DEFAULT NULL COMMENT '业务口径快照',
`hit_value_snapshot` VARCHAR(1000) DEFAULT NULL COMMENT '命中值快照',
`create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建者',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新者',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_ccdi_bank_tag_statement_hit` (`project_id`, `rule_code`, `bank_statement_id`),
UNIQUE KEY `uk_ccdi_bank_tag_object_hit` (`project_id`, `rule_code`, `object_type`, `object_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流水标签结果表';
CREATE TABLE IF NOT EXISTS `ccdi_bank_tag_task` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`project_id` BIGINT NOT NULL COMMENT '项目ID',
`trigger_type` VARCHAR(64) NOT NULL COMMENT '触发方式',
`model_code` VARCHAR(64) DEFAULT NULL COMMENT '模型编码',
`status` VARCHAR(32) NOT NULL COMMENT '任务状态',
`need_rerun` TINYINT NOT NULL DEFAULT 0 COMMENT '是否需要补跑',
`success_rule_count` INT NOT NULL DEFAULT 0 COMMENT '成功规则数',
`failed_rule_count` INT NOT NULL DEFAULT 0 COMMENT '失败规则数',
`hit_count` INT NOT NULL DEFAULT 0 COMMENT '命中数量',
`error_message` VARCHAR(2000) DEFAULT NULL COMMENT '错误信息',
`start_time` DATETIME DEFAULT NULL COMMENT '开始时间',
`end_time` DATETIME DEFAULT NULL COMMENT '结束时间',
`create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建者',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新者',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_ccdi_bank_tag_task_project_status` (`project_id`, `status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流水标签任务表';
INSERT INTO `ccdi_bank_tag_rule`
(`model_code`, `model_name`, `rule_code`, `rule_name`, `indicator_code`, `result_type`, `risk_level`, `business_caliber`, `enabled`, `sort_order`, `create_by`, `remark`)
VALUES
('LARGE_TRANSACTION', '大额交易', 'HOUSE_OR_CAR_EXPENSE', '房车消费支出交易', 'HOUSE_OR_CAR_EXPENSE', 'STATEMENT', 'HIGH', '识别房产、购车等大额消费支出流水', 1, 10, 'system', '初始化规则'),
('LARGE_TRANSACTION', '大额交易', 'TAX_EXPENSE', '税务支出交易', 'TAX_EXPENSE', 'STATEMENT', 'HIGH', '识别税务类大额支出流水', 1, 20, 'system', '初始化规则'),
('LARGE_TRANSACTION', '大额交易', 'SINGLE_LARGE_INCOME', '大额单笔收入', 'SINGLE_TRANSACTION_AMOUNT', 'STATEMENT', 'HIGH', '识别超过单笔阈值的收入流水', 1, 30, 'system', '初始化规则'),
('LARGE_TRANSACTION', '大额交易', 'CUMULATIVE_INCOME', '累计收入超限', 'CUMULATIVE_TRANSACTION_AMOUNT', 'OBJECT', 'HIGH', '识别累计收入超过阈值的对象', 1, 40, 'system', '初始化规则'),
('LARGE_TRANSACTION', '大额交易', 'ANNUAL_TURNOVER', '年流水交易额超限', 'annual_turnover', 'OBJECT', 'HIGH', '识别年交易额超过阈值的对象', 1, 50, 'system', '初始化规则'),
('LARGE_TRANSACTION', '大额交易', 'LARGE_CASH_DEPOSIT', '大额存现交易', 'LARGE_CASH_DEPOSIT', 'STATEMENT', 'HIGH', '识别大额现金存入流水', 1, 60, 'system', '初始化规则'),
('LARGE_TRANSACTION', '大额交易', 'FREQUENT_CASH_DEPOSIT', '短时间多次存现', 'FREQUENT_CASH_DEPOSIT', 'OBJECT', 'HIGH', '识别短时间多次现金存入对象', 1, 70, 'system', '初始化规则'),
('LARGE_TRANSACTION', '大额交易', 'LARGE_TRANSFER', '大额转账交易', 'FREQUENT_TRANSFER', 'STATEMENT', 'HIGH', '识别大额转账流水', 1, 80, 'system', '初始化规则');