新增结果总览员工结果表结构

This commit is contained in:
wkc
2026-03-22 11:40:46 +08:00
parent 4c9ffb3fde
commit ec006f202b
6 changed files with 320 additions and 0 deletions

View File

@@ -0,0 +1,64 @@
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_project_overview_employee_result")
public class CcdiProjectOverviewEmployeeResult implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@TableId(type = IdType.AUTO)
private Long id;
private Long projectId;
private String staffIdCard;
private String staffCode;
private String staffName;
private Long deptId;
private String deptName;
private Integer ruleCount;
private Integer modelCount;
private Integer hitCount;
private String riskLevelCode;
private String riskPoint;
private String modelCodesCsv;
private String modelNamesJson;
private String hitRulesJson;
private String modelHitSummaryJson;
private String createBy;
private Date createTime;
private String updateBy;
private Date updateTime;
private String remark;
}

View File

@@ -0,0 +1,37 @@
package com.ruoyi.ccdi.project.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.ccdi.project.domain.entity.CcdiProjectOverviewEmployeeResult;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 结果总览员工结果 Mapper
*/
public interface CcdiProjectOverviewEmployeeResultMapper extends BaseMapper<CcdiProjectOverviewEmployeeResult> {
/**
* 按项目删除结果
*
* @param projectId 项目ID
* @return 删除条数
*/
int deleteByProjectId(@Param("projectId") Long projectId);
/**
* 批量插入结果
*
* @param list 结果列表
* @return 插入条数
*/
int insertBatch(@Param("list") List<CcdiProjectOverviewEmployeeResult> list);
/**
* 按项目查询结果
*
* @param projectId 项目ID
* @return 结果列表
*/
List<CcdiProjectOverviewEmployeeResult> selectByProjectId(@Param("projectId") Long projectId);
}

View File

@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.ccdi.project.mapper.CcdiProjectOverviewEmployeeResultMapper">
<resultMap id="CcdiProjectOverviewEmployeeResultMap"
type="com.ruoyi.ccdi.project.domain.entity.CcdiProjectOverviewEmployeeResult">
<id property="id" column="id"/>
<result property="projectId" column="project_id"/>
<result property="staffIdCard" column="staff_id_card"/>
<result property="staffCode" column="staff_code"/>
<result property="staffName" column="staff_name"/>
<result property="deptId" column="dept_id"/>
<result property="deptName" column="dept_name"/>
<result property="ruleCount" column="rule_count"/>
<result property="modelCount" column="model_count"/>
<result property="hitCount" column="hit_count"/>
<result property="riskLevelCode" column="risk_level_code"/>
<result property="riskPoint" column="risk_point"/>
<result property="modelCodesCsv" column="model_codes_csv"/>
<result property="modelNamesJson" column="model_names_json"/>
<result property="hitRulesJson" column="hit_rules_json"/>
<result property="modelHitSummaryJson" column="model_hit_summary_json"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="remark" column="remark"/>
</resultMap>
<delete id="deleteByProjectId">
delete from ccdi_project_overview_employee_result
where project_id = #{projectId}
</delete>
<insert id="insertBatch" parameterType="java.util.List">
insert into ccdi_project_overview_employee_result (
project_id, staff_id_card, staff_code, staff_name, dept_id, dept_name,
rule_count, model_count, hit_count, risk_level_code, risk_point,
model_codes_csv, model_names_json, hit_rules_json, model_hit_summary_json,
create_by, create_time, update_by, update_time, remark
) values
<foreach collection="list" item="item" separator=",">
(
#{item.projectId}, #{item.staffIdCard}, #{item.staffCode}, #{item.staffName},
#{item.deptId}, #{item.deptName}, #{item.ruleCount}, #{item.modelCount},
#{item.hitCount}, #{item.riskLevelCode}, #{item.riskPoint},
#{item.modelCodesCsv}, #{item.modelNamesJson}, #{item.hitRulesJson}, #{item.modelHitSummaryJson},
#{item.createBy}, #{item.createTime}, #{item.updateBy}, #{item.updateTime}, #{item.remark}
)
</foreach>
on duplicate key update
staff_code = values(staff_code),
staff_name = values(staff_name),
dept_id = values(dept_id),
dept_name = values(dept_name),
rule_count = values(rule_count),
model_count = values(model_count),
hit_count = values(hit_count),
risk_level_code = values(risk_level_code),
risk_point = values(risk_point),
model_codes_csv = values(model_codes_csv),
model_names_json = values(model_names_json),
hit_rules_json = values(hit_rules_json),
model_hit_summary_json = values(model_hit_summary_json),
update_by = values(update_by),
update_time = values(update_time),
remark = values(remark)
</insert>
<select id="selectByProjectId" resultMap="CcdiProjectOverviewEmployeeResultMap">
select
id,
project_id,
staff_id_card,
staff_code,
staff_name,
dept_id,
dept_name,
rule_count,
model_count,
hit_count,
risk_level_code,
risk_point,
model_codes_csv,
model_names_json,
hit_rules_json,
model_hit_summary_json,
create_by,
create_time,
update_by,
update_time,
remark
from ccdi_project_overview_employee_result
where project_id = #{projectId}
order by id asc
</select>
</mapper>

View File

@@ -0,0 +1,56 @@
package com.ruoyi.ccdi.project.domain.entity;
import org.junit.jupiter.api.Test;
import java.nio.file.Files;
import java.nio.file.Path;
import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertTrue;
class CcdiProjectOverviewEmployeeResultEntityTest {
private static final Path ENTITY_PATH = Path.of(
"src/main/java/com/ruoyi/ccdi/project/domain/entity/CcdiProjectOverviewEmployeeResult.java"
);
@Test
void entityAndSqlShouldDefineProjectOverviewEmployeeResultTable() throws Exception {
String entitySource = Files.readString(ENTITY_PATH);
String sql = Files.readString(resolveSqlPath());
String normalizedSql = sql.toLowerCase().replace("`", "");
assertAll(
() -> assertTrue(entitySource.contains("@TableName(\"ccdi_project_overview_employee_result\")")),
() -> assertTrue(entitySource.contains("private Long projectId;")),
() -> assertTrue(entitySource.contains("private String staffIdCard;")),
() -> assertTrue(entitySource.contains("private Integer ruleCount;")),
() -> assertTrue(entitySource.contains("private Integer modelCount;")),
() -> assertTrue(entitySource.contains("private Integer hitCount;")),
() -> assertTrue(entitySource.contains("private String riskLevelCode;")),
() -> assertTrue(entitySource.contains("private String modelCodesCsv;")),
() -> assertTrue(entitySource.contains("private String modelNamesJson;")),
() -> assertTrue(entitySource.contains("private String hitRulesJson;")),
() -> assertTrue(entitySource.contains("private String modelHitSummaryJson;")),
() -> assertTrue(normalizedSql.contains("create table if not exists ccdi_project_overview_employee_result")),
() -> assertTrue(normalizedSql.contains("unique key")),
() -> assertTrue(normalizedSql.contains("project_id")),
() -> assertTrue(normalizedSql.contains("staff_id_card")),
() -> assertTrue(normalizedSql.contains("rule_count")),
() -> assertTrue(normalizedSql.contains("model_count")),
() -> assertTrue(normalizedSql.contains("hit_count")),
() -> assertTrue(normalizedSql.contains("risk_level_code")),
() -> assertTrue(normalizedSql.contains("model_codes_csv")),
() -> assertTrue(normalizedSql.contains("model_names_json")),
() -> assertTrue(normalizedSql.contains("hit_rules_json")),
() -> assertTrue(normalizedSql.contains("model_hit_summary_json"))
);
}
private Path resolveSqlPath() {
Path moduleRelative = Path.of("../sql/migration/2026-03-20-create-project-overview-employee-result-table.sql");
if (Files.exists(moduleRelative)) {
return moduleRelative;
}
return Path.of("sql/migration/2026-03-20-create-project-overview-employee-result-table.sql");
}
}

View File

@@ -0,0 +1,36 @@
package com.ruoyi.ccdi.project.mapper;
import org.junit.jupiter.api.Test;
import java.nio.file.Files;
import java.nio.file.Path;
import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertTrue;
class CcdiProjectOverviewEmployeeResultMapperXmlTest {
private static final Path MAPPER_PATH = Path.of(
"src/main/java/com/ruoyi/ccdi/project/mapper/CcdiProjectOverviewEmployeeResultMapper.java"
);
private static final Path XML_PATH = Path.of(
"src/main/resources/mapper/ccdi/project/CcdiProjectOverviewEmployeeResultMapper.xml"
);
@Test
void mapperAndXmlShouldExposeMinimumCrudStatements() throws Exception {
String mapperSource = Files.readString(MAPPER_PATH);
String xml = Files.readString(XML_PATH);
assertAll(
() -> assertTrue(mapperSource.contains("interface CcdiProjectOverviewEmployeeResultMapper")),
() -> assertTrue(mapperSource.contains("deleteByProjectId")),
() -> assertTrue(mapperSource.contains("insertBatch")),
() -> assertTrue(mapperSource.contains("selectByProjectId")),
() -> assertTrue(xml.contains("delete id=\"deleteByProjectId\"")),
() -> assertTrue(xml.contains("insert id=\"insertBatch\"")),
() -> assertTrue(xml.contains("select id=\"selectByProjectId\"")),
() -> assertTrue(xml.contains("ccdi_project_overview_employee_result"))
);
}
}

View File

@@ -0,0 +1,27 @@
create table if not exists `ccdi_project_overview_employee_result` (
`id` bigint not null auto_increment comment '主键ID',
`project_id` bigint not null comment '项目ID',
`staff_id_card` varchar(18) not null comment '员工身份证号',
`staff_code` varchar(64) default null comment '员工工号',
`staff_name` varchar(64) default null comment '员工姓名',
`dept_id` bigint default null comment '部门ID',
`dept_name` varchar(128) default null comment '部门名称',
`rule_count` int not null default 0 comment '命中规则数',
`model_count` int not null default 0 comment '命中模型数',
`hit_count` int not null default 0 comment '命中次数',
`risk_level_code` varchar(32) not null comment '风险等级编码',
`risk_point` varchar(1000) default null comment '风险点',
`model_codes_csv` varchar(1000) default null comment '命中模型编码CSV',
`model_names_json` json default null comment '命中模型名称快照',
`hit_rules_json` json default null comment '命中规则快照',
`model_hit_summary_json` json 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_project_overview_employee_result` (`project_id`, `staff_id_card`),
key `idx_ccdi_project_overview_employee_result_risk_level` (`project_id`, `risk_level_code`),
key `idx_ccdi_project_overview_employee_result_dept` (`project_id`, `dept_id`)
) engine=innodb default charset=utf8mb4 comment='结果总览员工结果表';