15 Commits

Author SHA1 Message Date
wkc
20a0ebfbef readme更新 2026-01-30 14:47:50 +08:00
wkc
1b015be9bf 测试 2026-01-30 14:27:11 +08:00
wkc
29a2e60ee1 变更项目缩写 2026-01-30 14:15:21 +08:00
wkc
e99b05acc2 项管首页 2026-01-30 11:01:13 +08:00
wkc
ac4e02e8c5 中介新增 修改接口 2026-01-29 22:03:42 +08:00
wkc
1b043fa2d6 中介类型修改 2026-01-29 13:39:47 +08:00
wkc
2c146c026a 员工代码 2026-01-29 09:07:50 +08:00
wkc
47f9491941 feat: 员工信息管理功能完善
- 将员工表org_no字段迁移至dept_id,关联系统部门表
- 更新员工信息相关DTO、VO和Controller,使用deptId替代orgNo
- 添加员工信息管理OpenSpec规范文档(proposal/design/spec/tasks)
- 更新API文档,反映部门关联变更
- 添加数据库迁移脚本employee_org_no_to_dept_id.sql
- 新增员工信息分页接口测试脚本(PowerShell/Python)
- 更新CLAUDE.md,添加MCP数据库工具使用说明

Co-Authored-By: Claude (glm-4.7) <noreply@anthropic.com>
2026-01-28 16:57:38 +08:00
wkc
eac1112f9b 中介 代码重写 2026-01-28 15:45:55 +08:00
wkc
9dda17ccb8 git 2026-01-28 15:45:03 +08:00
wkc
52702f0b35 git 2026-01-28 14:40:55 +08:00
wkc
0cc8ef0fc3 员工信息管理
- 新增员工信息CRUD功能
- 添加员工关联人员管理
- 配置MyBatis Plus审计字段
- 添加OpenSpec规范文档
- 新增测试脚本和数据

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-28 14:40:27 +08:00
wkc
6946744ab9 中介库管理 2026-01-28 09:58:31 +08:00
wkc
5b0c338b5e 导出excel替换 2026-01-27 17:55:53 +08:00
wkc
79cd4fe755 需求分解 2026-01-27 17:09:32 +08:00
346 changed files with 43689 additions and 1746 deletions

View File

@@ -1,7 +1,53 @@
{
"permissions": {
"allow": [
"Bash(findstr:*)"
"Bash(findstr:*)",
"mcp__zai-mcp-server__extract_text_from_screenshot",
"Bash(pandoc:*)",
"mcp__zread__read_file",
"mcp__zread__search_doc",
"Bash(cmd:*)",
"Bash(curl:*)",
"Bash(mvn clean install:*)",
"Bash(powershell:*)",
"Skill(document-skills:mcp-builder)",
"Bash(ping:*)",
"Bash(git commit:*)",
"Bash(taskkill:*)",
"Bash(cd:*)",
"mcp__database-server__read_query",
"mcp__database-server__list_tables",
"mcp__database-server__describe_table",
"mcp__database-server__list_insights",
"mcp__database-server__alter_table",
"mcp__database-server__write_query",
"Bash(mvn dependency:tree:*)",
"Bash(javac:*)",
"Bash(unzip:*)",
"Bash(chcp:*)",
"Skill(superpowers:brainstorming)",
"Bash(pip install:*)",
"Skill(superpowers:using-superpowers)",
"Bash(tree:*)",
"Skill(docx)",
"Bash(bash:*)",
"mcp__zai-mcp-server__analyze_image",
"Skill(frontend-design:frontend-design)",
"mcp__web-reader__webReader",
"mcp__fetch__imageFetch",
"Skill(frontend-design)",
"Bash(find:*)",
"Bash(mvn clean:*)",
"Bash(mvn install:*)",
"Bash(git mv:*)",
"Bash(powershell.exe:*)",
"Bash(git rm:*)",
"Bash(git add:*)",
"Skill(document-skills:frontend-design)",
"Bash(test:*)"
]
}
},
"enabledMcpjsonServers": [
"mysql"
]
}

2
.gitignore vendored
View File

@@ -42,6 +42,8 @@ nbdist/
*.xml.versionsBackup
*.swp
test/
!*/build/*.java
!*/build/*.html
!*/build/*.xml

3
.mcp.json Normal file
View File

@@ -0,0 +1,3 @@
{
"mcpServers": {}
}

View File

@@ -1,4 +1,53 @@
# CLAUDE.md
## 分析
- 在进行需求分析类型的任务时,自动开启深度思考模式,输入 “think more”、“think a lot”、“think harder” 或 “think longer” 触发更深层的思考
- 在进行需求分析与分解任务时,按照不同的模块分为不同的文件,创建模块名的文件夹并将对应文件保存在文件夹中,然后对模块的功能文件进行继续分解
- 在使用/openspec:proposal时自动开启深度思考模式输入 “think more”、“think a lot”、“think harder” 或 “think longer” 触发更深层的思考
- 在执行/openspec:apply后使用code-simplifier 进行代码精简
## Communication
- 永远使用简体中文进行思考和对话
## Documentation
- 编写 .md 文档时,也要用中文
- 所有生成的文档都放在项目根目录下的doc文件中。
## 数据库规范
- 新建表时,需要加上项目英文名首字母集合
## Coding
### Java Code Style
- 新建模块命名方式为项目英文名首字母集合+主要功能
- 新的功能代码与若依框架自带的代码分离新建模块controller层也要放在新建模块中
- 使用 `@Data` 注解保证代码的简洁
- 尽量使用 MyBatis Plus 进行 CRUD 操作(版本 3.5.10Spring Boot 3 适配版)
- 服务层中的使用@Resource注释,替代@Autowired
- 实体类不继承BaseEntity单独添加审计字段
- 完成后端代码controller层代码生成测试后在项目文件目录下生成API文档
- 接口传参需要使用单独的DTO不可以与entity混用
- 需要单独的VO类不可以与entity混用
- 审计字段通过添加注释的方式实现自动插入
- 简单的crud操作通过mybatis plus的方法实现复杂的操作通过xml中写sql和mapper映射实现
- 控制层所有接口需要正确的添加注释确保在swagger-ui中正确展示。控制层中任何接口发生变动及时同步到doc中的接口文档中
- 控制层分页接口使用mybatis plus page不要使用若依框架的分页
### 前端代码
- 在添加页面和组件后,注意与数据库中菜单表进行联动修改
- 前端组件代码需要组件化,复杂的组件需要进行拆分为单独的文件
## 运行
- 使用mcp:ccdi_intermediary_blacklist进行数据库相关操作
- 不要在命令行中启动后端进行测试
- 测试方式为生成可执行的测试脚本
- 测试脚本在运行完成后需要保存所有接口输出并生成测试用例报告
- /login/test接口可以传入username和password获取token用于测试验证接口的功能。
用于测试的账号username: admin password admin123
- swagger-ui的地址为/swagger-ui/index.html
- 在向doc文件夹添加文件时需要分门别类添加根据
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

451
README.md
View File

@@ -1,95 +1,382 @@
<p align="center">
<img alt="logo" src="https://oscimg.oschina.net/oscnet/up-d3d0a9303e11d522a06cd263f3079027715.png">
</p>
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi v3.9.1</h1>
<h4 align="center">基于SpringBoot+Vue前后端分离的Java快速开发框架</h4>
<p align="center">
<a href="https://gitee.com/y_project/RuoYi-Vue/stargazers"><img src="https://gitee.com/y_project/RuoYi-Vue/badge/star.svg?theme=dark"></a>
<a href="https://gitee.com/y_project/RuoYi-Vue"><img src="https://img.shields.io/badge/RuoYi-v3.9.1-brightgreen.svg"></a>
<a href="https://gitee.com/y_project/RuoYi-Vue/blob/master/LICENSE"><img src="https://img.shields.io/github/license/mashape/apistatus.svg"></a>
</p>
# 纪检初核系统功能说明书
## 平台简介
文档版本V1.0
若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。
最后更新日期2026年1月16日
* 前端采用Vue、Element UI
* 后端采用Spring Boot、Spring Security、Redis & Jwt。
* 权限认证使用Jwt支持多终端认证系统。
* 支持加载动态权限菜单,多方式轻松权限控制。
* 高效率开发,使用代码生成器可以一键生成前后端代码。
* 提供了技术栈([Vue3](https://v3.cn.vuejs.org) [Element Plus](https://element-plus.org/zh-CN) [Vite](https://cn.vitejs.dev))版本[RuoYi-Vue3](https://gitcode.com/yangzongzhuan/RuoYi-Vue3),保持同步更新。
* 提供了单应用版本[RuoYi-Vue-fast](https://gitcode.com/yangzongzhuan/RuoYi-Vue-fast)Oracle版本[RuoYi-Vue-Oracle](https://gitcode.com/yangzongzhuan/RuoYi-Vue-Oracle),保持同步更新。
* 不分离版本,请移步[RuoYi](https://gitee.com/y_project/RuoYi),微服务版本,请移步[RuoYi-Cloud](https://gitee.com/y_project/RuoYi-Cloud)
* 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)&nbsp;&nbsp;
编写目的:本文档旨在全面排查员工异常行为初核系统的核心功能模块、操作流程及业务价值,为系统开发、测试及用户操作提供明确依据。系统旨在通过自动化数据分析与风险模型,高效识别员工潜在风险行为
## 内置功能
# 一.项目管理模块
1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置
2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
3. 岗位管理:配置系统用户所属担任职务。
4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
7. 参数管理:对系统动态配置常用参数。
8. 通知公告:系统通知公告信息发布维护。
9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
10. 登录日志:系统登录日志记录查询包含登录异常。
11. 在线用户:当前系统中活跃用户状态监控。
12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
13. 代码生成前后端代码的生成java、html、xml、sql支持CRUD下载 。
14. 系统接口根据业务代码自动生成相关的api接口文档。
15. 服务监控监视当前系统CPU、内存、磁盘、堆栈等相关信息。
16. 缓存监控:对系统的缓存信息查询,命令统计等。
17. 在线构建器拖动表单元素生成相应的HTML代码。
18. 连接池监视监视当前系统数据库连接池状态可进行分析SQL找出系统性能瓶颈。
本模块为系统首页,用于管理所有历史创建的核查项目。页面主要分为导航与搜索区、项目列表区和快捷入口区三大部分
## 在线体验
# 1、原型图
- admin/admin123
- 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。
(1) 首页
演示地址http://vue.ruoyi.vip
文档地址http://doc.ruoyi.vip
(2) 新建项目 弹窗页入口
## 演示图
(3) 导入历史项目 弹窗页入口
<table>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/cd1f90be5f2684f4560c9519c0f2a232ee8.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/1cbcf0e6f257c7d3a063c0e3f2ff989e4b3.jpg"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-8074972883b5ba0622e13246738ebba237a.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-9f88719cdfca9af2e58b352a20e23d43b12.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-39bf2584ec3a529b0d5a3b70d15c9b37646.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-936ec82d1f4872e1bc980927654b6007307.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-b2d62ceb95d2dd9b3fbe157bb70d26001e9.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-d67451d308b7a79ad6819723396f7c3d77a.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/5e8c387724954459291aafd5eb52b456f53.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/644e78da53c2e92a95dfda4f76e6d117c4b.jpg"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-8370a0d02977eebf6dbf854c8450293c937.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-49003ed83f60f633e7153609a53a2b644f7.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-d4fe726319ece268d4746602c39cffc0621.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-c195234bbcd30be6927f037a6755e6ab69c.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/b6115bc8c31de52951982e509930b20684a.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-5e4daac0bb59612c5038448acbcef235e3a.png"/></td>
</tr>
</table>
# 2、导航与搜索区
项目搜索:支持通过输入关键词,对项目名称进行模糊搜索。
新建项目:点击打开一个标准表单,填写项目名称、人员等完整信息,自定义创建新项目。
# 3、项目列表区
本区域以表格形式清晰展示所有初核项目,是用户进行项目管理和监控的核心面板。
# (1) 列表信息列:
项目名称:显示项目名称及下方的简要描述。
创建时间:显示项目的创建日期。
状态:通过色块直观标识项目状态。包括"进行中"、"已完成"等。
目标人数:计划核查的员工总数。
预警人数:当前已被风险模型标记为存在异常行为提示的员工数量。对于"进行中"项目,此数据动态更新。
# (2操作列
查看结果(适用于已完成项目):跳转至该项目的初核结果页。
重新分析(适用于已完成项目): 基于原有数据, 重新运行风险模型, 更新分析结果。
归档将已结束且无需日常关注的项目移入归档库项目结束后可以统一归档并将相关的数据、分析过程图谱、流水等生成PDF文件导出。
进入项目(适用于进行中项目):进入该项目的工作台,开展数据管理、风险初核、专项排查等具体工作。
# 4、快捷入口区
本区域提供一键触达的高频操作按钮,提升常用工作流的启动效率。举例:
(1) 导入历史项目:复制一个历史项目的配置(如人员范围、流水、征信数据配置),快速创建新项目,实现项目模板复用:包括目标人群的流水、征信等信息
(2) 创建当季的季度初核:快速启动一个标准化的季度周期性排查项目,系统可预填当前季度时间范围等配置。
(3) 创建新员工排查:为特定新员工创建专项排查任务。
# 二.项目工作台
用户从项目列表点击"进入项目"后,将进入具体项目的操作空间,涵盖从数据准备到风险识别的全流程。并且通过侧边导航栏可以实现:
返回项目列表:返回当前项目的上一层列表页。
项目状态:明确标识当前项目阶段为"已完成",提示用户核心分析已结束,当前可能在进行数据补充或复查。
最后更新:显示数据或项目状态的最后变更时间(`2024-01-20 15:30`),用于判断信息的时效性。
# 第一部分数据管理
本页面是进入具体项目后的核心工作台之一,将来自行内流水、征信数据、人工上传不同来源和格式的数据,在一个界面内完成统一接入;并且自动化检查识别数据问题,保证后续风险识别的准确性。
# 1、数据导入
# 1拉取本行信息
功能:点击后需要输入证件号码或者导入文件(上传身份证号表格),自动拉取行内流水、资产等数据信息
# (2) 他行流水导入:
功能批量上传员工的他行银行、或者支付宝微信等交易流水文件。支持Excel、文本型PDF。系统自动解析文件内容提取交易金额、对手方、交易时间、余额、摘要等关键字段。
# (3征信信息导入
功能上传个人信用报告。支持HTML格式的网页文件。系统自动解析报告提取信贷账户、负债总额、担保信息、查询记录等核心数据。
# (4) 员工家庭关系导入:
功能:上传员工的家庭成员信息,用于构建关系人图谱和关联分析。
(5) 名单库选择: 从信息维护——中介库管理内的名单选择确认后的可疑名单
(6) 生成报告:生成初核结果,跳转结果页
# 2、数据质量检查
功能:在数据导入后,系统自动执行一套预定义的质量规则,对数据集进行检查。
检查结果详情:以列表形式直观展示发现的具体问题,例如:
发现23条数据格式不一致如日期格式不统一、金额单位混杂。
发现5条余額链条性异常指相邻交易记录间的余额计算逻辑断裂可能意味着数据缺失或被篡改。
发现12条缺失关键字段如交易记录缺少对手方账号或户名。
质量评分仪表盘:通过三个关键指标量化数据质量:
数据完整性 $(98.5\%)$ :衡量必填字段的填充率。
格式一致性 $(95.2\%)$ :衡量数据遵循预定格式规范的程度。
余额连续性 (92.8%): 衡量流水数据中余额连续、计算正确的程度。
# 第二部分 初核结果总览
本页面为创建的项目中上传的数据经过模型识别出的风险信息总览及明细。
# 1、风险总览
# (1) 风险全局仪表盘
功能:以数据卡片形式集中展示项目整体风险态势。
总人数项目覆盖的员工总数500人
无预警人数432人
低风险人数38人
中风险人数20人
高风险人数10人
# (2) 高风险/中风险人员名单
按风险评分降序排列以列表形式展示所有高风险人员清单以及中风险人员中评分最高的10名员工。信息包括姓名、身份证号、部门、风险评分、触发模型数、核心异常点系统自动提炼的最显著风险
# (3) 查看单个风险人员详情
点击每个风险人员的【查看详情】入口,可钻取至单个员工的全面风险报告。包括其所有异常行为列表、每个行为对应的模型判断依据(规则),以及资产分析、征信概览、关系人图谱等模块。并且针对可疑交易及可疑对象,可以手动添加至关注方。
风险总览:
批量生成报告
批量导出证据
批量添加到关注列表
单个人员详情中的异常明细页面:
添加到案例库
单个人员详情中的资产分析页面:
单个人员详情中的征信摘要页面:
3笔 $>50$ 万
# 2、风险模型
# (1) 模型触发情况总计
内容:以表格形式展示所有风险模型的整体触发情况。包括:模型名称、触发总人数、主要触发人员示例。
操作:点击任一模型的"查看详情",可跳转至触发该模型的全体人员列表(即"单模型触发列表")。
# (2各模型触发人员列表
内容:通过下拉菜单选择触发某一特定风险模型(如"大额交易"、或者同时触发多个如2个以上风险模型的高风险人员、或者通过"搜索人员姓名或工号..."进行精确查询,并支持将常用的筛选组合保存为固定策略,便于下次一键调用。
操作:通过查询可以得到该模型的所有触发人员,并且点击【查看详情】可查看该员工详细的风险情况。
模型触发情况、单模型/多模型筛选触发现图:
# 3、风险明细
# (1) 涉疑交易明细表
功能:展示涉及可疑交易的记录,支持按「全部可疑人员类型」「名单库命中」「模型规则命中」等维度筛选数据,且支持穿透式查看交易流水,用于定位异常资金往来。
内容:包括交易时间、可疑人员、关联人、关联员工(姓名+柜员号),关系(是否是员工本人、或者配偶等关系)、摘要、交易类型、交易金额等字段。
操作:点击「查看详情」,将跳转至可疑流水详情页,展示该条流水的交易对手、交易类型、交易时间等完整信息。
明细表列表内容:
## 若依前后端分离交流群
涉疑交易明细表
全部可疑人员类型
↓导出
<table><tr><td>序号</td><td>交易时间</td><td>可疑人员</td><td>关联人</td><td>关联员工</td><td>关系</td><td>摘要/交易类型</td><td>交易金额</td><td>操作</td></tr><tr><td>1</td><td>2024-01-15</td><td>孙七</td><td>孙七</td><td>孙七(809901)</td><td>本人</td><td>/转账</td><td>+¥500,000</td><td>查看详情</td></tr><tr><td>2</td><td>2024-01-10</td><td>王五</td><td>孙七</td><td>孙七(809901)</td><td>配偶</td><td>零钱商户消费</td><td>-¥200,000</td><td>查看详情</td></tr></table>
可疑流水查看详情:
# (2涉及违法人员清单表
内容:展示经系统识别、在外部违法名单库中命中的人员信息,用于快速定位高风险人员,包括违法人员姓名、身份证号、是否为失信被执行人、是否有刑事判决记录、是否有行政处罚记录、是否涉及公安案件、是否被限制高消费、违法信息更新时间等字段。
操作:点击「查看详情」,将展示该人员的违法详情、更新日期等完整背景信息,辅助纪检核查。
涉及违法人员清单表
导出
<table><tr><td>序号</td><td>姓名</td><td>身份证号</td><td>失信被执行人</td><td>刑事判决</td><td>行政处罚</td><td>公安涉案记录</td><td>限制高消费</td><td>违法信息更新时间</td><td>操作</td></tr><tr><td>1</td><td>孙七</td><td>331081199405133029</td><td>是</td><td>否</td><td>是</td><td>是</td><td>是</td><td>2025-03-15</td><td>查看详情</td></tr><tr><td>2</td><td>王五</td><td>331081199405133020</td><td>否</td><td>否</td><td>否</td><td>否</td><td>否</td><td>2025-03-15</td><td>查看详情</td></tr></table>
# 基础信息
姓名:张三
身份证号330106199001011234
# 失信被执行人
状态:是
法院:杭州市中院
标的50万
时间2023-05-15
# 行政处罚
状态:是
类型:罚款
事由:违规经营
机关:杭州市场监管局
# 其他
限制高消费:是
刑事/公安涉案:无
更新时间2025-03-15
# (3) 异常账户清单表
内容:独立列出经模型识别出的所有异常账户,用于监控账户异动,防范资金风险。信息包括:账号、开户人、银行、异常类型(如"突然销户"、"异地启用")、异常发生时间、状态(如「已销户」「正常」「冻结」)等字段。
操作:点击「查看详情」,可以查看该账号的所有异常交易明细。
# 4、批量导出数据及报告
支持将上述所有列表人员列表、异常清单等导出为Excel。并可一键生成项目多维统计报告PDF/Word从模型触发排行、部门风险分布、风险评分区间等多维度进行分析总结。
# 第三部分 专项排查
本页面为针对单人用户的的深度调查:
# 1、员工详查分析
功能:输入目标员工的身份证号,可选择自定义时间范围,即可根据检查对像及其主要家庭成员(配偶等),根据收入、资产、负债三者的关系进行初核判断,形成正常、收入+负债远低于资产、收入+负债远高于资产等结果风险提示。
# 2、图谱分析
功能:通过图形化方式,揭示隐藏的人员与资金关系网络。输入身份证号,点击"生成图谱",结果在右侧可视化区域动态呈现。
# (1) 关系人图谱
通过身份证号等信息,可筛选展示以该员工为中心的社会关系网络(如家庭成员、密切关联人),点击节点可查看详情。再点击关联企业可以穿透查询企业下的法人、股东等信息。
# (2资金流图谱
针对个人的资金流向图谱中的可疑资金,向前追溯多层交易对手。且资金流向分析中支持:手工加入资金流向节点,或备注资金流向。
# (3) 实控账户图谱
输入身份证号,生成该员工实际控制(可能非本人名下)的账户网络图。排查逻辑主要基于手机登录丰收互联次数、线下多次代理存取等进行判断。
# 3、拓展查询
# (1) 采购查询
功能:用于纪检/内审人员查询特定采购事项的核心信息,聚焦"采购集中度、金额异常"等风险排查。可筛选查询的采购时段,以及关联员工,查询其参与的所有采购。
内容:清单包含采购事项名称、交易日期、采购金额、供应商名称、关联员工等核心字段。
也可穿透展示采购全量信息(采购方式、入围/中标公司、经办人、对方账号等)。
# (2人员调动查询
功能:查询员工的岗位/机构调动记录,辅助排查"异常调动、岗位晋升合规性"。可选择查询时间和员工姓名,查询其所有调动记录。
内容:包含姓名、工号、调动时间、原/现岗位、原/现机构、调动原因等核心字段。
# (3招聘查询
功能:查询招聘事项信息,辅助排查"招聘流程合规性、面试官关联风险"。可筛选查询时间段和员工姓名,查询其招聘详情。
内容:包含招聘人员、岗位、招聘时间、关联面试官、面试结果等核心字段。
# 第四部分 流水明细查询
本页面为流水明细查询,对拉取的本行流水以及上传的他行流水进行批量分析。实现功能如下:
# 1、多帐户流水明细合并
可以将多个银行的流水合并成一个流水文件,左侧为筛选内容,可以筛选账号和银行进行查询;主页面可以选择按交易金额、交易时间等自主排序。且可切换对手方分析
# 2、全量流水二次分析
对全量流水表中的关键流水,可以进行手工提交"加入分析",实现将关键流水重新放置在一个新的交易表中进行分析。
# 三. 信息维护
# 1、中介库管理
功能:建立并维护外部中介人员/机构黑名单库。支持Excel导入更新。当员工交易对手命中该库时系统将自动产生高风险预警。
# 2、员工信息管理
功能:对员工实控账户、实控手机号、关系人信息等进行批量维护
说明:对于系统无法自动获取或关联的员工附属信息(如经查实的实际控制账户、未在户口本上的特定关系人等),提供手工录入与维护功能。
# 3、信贷客户家庭关系维护
可以上传并且维护信贷家庭关系表格信息。
# 四. 参数配置
功能:模型参数管理
说明:提供风险模型核心参数的维护界面、细化阈值规则。筛选模型名称:筛选(可选大额交易模型、可疑兼职模型、可疑外汇交易模型三种),得到阈值参数配置内容如下:
# 1、大额交易模型
识别大额/高频资金交易,检测调整单笔交易额、频繁转账次数等阈值
# 2、可疑兼职模型
识别异常额外收入,监测调整月度固定收入、固定对手转入等阈值
# 3、可疑外汇交易模型
识别异常外汇收支,监测调整单笔购汇金额、频繁外汇交易次数等阈值
# 模型参数管理
<table><tr><td>模型名称</td><td>可疑外汇交易模型</td><td>✓</td><td>查询</td></tr></table>
阈值参数配置
<table><tr><td>监测项</td><td>描述</td><td>阈值设置</td><td>单位</td></tr><tr><td>单笔购汇金额</td><td>单笔购汇超过该金额</td><td>50000</td><td>美元/笔</td></tr><tr><td>单笔结汇金额</td><td>单笔结汇超过该金额</td><td>50000</td><td>美元/笔</td></tr><tr><td>跨境汇款金额</td><td>单笔跨境汇款超过该金额</td><td>100000</td><td>美元/笔</td></tr><tr><td>月度购汇总额</td><td>月度累计购汇超过</td><td>200000</td><td>美元/月</td></tr><tr><td>月度结汇总额</td><td>月度累计结汇超过</td><td>200000</td><td>美元/月</td></tr><tr><td>频繁外汇交易</td><td>单日外汇交易次数超过</td><td>5</td><td>次/日</td></tr><tr><td>保存配置</td><td>恢复默认</td><td></td><td></td></tr></table>
# 五.系统管理
# 1、用户权限
系统管理员可对访问系统的用户账号进行增、删、改、禁用等操作。
# 2、项目统计
根据年度、组长、对像、成果等进行项目统计
# 3、操作日志管理
记录用户的关键操作(登录、数据导入、模型运行、报告生成等),支持按时间、用户、操作类型进行查询。
QQ群 [![加入QQ群](https://img.shields.io/badge/已满-937441-blue.svg)](https://jq.qq.com/?_wv=1027&k=5bVB1og) [![加入QQ群](https://img.shields.io/badge/已满-887144332-blue.svg)](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [![加入QQ群](https://img.shields.io/badge/已满-180251782-blue.svg)](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [![加入QQ群](https://img.shields.io/badge/已满-104180207-blue.svg)](https://jq.qq.com/?_wv=1027&k=51G72yr) [![加入QQ群](https://img.shields.io/badge/已满-186866453-blue.svg)](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [![加入QQ群](https://img.shields.io/badge/已满-201396349-blue.svg)](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [![加入QQ群](https://img.shields.io/badge/已满-101456076-blue.svg)](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [![加入QQ群](https://img.shields.io/badge/已满-101539465-blue.svg)](https://jq.qq.com/?_wv=1027&k=UKtX5jhs) [![加入QQ群](https://img.shields.io/badge/已满-264312783-blue.svg)](https://jq.qq.com/?_wv=1027&k=EI9an8lJ) [![加入QQ群](https://img.shields.io/badge/已满-167385320-blue.svg)](https://jq.qq.com/?_wv=1027&k=SWCtLnMz) [![加入QQ群](https://img.shields.io/badge/已满-104748341-blue.svg)](https://jq.qq.com/?_wv=1027&k=96Dkdq0k) [![加入QQ群](https://img.shields.io/badge/已满-160110482-blue.svg)](https://jq.qq.com/?_wv=1027&k=0fsNiYZt) [![加入QQ群](https://img.shields.io/badge/已满-170801498-blue.svg)](https://jq.qq.com/?_wv=1027&k=7xw4xUG1) [![加入QQ群](https://img.shields.io/badge/已满-108482800-blue.svg)](https://jq.qq.com/?_wv=1027&k=eCx8eyoJ) [![加入QQ群](https://img.shields.io/badge/已满-101046199-blue.svg)](https://jq.qq.com/?_wv=1027&k=SpyH2875) [![加入QQ群](https://img.shields.io/badge/已满-136919097-blue.svg)](https://jq.qq.com/?_wv=1027&k=tKEt51dz) [![加入QQ群](https://img.shields.io/badge/已满-143961921-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=0vBbSb0ztbBgVtn3kJS-Q4HUNYwip89G&authKey=8irq5PhutrZmWIvsUsklBxhj57l%2F1nOZqjzigkXZVoZE451GG4JHPOqW7AW6cf0T&noverify=0&group_code=143961921) [![加入QQ群](https://img.shields.io/badge/已满-174951577-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=ZFAPAbp09S2ltvwrJzp7wGlbopsc0rwi&authKey=HB2cxpxP2yspk%2Bo3WKTBfktRCccVkU26cgi5B16u0KcAYrVu7sBaE7XSEqmMdFQp&noverify=0&group_code=174951577) [![加入QQ群](https://img.shields.io/badge/已满-161281055-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Fn2aF5IHpwsy8j6VlalNJK6qbwFLFHat&authKey=uyIT%2B97x2AXj3odyXpsSpVaPMC%2Bidw0LxG5MAtEqlrcBcWJUA%2FeS43rsF1Tg7IRJ&noverify=0&group_code=161281055) [![加入QQ群](https://img.shields.io/badge/已满-138988063-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=XIzkm_mV2xTsUtFxo63bmicYoDBA6Ifm&authKey=dDW%2F4qsmw3x9govoZY9w%2FoWAoC4wbHqGal%2BbqLzoS6VBarU8EBptIgPKN%2FviyC8j&noverify=0&group_code=138988063) [![加入QQ群](https://img.shields.io/badge/已满-151450850-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DkugnCg68PevlycJSKSwjhFqfIgrWWwR&authKey=pR1Pa5lPIeGF%2FFtIk6d%2FGB5qFi0EdvyErtpQXULzo03zbhopBHLWcuqdpwY241R%2F&noverify=0&group_code=151450850) [![加入QQ群](https://img.shields.io/badge/已满-224622315-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=F58bgRa-Dp-rsQJThiJqIYv8t4-lWfXh&authKey=UmUs4CVG5OPA1whvsa4uSespOvyd8%2FAr9olEGaWAfdLmfKQk%2FVBp2YU3u2xXXt76&noverify=0&group_code=224622315) [![加入QQ群](https://img.shields.io/badge/已满-287842588-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Nxb2EQ5qozWa218Wbs7zgBnjLSNk_tVT&authKey=obBKXj6SBKgrFTJZx0AqQnIYbNOvBB2kmgwWvGhzxR67RoRr84%2Bus5OadzMcdJl5&noverify=0&group_code=287842588) [![加入QQ群](https://img.shields.io/badge/已满-187944233-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=numtK1M_I4eVd2Gvg8qtbuL8JgX42qNh&authKey=giV9XWMaFZTY%2FqPlmWbkB9g3fi0Ev5CwEtT9Tgei0oUlFFCQLDp4ozWRiVIzubIm&noverify=0&group_code=187944233) [![加入QQ群](https://img.shields.io/badge/已满-228578329-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=G6r5KGCaa3pqdbUSXNIgYloyb8e0_L0D&authKey=4w8tF1eGW7%2FedWn%2FHAypQksdrML%2BDHolQSx7094Agm7Luakj9EbfPnSTxSi2T1LQ&noverify=0&group_code=228578329) [![加入QQ群](https://img.shields.io/badge/已满-191164766-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=GsOo-OLz53J8y_9TPoO6XXSGNRTgbFxA&authKey=R7Uy%2Feq%2BZsoKNqHvRKhiXpypW7DAogoWapOawUGHokJSBIBIre2%2FoiAZeZBSLuBc&noverify=0&group_code=191164766) [![加入QQ群](https://img.shields.io/badge/174569686-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=PmYavuzsOthVqfdAPbo4uAeIbu7Ttjgc&authKey=p52l8%2FXa4PS1JcEmS3VccKSwOPJUZ1ZfQ69MEKzbrooNUljRtlKjvsXf04bxNp3G&noverify=0&group_code=174569686) 点击按钮入群。

66
doc/README.md Normal file
View File

@@ -0,0 +1,66 @@
# 文档目录结构
本目录包含纪检初核系统的各类文档、测试数据和脚本。
## 目录说明
### 📁 docs/
项目文档目录
- `纪检初核系统功能说明书-V1.0.docx/md` - 系统功能说明书
- `纪检初核系统模块划分方案.md` - 模块划分方案
- `若依环境使用手册.docx` - 若依框架使用手册
- `中介黑名单弹窗优化设计.md` - UI设计文档
- `EasyExcel字典下拉框使用说明.md` - Excel导入使用说明
### 📁 api/
API接口文档目录
- `员工信息管理API文档.md` - 员工信息管理模块API
- `中介黑名单管理API文档.md` - 中介黑名单管理模块API
### 📁 scripts/
测试脚本目录
- `test_import.py` - 导入功能测试脚本
- `test_import_simple.py` - 简单导入测试脚本
- `test_uniqueness_validation.py` - 唯一性校验测试脚本
- `generate_test_data.py` - 测试数据生成脚本
### 📁 test-data/
测试数据目录
- `个人中介黑名单模板_1769667622015.xlsx` - 导入模板
- `个人中介黑名单测试数据_1000条.xlsx` - 测试数据第1批
- `个人中介黑名单测试数据_1000条_第2批.xlsx` - 测试数据第2批
- `中介人员信息表.csv` - 中介人员数据
- `中介主体信息表.csv` - 中介主体数据
### 📁 other/
其他文件目录
- `纪检初核系统-离线演示包/` - 离线演示包(解压版)
- `纪检初核系统-离线演示包.zip` - 离线演示包(压缩版)
- `ScreenShot_*.png` - 截图文件
### 📁 modules/
模块设计文档目录
- `01-项目管理模块/` - 项目管理模块文档
- `02-项目工作台/` - 项目工作台模块文档
- `03-信息维护模块.md` - 信息维护模块文档
- `04-参数配置模块.md` - 参数配置模块文档
- `05-系统管理模块.md` - 系统管理模块文档
## 使用说明
### 生成测试数据
```bash
cd doc/scripts
python generate_test_data.py
```
### 运行测试脚本
```bash
cd doc/scripts
python test_uniqueness_validation.py
```
### 导入测试数据
1.`test-data/` 目录下载对应的Excel文件
2. 在系统页面点击"导入"按钮
3. 选择文件并上传

View File

@@ -0,0 +1,582 @@
# 中介黑名单管理 API 文档
## 概述
中介黑名单管理模块提供个人和机构两类中介信息的增删改查、类型化模板下载和批量导入导出功能。
**基础路径**: `/ccdi/intermediary`
**权限标识前缀**: `dpc:intermediary`
---
## API 接口列表
### 1. 查询中介黑名单列表
**接口地址**: `GET /ccdi/intermediary/list`
**权限要求**: `dpc:intermediary:list`
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| name | String | 否 | 姓名/机构名称(模糊查询) |
| certificateNo | String | 否 | 证件号/统一社会信用代码(精确查询) |
| intermediaryType | String | 否 | 中介类型1=个人, 2=机构) |
| status | String | 否 | 状态0=正常, 1=停用) |
| pageNum | Integer | 否 | 页码默认1 |
| pageSize | Integer | 否 | 每页数量默认10 |
**响应示例**:
```json
{
"code": 200,
"msg": "操作成功",
"rows": [
{
"intermediaryId": 1,
"name": "张三",
"certificateNo": "110101199001011234",
"intermediaryType": "1",
"intermediaryTypeName": "个人",
"status": "0",
"statusName": "正常",
"remark": "测试数据",
"createTime": "2026-01-29 10:00:00"
}
],
"total": 1
}
```
**响应字段说明**:
| 字段名 | 类型 | 说明 |
|--------|------|------|
| intermediaryId | Long | 中介ID |
| name | String | 姓名/机构名称 |
| certificateNo | String | 证件号/统一社会信用代码 |
| intermediaryType | String | 中介类型1=个人, 2=机构) |
| intermediaryTypeName | String | 中介类型名称 |
| status | String | 状态0=正常, 1=停用) |
| statusName | String | 状态名称 |
| remark | String | 备注 |
| createTime | Date | 创建时间 |
---
### 2. 获取中介黑名单详细信息
**接口地址**: `GET /ccdi/intermediary/{intermediaryId}`
**权限要求**: `dpc:intermediary:query`
**路径参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| intermediaryId | Long | 是 | 中介ID |
**功能说明**: 根据中介类型返回不同的详情结构
**个人类型响应示例**:
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"intermediaryId": 1,
"name": "张三",
"certificateNo": "110101199001011234",
"intermediaryType": "1",
"intermediaryTypeName": "个人",
"status": "0",
"statusName": "正常",
"dataSource": "IMPORT",
"dataSourceName": "批量导入",
"indivType": "中介",
"indivGender": "M",
"indivGenderName": "男",
"indivCertType": "身份证",
"indivPhone": "13800138000",
"indivCompany": "XX公司",
"indivPosition": "经纪人"
}
}
```
**机构类型响应示例**:
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"intermediaryId": 2,
"name": "XX中介公司",
"intermediaryType": "2",
"intermediaryTypeName": "机构",
"status": "0",
"statusName": "正常",
"dataSource": "MANUAL",
"dataSourceName": "手动录入",
"corpCreditCode": "91110000XXXXXXXXXX",
"corpType": "有限责任公司",
"corpNature": "民企",
"corpLegalRep": "张三",
"corpAddress": "北京市朝阳区"
}
}
```
---
### 3. 新增中介黑名单
#### 3.1 新增个人中介黑名单
**接口地址**: `POST /ccdi/intermediary/person`
**权限要求**: `dpc:intermediary:add`
**请求体**:
```json
{
"name": "张三",
"certificateNo": "110101199001011234",
"indivType": "中介",
"indivSubType": "本人",
"indivGender": "M",
"indivCertType": "身份证",
"indivPhone": "13800138000",
"indivWechat": "zhangsan",
"indivAddress": "北京市朝阳区",
"indivCompany": "XX公司",
"indivPosition": "经纪人",
"status": "0",
"remark": "测试数据"
}
```
**字段说明**:
| 字段名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| name | String | 是 | 姓名 |
| certificateNo | String | 是 | 证件号 |
| indivType | String | 否 | 人员类型 |
| indivSubType | String | 否 | 人员子类型 |
| indivGender | String | 否 | 性别M男 F女 O其他 |
| indivCertType | String | 否 | 证件类型 |
| indivPhone | String | 否 | 手机号码 |
| indivWechat | String | 否 | 微信号 |
| indivAddress | String | 否 | 联系地址 |
| indivCompany | String | 否 | 所在公司 |
| indivPosition | String | 否 | 职位/职务 |
| indivRelatedId | String | 否 | 关联人员ID |
| indivRelation | String | 否 | 关联关系 |
| status | String | 是 | 状态0=正常, 1=停用) |
| remark | String | 否 | 备注 |
**响应示例**:
```json
{
"code": 200,
"msg": "操作成功"
}
```
#### 3.2 新增机构中介黑名单
**接口地址**: `POST /ccdi/intermediary/entity`
**权限要求**: `dpc:intermediary:add`
**请求体**:
```json
{
"name": "XX中介公司",
"corpCreditCode": "91110000XXXXXXXXXX",
"corpType": "有限责任公司",
"corpNature": "民企",
"corpIndustryCategory": "房地产",
"corpIndustry": "房地产业",
"corpEstablishDate": "2020-01-01",
"corpAddress": "北京市朝阳区",
"corpLegalRep": "张三",
"corpLegalCertType": "身份证",
"corpLegalCertNo": "110101199001011234",
"corpShareholder1": "李四",
"corpShareholder2": "王五",
"status": "0",
"remark": "测试数据"
}
```
**字段说明**:
| 字段名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| name | String | 是 | 机构名称 |
| corpCreditCode | String | 是 | 统一社会信用代码 |
| corpType | String | 否 | 主体类型 |
| corpNature | String | 否 | 企业性质 |
| corpIndustryCategory | String | 否 | 行业分类 |
| corpIndustry | String | 否 | 所属行业 |
| corpEstablishDate | Date | 否 | 成立日期 |
| corpAddress | String | 否 | 注册地址 |
| corpLegalRep | String | 否 | 法定代表人 |
| corpLegalCertType | String | 否 | 法定代表人证件类型 |
| corpLegalCertNo | String | 否 | 法定代表人证件号码 |
| corpShareholder1-5 | String | 否 | 股东信息 |
| status | String | 是 | 状态0=正常, 1=停用) |
| remark | String | 否 | 备注 |
**响应示例**:
```json
{
"code": 200,
"msg": "操作成功"
}
```
**注意**:
- 中介类型由系统自动设置,无需手动传递
- 新增个人中介时,机构专属字段会被自动忽略
- 新增机构中介时,证件号自动使用统一社会信用代码
---
### 4. 修改中介黑名单
#### 4.1 修改个人中介黑名单
**接口地址**: `PUT /ccdi/intermediary/person`
**权限要求**: `dpc:intermediary:edit`
**请求体**:
```json
{
"intermediaryId": 1,
"name": "张三",
"certificateNo": "110101199001011234",
"indivType": "中介",
"indivSubType": "本人",
"indivGender": "M",
"indivCertType": "身份证",
"indivPhone": "13800138000",
"indivWechat": "zhangsan",
"indivAddress": "北京市朝阳区",
"indivCompany": "XX公司",
"indivPosition": "经纪人",
"indivRelatedId": null,
"indivRelation": null,
"status": "0",
"remark": "测试数据"
}
```
**字段说明**:
| 字段名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| intermediaryId | Long | 是 | 中介ID |
| name | String | 是 | 姓名 |
| certificateNo | String | 否 | 证件号 |
| indivType | String | 否 | 人员类型 |
| indivSubType | String | 否 | 人员子类型 |
| indivGender | String | 否 | 性别M男 F女 O其他 |
| indivCertType | String | 否 | 证件类型 |
| indivPhone | String | 否 | 手机号码 |
| indivWechat | String | 否 | 微信号 |
| indivAddress | String | 否 | 联系地址 |
| indivCompany | String | 否 | 所在公司 |
| indivPosition | String | 否 | 职位/职务 |
| indivRelatedId | String | 否 | 关联人员ID |
| indivRelation | String | 否 | 关联关系 |
| status | String | 是 | 状态0=正常, 1=停用) |
| remark | String | 否 | 备注 |
**响应示例**:
```json
{
"code": 200,
"msg": "操作成功"
}
```
#### 4.2 修改机构中介黑名单
**接口地址**: `PUT /ccdi/intermediary/entity`
**权限要求**: `dpc:intermediary:edit`
**请求体**:
```json
{
"intermediaryId": 2,
"name": "XX中介公司",
"certificateNo": "91110000XXXXXXXXXX",
"corpCreditCode": "91110000XXXXXXXXXX",
"corpType": "有限责任公司",
"corpNature": "民企",
"corpIndustryCategory": "房地产",
"corpIndustry": "房地产业",
"corpEstablishDate": "2020-01-01",
"corpAddress": "北京市朝阳区",
"corpLegalRep": "张三",
"corpLegalCertType": "身份证",
"corpLegalCertNo": "110101199001011234",
"corpShareholder1": "李四",
"corpShareholder2": "王五",
"corpShareholder3": null,
"corpShareholder4": null,
"corpShareholder5": null,
"status": "0",
"remark": "测试数据"
}
```
**字段说明**:
| 字段名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| intermediaryId | Long | 是 | 中介ID |
| name | String | 是 | 机构名称 |
| certificateNo | String | 否 | 证件号(统一社会信用代码) |
| corpCreditCode | String | 否 | 统一社会信用代码 |
| corpType | String | 否 | 主体类型 |
| corpNature | String | 否 | 企业性质 |
| corpIndustryCategory | String | 否 | 行业分类 |
| corpIndustry | String | 否 | 所属行业 |
| corpEstablishDate | Date | 否 | 成立日期 |
| corpAddress | String | 否 | 注册地址 |
| corpLegalRep | String | 否 | 法定代表人 |
| corpLegalCertType | String | 否 | 法定代表人证件类型 |
| corpLegalCertNo | String | 否 | 法定代表人证件号码 |
| corpShareholder1-5 | String | 否 | 股东信息 |
| status | String | 是 | 状态0=正常, 1=停用) |
| remark | String | 否 | 备注 |
**响应示例**:
```json
{
"code": 200,
"msg": "操作成功"
}
```
**注意**:
- 中介类型intermediaryType不允许修改系统会自动根据接口设置正确的类型
- 使用个人中介接口时,机构专属字段会被自动清空
- 使用机构中介接口时,个人专属字段会被自动清空
---
### 5. 删除中介黑名单
**接口地址**: `DELETE /ccdi/intermediary/{intermediaryIds}`
**权限要求**: `dpc:intermediary:remove`
**路径参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| intermediaryIds | Long[] | 是 | 中介ID数组逗号分隔 |
**响应示例**:
```json
{
"code": 200,
"msg": "操作成功"
}
```
---
### 6. 导出中介黑名单
**接口地址**: `POST /ccdi/intermediary/export`
**权限要求**: `dpc:intermediary:export`
**请求参数**: 与查询列表接口相同(支持筛选条件)
**响应**: Excel 文件下载
---
### 7. 下载个人中介导入模板(带字典下拉框)
**接口地址**: `POST /ccdi/intermediary/importPersonTemplate`
**权限要求**: 无
**功能说明**: 下载的 Excel 模板中,性别、证件类型列会自动添加字典下拉框。
**响应**: Excel 模板文件下载
**Excel 格式说明**:
**Sheet1: 个人中介黑名单**
| 姓名 | 人员类型 | 人员子类型 | 性别▼ | 证件类型▼ | 证件号码 | 手机号码 | 微信号 | 联系地址 | 所在公司 | 职位 | 关联人员ID | 关联关系 | 备注 |
|------|---------|-----------|-------|-----------|---------|---------|--------|---------|---------|-----|-----------|---------|------|
| 张三 | 中介 | 本人 | 男 | 身份证 | 110101199001011234 | 13800138000 | zhangsan | 北京市朝阳区 | XX公司 | 经纪人 | - | - | 测试 |
**注**:带 ▼ 标记的列包含下拉框,选项来自字典:
- 性别:`ccdi_indiv_gender`
- 证件类型:`ccdi_certificate_type`
---
### 8. 下载机构中介导入模板(带字典下拉框)
**接口地址**: `POST /ccdi/intermediary/importEntityTemplate`
**权限要求**: 无
**功能说明**: 下载的 Excel 模板中,主体类型、企业性质列会自动添加字典下拉框。
**响应**: Excel 模板文件下载
**Excel 格式说明**:
**Sheet1: 机构中介黑名单**
| 机构名称 | 统一社会信用代码 | 主体类型▼ | 企业性质▼ | 行业分类 | 所属行业 | 成立日期 | 注册地址 | 法定代表人 | 法定代表人证件类型 | 法定代表人证件号码 | 股东1 | 股东2 | 股东3 | 股东4 | 股东5 | 备注 |
|---------|-----------------|-----------|-----------|---------|---------|---------|---------|-----------|-------------------|-------------------|-------|-------|-------|-------|-------|------|
| XX公司 | 91110000XXXXXXXXXX | 有限责任公司 | 民企 | 房地产 | 房地产业 | 2020-01-01 | 北京市朝阳区 | 张三 | 身份证 | 110101199001011234 | 李四 | 王五 | - | - | - | - |
**注**:带 ▼ 标记的列包含下拉框,选项来自字典:
- 主体类型:`ccdi_entity_type`
- 企业性质:`ccdi_enterprise_nature`
---
### 9. 导入个人中介黑名单
**接口地址**: `POST /ccdi/intermediary/importPersonData`
**权限要求**: `dpc:intermediary:import`
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| file | File | 是 | Excel 文件 |
| updateSupport | Boolean | 否 | 是否更新已存在数据默认false |
**Excel 格式**: 参见"下载个人中介导入模板"
**数据验证规则**:
1. **姓名**:必填,长度 1-100 字符
2. **证件号码**:必填,长度不超过 50 字符
3. **证件类型**:选填,默认"身份证"
4. **其他字段**:选填,按长度限制验证
5. **状态**:系统默认设置为"正常"0
6. **数据来源**:系统默认设置为"批量导入"IMPORT
**响应示例**:
```json
{
"code": 200,
"msg": "恭喜您,数据已全部导入成功!共 10 条"
}
```
---
### 10. 导入机构中介黑名单
**接口地址**: `POST /ccdi/intermediary/importEntityData`
**权限要求**: `dpc:intermediary:import`
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| file | File | 是 | Excel 文件 |
| updateSupport | Boolean | 否 | 是否更新已存在数据默认false |
**Excel 格式**: 参见"下载机构中介导入模板"
**数据验证规则**:
1. **机构名称**:必填,长度 1-200 字符
2. **统一社会信用代码**选填18 位
3. **其他字段**:选填,按长度限制验证
4. **状态**:系统默认设置为"正常"0
5. **数据来源**:系统默认设置为"批量导入"IMPORT
**响应示例**:
```json
{
"code": 200,
"msg": "恭喜您,数据已全部导入成功!共 10 条"
}
```
---
## 字典数据说明
导入模板中的下拉框选项来自系统字典管理,相关字典类型:
### 个人中介字典
| 字典类型 | 字典名称 | 用途 |
|---------|---------|------|
| ccdi_indiv_gender | 个人中介性别 | 个人中介模板性别下拉框 |
| ccdi_certificate_type | 证件类型 | 个人中介模板证件类型下拉框 |
### 机构中介字典
| 字典类型 | 字典名称 | 用途 |
|---------|---------|------|
| ccdi_entity_type | 主体类型 | 机构中介模板主体类型下拉框 |
| ccdi_enterprise_nature | 企业性质 | 机构中介模板企业性质下拉框 |
### 通用字典
| 字典类型 | 字典名称 | 用途 |
|---------|---------|------|
| ccdi_data_source | 数据来源 | 数据来源字段映射 |
---
## 错误码说明
| 错误码 | 说明 |
|--------|------|
| 200 | 操作成功 |
| 401 | 未授权,请先登录 |
| 403 | 无权限访问 |
| 500 | 服务器内部错误 |
## 业务错误信息
| 错误信息 | 说明 |
|----------|------|
| 姓名不能为空 | 个人中介导入时姓名为空 |
| 机构名称不能为空 | 机构中介导入时机构名称为空 |
| 证件号码不能为空 | 个人中介导入时证件号码为空 |
| 该证件号已存在 | 新增/导入时证件号重复 |
| 该统一社会信用代码已存在 | 新增/导入时信用代码重复 |
## 测试账号
- 用户名: `admin`
- 密码: `admin123`
测试前请先调用 `/login/test` 接口获取 Token。
## 更新日志
| 版本 | 日期 | 说明 |
|------|------|------|
| 1.0.0 | 2026-01-29 | 初始版本,支持个人和机构分类管理 |
| 1.1.0 | 2026-01-29 | 添加字典下拉框功能,分离个人/机构模板 |
| 1.2.0 | 2026-01-29 | 修改接口分离:新增个人/机构专用修改接口,修复中介类型修改问题 |
| 1.3.0 | 2026-01-29 | 新增接口分离:新增个人/机构专用新增接口,统一接口设计 |

View File

@@ -0,0 +1,271 @@
# 中介黑名单管理API测试报告
## 测试概述
**测试时间:** 2026-01-29 16:43:11
**测试环境:** http://localhost:8080
**测试账号:** admin
**测试脚本:** [test_intermediary_blacklist.sh](../scripts/test_intermediary_blacklist.sh)
**测试通过率:** 100.00%
## 测试结果汇总
| 指标 | 数值 |
|------|------|
| 测试场景总数 | 11 |
| 通过数量 | 11 |
| 失败数量 | 0 |
| 通过率 | 100.00% |
## 测试用例详情
### 1. 登录测试
**接口:** `POST /login/test`
**描述:** 使用测试账号登录获取认证token
**请求参数:**
```json
{
"username": "admin",
"password": "admin123"
}
```
**测试结果:** ✅ 通过
- 成功获取token
- token格式正确
---
### 2. 查询中介黑名单列表
**接口:** `GET /ccdi/intermediary/list`
**描述:** 分页查询中介黑名单列表
**请求参数:**
- pageNum: 1
- pageSize: 10
**测试结果:** ✅ 通过
- 返回分页数据结构正确
- 包含 total 和 rows 字段
- 数据格式符合预期
---
### 3. 新增个人中介黑名单
**接口:** `POST /ccdi/intermediary`
**描述:** 新增个人类型的中介黑名单记录
**请求参数:**
```json
{
"name": "测试个人中介_20260129_164311",
"certificateNo": "TESTCERT20260129_164311",
"intermediaryType": "1",
"remark": "自动化测试数据"
}
```
**测试结果:** ✅ 通过
- 成功创建记录
- 返回状态码 200
- 成功获取到新创建的ID: 2005
---
### 4. 新增机构中介黑名单
**接口:** `POST /ccdi/intermediary`
**描述:** 新增机构类型的中介黑名单记录
**请求参数:**
```json
{
"name": "测试机构中介_20260129_164311",
"certificateNo": "TESTORG20260129_164311",
"intermediaryType": "2",
"remark": "自动化测试机构数据"
}
```
**测试结果:** ✅ 通过
- 成功创建记录
- 返回状态码 200
- 成功获取到新创建的ID: 2006
---
### 5. 获取中介详情
**接口:** `GET /ccdi/intermediary/{intermediaryId}`
**描述:** 根据ID获取中介详细信息
**请求参数:**
- intermediaryId: 2005
**测试结果:** ✅ 通过
- 成功获取详情信息
- 返回完整的数据结构
- 包含所有必要字段
---
### 6. 修改中介黑名单
**接口:** `PUT /ccdi/intermediary`
**描述:** 修改已存在的中介信息
**请求参数:**
```json
{
"intermediaryId": 2005,
"name": "测试个人中介_修改",
"certificateNo": "TESTCERT20260129_164311",
"intermediaryType": "1",
"status": "1",
"remark": "修改后的自动化测试数据"
}
```
**测试结果:** ✅ 通过
- 成功更新记录
- 返回状态码 200
- 数据修改生效
---
### 7. 导出中介黑名单列表
**接口:** `POST /ccdi/intermediary/export`
**描述:** 导出中介黑名单数据为Excel文件
**请求参数:**
```json
{}
```
**测试结果:** ✅ 通过
- 成功导出Excel文件
- 文件格式正确
- 文件保存至: test_output/test6_export.xlsx
---
### 8. 下载个人中介导入模板
**接口:** `POST /ccdi/intermediary/importPersonTemplate`
**描述:** 下载个人中介导入Excel模板
**测试结果:** ✅ 通过
- 成功下载模板文件
- 文件格式正确
- 文件保存至: test_output/test7_person_template.xlsx
---
### 9. 下载机构中介导入模板
**接口:** `POST /ccdi/intermediary/importEntityTemplate`
**描述:** 下载机构中介导入Excel模板
**测试结果:** ✅ 通过
- 成功下载模板文件
- 文件格式正确
- 文件保存至: test_output/test8_entity_template.xlsx
---
### 10. 条件查询(按中介类型)
**接口:** `GET /ccdi/intermediary/list`
**描述:** 按中介类型筛选查询
**请求参数:**
- pageNum: 1
- pageSize: 10
- intermediaryType: 1 (个人)
**测试结果:** ✅ 通过
- 查询结果正确
- 数据筛选生效
- 返回指定类型的数据
---
### 11. 条件查询(按状态)
**接口:** `GET /ccdi/intermediary/list`
**描述:** 按状态筛选查询
**请求参数:**
- pageNum: 1
- pageSize: 10
- status: 1
**测试结果:** ✅ 通过
- 查询结果正确
- 数据筛选生效
- 返回指定状态的数据
---
### 12. 删除中介黑名单
**接口:** `DELETE /ccdi/intermediary/{intermediaryIds}`
**描述:** 批量删除中介黑名单记录
**请求参数:**
- intermediaryIds: 2005,2006
**测试结果:** ✅ 通过
- 成功删除记录
- 返回状态码 200
- 数据删除生效
---
## 测试文件清单
### 响应JSON文件
- `test1_list_response.json` - 查询列表响应
- `test2_add_person_response.json` - 新增个人中介响应
- `test3_add_entity_response.json` - 新增机构中介响应
- `test4_get_info_response.json` - 获取详情响应
- `test5_edit_response.json` - 修改中介响应
- `test9_remove_response.json` - 删除中介响应
- `test10_query_by_type_response.json` - 按类型查询响应
- `test11_query_by_status_response.json` - 按状态查询响应
### Excel文件
- `test6_export.xlsx` - 导出的数据文件
- `test7_person_template.xlsx` - 个人中介导入模板
- `test8_entity_template.xlsx` - 机构中介导入模板
### 报告文件
- `test_report_20260129_164311.txt` - 详细测试日志
## 结论
**所有测试用例均已通过中介黑名单管理API功能完整且运行正常。**
### 主要验证点
1. ✅ 认证授权机制正常
2. ✅ CRUD操作功能完整
3. ✅ 分页查询功能正常
4. ✅ 条件筛选功能正常
5. ✅ 文件导入导出功能正常
6. ✅ 批量操作功能正常
### 建议
1. 建议在实际部署前进行压力测试
2. 建议添加更多的边界条件测试用例
3. 建议完善错误码和错误信息的文档
---
**报告生成时间:** 2026-01-29 16:43:11
**测试工具:** curl + bash
**报告生成者:** Claude Code

View File

@@ -0,0 +1,348 @@
# 员工信息管理 API 文档
## 概述
员工信息管理模块提供员工及其亲属信息的增删改查、批量导入导出功能。
**基础路径**: `/ccdi/employee`
**权限标识前缀**: `dpc:employee`
---
## API 接口列表
### 1. 查询员工列表
**接口地址**: `GET /ccdi/employee/list`
**权限要求**: `dpc:employee:list`
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| name | String | 否 | 姓名(模糊查询) |
| tellerNo | String | 否 | 柜员号(精确查询) |
| deptId | Long | 否 | 所属部门ID |
| idCard | String | 否 | 身份证号(精确查询) |
| status | String | 否 | 状态0=在职, 1=离职) |
| pageNum | Integer | 否 | 页码默认1 |
| pageSize | Integer | 否 | 每页数量默认10 |
**响应示例**:
```json
{
"code": 200,
"msg": "操作成功",
"rows": [
{
"employeeId": 1,
"name": "张三",
"tellerNo": "001",
"deptId": 100,
"deptName": "总部",
"idCard": "110101199001011234",
"phone": "13800138000",
"hireDate": "2020-01-01",
"status": "0",
"statusDesc": "在职",
"createTime": "2026-01-28 10:00:00"
}
],
"total": 1
}
```
**响应字段说明**:
| 字段名 | 类型 | 说明 |
|--------|------|------|
| employeeId | Long | 员工ID |
| name | String | 姓名 |
| tellerNo | String | 柜员号 |
| deptId | Long | 所属部门ID |
| deptName | String | 所属部门名称(关联 sys_dept 表) |
| idCard | String | 身份证号 |
| phone | String | 电话 |
| hireDate | Date | 入职时间 |
| status | String | 状态0=在职, 1=离职) |
| statusDesc | String | 状态描述 |
| createTime | Date | 创建时间 |
---
### 2. 查询员工详情
**接口地址**: `GET /ccdi/employee/{employeeId}`
**权限要求**: `dpc:employee:query`
**路径参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| employeeId | Long | 是 | 员工ID |
**响应示例**:
```json
{
"code": 200,
"msg": "操作成功",
"data": {
"employeeId": 1,
"name": "张三",
"tellerNo": "001",
"deptId": 100,
"idCard": "110101199001011234",
"phone": "13800138000",
"hireDate": "2020-01-01",
"status": "0",
"statusDesc": "在职",
"createTime": "2026-01-28 10:00:00",
"relatives": [
{
"relativeId": 1,
"employeeId": 1,
"relativeName": "李四",
"relativeIdCard": "110101199001011235",
"relativePhone": "13800138001",
"relationship": "配偶"
}
]
}
}
```
---
### 3. 新增员工
**接口地址**: `POST /ccdi/employee`
**权限要求**: `dpc:employee:add`
**请求头**:
```
Content-Type: application/json
Authorization: Bearer {token}
```
**请求体**:
```json
{
"name": "张三",
"tellerNo": "001",
"deptId": 100,
"idCard": "110101199001011234",
"phone": "13800138000",
"hireDate": "2020-01-01",
"status": "0",
"relatives": [
{
"relativeName": "李四",
"relativeIdCard": "110101199001011235",
"relativePhone": "13800138001",
"relationship": "配偶"
}
]
}
```
**字段说明**:
| 字段名 | 类型 | 必填 | 说明 | 校验规则 |
|--------|------|------|------|----------|
| name | String | 是 | 姓名 | 最大100字符 |
| tellerNo | String | 是 | 柜员号 | 最大50字符唯一 |
| deptId | Long | 否 | 所属部门ID | |
| idCard | String | 是 | 身份证号 | 18位符合国标唯一 |
| phone | String | 否 | 电话 | 11位手机号 |
| hireDate | Date | 否 | 入职时间 | yyyy-MM-dd |
| status | String | 是 | 状态 | 0=在职, 1=离职 |
| relatives | Array | 否 | 亲属列表 | |
**亲属对象字段**:
| 字段名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| relativeName | String | 是 | 亲属姓名 |
| relativeIdCard | String | 否 | 亲属身份证号 |
| relativePhone | String | 否 | 亲属手机号 |
| relationship | String | 是 | 与员工关系 |
**响应示例**:
```json
{
"code": 200,
"msg": "操作成功"
}
```
---
### 4. 编辑员工
**接口地址**: `PUT /ccdi/employee`
**权限要求**: `dpc:employee:edit`
**请求体**:
```json
{
"employeeId": 1,
"name": "张三",
"tellerNo": "001",
"deptId": 100,
"idCard": "110101199001011234",
"phone": "13800138000",
"hireDate": "2020-01-01",
"status": "0",
"relatives": [
{
"relativeName": "李四",
"relativeIdCard": "110101199001011235",
"relativePhone": "13800138001",
"relationship": "配偶"
}
]
}
```
**字段说明**: 与新增接口相同employeeId 为必填项。
**响应示例**:
```json
{
"code": 200,
"msg": "操作成功"
}
```
---
### 5. 删除员工
**接口地址**: `DELETE /ccdi/employee/{employeeIds}`
**权限要求**: `dpc:employee:remove`
**路径参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| employeeIds | Long[] | 是 | 员工ID数组逗号分隔 |
**响应示例**:
```json
{
"code": 200,
"msg": "操作成功"
}
```
**注意**: 删除员工时会级联删除该员工的所有亲属信息。
---
### 6. 导出员工信息
**接口地址**: `POST /ccdi/employee/export`
**权限要求**: `dpc:employee:export`
**请求参数**: 与查询列表接口相同(支持筛选条件)
**响应**: Excel 文件下载
---
### 7. 下载导入模板(带字典下拉框)
**接口地址**: `POST /ccdi/employee/importTemplate`
**权限要求**: 无
**功能说明**: 下载的 Excel 模板中,"状态"列会自动添加字典下拉框,方便用户选择。
**响应**: Excel 模板文件下载
**Excel 格式说明**:
**Sheet1: 员工信息**
| 姓名 | 柜员号 | 所属部门ID | 身份证号 | 电话 | 入职时间 | 状态▼ |
|------|--------|------------|----------|------|----------|------|
| 张三 | 001 | 100 | 110101199001011234 | 13800138000 | 2020-01-01 | 在职 |
**注**:带 ▼ 标记的列包含下拉框,选项来自字典 `ccdi_employee_status`
**使用 @DictDropdown 注解实现**:
- 状态字段使用 `@DictDropdown(dictType = "ccdi_employee_status")` 注解
- 系统自动从 Redis 缓存读取字典数据并生成下拉框
- 下拉选项可动态更新,刷新字典缓存后生效
---
### 8. 导入员工信息
**接口地址**: `POST /ccdi/employee/importData`
**权限要求**: `dpc:employee:import`
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| file | File | 是 | Excel 文件 |
| updateSupport | Boolean | 否 | 是否更新已存在数据默认false |
**Excel 格式**:
**Sheet1: 员工信息**
| 姓名 | 柜员号 | 所属部门ID | 身份证号 | 电话 | 入职时间 | 状态 |
|------|--------|------------|----------|------|----------|------|
| 张三 | 001 | 100 | 110101199001011234 | 13800138000 | 2020-01-01 | 在职 |
**Sheet2: 亲属信息(可选)**
| 员工身份证号 | 亲属姓名 | 亲属身份证号 | 亲属手机号 | 与员工关系 |
|--------------|----------|--------------|------------|------------|
| 110101199001011234 | 李四 | 110101199001011235 | 13800138001 | 配偶 |
**响应示例**:
```json
{
"code": 200,
"msg": "恭喜您,数据已全部导入成功!共 10 条"
}
```
---
## 错误码说明
| 错误码 | 说明 |
|--------|------|
| 200 | 操作成功 |
| 401 | 未授权,请先登录 |
| 403 | 无权限访问 |
| 500 | 服务器内部错误 |
## 业务错误信息
| 错误信息 | 说明 |
|----------|------|
| 该柜员号已存在 | 新增/编辑时柜员号重复 |
| 该身份证号已存在 | 新增/编辑时身份证号重复 |
| 姓名不能为空 | 新增时姓名为空 |
| 身份证号格式不正确 | 身份证号不符合18位国标 |
| 电话格式不正确 | 手机号不符合11位格式 |
| 状态只能填写'在职'或'离职' | 状态值不正确 |
---
## 测试账号
- 用户名: `admin`
- 密码: `admin123`
测试前请先调用 `/login/test` 接口获取 Token。

View File

@@ -0,0 +1,226 @@
# EasyExcel字典下拉框使用说明
## 功能概述
本项目实现了EasyExcel自定义WriteHandler拦截器可以在生成Excel模板时自动添加基于若依框架字典数据的下拉框。
## 核心组件
### 1. @DictDropdown 注解
位置:`com.ruoyi.common.annotation.DictDropdown`
用于标注需要添加下拉框的字段。
**属性说明:**
| 属性 | 类型 | 默认值 | 说明 |
|-----|------|--------|------|
| dictType | String | 必填 | 字典类型编码,对应若依字典管理中的字典类型 |
| displayType | DisplayType | LABEL | 下拉框显示内容类型LABEL显示标签VALUE显示值 |
| strict | boolean | true | 是否仅允许选择下拉框中的值 |
| hiddenSheetName | String | "dict_hidden" | 隐藏Sheet名称用于存储大量下拉选项 |
### 2. DictDropdownWriteHandler 处理器
位置:`com.ruoyi.dpc.handler.DictDropdownWriteHandler`
核心功能:
- 解析实体类中的@DictDropdown注解
- 从若依字典缓存获取字典数据
- 为对应列添加下拉框验证
- 自动处理下拉选项超过Excel字符限制的情况使用隐藏Sheet
### 3. EasyExcelUtil 工具类扩展
位置:`com.ruoyi.dpc.utils.EasyExcelUtil`
新增方法:
- `importTemplateWithDictDropdown()` - 下载带字典下拉框的导入模板
- `exportExcelWithDictDropdown()` - 导出带字典下拉框的Excel
## 使用示例
### 步骤1在实体类上添加注解
```java
package com.ruoyi.dpc.domain.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.ruoyi.common.annotation.DictDropdown;
import lombok.Data;
@Data
public class CcdiEmployeeExcel {
@ExcelProperty(value = "姓名", index = 0)
@ColumnWidth(15)
private String name;
@ExcelProperty(value = "柜员号", index = 1)
@ColumnWidth(15)
private String tellerNo;
// 添加字典下拉框注解
@ExcelProperty(value = "状态", index = 6)
@ColumnWidth(10)
@DictDropdown(dictType = "ccdi_employee_status")
private String status;
}
```
### 步骤2在Controller中使用
```java
@RestController
@RequestMapping("/ccdi/employee")
public class CcdiEmployeeController {
/**
* 下载带字典下拉框的导入模板
*/
@PostMapping("/importTemplateWithDropdown")
public void importTemplateWithDropdown(HttpServletResponse response) {
EasyExcelUtil.importTemplateWithDictDropdown(
response,
CcdiEmployeeExcel.class,
"员工信息"
);
}
/**
* 导出带字典下拉框的Excel
*/
@PostMapping("/exportWithDropdown")
public void exportWithDropdown(HttpServletResponse response) {
List<CcdiEmployeeExcel> list = employeeService.selectEmployeeList();
EasyExcelUtil.exportExcelWithDictDropdown(
response,
list,
CcdiEmployeeExcel.class,
"员工信息"
);
}
}
```
## 高级用法
### 1. 显示字典键值而非标签
```java
@DictDropdown(dictType = "ccdi_employee_status", displayType = DisplayType.VALUE)
private String status;
```
### 2. 允许手动输入(非严格模式)
```java
@DictDropdown(dictType = "ccdi_employee_status", strict = false)
private String status;
```
### 3. 自定义隐藏Sheet名称
```java
@DictDropdown(dictType = "ccdi_employee_status", hiddenSheetName = "employee_status_dict")
private String status;
```
## 注意事项
1. **必须指定@ExcelProperty的index属性**
- 字段必须指定@ExcelProperty注解的index值,否则无法正确映射列位置
2. **字典数据必须预先加载到缓存**
- 使用前需要确保字典数据已经加载到Redis缓存中
- 可通过若依系统的字典管理功能预热缓存
3. **下拉选项数量限制**
- 当下拉选项总长度超过255字符时自动使用隐藏Sheet存储
- 隐藏Sheet在Excel中不可见但下拉框功能正常
4. **字段必须标注@ExcelProperty注解**
- 只有同时标注了@ExcelProperty和@DictDropdown的字段才会添加下拉框
## 测试验证
### 接口测试
1. 启动项目后访问Swagger UI`http://localhost:8080/swagger-ui/index.html`
2. 找到员工信息管理相关接口:
- `POST /ccdi/employee/importTemplateWithDropdown` - 下载带字典下拉框的模板
3. 调用接口下载模板检查Excel中的下拉框是否正常
### 手动验证
1. 打开下载的Excel模板
2. 点击标注了下拉框的列(如"状态"列)
3. 检查是否出现下拉箭头和选项列表
4. 尝试选择和输入,验证验证规则是否生效
## 技术实现细节
### Excel下拉列表限制处理
Excel对下拉列表的直接字符数有限制约255字符本项目采用以下策略
1. **选项较少时(<255字符**
- 直接使用 `DataValidationHelper.createExplicitListConstraint()` 创建下拉列表
- 下拉选项内联在单元格验证中
2. **选项较多时≥255字符**
- 创建隐藏Sheet存储所有选项
- 使用 `DataValidationHelper.createFormulaListConstraint()` 通过公式引用
- 自动隐藏Sheet`workbook.setSheetHidden()`
### 字典数据获取
```
┌─────────────┐ 缓存查询 ┌─────────────┐
│ DictDropdown │ ───────────▶ │ DictUtils │
│ 注解 │ │ .getDictCache() │
└─────────────┘ └─────────────┘
┌─────────────┐
│ Redis缓存 │
│ sys_dict:key │
└─────────────┘
```
### 列索引映射
通过反射获取字段的@ExcelProperty注解中的index值,确保下拉框添加到正确的列。
## 常见问题
### Q1下拉框没有显示
**可能原因:**
1. 字典数据未加载到缓存
2. 字段未指定@ExcelProperty的index值
3. 字典类型编码错误
**解决方法:**
1. 在若依系统字典管理中,进入对应字典类型,刷新缓存
2. 检查实体类字段注解是否正确
3. 确认dictType值与字典管理中的字典类型一致
### Q2下拉选项显示不完整
**原因:** 选项字符数超过255字符但隐藏Sheet创建失败
**解决方法:** 检查日志中的错误信息确保有权限创建隐藏Sheet
### Q3可以手动输入非下拉选项的值吗
**答案:** 可以,通过设置 `strict = false` 允许手动输入
## 更新日志
| 版本 | 日期 | 说明 |
|------|------|------|
| 1.0.0 | 2026-01-29 | 初始版本,支持字典下拉框功能 |

View File

@@ -0,0 +1,153 @@
# 中介黑名单弹窗优化设计
## 需求概述
优化中介黑名单的添加弹窗交互流程:
1. 点击新增后先选择中介类型(个人/机构)
2. 然后弹出对应类型的信息输入窗口
3. 不需要tab栏直接显示对应类型的表单
4. 机构类型只需输入一次证件号,该值同时作为"证件号"和"统一社会信用代码"
## 设计方案
### 1. 交互流程
**新增操作流程:**
1. 用户点击"新增"按钮
2. 弹出一个简洁的对话框,顶部有两个大卡片式按钮:【个人】和【机构】
3. 用户点击其中一个类型按钮
4. 对应的表单立即展开显示在下方(无需确认操作)
5. 用户填写信息后点击"确定"提交
**修改操作:**
- 修改时直接显示原有数据的表单,不允许切换类型
### 2. 界面布局
```
┌─────────────────────────────────────┐
│ 添加中介黑名单 │
├─────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ │
│ │ 个人 │ │ 机构 │ │ ← 大卡片式选择按钮(仅新增时显示)
│ └─────────┘ └─────────┘ │
│ │
│ ──────────────────────────────── │ ← 分隔线
│ │
│ [对应类型的表单字段] │
│ • 姓名/机构名称 │
│ • 证件号 │
│ • 机构类型:统一社会信用代码 │
│ • 其他选填字段... │
│ │
├─────────────────────────────────────┤
│ [ 确定 ] [ 取消 ] │
└─────────────────────────────────────┘
```
### 3. 表单字段
**个人类型表单字段:**
- 姓名/机构名称*(必填)
- 证件号*(必填)
- 人员类型
- 人员子类型
- 性别
- 证件类型
- 手机号码
- 微信号
- 联系地址
- 所在公司
- 职位
- 关联人员ID
- 关联关系
- 备注
**机构类型表单字段:**
- 姓名/机构名称*(必填)
- 证件号*(必填,自动同步到统一社会信用代码)
- 主体类型
- 企业性质
- 成立日期
- 行业分类
- 所属行业
- 注册地址
- 法定代表人
- 法定代表人证件类型
- 法定代表人证件号码
- 股东1-5
- 备注
### 4. 表单验证规则
**个人类型验证:**
```javascript
rules: {
name: [
{ required: true, message: "姓名不能为空", trigger: "blur" },
{ max: 100, message: "姓名长度不能超过100个字符", trigger: "blur" }
],
certificateNo: [
{ required: true, message: "证件号不能为空", trigger: "blur" },
{ max: 50, message: "证件号长度不能超过50个字符", trigger: "blur" }
],
remark: [
{ max: 500, message: "备注长度不能超过500个字符", trigger: "blur" }
]
}
```
**机构类型验证:**
```javascript
rules: {
name: [
{ required: true, message: "机构名称不能为空", trigger: "blur" },
{ max: 100, message: "机构名称长度不能超过100个字符", trigger: "blur" }
],
certificateNo: [
{ required: true, message: "证件号不能为空", trigger: "blur" },
{ max: 18, message: "统一社会信用代码长度为18位", trigger: "blur" }
],
remark: [
{ max: 500, message: "备注长度不能超过500个字符", trigger: "blur" }
]
}
```
### 5. 边界情况处理
| 场景 | 处理方式 |
|------|----------|
| 用户点击新增后未选择类型就点确定 | 禁用"确定"按钮,直到选择类型 |
| 用户选择类型后想重新选择 | 只有关闭弹窗重新打开才能选择 |
| 修改操作时类型锁定 | 隐藏类型选择器,直接显示对应表单 |
| 表单验证失败 | 高亮显示错误字段,滚动到第一个错误位置 |
| 网络请求失败 | 显示错误提示,弹窗保持打开状态 |
### 6. 用户体验优化
1. **视觉反馈**
- 类型选择按钮在未选中时有hover效果
- 选中后按钮变为高亮状态,其他按钮变灰
- 表单展开有淡入动画
2. **输入提示**
- 个人类型的证件号字段下方显示提示:"请输入证件号码"
- 机构类型的证件号字段下方显示提示:"统一社会信用代码18位"
3. **表单布局**
- 保持两列布局,充分利用空间
- 必填项(姓名、证件号)标记红色星号
### 7. 技术实现要点
**状态管理:**
- 新增模式:`isAddMode: true`,显示类型选择器
- 修改模式:`isAddMode: false`,隐藏类型选择器
- 已选类型:`selectedType: '1' | '2' | null`
**数据同步:**
- 机构类型提交时,将 `form.certificateNo` 的值同时赋给 `form.corpCreditCode`

Binary file not shown.

View File

@@ -0,0 +1,388 @@
# 纪检初核系统功能说明书
文档版本V1.0
最后更新日期2026年1月16日
编写目的:本文档旨在全面排查员工异常行为初核系统的核心功能模块、操作流程及业务价值,为系统开发、测试及用户操作提供明确依据。系统旨在通过自动化数据分析与风险模型,高效识别员工潜在风险行为。
# 一.项目管理模块
本模块为系统首页,用于管理所有历史创建的核查项目。页面主要分为导航与搜索区、项目列表区和快捷入口区三大部分。
# 1、原型图
(1) 首页
(2) 新建项目 弹窗页入口
(3) 导入历史项目 弹窗页入口
# 2、导航与搜索区
项目搜索:支持通过输入关键词,对项目名称进行模糊搜索。
新建项目:点击打开一个标准表单,填写项目名称、人员等完整信息,自定义创建新项目。
# 3、项目列表区
本区域以表格形式清晰展示所有初核项目,是用户进行项目管理和监控的核心面板。
# (1) 列表信息列:
项目名称:显示项目名称及下方的简要描述。
创建时间:显示项目的创建日期。
状态:通过色块直观标识项目状态。包括“进行中”、“已完成”等。
目标人数:计划核查的员工总数。
预警人数:当前已被风险模型标记为存在异常行为提示的员工数量。对于“进行中”项目,此数据动态更新。
# (2操作列
查看结果(适用于已完成项目):跳转至该项目的初核结果页。
重新分析(适用于已完成项目): 基于原有数据, 重新运行风险模型, 更新分析结果。
归档将已结束且无需日常关注的项目移入归档库项目结束后可以统一归档并将相关的数据、分析过程图谱、流水等生成PDF文件导出。
进入项目(适用于进行中项目):进入该项目的工作台,开展数据管理、风险初核、专项排查等具体工作。
# 4、快捷入口区
本区域提供一键触达的高频操作按钮,提升常用工作流的启动效率。举例:
(1) 导入历史项目:复制一个历史项目的配置(如人员范围、流水、征信数据配置),快速创建新项目,实现项目模板复用:包括目标人群的流水、征信等信息
(2) 创建当季的季度初核:快速启动一个标准化的季度周期性排查项目,系统可预填当前季度时间范围等配置。
(3) 创建新员工排查:为特定新员工创建专项排查任务。
# 二.项目工作台
用户从项目列表点击“进入项目”后,将进入具体项目的操作空间,涵盖从数据准备到风险识别的全流程。并且通过侧边导航栏可以实现:
返回项目列表:返回当前项目的上一层列表页。
项目状态:明确标识当前项目阶段为“已完成”,提示用户核心分析已结束,当前可能在进行数据补充或复查。
最后更新:显示数据或项目状态的最后变更时间(`2024-01-20 15:30`),用于判断信息的时效性。
# 第一部分数据管理
本页面是进入具体项目后的核心工作台之一,将来自行内流水、征信数据、人工上传不同来源和格式的数据,在一个界面内完成统一接入;并且自动化检查识别数据问题,保证后续风险识别的准确性。
# 1、数据导入
# 1拉取本行信息
功能:点击后需要输入证件号码或者导入文件(上传身份证号表格),自动拉取行内流水、资产等数据信息
# (2) 他行流水导入:
功能批量上传员工的他行银行、或者支付宝微信等交易流水文件。支持Excel、文本型PDF。系统自动解析文件内容提取交易金额、对手方、交易时间、余额、摘要等关键字段。
# (3征信信息导入
功能上传个人信用报告。支持HTML格式的网页文件。系统自动解析报告提取信贷账户、负债总额、担保信息、查询记录等核心数据。
# (4) 员工家庭关系导入:
功能:上传员工的家庭成员信息,用于构建关系人图谱和关联分析。
(5) 名单库选择: 从信息维护——中介库管理内的名单选择确认后的可疑名单
(6) 生成报告:生成初核结果,跳转结果页
# 2、数据质量检查
功能:在数据导入后,系统自动执行一套预定义的质量规则,对数据集进行检查。
检查结果详情:以列表形式直观展示发现的具体问题,例如:
发现23条数据格式不一致如日期格式不统一、金额单位混杂。
发现5条余額链条性异常指相邻交易记录间的余额计算逻辑断裂可能意味着数据缺失或被篡改。
发现12条缺失关键字段如交易记录缺少对手方账号或户名。
质量评分仪表盘:通过三个关键指标量化数据质量:
数据完整性 $(98.5\%)$ :衡量必填字段的填充率。
格式一致性 $(95.2\%)$ :衡量数据遵循预定格式规范的程度。
余额连续性 (92.8%): 衡量流水数据中余额连续、计算正确的程度。
# 第二部分 初核结果总览
本页面为创建的项目中上传的数据经过模型识别出的风险信息总览及明细。
# 1、风险总览
# (1) 风险全局仪表盘
功能:以数据卡片形式集中展示项目整体风险态势。
总人数项目覆盖的员工总数500人
无预警人数432人
低风险人数38人
中风险人数20人
高风险人数10人
# (2) 高风险/中风险人员名单
按风险评分降序排列以列表形式展示所有高风险人员清单以及中风险人员中评分最高的10名员工。信息包括姓名、身份证号、部门、风险评分、触发模型数、核心异常点系统自动提炼的最显著风险
# (3) 查看单个风险人员详情
点击每个风险人员的【查看详情】入口,可钻取至单个员工的全面风险报告。包括其所有异常行为列表、每个行为对应的模型判断依据(规则),以及资产分析、征信概览、关系人图谱等模块。并且针对可疑交易及可疑对象,可以手动添加至关注方。
风险总览:
批量生成报告
批量导出证据
批量添加到关注列表
单个人员详情中的异常明细页面:
添加到案例库
单个人员详情中的资产分析页面:
单个人员详情中的征信摘要页面:
3笔 $>50$ 万
# 2、风险模型
# (1) 模型触发情况总计
内容:以表格形式展示所有风险模型的整体触发情况。包括:模型名称、触发总人数、主要触发人员示例。
操作:点击任一模型的“查看详情”,可跳转至触发该模型的全体人员列表(即“单模型触发列表”)。
# (2各模型触发人员列表
内容通过下拉菜单选择触发某一特定风险模型如“大额交易”、或者同时触发多个如2个以上风险模型的高风险人员、或者通过“搜索人员姓名或工号...”进行精确查询,并支持将常用的筛选组合保存为固定策略,便于下次一键调用。
操作:通过查询可以得到该模型的所有触发人员,并且点击【查看详情】可查看该员工详细的风险情况。
模型触发情况、单模型/多模型筛选触发现图:
# 3、风险明细
# (1) 涉疑交易明细表
功能:展示涉及可疑交易的记录,支持按「全部可疑人员类型」「名单库命中」「模型规则命中」等维度筛选数据,且支持穿透式查看交易流水,用于定位异常资金往来。
内容:包括交易时间、可疑人员、关联人、关联员工(姓名+柜员号),关系(是否是员工本人、或者配偶等关系)、摘要、交易类型、交易金额等字段。
操作:点击「查看详情」,将跳转至可疑流水详情页,展示该条流水的交易对手、交易类型、交易时间等完整信息。
明细表列表内容:
涉疑交易明细表
全部可疑人员类型
↓导出
<table><tr><td>序号</td><td>交易时间</td><td>可疑人员</td><td>关联人</td><td>关联员工</td><td>关系</td><td>摘要/交易类型</td><td>交易金额</td><td>操作</td></tr><tr><td>1</td><td>2024-01-15</td><td>孙七</td><td>孙七</td><td>孙七(809901)</td><td>本人</td><td>/转账</td><td>+¥500,000</td><td>查看详情</td></tr><tr><td>2</td><td>2024-01-10</td><td>王五</td><td>孙七</td><td>孙七(809901)</td><td>配偶</td><td>零钱商户消费</td><td>-¥200,000</td><td>查看详情</td></tr></table>
可疑流水查看详情:
# (2涉及违法人员清单表
内容:展示经系统识别、在外部违法名单库中命中的人员信息,用于快速定位高风险人员,包括违法人员姓名、身份证号、是否为失信被执行人、是否有刑事判决记录、是否有行政处罚记录、是否涉及公安案件、是否被限制高消费、违法信息更新时间等字段。
操作:点击「查看详情」,将展示该人员的违法详情、更新日期等完整背景信息,辅助纪检核查。
涉及违法人员清单表
导出
<table><tr><td>序号</td><td>姓名</td><td>身份证号</td><td>失信被执行人</td><td>刑事判决</td><td>行政处罚</td><td>公安涉案记录</td><td>限制高消费</td><td>违法信息更新时间</td><td>操作</td></tr><tr><td>1</td><td>孙七</td><td>331081199405133029</td><td>是</td><td>否</td><td>是</td><td>是</td><td>是</td><td>2025-03-15</td><td>查看详情</td></tr><tr><td>2</td><td>王五</td><td>331081199405133020</td><td>否</td><td>否</td><td>否</td><td>否</td><td>否</td><td>2025-03-15</td><td>查看详情</td></tr></table>
# 基础信息
姓名:张三
身份证号330106199001011234
# 失信被执行人
状态:是
法院:杭州市中院
标的50万
时间2023-05-15
# 行政处罚
状态:是
类型:罚款
事由:违规经营
机关:杭州市场监管局
# 其他
限制高消费:是
刑事/公安涉案:无
更新时间2025-03-15
# (3) 异常账户清单表
内容:独立列出经模型识别出的所有异常账户,用于监控账户异动,防范资金风险。信息包括:账号、开户人、银行、异常类型(如“突然销户”、“异地启用”)、异常发生时间、状态(如「已销户」「正常」「冻结」)等字段。
操作:点击「查看详情」,可以查看该账号的所有异常交易明细。
# 4、批量导出数据及报告
支持将上述所有列表人员列表、异常清单等导出为Excel。并可一键生成项目多维统计报告PDF/Word从模型触发排行、部门风险分布、风险评分区间等多维度进行分析总结。
# 第三部分 专项排查
本页面为针对单人用户的的深度调查:
# 1、员工详查分析
功能:输入目标员工的身份证号,可选择自定义时间范围,即可根据检查对像及其主要家庭成员(配偶等),根据收入、资产、负债三者的关系进行初核判断,形成正常、收入+负债远低于资产、收入+负债远高于资产等结果风险提示。
# 2、图谱分析
功能:通过图形化方式,揭示隐藏的人员与资金关系网络。输入身份证号,点击“生成图谱”,结果在右侧可视化区域动态呈现。
# (1) 关系人图谱
通过身份证号等信息,可筛选展示以该员工为中心的社会关系网络(如家庭成员、密切关联人),点击节点可查看详情。再点击关联企业可以穿透查询企业下的法人、股东等信息。
# (2资金流图谱
针对个人的资金流向图谱中的可疑资金,向前追溯多层交易对手。且资金流向分析中支持:手工加入资金流向节点,或备注资金流向。
# (3) 实控账户图谱
输入身份证号,生成该员工实际控制(可能非本人名下)的账户网络图。排查逻辑主要基于手机登录丰收互联次数、线下多次代理存取等进行判断。
# 3、拓展查询
# (1) 采购查询
功能:用于纪检/内审人员查询特定采购事项的核心信息,聚焦“采购集中度、金额异常”等风险排查。可筛选查询的采购时段,以及关联员工,查询其参与的所有采购。
内容:清单包含采购事项名称、交易日期、采购金额、供应商名称、关联员工等核心字段。
也可穿透展示采购全量信息(采购方式、入围/中标公司、经办人、对方账号等)。
![](images/04c20c26a4d53a04600eab386fa232df7f0982b942e6bdc1969eda2bfca3405c.jpg)
# (2人员调动查询
功能:查询员工的岗位/机构调动记录,辅助排查“异常调动、岗位晋升合规性”。可选择查询时间和员工姓名,查询其所有调动记录。
内容:包含姓名、工号、调动时间、原/现岗位、原/现机构、调动原因等核心字段。
![](images/b1ef684713661c869e161574fc6b0666b305c781ff568846a97ea7da985fef12.jpg)
# (3招聘查询
功能:查询招聘事项信息,辅助排查“招聘流程合规性、面试官关联风险”。可筛选查询时间段和员工姓名,查询其招聘详情。
内容:包含招聘人员、岗位、招聘时间、关联面试官、面试结果等核心字段。
# 第四部分 流水明细查询
本页面为流水明细查询,对拉取的本行流水以及上传的他行流水进行批量分析。实现功能如下:
# 1、多帐户流水明细合并
可以将多个银行的流水合并成一个流水文件,左侧为筛选内容,可以筛选账号和银行进行查询;主页面可以选择按交易金额、交易时间等自主排序。且可切换对手方分析
# 2、全量流水二次分析
对全量流水表中的关键流水,可以进行手工提交“加入分析”,实现将关键流水重新放置在一个新的交易表中进行分析。
![](images/6ad8e568de5ec7d3febb3b8799c0bffc562530798037457b2a259c7ed7077146.jpg)
# 三. 信息维护
# 1、中介库管理
功能:建立并维护外部中介人员/机构黑名单库。支持Excel导入更新。当员工交易对手命中该库时系统将自动产生高风险预警。
# 2、员工信息管理
功能:对员工实控账户、实控手机号、关系人信息等进行批量维护
说明:对于系统无法自动获取或关联的员工附属信息(如经查实的实际控制账户、未在户口本上的特定关系人等),提供手工录入与维护功能。
# 3、信贷客户家庭关系维护
可以上传并且维护信贷家庭关系表格信息。
# 四. 参数配置
功能:模型参数管理
说明:提供风险模型核心参数的维护界面、细化阈值规则。筛选模型名称:筛选(可选大额交易模型、可疑兼职模型、可疑外汇交易模型三种),得到阈值参数配置内容如下:
# 1、大额交易模型
识别大额/高频资金交易,检测调整单笔交易额、频繁转账次数等阈值
# 2、可疑兼职模型
识别异常额外收入,监测调整月度固定收入、固定对手转入等阈值
# 3、可疑外汇交易模型
识别异常外汇收支,监测调整单笔购汇金额、频繁外汇交易次数等阈值
# 模型参数管理
<table><tr><td>模型名称</td><td>可疑外汇交易模型</td><td>✓</td><td>查询</td></tr></table>
阈值参数配置
<table><tr><td>监测项</td><td>描述</td><td>阈值设置</td><td>单位</td></tr><tr><td>单笔购汇金额</td><td>单笔购汇超过该金额</td><td>50000</td><td>美元/笔</td></tr><tr><td>单笔结汇金额</td><td>单笔结汇超过该金额</td><td>50000</td><td>美元/笔</td></tr><tr><td>跨境汇款金额</td><td>单笔跨境汇款超过该金额</td><td>100000</td><td>美元/笔</td></tr><tr><td>月度购汇总额</td><td>月度累计购汇超过</td><td>200000</td><td>美元/月</td></tr><tr><td>月度结汇总额</td><td>月度累计结汇超过</td><td>200000</td><td>美元/月</td></tr><tr><td>频繁外汇交易</td><td>单日外汇交易次数超过</td><td>5</td><td>次/日</td></tr><tr><td>保存配置</td><td>恢复默认</td><td></td><td></td></tr></table>
# 五.系统管理
# 1、用户权限
系统管理员可对访问系统的用户账号进行增、删、改、禁用等操作。
# 2、项目统计
根据年度、组长、对像、成果等进行项目统计
# 3、操作日志管理
记录用户的关键操作(登录、数据导入、模型运行、报告生成等),支持按时间、用户、操作类型进行查询。
![](images/68bd718419ce288731c5e52789ac1e5dc02ac931ac319760ccd2bcca0d3ddb08.jpg)

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,667 @@
# 纪检初核系统功能模块划分方案
## 需求分析概述
基于《纪检初核系统功能说明书-V1.0》的分析,该系统是一个用于银行纪检部门进行员工行为初核的综合性管理平台。
---
# 模块详细设计
## 模块一:项目管理域 (dpc-project)
### 职责
项目全生命周期管理,包括项目创建、配置、执行、归档等全过程管理。
### 页面清单
| 页面名称 | 路由 | 说明 |
|---------|------|------|
| 项目列表页 | /project/list | 展示所有项目的主页面 |
| 新建项目弹窗 | /project/add | 新建项目表单弹窗 |
| 导入历史项目弹窗 | /project/import | 复制历史项目配置 |
| 项目详情页 | /project/detail/:id | 查看项目详细信息 |
| 项目归档确认弹窗 | /project/archive | 归档项目确认 |
### 功能权限
| 权限标识 | 权限名称 | 说明 |
|---------|---------|------|
| `project:list` | 查看项目列表 | 查看项目列表页 |
| `project:create` | 创建项目 | 新建项目 |
| `project:edit` | 编辑项目 | 修改项目信息 |
| `project:delete` | 删除项目 | 删除项目 |
| `project:archive` | 归档项目 | 归档已完成项目 |
| `project:import` | 导入历史项目 | 复制历史项目配置 |
| `project:result:view` | 查看结果 | 查看已完成项目结果 |
| `project:reanalyze` | 重新分析 | 重新运行风险模型 |
| `project:enter` | 进入项目 | 进入项目工作台 |
| `project:quarter:create` | 创建季度初核 | 快捷创建季度初核项目 |
| `project:newemployee:create` | 创建新员工排查 | 快捷创建新员工排查 |
| `project:export` | 导出项目 | 导出项目数据 |
### 数据表设计
#### pj_project (项目信息表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| project_id | BIGINT | 项目ID主键 | 是 |
| project_name | VARCHAR(100) | 项目名称 | 是 |
| project_desc | VARCHAR(500) | 项目描述 | 否 |
| start_time | DATETIME | 开始时间 | 是 |
| end_time | DATETIME | 结束时间 | 是 |
| status | CHAR(1) | 状态0进行中 1已完成 2已归档 | 是 |
| target_count | INT | 目标人数 | 是 |
| warning_count | INT | 预警人数 | 是 |
| create_by | VARCHAR(64) | 创建人 | 是 |
| create_time | DATETIME | 创建时间 | 是 |
| update_by | VARCHAR(64) | 更新人 | 否 |
| update_time | DATETIME | 更新时间 | 否 |
| remark | VARCHAR(500) | 备注 | 否 |
#### pj_project_member (项目成员表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| member_id | BIGINT | 成员ID主键 | 是 |
| project_id | BIGINT | 项目ID | 是 |
| user_id | BIGINT | 用户ID | 是 |
| member_role | CHAR(1) | 角色1组长 2成员 | 是 |
| join_time | DATETIME | 参与时间 | 是 |
#### pj_project_config (项目配置表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| config_id | BIGINT | 配置ID主键 | 是 |
| project_id | BIGINT | 项目ID | 是 |
| data_source_config | TEXT | 数据源配置JSON | 否 |
| time_range_config | TEXT | 时间范围配置JSON | 否 |
| risk_model_config | TEXT | 风险模型配置JSON | 否 |
| other_config | TEXT | 其他配置JSON | 否 |
---
## 模块二:数据接入域 (dpc-data)
### 职责
多源数据采集与标准化处理,支持本行数据、他行流水、征信报告、家庭关系等多种数据源接入。
### 页面清单
| 页面名称 | 路由 | 说明 |
|---------|------|------|
| 数据管理页 | /workspace/:projectId/data | 项目工作台-数据管理 |
| 本行信息拉取弹窗 | /data/internal/pull | 输入证件号拉取本行数据 |
| 他行流水上传弹窗 | /data/external/upload | 上传他行流水文件 |
| 征信信息上传弹窗 | /data/credit/upload | 上传征信报告文件 |
| 家庭关系上传弹窗 | /data/family/upload | 上传家庭关系信息 |
| 名单库选择弹窗 | /data/watchlist/select | 选择可疑名单 |
### 功能权限
| 权限标识 | 权限名称 | 说明 |
|---------|---------|------|
| `data:internal:import` | 本行信息导入 | 拉取本行流水、资产数据 |
| `data:external:import` | 他行流水导入 | 上传他行流水文件 |
| `data:credit:import` | 征信信息导入 | 上传征信报告文件 |
| `data:family:import` | 家庭关系导入 | 上传家庭关系信息 |
| `data:watchlist:select` | 名单库选择 | 选择可疑名单 |
| `data:report:generate` | 生成报告 | 生成初核结果报告 |
### 数据表设计
#### di_import_record (导入记录表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| import_id | BIGINT | 导入ID主键 | 是 |
| project_id | BIGINT | 项目ID | 是 |
| data_type | CHAR(1) | 数据类型1本行 2他行 3征信 4家庭关系 5名单库 | 是 |
| file_name | VARCHAR(200) | 文件名 | 否 |
| file_path | VARCHAR(500) | 文件路径 | 否 |
| import_status | CHAR(1) | 导入状态0待处理 1处理中 2成功 3失败 | 是 |
| record_count | INT | 记录数 | 否 |
| error_message | TEXT | 错误信息 | 否 |
| import_by | VARCHAR(64) | 导入人 | 是 |
| import_time | DATETIME | 导入时间 | 是 |
#### di_transaction (交易流水表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| trans_id | BIGINT | 交易ID主键 | 是 |
| project_id | BIGINT | 项目ID | 是 |
| employee_id | BIGINT | 员工ID | 是 |
| account_no | VARCHAR(50) | 账号 | 是 |
| bank_name | VARCHAR(50) | 银行名称 | 是 |
| trans_time | DATETIME | 交易时间 | 是 |
| trans_amount | DECIMAL(18,2) | 交易金额 | 是 |
| balance | DECIMAL(18,2) | 余额 | 否 |
| counter_party | VARCHAR(200) | 交易对手 | 否 |
| summary | VARCHAR(200) | 摘要 | 否 |
| trans_type | VARCHAR(50) | 交易类型 | 否 |
#### di_credit_report (征信报告表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| credit_id | BIGINT | 征信ID主键 | 是 |
| project_id | BIGINT | 项目ID | 是 |
| employee_id | BIGINT | 员工ID | 是 |
| credit_accounts | TEXT | 信贷账户JSON | 否 |
| total_debt | DECIMAL(18,2) | 负债总额 | 否 |
| guarantee_info | TEXT | 担保信息JSON | 否 |
| query_records | TEXT | 查询记录JSON | 否 |
#### di_family_relation (家庭关系表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| relation_id | BIGINT | 关系ID主键 | 是 |
| project_id | BIGINT | 项目ID | 是 |
| employee_id | BIGINT | 员工ID | 是 |
| relation_name | VARCHAR(50) | 关系人姓名 | 是 |
| relation_type | VARCHAR(20) | 关系类型(配偶、父母、子女等) | 是 |
| id_card | VARCHAR(18) | 身份证号 | 是 |
| phone | VARCHAR(20) | 联系电话 | 否 |
---
## 模块三:数据质量域 (dpc-quality)
### 职责
数据质量检查与清洗,通过预定义规则自动检测数据格式、连续性、完整性等问题。
### 页面清单
| 页面名称 | 路由 | 说明 |
|---------|------|------|
| 数据质量页 | /workspace/:projectId/quality | 数据质量检查结果 |
| 质量评分仪表盘 | /quality/dashboard/:projectId | 质量评分可视化 |
| 质量问题详情 | /quality/issues/:projectId | 质量问题列表 |
### 功能权限
| 权限标识 | 权限名称 | 说明 |
|---------|---------|------|
| `quality:check:run` | 运行质量检查 | 执行数据质量检查 |
| `quality:check:view` | 查看检查结果 | 查看质量检查结果 |
| `quality:score:view` | 查看质量评分 | 查看质量评分仪表盘 |
| `quality:issue:view` | 查看质量问题 | 查看质量问题详情 |
### 数据表设计
#### dq_quality_rule (质量规则表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| rule_id | BIGINT | 规则ID主键 | 是 |
| rule_name | VARCHAR(100) | 规则名称 | 是 |
| rule_type | CHAR(1) | 规则类型1格式 2连续性 3完整性 | 是 |
| rule_expression | TEXT | 规则表达式 | 是 |
| error_level | CHAR(1) | 错误级别1低 2中 3高 | 是 |
| status | CHAR(1) | 状态0停用 1启用 | 是 |
#### dq_check_result (检查结果表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| result_id | BIGINT | 结果ID主键 | 是 |
| project_id | BIGINT | 项目ID | 是 |
| rule_id | BIGINT | 规则ID | 是 |
| error_count | INT | 错误数量 | 是 |
| check_time | DATETIME | 检查时间 | 是 |
#### dq_quality_score (质量评分表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| score_id | BIGINT | 评分ID主键 | 是 |
| project_id | BIGINT | 项目ID | 是 |
| completeness_score | DECIMAL(5,2) | 数据完整性评分 | 是 |
| consistency_score | DECIMAL(5,2) | 格式一致性评分 | 是 |
| continuity_score | DECIMAL(5,2) | 余额连续性评分 | 是 |
| total_score | DECIMAL(5,2) | 总评分 | 是 |
| check_time | DATETIME | 检查时间 | 是 |
---
## 模块四:风险分析域 (dpc-risk)
### 职责
风险模型引擎与风险评估,通过配置的风险模型进行自动风险识别和评分。
### 页面清单
| 页面名称 | 路由 | 说明 |
|---------|------|------|
| 风险总览页 | /workspace/:projectId/risk/overview | 风险仪表盘 |
| 风险人员列表 | /risk/persons/:projectId | 风险人员列表 |
| 风险人员详情 | /risk/person/:id | 单个人员详情 |
| 风险模型页 | /workspace/:projectId/risk/models | 模型触发情况 |
| 涉疑交易明细 | /risk/transaction/:projectId | 涉疑交易列表 |
| 违法人员清单 | /risk/illegal/:projectId | 违法人员列表 |
| 异常账户清单 | /risk/account/:projectId | 异常账户列表 |
| 风险模型配置 | /risk/model/config | 风险模型参数配置 |
### 功能权限
| 权限标识 | 权限名称 | 说明 |
|---------|---------|------|
| `risk:overview:view` | 查看风险总览 | 查看风险仪表盘 |
| `risk:person:view` | 查看风险人员 | 查看风险人员列表 |
| `risk:person:detail` | 查看人员详情 | 查看人员详情 |
| `risk:person:export` | 导出风险人员 | 导出风险人员列表 |
| `risk:model:view` | 查看风险模型 | 查看模型触发情况 |
| `risk:model:detail` | 查看模型详情 | 查看模型触发详情 |
| `risk:transaction:view` | 查看交易明细 | 查看涉疑交易明细 |
| `risk:transaction:export` | 导出交易明细 | 导出交易明细 |
| `risk:illegal:view` | 查看违法人员 | 查看违法人员清单 |
| `risk:illegal:export` | 导出违法人员 | 导出违法人员清单 |
| `risk:account:view` | 查看异常账户 | 查看异常账户清单 |
| `risk:account:export` | 导出异常账户 | 导出异常账户清单 |
| `risk:model:config` | 配置风险模型 | 配置风险模型参数 |
| `risk:watchlist:add` | 添加关注 | 添加关注对象 |
### 数据表设计
#### ra_risk_model (风险模型表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| model_id | BIGINT | 模型ID主键 | 是 |
| model_name | VARCHAR(100) | 模型名称 | 是 |
| model_type | VARCHAR(50) | 模型类型 | 是 |
| model_config | TEXT | 模型配置JSON | 是 |
| status | CHAR(1) | 状态0停用 1启用 | 是 |
#### ra_risk_person (风险人员表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| person_id | BIGINT | 人员ID主键 | 是 |
| project_id | BIGINT | 项目ID | 是 |
| employee_id | BIGINT | 员工ID | 是 |
| risk_score | INT | 风险评分 | 是 |
| risk_level | CHAR(1) | 风险等级0无 1低 2中 3高 | 是 |
| trigger_models | TEXT | 触发模型JSON | 否 |
| core_risks | TEXT | 核心异常点JSON | 否 |
#### ra_suspicious_transaction (涉疑交易表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| trans_id | BIGINT | 交易ID主键 | 是 |
| project_id | BIGINT | 项目ID | 是 |
| employee_id | BIGINT | 关联员工ID | 否 |
| relation_person | VARCHAR(50) | 关联人姓名 | 否 |
| relation_type | VARCHAR(20) | 关系类型 | 否 |
| trans_time | DATETIME | 交易时间 | 是 |
| trans_amount | DECIMAL(18,2) | 交易金额 | 是 |
| trans_type | VARCHAR(50) | 交易类型 | 否 |
| counter_party | VARCHAR(200) | 交易对手 | 否 |
| hit_watchlist | CHAR(1) | 是否命中名单库 | 否 |
| hit_model | CHAR(1) | 是否命中模型规则 | 否 |
#### ra_illegal_person (违法人员表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| illegal_id | BIGINT | 违法人员ID主键 | 是 |
| project_id | BIGINT | 项目ID | 是 |
| person_name | VARCHAR(50) | 姓名 | 是 |
| id_card | VARCHAR(18) | 身份证号 | 是 |
| is_dishonesty | CHAR(1) | 是否失信被执行人 | 否 |
| is_criminal | CHAR(1) | 是否刑事判决 | 否 |
| is_administrative | CHAR(1) | 是否行政处罚 | 否 |
| is_police_case | CHAR(1) | 是否公安案件 | 否 |
| is_limit_consumption | CHAR(1) | 是否限制高消费 | 否 |
| update_time | DATETIME | 更新时间 | 否 |
| illegal_detail | TEXT | 违法详情 | 否 |
#### ra_abnormal_account (异常账户表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| account_id | BIGINT | 账户ID主键 | 是 |
| project_id | BIGINT | 项目ID | 是 |
| account_no | VARCHAR(50) | 账号 | 是 |
| account_holder | VARCHAR(50) | 开户人 | 是 |
| bank_name | VARCHAR(50) | 银行名称 | 是 |
| abnormal_type | VARCHAR(50) | 异常类型 | 是 |
| abnormal_time | DATETIME | 异常发生时间 | 是 |
| account_status | VARCHAR(20) | 账户状态 | 是 |
---
## 模块五:专项调查域 (dpc-investigation)
### 职责
深度分析与可视化,包括员工详查、图谱分析、拓展查询、流水明细查询等功能。
### 页面清单
| 页面名称 | 路由 | 说明 |
|---------|------|------|
| 员工详查分析 | /workspace/:projectId/investigation/employee | 员工收支资产分析 |
| 关系人图谱 | /investigation/graph/relation/:id | 社会关系网络图 |
| 资金流图谱 | /investigation/graph/fund/:id | 资金流向追踪图 |
| 实控账户图谱 | /investigation/graph/account/:id | 实控账户网络图 |
| 采购查询 | /investigation/purchase | 采购事项查询 |
| 人员调动查询 | /investigation/transfer | 人员调动记录查询 |
| 招聘查询 | /investigation/recruit | 招聘事项查询 |
| 流水明细合并 | /investigation/flow/merge | 多账户流水合并 |
| 流水二次分析 | /investigation/flow/reanalyze | 全量流水二次分析 |
### 功能权限
| 权限标识 | 权限名称 | 说明 |
|---------|---------|------|
| `investigation:employee:analyze` | 员工详查分析 | 分析员工收支资产关系 |
| `investigation:graph:relation` | 关系人图谱 | 查看社会关系网络 |
| `investigation:graph:fund` | 资金流图谱 | 查看资金流向 |
| `investigation:graph:account` | 实控账户图谱 | 查看实控账户网络 |
| `investigation:purchase:view` | 采购查询 | 查询采购事项 |
| `investigation:transfer:view` | 人员调动查询 | 查询人员调动记录 |
| `investigation:recruit:view` | 招聘查询 | 查询招聘事项 |
| `investigation:flow:merge` | 流水合并 | 合并多账户流水 |
| `investigation:flow:reanalyze` | 流水二次分析 | 全量流水二次分析 |
| `investigation:flow:export` | 流水导出 | 导出流水数据 |
### 数据表设计
#### si_investigation_record (调查记录表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| record_id | BIGINT | 记录ID主键 | 是 |
| project_id | BIGINT | 项目ID | 是 |
| employee_id | BIGINT | 员工ID | 是 |
| investigation_type | VARCHAR(50) | 调查类型 | 是 |
| investigation_result | TEXT | 调查结果JSON | 否 |
| create_by | VARCHAR(64) | 创建人 | 是 |
| create_time | DATETIME | 创建时间 | 是 |
#### si_graph_node (图谱节点表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| node_id | BIGINT | 节点ID主键 | 是 |
| project_id | BIGINT | 项目ID | 是 |
| node_type | VARCHAR(20) | 节点类型1人员 2企业 3账户 | 是 |
| node_name | VARCHAR(100) | 节点名称 | 是 |
| node_data | TEXT | 节点数据JSON | 否 |
#### si_graph_edge (图谱关系边表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| edge_id | BIGINT | 边ID主键 | 是 |
| project_id | BIGINT | 项目ID | 是 |
| source_node_id | BIGINT | 源节点ID | 是 |
| target_node_id | BIGINT | 目标节点ID | 是 |
| edge_type | VARCHAR(50) | 关系类型 | 是 |
| edge_data | TEXT | 关系数据JSON | 否 |
---
## 模块六:基础数据域 (dpc-masterdata)
### 职责
基础信息维护,包括中介库管理、员工信息管理、信贷客户家庭关系维护等。
### 页面清单
| 页面名称 | 路由 | 说明 |
|---------|------|------|
| 中介库管理 | /masterdata/meddle | 中介机构黑名单管理 |
| 员工信息管理 | /masterdata/employee | 员工实控信息管理 |
| 实控账户管理 | /masterdata/employee/account | 员工实控账户维护 |
| 实控手机号管理 | /masterdata/employee/phone | 员工实控手机号维护 |
| 信贷客户家庭关系 | /masterdata/family | 信贷客户家庭关系维护 |
### 功能权限
| 权限标识 | 权限名称 | 说明 |
|---------|---------|------|
| `masterdata:meddle:list` | 查看中介库列表 | 查看中介列表 |
| `masterdata:meddle:add` | 新增中介 | 添加中介条目 |
| `masterdata:meddle:edit` | 修改中介 | 修改中介信息 |
| `masterdata:meddle:remove` | 删除中介 | 删除中介条目 |
| `masterdata:meddle:export` | 导出中介库 | 导出中介数据 |
| `masterdata:meddle:import` | 导入中介库 | 导入中介数据 |
| `masterdata:employee:list` | 查看员工列表 | 查看员工列表 |
| `masterdata:employee:edit` | 修改员工信息 | 修改员工信息 |
| `masterdata:employee:account` | 实控账户管理 | 管理实控账户 |
| `masterdata:employee:phone` | 实控手机号管理 | 管理实控手机号 |
| `masterdata:family:list` | 查看家庭关系 | 查看家庭关系列表 |
| `masterdata:family:add` | 新增家庭关系 | 添加家庭关系 |
| `masterdata:family:edit` | 修改家庭关系 | 修改家庭关系 |
| `masterdata:family:remove` | 删除家庭关系 | 删除家庭关系 |
### 数据表设计
#### md_meddle (中介库表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| meddle_id | BIGINT | 中介ID主键 | 是 |
| meddle_name | VARCHAR(100) | 中介名称 | 是 |
| meddle_type | VARCHAR(20) | 中介类型1人员 2机构 | 是 |
| id_card | VARCHAR(18) | 身份证号 | 否 |
| credit_code | VARCHAR(50) | 统一信用代码 | 否 |
| contact | VARCHAR(50) | 联系人 | 否 |
| phone | VARCHAR(20) | 联系电话 | 否 |
| address | VARCHAR(200) | 地址 | 否 |
| risk_reason | VARCHAR(500) | 风险原因 | 否 |
| risk_level | CHAR(1) | 风险等级1低 2中 3高 | 是 |
| status | CHAR(1) | 状态0停用 1启用 | 是 |
| create_by | VARCHAR(64) | 创建人 | 是 |
| create_time | DATETIME | 创建时间 | 是 |
| update_by | VARCHAR(64) | 更新人 | 否 |
| update_time | DATETIME | 更新时间 | 否 |
| remark | VARCHAR(500) | 备注 | 否 |
#### md_employee_ext (员工扩展信息表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| ext_id | BIGINT | 扩展ID主键 | 是 |
| user_id | BIGINT | 用户ID | 是 |
| employee_no | VARCHAR(20) | 员工工号 | 是 |
| department | VARCHAR(100) | 所属部门 | 是 |
| position | VARCHAR(50) | 职位 | 是 |
| level | VARCHAR(20) | 职级 | 否 |
| hire_date | DATE | 入职日期 | 否 |
#### md_control_account (实控账户表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| account_id | BIGINT | 账户ID主键 | 是 |
| user_id | BIGINT | 用户ID | 是 |
| account_no | VARCHAR(50) | 账号 | 是 |
| account_bank | VARCHAR(50) | 开户银行 | 是 |
| account_type | VARCHAR(20) | 账户类型 | 是 |
| relation_type | VARCHAR(50) | 关系类型 | 否 |
| status | CHAR(1) | 状态0停用 1启用 | 是 |
#### md_control_phone (实控手机号表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| phone_id | BIGINT | 手机号ID主键 | 是 |
| user_id | BIGINT | 用户ID | 是 |
| phone_number | VARCHAR(20) | 手机号 | 是 |
| relation_type | VARCHAR(50) | 关系类型 | 否 |
| status | CHAR(1) | 状态0停用 1启用 | 是 |
---
## 模块七:报告与统计域 (dpc-report)
### 职责
报告生成与数据分析,包括初核结果报告生成、多维统计分析、数据导出等功能。
### 页面清单
| 页面名称 | 路由 | 说明 |
|---------|------|------|
| 报告生成 | /workspace/:projectId/report/generate | 生成初核结果报告 |
| 报告模板管理 | /report/template | 管理报告模板 |
| 报告历史 | /report/history | 报告生成历史 |
| 项目统计 | /report/project/statistics | 项目统计分析 |
| 年度统计 | /report/statistics/year | 按年度统计 |
| 组长统计 | /report/statistics/leader | 按组长统计 |
| 对象统计 | /report/statistics/target | 按对象统计 |
| 成果统计 | /report/statistics/result | 按成果统计 |
### 功能权限
| 权限标识 | 权限名称 | 说明 |
|---------|---------|------|
| `report:generate` | 生成报告 | 生成初核结果报告 |
| `report:template:view` | 查看报告模板 | 查看报告模板 |
| `report:template:edit` | 编辑报告模板 | 编辑报告模板 |
| `report:history:view` | 查看报告历史 | 查看报告生成历史 |
| `report:stat:view` | 查看项目统计 | 查看项目统计 |
| `report:stat:export` | 导出统计数据 | 导出统计数据 |
### 数据表设计
#### rp_report_template (报告模板表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| template_id | BIGINT | 模板ID主键 | 是 |
| template_name | VARCHAR(100) | 模板名称 | 是 |
| template_type | VARCHAR(20) | 模板类型 | 是 |
| template_content | TEXT | 模板内容 | 是 |
| status | CHAR(1) | 状态0停用 1启用 | 是 |
#### rp_report_history (报告生成历史表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| history_id | BIGINT | 历史ID主键 | 是 |
| project_id | BIGINT | 项目ID | 是 |
| report_name | VARCHAR(200) | 报告名称 | 是 |
| report_type | VARCHAR(20) | 报告类型 | 是 |
| report_path | VARCHAR(500) | 报告路径 | 是 |
| generate_by | VARCHAR(64) | 生成人 | 是 |
| generate_time | DATETIME | 生成时间 | 是 |
#### rp_project_statistics (项目统计表)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| stat_id | BIGINT | 统计ID主键 | 是 |
| stat_year | INT | 统计年度 | 是 |
| total_projects | INT | 总项目数 | 是 |
| completed_projects | INT | 已完成项目数 | 是 |
| ongoing_projects | INT | 进行中项目数 | 是 |
| total_people | INT | 总核查人数 | 是 |
| risk_people | INT | 风险人数 | 是 |
| report_count | INT | 报告生成数 | 是 |
---
## 模块八:系统管理域 (扩展 ruoyi-system)
### 职责
系统配置与权限管理,扩展若依原有的系统管理功能,增加项目统计、操作日志等。
### 页面清单
| 页面名称 | 路由 | 说明 |
|---------|------|------|
| 用户管理 | /system/user | 若依现有功能 |
| 角色管理 | /system/role | 若依现有功能 |
| 菜单管理 | /system/menu | 若依现有功能 |
| 部门管理 | /system/dept | 若依现有功能 |
| 参数配置 | /system/config | 风险模型参数配置 |
| 操作日志 | /monitor/operlog | 若依现有功能 |
| 登录日志 | /monitor/logininfor | 若依现有功能 |
### 功能权限
若依原有权限体系,按需扩展纪检初核相关权限。
---
# 若依模块结构
```
discipline-prelim-check/
├── ruoyi-admin/ # 启动模块
├── ruoyi-framework/ # 框架核心
├── ruoyi-system/ # 系统管理(扩展)
├── ruoyi-common/ # 公共组件
├── dpc-project/ # 模块一:项目管理域 (新增)
├── dpc-data/ # 模块二:数据接入域 (新增)
├── dpc-quality/ # 模块三:数据质量域 (新增)
├── dpc-risk/ # 模块四:风险分析域 (新增)
├── dpc-investigation/ # 模块五:专项调查域 (新增)
├── dpc-masterdata/ # 模块六:基础数据域 (新增)
├── dpc-report/ # 模块七:报告与统计域 (新增)
└── ruoyi-ui/
└── src/
├── views/
│ ├── project/ # 项目管理
│ │ ├── index.vue # 项目列表
│ │ ├── addDialog.vue # 新建项目弹窗
│ │ └── importDialog.vue # 导入历史项目
│ ├── workspace/ # 项目工作台(容器)
│ │ ├── data.vue # 数据管理
│ │ ├── quality.vue # 数据质量
│ │ ├── risk/ # 风险分析
│ │ │ ├── overview.vue # 风险总览
│ │ │ ├── models.vue # 风险模型
│ │ │ └── detail/ # 风险明细
│ │ └── investigation/ # 专项调查
│ ├── masterdata/ # 基础数据
│ │ ├── meddle.vue # 中介库管理
│ │ ├── employee.vue # 员工信息管理
│ │ └── family.vue # 家庭关系维护
│ └── report/ # 报告统计
│ ├── generate.vue # 报告生成
│ └── statistics/ # 统计分析
└── api/
├── project.js
├── data.js
├── quality.js
├── risk.js
├── investigation.js
├── masterdata.js
└── report.js
```
---
# 实施优先级
## 第一阶段:基础框架
1. **项目管理域** - 建立项目概念实现项目CRUD
2. **数据接入域** - 实现基础数据导入功能
3. **系统管理域** - 扩展权限和配置
## 第二阶段:核心分析
4. **数据质量域** - 实现数据质量检查
5. **风险分析域** - 实现核心风险模型
6. **基础数据域** - 建立基础数据支撑
## 第三阶段:高级功能
7. **专项调查域** - 实现图谱分析和深度调查
8. **报告与统计域** - 实现报告生成和统计
---
# 验证方式
1. 各模块可独立开发、测试、部署
2. 模块间通过定义良好的接口交互
3. 使用若依代码生成器快速生成CRUD框架
4. 每个模块有独立的菜单权限配置
5. 数据库表按模块前缀命名,便于管理

View File

@@ -0,0 +1,145 @@
# 01-项目管理模块
## 模块概述
项目管理模块是系统的首页和入口,用于管理所有历史创建的核查项目。该模块提供项目的创建、查询、状态管理、归档等核心功能,是用户进行项目管理和监控的主要界面。
## 模块结构
```
项目管理模块
├── 导航与搜索区
├── 项目列表区
└── 快捷入口区
```
## 功能分解
### 1.1 导航与搜索区
**功能描述**: 位于页面顶部,提供项目搜索和新建项目的入口功能。
**功能点**:
- **项目搜索**: 支持通过输入关键词对项目名称进行模糊搜索
- **新建项目**: 点击打开标准表单,填写项目名称、人员等完整信息创建新项目
- **导入历史项目**: 复制历史项目配置(人员范围、流水、征信数据配置)快速创建新项目
**数据要素**:
- 项目名称(搜索关键词)
- 项目配置模板
### 1.2 项目列表区
**功能描述**: 以表格形式展示所有初核项目,是用户进行项目管理和监控的核心面板。
**功能点**:
- **项目信息展示**: 显示项目名称、简要描述、创建日期、状态、目标人数、预警人数
- **项目状态标识**: 通过色块直观标识项目状态(进行中、已完成等)
- **预警人数动态更新**: 对于"进行中"项目,预警人数数据动态更新
- **查看结果**: 适用于已完成项目,跳转至该项目的初核结果页
- **重新分析**: 适用于已完成项目,基于原有数据重新运行风险模型,更新分析结果
- **归档项目**: 将已结束且无需日常关注的项目移入归档库生成PDF文件导出
- **进入项目**: 适用于进行中项目,进入该项目的工作台开展具体工作
**数据要素**:
- 项目名称
- 项目描述
- 创建时间
- 项目状态(进行中、已完成)
- 目标人数
- 预警人数
### 1.3 快捷入口区
**功能描述**: 提供一键触达的高频操作按钮,提升常用工作流的启动效率。
**功能点**:
- **导入历史项目**: 复制历史项目的配置(人员范围、流水、征信数据),快速创建新项目
- **创建季度初核**: 快速启动标准化季度周期性排查项目,系统预填当前季度时间范围等配置
- **创建新员工排查**: 为特定新员工创建专项排查任务
**数据要素**:
- 历史项目模板
- 当前季度时间范围
- 新员工信息
## 数据模型
### 项目实体 (Project)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| projectId | Long | 项目ID | 是 |
| projectName | String | 项目名称 | 是 |
| description | String | 项目描述 | 否 |
| createTime | DateTime | 创建时间 | 是 |
| status | String | 状态(进行中/已完成) | 是 |
| targetCount | Integer | 目标人数 | 是 |
| warningCount | Integer | 预警人数 | 是 |
| isArchived | Boolean | 是否归档 | 否 |
## 页面原型
### 原型设计文档
详细的页面原型设计请查看:[06-页面原型设计.md](./06-页面原型设计.md)
### 主要页面
1. **首页** - 项目列表展示页面
- 搜索和操作区
- 项目列表表格
- 快捷入口卡片
2. **新建项目弹窗页** - 项目信息录入表单
- 基本信息表单
- 人员选择器
- 时间范围选择器
3. **导入历史项目弹窗页** - 历史项目选择列表
- 项目列表(带单选)
- 项目详情预览
- 新项目配置
### 原型资源
- **墨刀原型**: [../../纪检初核系统-离线演示包/演示模式.html](../../纪检初核系统-离线演示包/演示模式.html)
- **设计规范**: 基于 Element UI 2.15 组件库
## 子文档索引
本模块包含以下详细文档:
- [README.md](./README.md) - 模块总览
- [01-导航与搜索区.md](./01-导航与搜索区.md) - 导航与搜索区详细设计
- [02-项目列表区.md](./02-项目列表区.md) - 项目列表区详细设计
- [03-快捷入口区.md](./03-快捷入口区.md) - 快捷入口区详细设计
- [04-数据模型.md](./04-数据模型.md) - 数据模型定义
- [05-业务规则.md](./05-业务规则.md) - 业务规则说明
- [06-页面原型设计.md](./06-页面原型设计.md) - 页面原型详细设计
- [复核报告.md](./复核报告.md) - 需求复核报告
## 业务规则
1. **项目状态流转**: 新建 → 进行中 → 已完成 → 已归档
2. **预警人数更新**: 进行中项目的预警人数需要实时更新
3. **归档条件**: 只有已完成的项目才能归档
4. **重新分析**: 只能对已完成项目执行重新分析
## 交互关系
| 关联模块 | 交互说明 |
|---------|---------|
| 项目工作台 | 点击"进入项目"跳转到项目工作台 |
| 初核结果总览 | 点击"查看结果"跳转到结果页 |
## 功能点统计
- 二级功能: 3个
- 三级功能点: 12个
## 版本信息
- **文档版本**: V1.0
- **创建日期**: 2026-01-27
- **基于原文档**: 纪检初核系统功能说明书V1.0 第9-62行

View File

@@ -0,0 +1,528 @@
# 项目管理模块 - 页面原型设计
## 设计概述
本文档定义项目管理模块的页面原型设计,基于若依框架 + Element UI组件库的设计规范。
## 设计规范
### 颜色规范
| 颜色类型 | 颜色值 | 用途 |
|---------|-------|------|
| 主题色 | #409EFF | 主按钮、链接、高亮 |
| 成功色 | #67C23A | 成功状态、已完成项目 |
| 警告色 | #E6A23C | 警告提示 |
| 危险色 | #F56C6C | 危险操作、删除 |
| 信息色 | #909399 | 次要信息、禁用状态 |
| 文字色 | #303133 | 主要文字 |
| 次要文字 | #606266 | 次要文字 |
| 边框色 | #DCDFE6 | 边框、分割线 |
| 背景色 | #F5F7FA | 页面背景 |
### 字体规范
| 类型 | 字体大小 | 字重 | 行高 |
|-----|---------|------|------|
| 页面标题 | 20px | 500 | 28px |
| 卡片标题 | 16px | 500 | 24px |
| 正文 | 14px | 400 | 22px |
| 小字 | 12px | 400 | 20px |
### 间距规范
| 间距类型 | 数值 |
|---------|------|
| 页面边距 | 20px |
| 卡片间距 | 16px |
| 元素间距 | 8px |
| 小间距 | 4px |
---
## 页面1: 项目管理首页
### 页面布局
```
+------------------------------------------------------------------+
| Logo | 纪检初核系统 首页 | 项目工作台 | 系统管理 | 用户▼ |
+------------------------------------------------------------------+
| 项目管理 |
| +------------------------------------------------------------+ |
| | 🔍 项目搜索: [________________] [新建项目] [导入历史项目] | |
| +------------------------------------------------------------+ |
| |
| +------------------------------------------------------------+ |
| | 项目列表 | |
| +------------------------------------------------------------+ |
| | 序号 | 项目名称 | 创建时间 | 状态 | 目标 | 预警 | 操作| |
| |------|--------------|------------|------|------|------|-----| |
| | 1 | 2024年Q1初核 | 2024-01-01 | ⏳进行中| 500 | 15 |[详情]| |
| | 2 | 2023年Q4初核 | 2023-10-01 | ✅已完成| 480 | 23 |[查看]| |
| +------------------------------------------------------------+ |
| |
| +------------------------------------------------------------+ |
| | 快捷入口 | |
| +------------------------------------------------------------+ |
| | [📋 导入历史项目] [📅 创建季度初核] [👤 创建新员工排查] | |
| +------------------------------------------------------------+ |
+------------------------------------------------------------------+
```
### 详细组件说明
#### 1. 顶部导航栏
**位置**: 固定在页面顶部
**组件**:
- 左侧: Logo + 系统名称
- 中间: 主导航菜单
- 右侧: 用户信息下拉菜单
**代码示例**:
```vue
<el-menu mode="horizontal" :default-active="activeIndex">
<el-menu-item index="/project">项目管理</el-menu-item>
<el-menu-item index="/workspace">项目工作台</el-menu-item>
<el-menu-item index="/system">系统管理</el-menu-item>
</el-menu>
```
#### 2. 搜索和操作区
**位置**: 导航栏下方,全宽度
**布局**:
```
+------------------------------------------------------------+
| 项目管理 [新建项目] [导入历史项目] |
+------------------------------------------------------------+
| 🔍 [搜索项目名称...................] 高级搜索 ▼ |
+------------------------------------------------------------+
```
**组件规格**:
- 搜索框: 宽度 300px, 高度 32px
- 按钮: 高度 32px, 内边距 12px
- 图标: 14px
**Element UI代码**:
```vue
<el-row :gutter="16">
<el-col :span="18">
<el-input
v-model="queryParams.projectName"
placeholder="请输入项目名称"
prefix-icon="el-icon-search"
clearable
@keyup.enter.native="handleQuery"
/>
</el-col>
<el-col :span="6" style="text-align: right">
<el-button
type="primary"
icon="el-icon-plus"
@click="handleAdd"
>新建项目</el-button>
<el-button
icon="el-icon-folder-opened"
@click="handleImport"
>导入历史项目</el-button>
</el-col>
</el-row>
```
#### 3. 项目列表表格
**位置**: 搜索区下方
**列定义**:
| 列名 | 宽度 | 对齐 | 说明 |
|-----|------|------|------|
| 序号 | 60px | 居中 | 自动编号 |
| 项目名称 | 200px | 左对齐 | 主标题+描述 |
| 创建时间 | 120px | 居中 | YYYY-MM-DD |
| 状态 | 100px | 居中 | 带颜色的标签 |
| 目标人数 | 80px | 居中 | 数字 |
| 预警人数 | 80px | 居中 | 数字+刷新图标 |
| 操作 | 200px | 左对齐 | 按钮组 |
**状态标签样式**:
```vue
<el-tag
:type="row.projectStatus === '0' ? 'primary' : (row.projectStatus === '1' ? 'success' : 'info')"
size="small"
>
{{ row.projectStatus === '0' ? '进行中' : (row.projectStatus === '1' ? '已完成' : '已归档') }}
</el-tag>
```
**操作按钮显示规则**:
```vue
<!-- 进行中项目 -->
<el-button size="mini" type="text" icon="el-icon-s-data">进入项目</el-button>
<!-- 已完成项目 -->
<el-button size="mini" type="text" icon="el-icon-view">查看结果</el-button>
<el-button size="mini" type="text" icon="el-icon-refresh">重新分析</el-button>
<el-button size="mini" type="text" icon="el-icon-folder">归档</el-button>
<!-- 已归档项目 -->
<el-button size="mini" type="text" icon="el-icon-document">查看详情</el-button>
```
**表格组件代码**:
```vue
<el-table
v-loading="loading"
:data="projectList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="60" align="center" />
<el-table-column label="项目名称" min-width="200" show-overflow-tooltip>
<template slot-scope="scope">
<div class="project-name">
<div class="name">{{ scope.row.projectName }}</div>
<div class="desc">{{ scope.row.projectDesc }}</div>
</div>
</template>
</el-table-column>
<el-table-column label="创建时间" prop="createTime" width="120" align="center" />
<el-table-column label="状态" prop="projectStatus" width="100" align="center">
<template slot-scope="scope">
<el-tag :type="getStatusType(scope.row.projectStatus)" size="small">
{{ getStatusLabel(scope.row.projectStatus) }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="目标人数" prop="targetCount" width="80" align="center" />
<el-table-column label="预警人数" width="100" align="center">
<template slot-scope="scope">
<span v-if="scope.row.projectStatus === '0'">
{{ scope.row.warningCount }}
<i class="el-icon-refresh" @click="refreshWarningCount(scope.row)"></i>
</span>
<span v-else>{{ scope.row.warningCount }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="200" align="center" fixed="right">
<template slot-scope="scope">
<!-- 根据状态显示不同按钮 -->
</template>
</el-table-column>
</el-table>
```
#### 4. 快捷入口区
**位置**: 表格下方
**布局**:
```
+------------------------------------------------------------+
| 快捷入口 |
+------------------------------------------------------------+
| ┌──────────┐ ┌──────────┐ ┌──────────┐ |
| │ 📋 导入 │ │ 📅 季度 │ │ 👤 新员工 │ |
| │ 历史项目 │ │ 初核 │ │ 排查 │ |
| └──────────┘ └──────────┘ └──────────┘ |
+------------------------------------------------------------+
```
**卡片样式**:
```css
.quick-entry-card {
width: 100%;
height: 120px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-radius: 8px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.3s;
}
.quick-entry-card:hover {
transform: translateY(-4px);
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
}
```
---
## 页面2: 新建项目弹窗
### 对话框规格
```
+------------------------------------------------------------------+
| ┌──────────────────────────────────────────────────────────┐ |
| │ 新建项目 │ |
| ├──────────────────────────────────────────────────────────┤ |
| │ 项目名称: [________________________] * │ |
| │ 项目描述: [________________________] │ |
| │ [________________________________] │ |
| │ │ |
| │ 目标人员: [+ 添加人员] │ |
| │ ┌─────────────────────────────────────────┐ │ |
| │ │ ✗ 张三 (3301**********202101) [删除] │ │ |
| │ │ ✗ 李四 (3302**********202102) [删除] │ │ |
| │ └─────────────────────────────────────────┘ │ |
| │ │ |
| │ 时间范围: │ |
| │ 开始日期: [2024-01-01 📅] │ |
| │ 结束日期: [2024-03-31 📅] │ |
| │ │ |
| │ 项目配置: [展开高级设置 ▼] │ |
| │ │ |
| ├──────────────────────────────────────────────────────────┤ |
| │ [取消] [确定] │ |
| └──────────────────────────────────────────────────────────┘ |
+------------------------------------------------------------------+
```
### 表单验证规则
```javascript
rules: {
projectName: [
{ required: true, message: '请输入项目名称', trigger: 'blur' },
{ min: 2, max: 50, message: '长度在 2 到 50 个字符', trigger: 'blur' }
],
startDate: [
{ required: true, message: '请选择开始日期', trigger: 'change' }
],
endDate: [
{ required: true, message: '请选择结束日期', trigger: 'change' },
{
validator: (rule, value, callback) => {
if (value && this.form.startDate && value < this.form.startDate) {
callback(new Error('结束日期不能早于开始日期'));
} else {
callback();
}
},
trigger: 'change'
}
]
}
```
---
## 页面3: 导入历史项目弹窗
### 对话框规格
```
+------------------------------------------------------------------+
| ┌──────────────────────────────────────────────────────────┐ |
| │ 导入历史项目 │ |
| ├──────────────────────────────────────────────────────────┤ |
| │ 搜索: [________________] 📅 时间筛选 ▼ │ |
| │ │ |
| │ 历史项目列表: │ |
| │ ┌─────────────────────────────────────────────┐ │ |
| │ │ ☐ 2024年Q1初核 │ │ |
| │ │ 创建时间: 2024-01-01 人员: 500 [详情] │ │ |
| │ ├─────────────────────────────────────────────┤ │ |
| │ │ ☑ 2023年Q4初核 │ │ |
| │ │ 创建时间: 2023-10-01 人员: 480 [详情] │ │ |
| │ ├─────────────────────────────────────────────┤ │ |
| │ │ ☐ 2023年Q3初核 │ │ |
| │ │ 创建时间: 2023-07-01 人员: 450 [详情] │ │ |
| │ └─────────────────────────────────────────────┘ │ |
| │ │ |
| │ 新项目名称: [2024年Q2初核复制] * │ |
| │ 时间范围: │ |
| │ 开始: [2024-04-01] 结束: [2024-06-30] │ |
| │ │ |
| ├──────────────────────────────────────────────────────────┤ |
| │ [取消] [导入] │ |
| └──────────────────────────────────────────────────────────┘ |
+------------------------------------------------------------------+
```
### 项目列表项样式
```vue
<el-radio-group v-model="selectedProjectId">
<el-radio
v-for="item in historyProjects"
:key="item.projectId"
:label="item.projectId"
class="project-radio"
>
<div class="project-item">
<div class="project-header">
<span class="name">{{ item.projectName }}</span>
<el-button type="text" size="small" @click.stop="viewDetail(item)">
详情
</el-button>
</div>
<div class="project-info">
<span>创建时间: {{ item.createTime }}</span>
<span>人员: {{ item.targetCount }}</span>
<el-tag size="mini" :type="getStatusType(item.projectStatus)">
{{ getStatusLabel(item.projectStatus) }}
</el-tag>
</div>
</div>
</el-radio>
</el-radio-group>
```
---
## 页面4: 项目归档确认
### 确认对话框
```
+------------------------------------------------------------------+
| ┌──────────────────────────────────────────────────────────┐ |
| │ ⚠️ 归档确认 │ |
| ├──────────────────────────────────────────────────────────┤ |
| │ │ |
| │ 确定要归档项目"2024年Q1初核"吗? │ |
| │ │ |
| │ 归档后将: │ |
| │ ✓ 项目状态变为"已归档" │ |
| │ ✓ 自动生成项目报告PDF │ |
| │ ✓ 移入归档库 │ |
| │ │ |
| │ ☐ 同时删除项目相关数据(不可恢复) │ |
| │ │ |
| │ 归档后可从"归档库"中查看和恢复 │ |
| │ │ |
| ├──────────────────────────────────────────────────────────┤ |
| │ [取消] [确认归档] │ |
| └──────────────────────────────────────────────────────────┘ |
+------------------------------------------------------------------+
```
---
## 交互规范
### 1. 加载状态
- 首次加载显示骨架屏
- 数据刷新显示loading遮罩
- 按钮操作后显示loading状态
### 2. 空状态
```
+------------------------------------------------------------------+
| ┌──────────────────────────────────────────────────────────┐ |
| │ 📂 │ |
| │ │ |
| │ 暂无项目数据 │ |
| │ │ |
| │ [新建项目] [导入历史项目] │ |
| └──────────────────────────────────────────────────────────┘ |
+------------------------------------------------------------------+
```
### 3. 错误提示
- 表单验证错误:红色边框 + 错误文字
- 网络错误:全屏错误提示
- 操作失败:右上角消息提示
### 4. 成功反馈
- 操作成功:右上角成功消息
- 删除成功:列表自动刷新
- 创建成功:跳转到详情页
---
## 响应式设计
### 断点定义
| 设备类型 | 屏幕宽度 | 布局调整 |
|---------|---------|---------|
| 大屏 | ≥1920px | 显示完整表格 |
| 标准 | ≥1200px | 标准布局 |
| 平板 | ≥768px | 隐藏次要列 |
| 手机 | <768px | 卡片式布局 |
### 移动端适配
```css
/* 移动端使用卡片式布局 */
@media (max-width: 768px) {
.project-list-table {
display: none;
}
.project-list-cards {
display: block;
}
}
```
---
## 可访问性
### 键盘导航
- Tab: 在元素间切换焦点
- Enter: 确认/提交
- Esc: 关闭对话框
- Space: 选中/取消选中
### ARIA标签
```html
<!-- 搜索框 -->
<input
aria-label="搜索项目名称"
role="searchbox"
/>
<!-- 表格 -->
<table role="table" aria-label="项目列表">
<caption>当前共5个项目</caption>
...
</table>
```
---
## 设计资源
### Figma设计稿
如需查看详细的设计稿,请联系设计团队。
### 墨刀原型
[在线查看原型](演示模式.html)
### 图标库
使用Element UI内置图标文档https://element.eleme.io/#/zh-CN/component/icon
---
## 版本信息
- **设计版本**: V1.0
- **设计日期**: 2026-01-27
- **设计师**: 待定
- **基于框架**: Vue 2.6 + Element UI 2.15

View File

@@ -0,0 +1,240 @@
# 项目管理模块文档复核报告
## 复核概述
**复核日期**: 2026-01-27
**复核人**: Claude
**对比文档**:
- 原始需求: [纪检初核系统功能说明书V1.0](../../纪检初核系统功能说明书-V1.0.md) 第9-62行
- 分解文档: [01-项目管理模块.md](./01-项目管理模块.md)
## 复核结论
### ✅ 功能覆盖完整性: 100%
所有功能点均已覆盖,无遗漏。
## 详细对比分析
### 一、导航与搜索区
| 功能需求 | 文档覆盖 | 状态 | 说明 |
|---------|---------|------|------|
| 项目搜索(关键词模糊搜索) | ✅ 已覆盖 | 完整 | 1.1.1节详细说明 |
| 新建项目(标准表单) | ✅ 已覆盖 | 完整 | 1.1.2节详细说明 |
| 导入历史项目 | ✅ 已覆盖 | 完整 | 1.1.3节详细说明 |
### 二、项目列表区
#### 列表信息列
| 功能需求 | 文档覆盖 | 状态 | 说明 |
|---------|---------|------|------|
| 项目名称+简要描述 | ✅ 已覆盖 | 完整 | 1.2.1节说明 |
| 创建时间 | ✅ 已覆盖 | 完整 | 1.2.1节说明 |
| 状态标识(进行中、已完成) | ✅ 已覆盖 | 完整 | 1.2.2节详细说明 |
| 目标人数 | ✅ 已覆盖 | 完整 | 1.2.1节说明 |
| 预警人数(动态更新) | ✅ 已覆盖 | 完整 | 1.2.3节详细说明 |
#### 操作列
| 功能需求 | 文档覆盖 | 状态 | 说明 |
|---------|---------|------|------|
| 查看结果(已完成项目) | ✅ 已覆盖 | 完整 | 1.2.4节说明 |
| 重新分析(已完成项目) | ✅ 已覆盖 | 完整 | 1.2.5节详细说明 |
| 归档项目生成PDF | ✅ 已覆盖 | 完整 | 1.2.6节详细说明明确说明生成PDF |
| 进入项目(进行中项目) | ✅ 已覆盖 | 完整 | 1.2.7节说明 |
### 三、快捷入口区
| 功能需求 | 文档覆盖 | 状态 | 说明 |
|---------|---------|------|------|
| 导入历史项目 | ✅ 已覆盖 | 完整 | 1.3.1节详细说明 |
| 创建季度初核 | ✅ 已覆盖 | 完整 | 1.3.2节详细说明,包含季度时间规则 |
| 创建新员工排查 | ✅ 已覆盖 | 完整 | 1.3.3节详细说明,包含新员工定义 |
### 四、业务规则
| 业务需求 | 文档覆盖 | 状态 | 说明 |
|---------|---------|------|------|
| 项目状态流转 | ✅ 已覆盖 | 完整 | 业务规则节说明 |
| 预警人数实时更新 | ✅ 已覆盖 | 完整 | 业务规则节说明 |
| 归档条件 | ✅ 已覆盖 | 完整 | 业务规则节说明 |
| 重新分析条件 | ✅ 已覆盖 | 完整 | 业务规则节说明 |
## 发现的问题
### ⚠️ 问题1: 数据模型命名不符合若依框架规范
**问题描述**:
当前文档中的数据模型字段命名不符合若依框架的命名规范。
**当前定义**:
| 字段名 | 类型 |
|-------|------|
| projectId | Long |
| projectName | String |
| status | String |
| isArchived | Boolean |
**建议修改**(符合若依规范):
| 字段名 | 类型 | 说明 |
|-------|------|------|
| project_id | bigint(20) | 项目ID |
| project_name | varchar(100) | 项目名称 |
| project_desc | varchar(500) | 项目描述 |
| project_status | char(1) | 项目状态0进行中 1已完成 2已归档 |
| target_count | int(11) | 目标人数 |
| warning_count | int(11) | 预警人数 |
| archive_flag | char(1) | 归档标志0未归档 1已归档 |
| create_by | varchar(64) | 创建者 |
| create_time | datetime | 创建时间 |
| update_by | varchar(64) | 更新者 |
| update_time | datetime | 更新时间 |
| remark | varchar(500) | 备注 |
**影响**: 需要修改数据模型章节
### ⚠️ 问题2: 状态枚举值未明确定义
**问题描述**:
原文档中提到的状态包括"进行中"、"已完成",但在数据模型中未明确定义状态值的枚举。
**建议**:
```
project_status项目状态:
- 0: 进行中
- 1: 已完成
- 2: 已归档
```
### ⚠️ 问题3: 缺少原型图
**问题描述**:
原始需求中明确提到需要3个原型图
(1) 首页
(2) 新建项目弹窗页入口
(3) 导入历史项目弹窗页入口
当前文档在"页面原型"章节只是简单列出,没有详细的界面设计说明。
**建议**:
需要补充详细的UI原型设计包括
- 页面布局
- 组件位置
- 交互流程
- 状态变化
### ✅ 优点
1. **功能分解细致**: 将每个功能点分解到三级,便于开发理解
2. **交互说明完整**: 每个功能都包含详细的交互流程
3. **页面原型示例**: 提供了详细的表单和布局示例
4. **技术实现要点**: 包含了技术实现的关键点
5. **业务规则清晰**: 业务规则章节清晰定义了状态流转和约束条件
## 建议改进
### 1. 数据模型规范化
**优先级**: 高
建议创建独立的数据模型文档,符合若依框架规范:
```sql
-- 项目信息表
CREATE TABLE ccdi_project (
project_id bigint(20) not null auto_increment comment '项目ID',
project_name varchar(100) not null comment '项目名称',
project_desc varchar(500) default null comment '项目描述',
project_status char(1) default '0' comment '项目状态0进行中 1已完成 2已归档',
target_count int(11) default 0 comment '目标人数',
warning_count int(11) default 0 comment '预警人数',
start_date date default null comment '开始日期',
end_date date default null comment '结束日期',
archive_flag char(1) default '0' comment '归档标志0未归档 1已归档',
archive_time datetime default null comment '归档时间',
del_flag char(1) default '0' comment '删除标志0存在 2删除',
create_by varchar(64) default '' comment '创建者',
create_time datetime comment '创建时间',
update_by varchar(64) default '' comment '更新者',
update_time datetime comment '更新时间',
remark varchar(500) default null comment '备注',
primary key (project_id)
) engine=innodb auto_increment=1 comment = '核查项目表';
```
### 2. 补充原型图设计
**优先级**: 中
建议使用工具如Figma、Sketch、墨刀创建详细的UI原型图或使用ASCII/Mermaid图表展示界面布局。
### 3. 添加API接口定义
**优先级**: 中
建议为每个功能添加RESTful API接口定义包括
- 请求方法
- 请求路径
- 请求参数
- 响应格式
示例:
```
POST /ccdi/project/list
功能: 查询项目列表
请求参数:
{
"pageNum": 1,
"pageSize": 20,
"projectName": "关键词",
"projectStatus": "0"
}
响应:
{
"code": 200,
"msg": "查询成功",
"rows": [...],
"total": 100
}
```
## 总结
### 覆盖率统计
| 维度 | 覆盖率 | 状态 |
|-----|--------|------|
| 功能点覆盖 | 100% | ✅ 优秀 |
| 数据模型 | 80% | ⚠️ 需改进 |
| 业务规则 | 100% | ✅ 优秀 |
| 交互说明 | 100% | ✅ 优秀 |
| 技术实现 | 70% | ⚠️ 需补充 |
### 整体评价
**文档质量**: ⭐⭐⭐⭐ (4/5星)
**优点**:
- ✅ 功能分解完整且细致
- ✅ 交互流程清晰
- ✅ 业务规则明确
**需要改进**:
- ⚠️ 数据模型需符合若依框架规范
- ⚠️ 需要补充详细的UI原型图
- ⚠️ 建议添加API接口定义
### 下一步行动
1. **高优先级**: 修改数据模型,符合若依框架规范
2. **中优先级**: 补充UI原型设计
3. **中优先级**: 添加API接口定义
4. **低优先级**: 创建数据库设计文档和开发规范文档
## 复核签字
**复核人**: Claude (AI助手)
**复核日期**: 2026-01-27
**文档版本**: V1.0

View File

@@ -0,0 +1,143 @@
# 02.1-数据管理
## 模块概述
数据管理是项目工作台的核心模块之一,用于统一接入来自行内流水、征信数据、人工上传等不同来源和格式的数据,并自动化检查识别数据问题,保证后续风险识别的准确性。
## 模块结构
```
数据管理
├── 数据导入
└── 数据质量检查
```
## 功能分解
### 1.1 数据导入
**功能描述**: 提供多种数据源的导入功能,支持行内数据拉取和外部数据上传。
**功能点**:
- **拉取本行信息**: 输入证件号码或导入身份证号表格,自动拉取行内流水、资产等数据信息
- **他行流水导入**: 批量上传员工的他行银行、支付宝微信等交易流水文件支持Excel、文本型PDF系统自动解析提取交易金额、对手方、交易时间、余额、摘要等关键字段
- **征信信息导入**: 上传个人信用报告HTML格式系统自动解析提取信贷账户、负债总额、担保信息、查询记录等核心数据
- **员工家庭关系导入**: 上传员工的家庭成员信息,用于构建关系人图谱和关联分析
- **名单库选择**: 从"信息维护-中介库管理"内的名单中选择确认后的可疑名单
- **生成报告**: 生成初核结果,跳转至结果页
**数据要素**:
- 证件号码/身份证号
- 本行流水数据
- 他行流水文件
- 征信报告文件
- 员工家庭关系信息
- 名单库数据
### 1.2 数据质量检查
**功能描述**: 在数据导入后,系统自动执行预定义的质量规则对数据集进行检查。
**功能点**:
- **质量规则执行**: 自动执行数据质量检查规则
- **检查结果展示**: 以列表形式展示发现的具体问题
- 数据格式不一致(如日期格式不统一、金额单位混杂)
- 余额链条性异常(相邻交易记录间的余额计算逻辑断裂)
- 缺失关键字段(如交易记录缺少对手方账号或户名)
- **质量评分仪表盘**: 通过三个关键指标量化数据质量
- 数据完整性(衡量必填字段的填充率)
- 格式一致性(衡量数据遵循预定格式规范的程度)
- 余额连续性(衡量流水数据中余额连续、计算正确的程度)
**数据要素**:
- 数据完整性评分
- 格式一致性评分
- 余额连续性评分
- 异常记录详情
## 数据模型
### 数据导入记录 (DataImport)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| importId | Long | 导入ID | 是 |
| projectId | Long | 项目ID | 是 |
| importType | String | 导入类型(本行/他行/征信/家庭关系) | 是 |
| importTime | DateTime | 导入时间 | 是 |
| importStatus | String | 导入状态 | 是 |
| fileCount | Integer | 文件数量 | 否 |
| recordCount | Integer | 记录数量 | 否 |
### 数据质量检查结果 (DataQualityCheck)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| checkId | Long | 检查ID | 是 |
| projectId | Long | 项目ID | 是 |
| completenessScore | Double | 数据完整性评分 | 是 |
| consistencyScore | Double | 格式一致性评分 | 是 |
| continuityScore | Double | 余额连续性评分 | 是 |
| formatIssueCount | Integer | 格式不一致数量 | 是 |
| balanceIssueCount | Integer | 余额链条性异常数量 | 是 |
| missingFieldCount | Integer | 缺失关键字段数量 | 是 |
| checkTime | DateTime | 检查时间 | 是 |
## 支持的文件格式
| 数据类型 | 支持格式 | 解析方式 |
|---------|---------|---------|
| 他行流水 | Excel、文本型PDF | 自动解析 |
| 征信报告 | HTML | 自动解析 |
| 身份证号表格 | Excel | 导入读取 |
| 员工家庭关系 | Excel | 导入读取 |
## 业务规则
1. **数据导入顺序**: 建议先拉取本行信息,再导入他行流水和征信信息
2. **质量检查触发**: 数据导入完成后自动触发质量检查
3. **质量评分计算**:
- 数据完整性 = (已填充必填字段数 / 应填必填字段数) × 100%
- 格式一致性 = (格式正确记录数 / 总记录数) × 100%
- 余额连续性 = (余额计算正确记录数 / 总记录数) × 100%
4. **异常数据处理**: 发现异常需要用户确认后才能生成报告
## 页面原型
### 1. 数据导入页面
- 数据源选择区
- 文件上传区
- 导入进度展示
### 2. 数据质量检查页面
- 质量评分仪表盘
- 异常记录列表
- 异常详情展示
## 交互关系
| 关联模块 | 交互说明 |
|---------|---------|
| 初核结果总览 | 点击"生成报告"跳转到初核结果总览页 |
| 信息维护模块 | 从"中介库管理"选择名单 |
| 专项排查 | 导入的数据用于专项排查分析 |
## 异常处理
| 异常类型 | 处理方式 |
|---------|---------|
| 文件格式不支持 | 提示用户支持的格式,拒绝导入 |
| 数据解析失败 | 记录失败原因,提示用户检查文件 |
| 质量检查失败 | 展示异常详情,允许用户修正后重新导入 |
| 余额计算异常 | 标注异常记录,提示数据可能缺失或被篡改 |
## 功能点统计
- 二级功能: 2个
- 三级功能点: 10个
## 版本信息
- **文档版本**: V1.0
- **创建日期**: 2026-01-27
- **基于原文档**: 纪检初核系统功能说明书V1.0 第73-118行

View File

@@ -0,0 +1,235 @@
# 02.2-初核结果总览
## 模块概述
初核结果总览模块展示项目中上传的数据经过模型识别出的风险信息总览及明细,包括风险总览、风险模型、风险明细三个主要部分。
## 模块结构
```
初核结果总览
├── 风险总览
│ ├── 风险全局仪表盘
│ ├── 高风险/中风险人员名单
│ └── 单个风险人员详情
├── 风险模型
│ ├── 模型触发情况总计
│ └── 各模型触发人员列表
└── 风险明细
├── 涉疑交易明细表
├── 涉及违法人员清单表
└── 异常账户清单表
```
## 功能分解
### 2.1 风险总览
**功能描述**: 以数据卡片和列表形式集中展示项目整体风险态势。
**功能点**:
- **风险全局仪表盘**: 展示项目整体风险数据卡片
- 总人数(项目覆盖的员工总数)
- 无预警人数
- 低风险人数
- 中风险人数
- 高风险人数
- **高风险/中风险人员名单**: 按风险评分降序排列
- 显示姓名、身份证号、部门、风险评分、触发模型数、核心异常点
- 高风险人员全部展示
- 中风险人员展示评分最高的10名
- **查看单个风险人员详情**: 钻取至单个员工的全面风险报告
- 所有异常行为列表
- 每个行为对应的模型判断依据(规则)
- 资产分析
- 征信概览
- 关系人图谱
- 针对可疑交易及可疑对象手动添加至关注方
- **批量操作**:
- 批量生成报告
- 批量导出证据
- 批量添加到关注列表
- 添加到案例库
**数据要素**:
- 总人数
- 各风险等级人数
- 人员详细信息
- 风险评分
- 触发模型数
- 核心异常点
### 2.2 风险模型
**功能描述**: 展示所有风险模型的整体触发情况和触发人员列表。
**功能点**:
- **模型触发情况总计**: 以表格形式展示
- 模型名称
- 触发总人数
- 主要触发人员示例
- 点击"查看详情"跳转至触发该模型的全体人员列表
- **各模型触发人员列表**: 支持多维度筛选
- 下拉菜单选择触发某一特定风险模型
- 筛选同时触发多个如2个以上风险模型的高风险人员
- 搜索人员姓名或工号
- 将常用筛选组合保存为固定策略
- 点击【查看详情】查看该员工详细的风险情况
**数据要素**:
- 模型名称
- 触发人数
- 触发人员列表
- 筛选策略配置
### 2.3 风险明细
**功能描述**: 展示涉疑交易、违法人员、异常账户等详细风险信息。
**功能点**:
- **涉疑交易明细表**:
- 支持按「全部可疑人员类型」「名单库命中」「模型规则命中」等维度筛选
- 支持穿透式查看交易流水
- 显示交易时间、可疑人员、关联人、关联员工、关系、摘要、交易类型、交易金额
- 点击「查看详情」跳转至可疑流水详情页
- **涉及违法人员清单表**:
- 展示外部违法名单库命中的人员信息
- 显示违法人员姓名、身份证号、是否为失信被执行人、是否有刑事判决记录、是否有行政处罚记录、是否涉及公安案件、是否被限制高消费、违法信息更新时间
- 点击「查看详情」展示该人员的违法详情、更新日期等完整背景信息
- **异常账户清单表**:
- 独立列出经模型识别出的所有异常账户
- 显示账号、开户人、银行、异常类型、异常发生时间、状态
- 点击「查看详情」查看该账号的所有异常交易明细
- **批量导出数据及报告**:
- 导出所有列表为Excel
- 一键生成项目多维统计报告PDF/Word
- 模型触发排行、部门风险分布、风险评分区间等多维度分析
**数据要素**:
- 交易流水详情
- 违法人员信息
- 异常账户信息
- 导出配置
## 数据模型
### 风险人员 (RiskPerson)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| personId | Long | 人员ID | 是 |
| projectId | Long | 项目ID | 是 |
| name | String | 姓名 | 是 |
| idCard | String | 身份证号 | 是 |
| department | String | 部门 | 否 |
| riskScore | Double | 风险评分 | 是 |
| riskLevel | String | 风险等级 | 是 |
| triggerModelCount | Integer | 触发模型数 | 是 |
| coreAnomaly | String | 核心异常点 | 否 |
### 风险模型 (RiskModel)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| modelId | Long | 模型ID | 是 |
| modelName | String | 模型名称 | 是 |
| triggerCount | Integer | 触发总人数 | 是 |
| modelType | String | 模型类型 | 是 |
### 涉疑交易 (SuspiciousTransaction)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| transactionId | Long | 交易ID | 是 |
| transactionTime | DateTime | 交易时间 | 是 |
| suspiciousPerson | String | 可疑人员 | 是 |
| relatedPerson | String | 关联人 | 是 |
| relatedEmployee | String | 关联员工 | 是 |
| relation | String | 关系 | 是 |
| summary | String | 摘要 | 否 |
| transactionType | String | 交易类型 | 是 |
| amount | BigDecimal | 交易金额 | 是 |
### 违法人员 (IllegalPerson)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| personId | Long | 人员ID | 是 |
| name | String | 姓名 | 是 |
| idCard | String | 身份证号 | 是 |
| isDishonestExecutor | Boolean | 是否失信被执行人 | 是 |
| hasCriminalJudgment | Boolean | 是否刑事判决 | 是 |
| hasAdministrativePenalty | Boolean | 是否行政处罚 | 是 |
| hasPublicSecurityCase | Boolean | 是否公安涉案 | 是 |
| isConsumptionRestricted | Boolean | 是否限制高消费 | 是 |
| updateTime | DateTime | 违法信息更新时间 | 是 |
### 异常账户 (AbnormalAccount)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| accountId | Long | 账户ID | 是 |
| accountNo | String | 账号 | 是 |
| accountHolder | String | 开户人 | 是 |
| bank | String | 银行 | 是 |
| abnormalType | String | 异常类型 | 是 |
| abnormalTime | DateTime | 异常发生时间 | 是 |
| status | String | 状态 | 是 |
## 风险等级定义
| 等级 | 评分范围 | 说明 |
|-----|---------|-----|
| 无风险 | 0 | 未触发任何风险模型 |
| 低风险 | 1-40 | 触发少量风险模型,风险较低 |
| 中风险 | 41-70 | 触发多个风险模型,需要关注 |
| 高风险 | 71-100 | 触发多个高风险模型,需要重点核查 |
## 业务规则
1. **风险评分计算**: 基于触发的风险模型数量和严重程度计算
2. **人员名单排序**: 按风险评分降序排列
3. **模型触发统计**: 实时统计各模型的触发情况
4. **批量操作**: 支持多选人员进行批量操作
## 页面原型
### 1. 风险总览页面
- 风险仪表盘
- 人员名单列表
- 批量操作按钮
### 2. 风险模型页面
- 模型触发情况表
- 筛选条件区
- 人员列表
### 3. 风险明细页面
- 涉疑交易明细表
- 违法人员清单表
- 异常账户清单表
### 4. 人员详情页面
- 异常明细列表
- 资产分析图表
- 征信摘要
- 关系人图谱
## 交互关系
| 关联模块 | 交互说明 |
|---------|---------|
| 数据管理 | 使用导入的数据进行风险分析 |
| 专项排查 | 从人员详情跳转到专项排查 |
| 流水明细查询 | 从交易详情跳转到流水查询 |
## 功能点统计
- 二级功能: 3个
- 三级功能点: 16个
## 版本信息
- **文档版本**: V1.0
- **创建日期**: 2026-01-27
- **基于原文档**: 纪检初核系统功能说明书V1.0 第119-262行

View File

@@ -0,0 +1,242 @@
# 02.3-专项排查
## 模块概述
专项排查模块针对单人用户进行深度调查,包括员工详查分析、图谱分析和拓展查询等功能。
## 模块结构
```
专项排查
├── 员工详查分析
├── 图谱分析
│ ├── 关系人图谱
│ ├── 资金流图谱
│ └── 实控账户图谱
└── 拓展查询
├── 采购查询
├── 人员调动查询
└── 招聘查询
```
## 功能分解
### 3.1 员工详查分析
**功能描述**: 针对单个目标员工进行深度调查分析。
**功能点**:
- **输入查询条件**: 输入目标员工的身份证号,可选择自定义时间范围
- **收入资产负债分析**: 根据检查对象及其主要家庭成员(配偶等),根据收入、资产、负债三者的关系进行初核判断
- **风险结果判断**:
- 正常
- 收入+负债远低于资产
- 收入+负债远高于资产
- 其他风险提示
**数据要素**:
- 员工身份证号
- 时间范围
- 收入数据
- 资产数据
- 负债数据
- 家庭成员信息
### 3.2 图谱分析
**功能描述**: 通过图形化方式,揭示隐藏的人员与资金关系网络。
**功能点**:
- **关系人图谱**:
- 通过身份证号等信息筛选展示以该员工为中心的社会关系网络
- 展示家庭成员、密切关联人
- 点击节点查看详情
- 点击关联企业穿透查询企业下的法人、股东等信息
- **资金流图谱**:
- 针对个人的资金流向进行分析
- 对可疑资金向前追溯多层交易对手
- 支持手工加入资金流向节点
- 支持备注资金流向
- **实控账户图谱**:
- 输入身份证号生成该员工实际控制的账户网络图
- 实控账户可能非本人名下
- 排查逻辑:基于手机登录丰收互联次数、线下多次代理存取等进行判断
**数据要素**:
- 身份证号
- 社会关系数据
- 资金流向数据
- 账户控制关系数据
- 企业关联数据
### 3.3 拓展查询
**功能描述**: 提供采购、人员调动、招聘等多维度的查询功能。
**功能点**:
- **采购查询**:
- 筛选查询采购时段
- 选择关联员工
- 查询其参与的所有采购
- 清单包含:采购事项名称、交易日期、采购金额、供应商名称、关联员工
- 支持穿透展示采购全量信息(采购方式、入围/中标公司、经办人、对方账号等)
- **人员调动查询**:
- 查询员工的岗位/机构调动记录
- 辅助排查"异常调动、岗位晋升合规性"
- 可选择查询时间和员工姓名
- 包含:姓名、工号、调动时间、原/现岗位、原/现机构、调动原因
- **招聘查询**:
- 查询招聘事项信息
- 辅助排查"招聘流程合规性、面试官关联风险"
- 可筛选查询时间段和员工姓名
- 包含:招聘人员、岗位、招聘时间、关联面试官、面试结果
**数据要素**:
- 采购信息
- 人员调动记录
- 招聘信息
## 数据模型
### 员工详查记录 (EmployeeDetailCheck)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| checkId | Long | 检查ID | 是 |
| personId | String | 身份证号 | 是 |
| timeRangeStart | Date | 时间范围开始 | 是 |
| timeRangeEnd | Date | 时间范围结束 | 是 |
| income | BigDecimal | 收入 | 否 |
| assets | BigDecimal | 资产 | 否 |
| liabilities | BigDecimal | 负债 | 否 |
| checkResult | String | 检查结果 | 是 |
| checkTime | DateTime | 检查时间 | 是 |
### 关系人图谱节点 (RelationshipGraphNode)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| nodeId | Long | 节点ID | 是 |
| nodeType | String | 节点类型(人员/企业/账户) | 是 |
| nodeName | String | 节点名称 | 是 |
| nodeInfo | String | 节点详细信息JSON | 否 |
### 关系人图谱边 (RelationshipGraphEdge)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| edgeId | Long | 边ID | 是 |
| sourceNodeId | Long | 源节点ID | 是 |
| targetNodeId | Long | 目标节点ID | 是 |
| relationType | String | 关系类型 | 是 |
| relationInfo | String | 关系详细信息 | 否 |
### 采购记录 (ProcurementRecord)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| procurementId | Long | 采购ID | 是 |
| procurementName | String | 采购事项名称 | 是 |
| transactionDate | Date | 交易日期 | 是 |
| procurementAmount | BigDecimal | 采购金额 | 是 |
| supplierName | String | 供应商名称 | 是 |
| relatedEmployee | String | 关联员工 | 是 |
| procurementMethod | String | 采购方式 | 否 |
| winningCompany | String | 入围/中标公司 | 否 |
| operator | String | 经办人 | 否 |
| targetAccount | String | 对方账号 | 否 |
### 人员调动记录 (PersonnelTransfer)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| transferId | Long | 调动ID | 是 |
| name | String | 姓名 | 是 |
| employeeId | String | 工号 | 是 |
| transferTime | DateTime | 调动时间 | 是 |
| originalPosition | String | 原岗位 | 是 |
currentPosition | String | 现岗位 | 是 |
| originalOrganization | String | 原机构 | 是 |
| currentOrganization | String | 现机构 | 是 |
| transferReason | String | 调动原因 | 否 |
### 招聘记录 (RecruitmentRecord)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| recruitmentId | Long | 招聘ID | 是 |
| recruitPerson | String | 招聘人员 | 是 |
| position | String | 岗位 | 是 |
| recruitmentTime | DateTime | 招聘时间 | 是 |
| relatedInterviewer | String | 关联面试官 | 是 |
| interviewResult | String | 面试结果 | 是 |
## 图谱分析说明
### 关系人图谱
- **中心节点**: 查询的员工
- **一级关联**: 配偶、父母、子女等家庭成员
- **二级关联**: 密切关联人、关联企业
- **企业穿透**: 法人、股东、高管等信息
### 资金流图谱
- **流向追溯**: 向前追溯多层交易对手
- **可疑资金标记**: 高亮显示可疑交易路径
- **手工标注**: 支持用户添加节点和备注
### 实控账户图谱
- **判断依据**:
- 手机登录丰收互联次数
- 线下多次代理存取记录
- 交易行为模式分析
- **账户类型**: 本人账户、亲属账户、其他关联账户
## 业务规则
1. **员工详查分析**:
- 正常: 收入 + 负债 ≈ 资产误差±20%以内)
- 收入+负债远低于资产: 资产来源可疑
- 收入+负债远高于资产: 可能存在隐瞒资产
2. **图谱分析**:
- 最多展示3层关联关系
- 单个节点最多展示100个关联节点
3. **拓展查询**:
- 支持模糊搜索
- 支持多条件组合筛选
## 页面原型
### 1. 员工详查分析页面
- 查询条件输入区
- 收入资产负债对比表
- 风险结果展示区
### 2. 图谱分析页面
- 查询输入区
- 图谱可视化区域
- 节点详情面板
- 操作工具栏
### 3. 拓展查询页面
- 查询条件区
- 结果列表
- 详情展示区
## 交互关系
| 关联模块 | 交互说明 |
|---------|---------|
| 初核结果总览 | 从人员详情跳转到专项排查 |
| 数据管理 | 使用导入的数据进行分析 |
| 流水明细查询 | 从资金流图谱跳转到流水查询 |
## 功能点统计
- 二级功能: 3个
- 三级功能点: 10个
## 版本信息
- **文档版本**: V1.0
- **创建日期**: 2026-01-27
- **基于原文档**: 纪检初核系统功能说明书V1.0 第263-328行

View File

@@ -0,0 +1,200 @@
# 02.4-流水明细查询
## 模块概述
流水明细查询模块对拉取的本行流水以及上传的他行流水进行批量分析,提供多账户流水合并和二次分析功能。
## 模块结构
```
流水明细查询
├── 多账户流水明细合并
└── 全量流水二次分析
```
## 功能分解
### 4.1 多账户流水明细合并
**功能描述**: 将多个银行的流水合并成一个流水文件进行统一查询和分析。
**功能点**:
- **流水合并**: 将多个银行的流水数据合并为一个统一的数据集
- **账号筛选**: 左侧筛选区可筛选账号和银行进行查询
- **自主排序**: 主页面可选择按交易金额、交易时间等自主排序
- **对手方分析**: 支持切换对手方分析视图
**数据要素**:
- 账号
- 银行名称
- 交易时间
- 交易金额
- 交易类型
- 对手方信息
- 余额
### 4.2 全量流水二次分析
**功能描述**: 对全量流水表中的关键流水进行手工提交分析,实现重点流水的深入分析。
**功能点**:
- **加入分析**: 对关键流水进行手工提交"加入分析"操作
- **新建交易表**: 将关键流水重新放置在一个新的交易表中进行分析
- **独立分析**: 新的交易表独立于原流水表,支持单独的操作和分析
**数据要素**:
- 选中的流水记录
- 新建的交易表
- 分析结果
## 数据模型
### 流水记录 (TransactionRecord)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| transactionId | Long | 交易ID | 是 |
| projectId | Long | 项目ID | 是 |
| accountNo | String | 账号 | 是 |
| bankName | String | 银行名称 | 是 |
| transactionTime | DateTime | 交易时间 | 是 |
| transactionType | String | 交易类型 | 是 |
| amount | BigDecimal | 交易金额 | 是 |
| balance | BigDecimal | 余额 | 是 |
| counterparty | String | 对手方 | 否 |
| summary | String | 摘要 | 否 |
| dataSource | String | 数据来源(本行/他行) | 是 |
### 二次分析表 (SecondaryAnalysisTable)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| tableId | Long | 分析表ID | 是 |
| projectId | Long | 项目ID | 是 |
| tableName | String | 分析表名称 | 是 |
| createTime | DateTime | 创建时间 | 是 |
| transactionCount | Integer | 流水数量 | 是 |
### 二次分析流水关联 (SecondaryAnalysisTransaction)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| id | Long | 关联ID | 是 |
| tableId | Long | 分析表ID | 是 |
| transactionId | Long | 交易ID | 是 |
| addTime | DateTime | 添加时间 | 是 |
## 页面布局
### 流水明细查询页面
```
+----------------------------------+
| 流水明细查询 |
+----------------------------------+
| 筛选区 | 流水列表区 |
| | |
| 账号: [▼] | 交易时间 | 金额 | |
| 银行: [▼] | 2024-01-15| 5000 | |
| | 2024-01-14| 3000 | |
| 排序: [▼] | 2024-01-13| 2000 | |
| | |
| [加入分析] | |
+----------------------------------+
```
## 业务规则
1. **流水合并规则**:
- 同一账号的流水按时间顺序排列
- 不同账号的流水保持独立,在合并表中通过账号/银行字段区分
- 支持的最大账号数量: 100个
2. **排序规则**:
- 按交易时间排序(升序/降序)
- 按交易金额排序(升序/降序)
- 支持多字段组合排序
3. **二次分析规则**:
- 单个分析表最多包含10000条流水记录
- 同一流水记录可以加入多个分析表
- 分析表支持导出和删除操作
## 操作流程
### 流水查询流程
```
1. 选择账号/银行
2. 选择排序方式
3. 查看流水列表
4. 切换对手方分析(可选)
5. 选中关键流水
6. 点击"加入分析"
```
### 二次分析流程
```
1. 在全量流水表中选中关键流水
2. 点击"加入分析"
3. 创建或选择目标分析表
4. 流水添加到分析表
5. 在新分析表中进行独立分析
```
## 页面原型
### 1. 流水明细查询页面
- 左侧筛选区(账号、银行、排序)
- 右侧流水列表区
- 对手方分析切换按钮
- 批量操作区
### 2. 二次分析表页面
- 分析表列表
- 流水明细
- 统计分析
- 导出功能
## 交互关系
| 关联模块 | 交互说明 |
|---------|---------|
| 数据管理 | 使用导入的流水数据 |
| 初核结果总览 | 从交易详情跳转到流水查询 |
| 专项排查 | 从资金流图谱跳转到流水查询 |
## 功能特性
### 多账户流水合并
- 支持跨银行流水统一查询
- 支持多种排序方式
- 支持对手方分析视图切换
- 支持流水数据导出
### 全量流水二次分析
- 灵活的手工选择机制
- 独立的分析空间
- 支持多个分析表并行工作
- 支持分析结果导出
## 功能点统计
- 二级功能: 2个
- 三级功能点: 4个
## 版本信息
- **文档版本**: V1.0
- **创建日期**: 2026-01-27
- **基于原文档**: 纪检初核系统功能说明书V1.0 第315-328行

View File

@@ -0,0 +1,115 @@
# 02-项目工作台
## 模块概述
项目工作台是系统的核心业务模块,用户从项目列表点击"进入项目"后进入该模块。工作台涵盖从数据准备到风险识别的全流程,通过侧边导航栏实现各功能模块间的切换。
## 模块结构
```
项目工作台
├── 02.1-数据管理
├── 02.2-初核结果总览
├── 02.3-专项排查
└── 02.4-流水明细查询
```
## 侧边导航栏
**功能描述**: 提供项目工作台内各功能模块的导航和状态展示。
**功能点**:
- **返回项目列表**: 返回当前项目的上一层列表页
- **项目状态标识**: 明确标识当前项目阶段(进行中/已完成)
- **最后更新时间**: 显示数据或项目状态的最后变更时间,用于判断信息时效性
## 子模块说明
### 02.1-数据管理
数据管理是进入具体项目后的核心工作台之一,将来自行内流水、征信数据、人工上传不同来源和格式的数据,在一个界面内完成统一接入,并自动化检查识别数据问题。
**主要功能**:
- 数据导入(本行信息、他行流水、征信信息、员工家庭关系、名单库)
- 数据质量检查
**功能点数**: 10个
**文档链接**: [02.1-数据管理.md](./02.1-数据管理.md)
### 02.2-初核结果总览
初核结果总览展示项目中上传的数据经过模型识别出的风险信息总览及明细。
**主要功能**:
- 风险总览(仪表盘、人员名单、人员详情)
- 风险模型(模型触发情况、模型触发人员列表)
- 风险明细(涉疑交易明细、违法人员清单、异常账户清单)
**功能点数**: 16个
**文档链接**: [02.2-初核结果总览.md](./02.2-初核结果总览.md)
### 02.3-专项排查
专项排查针对单人用户进行深度调查和分析。
**主要功能**:
- 员工详查分析
- 图谱分析(关系人图谱、资金流图谱、实控账户图谱)
- 拓展查询(采购查询、人员调动查询、招聘查询)
**功能点数**: 10个
**文档链接**: [02.3-专项排查.md](./02.3-专项排查.md)
### 02.4-流水明细查询
流水明细查询对拉取的本行流水以及上传的他行流水进行批量分析。
**主要功能**:
- 多账户流水明细合并
- 全量流水二次分析
**功能点数**: 4个
**文档链接**: [02.4-流水明细查询.md](./02.4-流水明细查询.md)
## 业务流程
```
进入项目工作台
[数据管理] - 导入数据、质量检查
[生成报告] - 运行风险模型
[初核结果总览] - 查看风险分析结果
[专项排查] - 针对性深度调查
[流水明细查询] - 流水数据二次分析
```
## 功能点统计
| 子模块 | 功能点数量 |
|-------|----------|
| 02.1-数据管理 | 10 |
| 02.2-初核结果总览 | 16 |
| 02.3-专项排查 | 10 |
| 02.4-流水明细查询 | 4 |
| **合计** | **40** |
## 交互关系
| 关联模块 | 交互说明 |
|---------|---------|
| 项目管理模块 | 从项目列表进入,返回项目列表 |
| 各子模块 | 通过侧边导航栏切换 |
## 版本信息
- **文档版本**: V1.0
- **创建日期**: 2026-01-27
- **基于原文档**: 纪检初核系统功能说明书V1.0 第63-328行

View File

@@ -0,0 +1,207 @@
# 03-信息维护模块
## 模块概述
信息维护模块用于建立和维护系统所需的基础数据,包括中介库管理、员工信息管理和信贷客户家庭关系维护。
## 模块结构
```
信息维护模块
├── 中介库管理
├── 员工信息管理
└── 信贷客户家庭关系维护
```
## 功能分解
### 3.1 中介库管理
**功能描述**: 建立并维护外部中介人员/机构黑名单库。
**功能点**:
- **名单导入**: 支持Excel批量导入中介名单
- **名单维护**: 对中介名单进行增、删、改、查操作
- **名单查询**: 支持按姓名、身份证号、机构名称等条件查询
- **名单选择**: 在项目工作台中从中介库选择确认后的可疑名单
- **自动预警**: 当员工交易对手命中该库时,系统自动产生高风险预警
**数据要素**:
- 中介人员姓名
- 身份证号
- 中介机构名称
- 统一社会信用代码
- 风险等级
- 备注
### 3.2 员工信息管理
**功能描述**: 对员工实控账户、实控手机号、关系人信息等进行批量维护。
**功能点**:
- **实控账户维护**: 维护员工实际控制的账户信息(可能非本人名下)
- **实控手机号维护**: 维护员工实际使用的手机号信息
- **关系人信息维护**: 维护员工的关系人信息(未在户口本上的特定关系人等)
- **批量导入**: 支持Excel批量导入员工附属信息
- **信息查询**: 支持按员工姓名、工号等条件查询
- **信息编辑**: 对员工附属信息进行编辑和更新
**数据要素**:
- 员工姓名
- 工号
- 实控账户信息
- 实控手机号
- 关系人信息
- 关系类型
### 3.3 信贷客户家庭关系维护
**功能描述**: 上传并维护信贷客户家庭关系表格信息。
**功能点**:
- **家庭关系导入**: 上传信贷客户家庭关系表格
- **家庭关系维护**: 对家庭关系信息进行增、删、改、查操作
- **关系查询**: 支持按客户姓名、身份证号等条件查询家庭关系
- **关系展示**: 以树形结构展示家庭成员关系
**数据要素**:
- 客户姓名
- 身份证号
- 家庭成员姓名
- 家庭成员身份证号
- 关系类型(配偶、父母、子女等)
- 关系说明
## 数据模型
### 中介库 (IntermediaryBlacklist)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| intermediaryId | Long | 中介ID | 是 |
| name | String | 姓名/机构名称 | 是 |
| idCard | String | 身份证号/统一社会信用代码 | 否 |
| intermediaryType | String | 中介类型(个人/机构) | 是 |
| riskLevel | String | 风险等级 | 是 |
| remarks | String | 备注 | 否 |
| createTime | DateTime | 创建时间 | 是 |
| updateTime | DateTime | 更新时间 | 是 |
| status | String | 状态(有效/失效) | 是 |
### 员工附属信息 (EmployeeAdditionalInfo)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| infoId | Long | 信息ID | 是 |
| employeeId | String | 员工工号 | 是 |
| employeeName | String | 员工姓名 | 是 |
| infoType | String | 信息类型(实控账户/实控手机号/关系人) | 是 |
| infoContent | String | 信息内容JSON格式 | 是 |
| source | String | 信息来源 | 否 |
| createTime | DateTime | 创建时间 | 是 |
| updateTime | DateTime | 更新时间 | 是 |
### 信贷客户家庭关系 (CreditCustomerFamilyRelation)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| relationId | Long | 关系ID | 是 |
| customerName | String | 客户姓名 | 是 |
| customerIdCard | String | 客户身份证号 | 是 |
| familyMemberName | String | 家庭成员姓名 | 是 |
| familyMemberIdCard | String | 家庭成员身份证号 | 是 |
| relationType | String | 关系类型 | 是 |
| relationDescription | String | 关系说明 | 否 |
| createTime | DateTime | 创建时间 | 是 |
| updateTime | DateTime | 更新时间 | 是 |
## 中介类型分类
| 类型 | 说明 |
|-----|------|
| 个人中介 | 个人身份的中介人员 |
| 机构中介 | 中介公司、机构等 |
## 关系类型分类
| 关系类型 | 说明 |
|---------|------|
| 配偶 | 合法配偶关系 |
| 父母 | 父母、公婆、岳父母 |
| 子女 | 子女、儿媳、女婿 |
| 兄弟姐妹 | 兄弟姐妹关系 |
| 其他 | 其他社会关系 |
## 业务规则
1. **中介库管理**:
- 中介信息删除前需要确认未在项目中使用
- 支持Excel导入批量更新
- 导入时需要验证数据格式正确性
2. **员工信息管理**:
- 实控账户需要说明判断依据
- 实控手机号需要验证有效性
- 关系人信息需要注明关系类型
3. **信贷客户家庭关系维护**:
- 家庭关系需要双向维护A-B和B-A
- 支持家庭关系图的展示
## 页面原型
### 1. 中介库管理页面
- 名单列表
- 搜索筛选区
- 导入/导出按钮
- 新增/编辑/删除操作
### 2. 员工信息管理页面
- 员工列表
- 信息类型切换(实控账户/实控手机号/关系人)
- 信息详情展示
- 编辑操作
### 3. 信贷客户家庭关系维护页面
- 客户列表
- 家庭关系树形展示
- 关系维护操作
- 导入功能
## 交互关系
| 关联模块 | 交互说明 |
|---------|---------|
| 数据管理 | 从中介库选择名单用于项目分析 |
| 专项排查 | 使用员工信息进行关联分析 |
## 功能特性
### 中介库管理
- 支持Excel批量导入导出
- 支持多条件组合查询
- 自动风险预警机制
- 名单状态管理
### 员工信息管理
- 支持多种信息类型维护
- 支持批量导入更新
- 信息变更历史记录
- 信息有效性验证
### 信贷客户家庭关系维护
- 支持家庭关系可视化
- 支持Excel批量导入
- 关系双向维护
- 关系图谱展示
## 功能点统计
- 二级功能: 3个
- 三级功能点: 6个
## 版本信息
- **文档版本**: V1.0
- **创建日期**: 2026-01-27
- **基于原文档**: 纪检初核系统功能说明书V1.0 第330-345行

View File

@@ -0,0 +1,203 @@
# 04-参数配置模块
## 模块概述
参数配置模块用于风险模型参数的管理,提供风险模型核心参数的维护界面和阈值规则细化功能。
## 模块结构
```
参数配置模块
├── 大额交易模型
├── 可疑兼职模型
└── 可疑外汇交易模型
```
## 功能分解
### 4.1 大额交易模型
**功能描述**: 识别大额/高频资金交易,监测调整单笔交易额、频繁转账次数等阈值。
**功能点**:
- **单笔交易额阈值**: 设置单笔交易金额阈值,超过该金额触发预警
- **频繁转账次数阈值**: 设置一定时间内的转账次数阈值
- **交易时间范围**: 设置监测的时间范围(日/周/月)
- **参数保存**: 保存配置的阈值参数
- **恢复默认**: 恢复系统默认的阈值参数
**数据要素**:
- 单笔交易额阈值
- 频繁转账次数阈值
- 时间范围
- 监测周期
### 4.2 可疑兼职模型
**功能描述**: 识别异常额外收入,监测调整月度固定收入、固定对手转入等阈值。
**功能点**:
- **月度固定收入阈值**: 设置月度固定收入上限,超过触发预警
- **固定对手转入阈值**: 设置从固定对手方转入的金额和频率阈值
- **异常收入识别规则**: 配置异常收入的识别规则
- **参数保存**: 保存配置的阈值参数
- **恢复默认**: 恢复系统默认的阈值参数
**数据要素**:
- 月度固定收入阈值
- 固定对手转入金额阈值
- 固定对手转入频率阈值
- 收入来源类型
### 4.3 可疑外汇交易模型
**功能描述**: 识别异常外汇收支,监测调整单笔购汇金额、频繁外汇交易次数等阈值。
**功能点**:
- **单笔购汇金额阈值**: 设置单笔购汇金额阈值
- **单笔结汇金额阈值**: 设置单笔结汇金额阈值
- **跨境汇款金额阈值**: 设置单笔跨境汇款金额阈值
- **月度购汇总额阈值**: 设置月度累计购汇总额阈值
- **月度结汇总额阈值**: 设置月度累计结汇总额阈值
- **频繁外汇交易次数阈值**: 设置单日外汇交易次数阈值
- **参数保存**: 保存配置的阈值参数
- **恢复默认**: 恢复系统默认的阈值参数
**数据要素**:
- 单笔购汇金额阈值(美元/笔)
- 单笔结汇金额阈值(美元/笔)
- 跨境汇款金额阈值(美元/笔)
- 月度购汇总额阈值(美元/月)
- 月度结汇总额阈值(美元/月)
- 频繁外汇交易次数阈值(次/日)
## 数据模型
### 模型参数配置 (ModelParameterConfig)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| configId | Long | 配置ID | 是 |
| modelType | String | 模型类型 | 是 |
| parameterName | String | 参数名称 | 是 |
| parameterCode | String | 参数编码 | 是 |
| parameterValue | String | 参数值 | 是 |
| unit | String | 单位 | 否 |
| description | String | 参数描述 | 否 |
| defaultValue | String | 默认值 | 是 |
| createTime | DateTime | 创建时间 | 是 |
| updateTime | DateTime | 更新时间 | 是 |
## 模型参数明细
### 大额交易模型参数
| 参数名称 | 描述 | 默认值 | 单位 |
|---------|------|--------|------|
| 单笔大额交易 | 单笔交易超过该金额 | 500000 | 人民币/笔 |
| 日频繁转账 | 单日转账次数超过 | 10 | 次/日 |
| 周频繁转账 | 单周转账次数超过 | 50 | 次/周 |
| 月频繁转账 | 单月转账次数超过 | 200 | 次/月 |
### 可疑兼职模型参数
| 参数名称 | 描述 | 默认值 | 单位 |
|---------|------|--------|------|
| 月度固定收入 | 月度固定收入超过 | 50000 | 人民币/月 |
| 固定对手转入金额 | 从固定对手单次转入超过 | 20000 | 人民币/笔 |
| 固定对手转入频率 | 从固定对手月度转入次数超过 | 5 | 次/月 |
### 可疑外汇交易模型参数
| 参数名称 | 描述 | 默认值 | 单位 |
|---------|------|--------|------|
| 单笔购汇金额 | 单笔购汇超过该金额 | 50000 | 美元/笔 |
| 单笔结汇金额 | 单笔结汇超过该金额 | 50000 | 美元/笔 |
| 跨境汇款金额 | 单笔跨境汇款超过该金额 | 100000 | 美元/笔 |
| 月度购汇总额 | 月度累计购汇超过 | 200000 | 美元/月 |
| 月度结汇总额 | 月度累计结汇超过 | 200000 | 美元/月 |
| 频繁外汇交易 | 单日外汇交易次数超过 | 5 | 次/日 |
## 业务规则
1. **参数配置权限**: 只有系统管理员可以修改模型参数
2. **参数生效时机**: 参数修改后对新生成的分析报告生效
3. **参数验证**: 保存时验证参数值的合理性和有效性
4. **参数变更记录**: 记录参数的变更历史,包括变更人、变更时间、变更内容
## 页面原型
### 参数配置页面
```
+------------------------------------------+
| 模型参数管理 |
+------------------------------------------+
| 模型名称: [可疑外汇交易模型 ▼] |
+------------------------------------------+
| 阈值参数配置 |
+------------------------------------------+
| 监测项 | 描述 | 阈值设置 | 单位 |
|-------------|------------------|----------|---------|
| 单笔购汇金额 | 单笔购汇超过该金额| 50000 |美元/笔 [查询]|
| 单笔结汇金额 | 单笔结汇超过该金额| 50000 |美元/笔 |
| 跨境汇款金额 | 单笔跨境汇款超过 | 100000 |美元/笔 |
| 月度购汇总额 | 月度累计购汇超过 | 200000 |美元/月 |
| 月度结汇总额 | 月度累计结汇超过 | 200000 |美元/月 |
| 频繁外汇交易 | 单日外汇交易次数超过| 5 |次/日 |
+------------------------------------------+
| [保存配置] [恢复默认] |
+------------------------------------------+
```
## 操作流程
```
1. 选择模型类型
2. 查看当前参数配置
3. 修改参数值
4. 验证参数有效性
5. 保存配置
6. 系统记录变更历史
```
## 交互关系
| 关联模块 | 交互说明 |
|---------|---------|
| 数据管理 | 配置的参数用于数据质量检查 |
| 初核结果总览 | 配置的参数用于风险模型分析 |
## 功能特性
### 参数管理
- 支持多模型参数配置
- 支持参数值的实时验证
- 支持参数默认值恢复
- 支持参数变更历史记录
### 参数验证
- 参数类型验证
- 参数范围验证
- 参数逻辑关系验证
### 权限控制
- 系统管理员可修改参数
- 普通用户只能查看参数
- 参数修改需要审批(可选)
## 功能点统计
- 二级功能: 3个
- 三级功能点: 6个
## 版本信息
- **文档版本**: V1.0
- **创建日期**: 2026-01-27
- **基于原文档**: 纪检初核系统功能说明书V1.0 第346-373行

View File

@@ -0,0 +1,215 @@
# 05-系统管理模块
## 模块概述
系统管理模块提供系统基础管理功能,包括用户权限管理、项目统计和操作日志管理。
## 模块结构
```
系统管理模块
├── 用户权限管理
├── 项目统计
└── 操作日志管理
```
## 功能分解
### 5.1 用户权限管理
**功能描述**: 系统管理员可对访问系统的用户账号进行增、删、改、禁用等操作。
**功能点**:
- **用户管理**: 对用户账号进行增、删、改、查操作
- **角色管理**: 定义和管理系统角色,分配角色权限
- **权限分配**: 为角色分配菜单权限和数据权限
- **用户禁用/启用**: 对用户账号进行禁用或启用操作
- **密码管理**: 重置用户密码,强制用户修改密码
**数据要素**:
- 用户账号
- 用户姓名
- 所属部门
- 角色
- 账号状态
- 最后登录时间
### 5.2 项目统计
**功能描述**: 根据年度、组长、对象、成果等维度进行项目统计分析。
**功能点**:
- **年度统计**: 按年度统计项目数量、完成情况等
- **组长统计**: 按项目负责人统计项目情况
- **对象统计**: 按核查对象统计项目情况
- **成果统计**: 统计项目成果(发现问题数量、预警人数等)
- **统计报表生成**: 生成可视化统计报表
**数据要素**:
- 统计维度(年度/组长/对象/成果)
- 项目数量
- 完成状态
- 预警人数
- 发现问题数量
### 5.3 操作日志管理
**功能描述**: 记录用户的关键操作,支持按时间、用户、操作类型进行查询。
**功能点**:
- **日志记录**: 自动记录用户的关键操作(登录、数据导入、模型运行、报告生成等)
- **日志查询**: 支持按时间范围、用户、操作类型等条件查询
- **日志详情**: 查看操作日志的详细信息
- **日志导出**: 支持将操作日志导出为Excel
**数据要素**:
- 操作时间
- 操作用户
- 操作类型
- 操作模块
- 操作内容
- 操作结果
- IP地址
## 数据模型
### 用户 (SysUser)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| userId | Long | 用户ID | 是 |
| userName | String | 用户账号 | 是 |
| nickName | String | 用户姓名 | 是 |
| deptId | Long | 部门ID | 是 |
| phonenumber | String | 手机号码 | 否 |
| status | String | 账号状态(正常/停用) | 是 |
| lastLoginTime | DateTime | 最后登录时间 | 否 |
### 角色 (SysRole)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| roleId | Long | 角色ID | 是 |
| roleName | String | 角色名称 | 是 |
| roleKey | String | 角色权限字符串 | 是 |
| status | String | 角色状态(正常/停用) | 是 |
### 操作日志 (SysOperLog)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| operId | Long | 日志ID | 是 |
| title | String | 模块标题 | 是 |
| businessType | String | 业务类型0其它 1新增 2修改 3删除 | 是 |
| method | String | 方法名称 | 是 |
| requestMethod | String | 请求方式 | 是 |
| operName | String | 操作人员 | 是 |
| deptName | String | 部门名称 | 否 |
| operUrl | String | 请求URL | 是 |
| operIp | String | 主机地址 | 是 |
| operLocation | String | 操作地点 | 否 |
| operParam | String | 请求参数 | 是 |
| jsonResult | String | 返回参数 | 是 |
| status | Integer | 操作状态0正常 1异常 | 是 |
| errorMsg | String | 错误消息 | 否 |
| operTime | DateTime | 操作时间 | 是 |
### 项目统计 (ProjectStatistics)
| 字段名 | 类型 | 说明 | 必填 |
|-------|------|------|-----|
| statId | Long | 统计ID | 是 |
| statDimension | String | 统计维度 | 是 |
| statValue | String | 统计值 | 是 |
| projectCount | Integer | 项目数量 | 是 |
| completedCount | Integer | 完成项目数 | 是 |
| warningCount | Integer | 预警人数 | 是 |
| issueCount | Integer | 发现问题数 | 是 |
| statYear | Integer | 统计年度 | 否 |
## 操作类型分类
| 操作类型 | 说明 |
|---------|------|
| 用户登录 | 用户登录系统 |
| 数据导入 | 导入各类数据 |
| 模型运行 | 运行风险模型 |
| 报告生成 | 生成分析报告 |
| 数据导出 | 导出数据或报告 |
| 参数配置 | 修改系统参数 |
| 用户管理 | 管理用户账号 |
| 其他 | 其他操作 |
## 业务规则
1. **用户权限管理**:
- 只有系统管理员可以进行用户管理操作
- 禁用用户后该用户无法登录系统
- 用户密码重置后需要用户首次登录时修改
2. **项目统计**:
- 支持多维度组合统计
- 统计数据实时更新
- 支持统计报表导出
3. **操作日志管理**:
- 关键操作自动记录日志
- 日志保留期限至少1年
- 支持日志数据的备份和恢复
## 页面原型
### 1. 用户管理页面
- 用户列表
- 搜索筛选区
- 新增/编辑/删除/禁用操作
- 角色分配
### 2. 项目统计页面
- 统计维度选择区
- 统计结果展示(图表/表格)
- 报表导出功能
### 3. 操作日志页面
- 日志列表
- 搜索筛选区(时间/用户/操作类型)
- 日志详情查看
- 日志导出功能
## 交互关系
| 关联模块 | 交互说明 |
|---------|---------|
| 所有模块 | 操作日志记录所有模块的操作 |
| 项目管理模块 | 项目统计使用项目管理数据 |
## 功能特性
### 用户权限管理
- 基于RBAC的权限控制模型
- 支持角色和权限的灵活配置
- 支持数据权限控制(全部/本部门/本人等)
- 支持用户账号的全生命周期管理
### 项目统计
- 多维度统计分析
- 可视化图表展示
- 支持自定义统计维度
- 支持统计报表导出
### 操作日志管理
- 全面的操作记录
- 灵活的查询条件
- 详细的日志信息
- 支持日志审计和追溯
## 功能点统计
- 二级功能: 3个
- 三级功能点: 6个
## 版本信息
- **文档版本**: V1.0
- **创建日期**: 2026-01-27
- **基于原文档**: 纪检初核系统功能说明书V1.0 第374-388行

66
doc/modules/README.md Normal file
View File

@@ -0,0 +1,66 @@
# 纪检初核系统功能模块总览
## 文档说明
本文档是《纪检初核系统功能说明书V1.0》的需求分解文档,采用三级分解方式将系统功能细化为可执行的功能点。
## 分解结构
```
纪检初核系统
├── 01-项目管理模块
├── 02-项目工作台
│ ├── 02.1-数据管理
│ ├── 02.2-初核结果总览
│ ├── 02.3-专项排查
│ └── 02.4-流水明细查询
├── 03-信息维护模块
├── 04-参数配置模块
└── 05-系统管理模块
```
## 模块概览
| 模块编号 | 模块名称 | 功能说明 | 子模块数 |
|---------|---------|---------|---------|
| 01 | 项目管理模块 | 管理所有历史创建的核查项目,提供项目创建、查询、状态管理等功能 | 0 |
| 02 | 项目工作台 | 核心业务模块,包含数据管理、风险分析、专项排查等功能 | 4 |
| 02.1 | 数据管理 | 数据导入、数据质量检查 | 0 |
| 02.2 | 初核结果总览 | 风险总览、风险模型、风险明细 | 0 |
| 02.3 | 专项排查 | 员工详查、图谱分析、拓展查询 | 0 |
| 02.4 | 流水明细查询 | 流水合并、二次分析 | 0 |
| 03 | 信息维护模块 | 中介库管理、员工信息管理、信贷客户家庭关系维护 | 0 |
| 04 | 参数配置模块 | 风险模型参数管理 | 0 |
| 05 | 系统管理模块 | 用户权限、项目统计、操作日志管理 | 0 |
## 功能点统计
| 模块 | 三级功能点数量 |
|-----|--------------|
| 01-项目管理模块 | 12 |
| 02.1-数据管理 | 10 |
| 02.2-初核结果总览 | 16 |
| 02.3-专项排查 | 10 |
| 02.4-流水明细查询 | 4 |
| 03-信息维护模块 | 6 |
| 04-参数配置模块 | 6 |
| 05-系统管理模块 | 6 |
| **合计** | **70** |
## 文档索引
- [01-项目管理模块](./01-项目管理模块.md)
- [02-项目工作台](./02-项目工作台/)
- [02.1-数据管理](./02-项目工作台/02.1-数据管理.md)
- [02.2-初核结果总览](./02-项目工作台/02.2-初核结果总览.md)
- [02.3-专项排查](./02-项目工作台/02.3-专项排查.md)
- [02.4-流水明细查询](./02-项目工作台/02.4-流水明细查询.md)
- [03-信息维护模块](./03-信息维护模块.md)
- [04-参数配置模块](./04-参数配置模块.md)
- [05-系统管理模块](./05-系统管理模块.md)
## 版本信息
- **文档版本**: V1.0
- **创建日期**: 2026-01-27
- **基于原文档**: 纪检初核系统功能说明书V1.0 (2026-01-16)

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

View File

@@ -0,0 +1,162 @@
# 中介黑名单导入功能修复说明
## 问题描述
在导入机构中介黑名单数据时,出现以下错误:
```
Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'certificate_no' cannot be null
```
## 问题原因
1. **数据库约束**`ccdi_intermediary_blacklist` 表的 `certificate_no` 字段设置为 `NOT NULL`,不允许存储 null 值。
2. **代码缺陷**:在 `CcdiIntermediaryBlacklistServiceImpl.java``importEntityIntermediary` 方法中,导入机构中介时只设置了 `corpCreditCode`(统一社会信用代码),但没有设置 `certificateNo` 字段,导致该字段为 null。
3. **批量插入失败**`batchInsert` 方法明确插入 `certificate_no` 字段,当值为 null 时违反数据库约束。
## 解决方案
### 1. 代码修改
**文件**[CcdiIntermediaryBlacklistServiceImpl.java](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-ccdi\src\main\java\com\ruoyi\dpc\service\impl\CcdiIntermediaryBlacklistServiceImpl.java)
**修改位置**:第 390-394 行
**修改前**
```java
// 转换为实体
CcdiIntermediaryBlacklist intermediary = new CcdiIntermediaryBlacklist();
intermediary.setName(excel.getName());
intermediary.setIntermediaryType("2");
```
**修改后**
```java
// 转换为实体
CcdiIntermediaryBlacklist intermediary = new CcdiIntermediaryBlacklist();
intermediary.setName(excel.getName());
// 对于机构中介,使用统一社会信用代码作为证件号
intermediary.setCertificateNo(excel.getCorpCreditCode());
intermediary.setIntermediaryType("2");
```
### 2. 验证逻辑增强
**文件**[CcdiIntermediaryBlacklistServiceImpl.java](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-ccdi\src\main\java\com\ruoyi\dpc\service\impl\CcdiIntermediaryBlacklistServiceImpl.java)
**修改位置**:第 484-488 行
**修改前**
```java
private void validateEntityIntermediaryData(CcdiIntermediaryEntityExcel excel) {
if (StringUtils.isEmpty(excel.getName())) {
throw new RuntimeException("机构名称不能为空");
}
}
```
**修改后**
```java
private void validateEntityIntermediaryData(CcdiIntermediaryEntityExcel excel) {
if (StringUtils.isEmpty(excel.getName())) {
throw new RuntimeException("机构名称不能为空");
}
// 验证统一社会信用代码不能为空(因为会用作 certificate_no 字段)
if (StringUtils.isEmpty(excel.getCorpCreditCode())) {
throw new RuntimeException("统一社会信用代码不能为空");
}
}
```
### 3. 批量更新 XML 配置优化
**文件**[CcdiIntermediaryBlacklistMapper.xml](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-ccdi\src\main\resources\mapper\dpc\CcdiIntermediaryBlacklistMapper.xml)
**修改位置**:第 125-127 行
**修改前**
```xml
<if test="item.dataSource != null">data_source = #{item.dataSource},</if>
update_by = #{item.updateBy},
update_time = #{item.updateTime}
```
**修改后**
```xml
<if test="item.dataSource != null">data_source = #{item.dataSource},</if>
<if test="item.certificateNo != null">certificate_no = #{item.certificateNo},</if>
update_by = #{item.updateBy},
update_time = #{item.updateTime}
```
## 设计说明
### 为什么使用统一社会信用代码作为证件号?
1. **数据一致性**:统一社会信用代码本身就是机构的法定证件号,将其同时存储在 `certificate_no` 字段中可以保持数据的一致性。
2. **查询便利**`certificate_no` 字段有索引,设置后可以快速查询机构中介。
3. **兼容性好**:个人中介和机构中介都使用 `certificate_no` 字段,查询逻辑更统一。
4. **不破坏现有结构**:不需要修改数据库表结构,只修改代码逻辑。
## 测试验证
### 测试用例
1. **个人中介导入**:正常导入个人中介数据,验证 `certificate_no` 字段正确存储身份证号。
2. **机构中介导入**:导入机构中介数据,验证 `certificate_no` 字段正确存储统一社会信用代码。
3. **统一社会信用代码为空**:验证当统一社会信用代码为空时,导入被正确拒绝并给出错误提示。
4. **批量更新**:验证批量更新时 `certificate_no` 字段能够正确更新。
### 测试脚本
测试脚本位于:[doc/test-data/test_import_fix.py](d:\discipline-prelim-check\discipline-prelim-check\doc\test-data\test_import_fix.py)
运行测试:
```bash
python doc/test-data/test_import_fix.py
```
## 影响范围
### 已影响的功能
- 机构中介批量导入功能
### 不影响的功能
- 个人中介导入功能
- 手动新增中介功能
- 中介查询功能
- 中介导出功能
## 注意事项
1. **数据迁移**:如果数据库中已存在机构中介数据且 `certificate_no` 为 null需要执行以下 SQL 进行数据修复:
```sql
UPDATE ccdi_intermediary_blacklist
SET certificate_no = corp_credit_code
WHERE intermediary_type = '2' AND certificate_no IS NULL AND corp_credit_code IS NOT NULL;
```
2. **Excel 模板**:确保导入模板中统一社会信用代码字段设置为必填项。
3. **前端验证**:建议在前端表单中也添加统一社会信用代码的必填验证。
## 修改文件列表
1. [CcdiIntermediaryBlacklistServiceImpl.java](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-ccdi\src\main\java\com\ruoyi\dpc\service\impl\CcdiIntermediaryBlacklistServiceImpl.java) - 服务层实现
2. [CcdiIntermediaryBlacklistMapper.xml](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-ccdi\src\main\resources\mapper\dpc\CcdiIntermediaryBlacklistMapper.xml) - MyBatis 映射文件
3. [test_import_fix.py](d:\discipline-prelim-check\discipline-prelim-check\doc\test-data\test_import_fix.py) - 测试脚本
## 版本历史
| 版本 | 日期 | 作者 | 说明 |
|------|------|------|------|
| 1.0 | 2026-01-29 | ruoyi | 初始版本,修复机构中介导入时 certificate_no 为 null 的问题 |

Binary file not shown.

View File

@@ -0,0 +1 @@
window.ENV = {"IS_FEAT_FLPAK4GB":true,"IS_FEAT_ABOARD":true,"IS_FEAT_SIGMA":true,"IS_LEGACY_V7":true,"BOMX_API_SDK_URL":"https://sdk.boardmix.cn/bmsdk","BOMX_API_CLIENT_ID":"IpfSMaEsOHWu7cg7","AIPPT_CLIENT_ID":"0ePnORDMD6KJSIIB","AIPPT_API_SDK_URL":"https://sdk.pptgo.cn/pptsdk","PIXSO_API_URL":"https://ps.modao.cc","PIXSO_USER_CLIENT_ID":"pixso_design_online"}

View File

@@ -0,0 +1 @@
TAG_V++3NXya0fYxmDs8mWSM69pSHMU=|2026-01-27T00_2026-01-27T00:11:10.126Z

View File

@@ -0,0 +1 @@
window["hzv5"] = window["hzv5"] || {};window["hzv5"]["init"] = {"MBServer":"modao.cc","MBClientDownloadURL":"https://cdn-release.modao.cc/desktop/Mockitt-darwin-x64-zh-1.2.5.dmg","MBChromeDownloadURL":"https://www.google.cn/chrome/","MBSketchPluginDownloadURL":"https://cdn-release.modao.cc/sketch/MockingBot.zh.sketchplugin.zip","isOnPremises":false,"isWonderShare":false,"projectUpper":{"owner_id":2209883,"owner_name":"谢小涵","owner_email":"153276082@qq.com","owner_avatar":"https://oss-mb-fog.modao.cc/uploads4/avatars/220/2209883/forum_132.jpeg","id":33418631,"limitation":{"storage":5000,"exportable":["png","pngs","htmlzip"],"encryptable":true,"inspectable":true,"slices":true,"projects":65535,"screens":65535,"commentable":true},"screens_count":5,"cid":"pb2mk0rvsqu5j6763","team_cid":"temk0rv8qmsbc9ft","space_cid":"splopmenp3ricy1f","space_name":"默认空间","name":"纪检初核系统","type":"proto2","attr":{"export_settings":[{"affix":"suffix","scale":"1","format":"png"}],"export_with_device_frame":false},"created_at":1767594090000,"updated_at":1768285464000,"timestamp":"1768285464","access":"public","access_token":"WEvGV4cIt8dobuo9KjUF","version":"v3","icon":null,"cover":"/uploads7/covers/3341/33418631/cover_1769473447.png","custom_cover":null,"is_custom_cover":false,"splash":null,"width":1440,"height":1024,"device":"web","model":"desktop","scale":100,"archived":false,"is_sclib":false,"parent_cid":"pb2m9uxlouyf4dwms","source_upper_cid":null,"clones":11,"shell_type":"device","password":"","wechat":false,"highlight":true,"preview_option":1,"expired":false,"deleted":false,"duplicating":false,"permissions":[{"user_id":2209883,"role":"project_owner"}],"is_org_project":false,"is_sub_project":false,"runner_mode":"preview","comment_permission":"org_member","tabs":null,"visibility":"open","building":"view_sticky","scene_tag":"PC-web","is_solo_lifetime":true,"is_first_canvas_open":null},"projectMeta":{"cid":"pm2mk0rvsquvpcjcs","mtime":1767594090054,"name":"","type":"proto2","ttag":"flat","upper_cid":"pb2mk0rvsqu5j6763","upper_type":"project-basic","is_flat_meta":true}}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
window["hzv5"] = window["hzv5"] || {};window["hzv5"]["mktc"] = {"md_vip_mkt_list":[],"mt_vip_mkt_list":[],"no_wm_mkt_list":["igk8iirffgi4hpfx","igk8iisxdk72zt9","igk8iiv3qpgl3lsx","igk8iiw2zlastfks","igk8ij5zxd43jlud","igk8ijdjkayrsvvz","igk8ijgosea1iye0","igkszmzkoc8bv5fq","igkw1wjh6762ojwr","igkwotlxrcwn19vd"]}

View File

@@ -0,0 +1,44 @@
<!doctype html><html translate="no"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="mobile-web-app-capable" content="yes"><meta name="renderer" content="webkit"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>墨刀</title><link rel="icon" id="icon" href="mb-proto2/vis/modao/favicon_home_screen_new.ico"><link rel="apple-touch-icon-precomposed" id="apple-touch-icon" href="mb-proto2/vis/modao/favicon_home_screen_new.ico"><link rel="stylesheet" href="mb-proto2/icons/fa5/css/fa5.css"><script>if (
function() { try { eval([
'for (const a of []) {}',
'let b = { fetch, Proxy }',
'let c = (async () => {})()',
'let { d0, ...d1 } = { ...b }'
].join(';')) } catch (e) { console.log('!!', e); return true } }()
) location.href = "https://modao.cc/browser-update"</script><script src="mb-static/2410/echarts-map/loadMap.js"></script><script src="env/2203.js"></script><script>window.ENV.NO_SENTRY = true; window.ENV.NO_TRACK = true</script><script>if (ENV.IS_MO) {
document.title = 'Mockitt';
document.documentElement.classList.add('wonder-share');
document.getElementById('icon').href = '/mb-static/2509/favicon-mo.ico';
document.getElementById('apple-touch-icon').href = '/mb-static/2509/favicon-mo.ico';
}</script><script>window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments) };
ENV.IS_MO && gtag('js', new Date());
ENV.IS_MO && gtag('config', 'UA-4839360-64');
ENV.IS_MO && document.write('<script async src="https://www.googletagmanager.com/gtag/js?id=UA-4839360-64"><'+'/script>')</script><script>window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments) };
ENV.IS_MO && gtag('js', new Date());
ENV.IS_MO && gtag('config', 'G-24WTSJBD5B');
ENV.IS_MO && document.write('<script async src="https://www.googletagmanager.com/gtag/js?id=G-24WTSJBD5B"><'+'/script>')</script><script src="mb-static/2308/core-js-3.32.1/modern.js"></script><script>ENV.NO_TRACK || document.write('<script src="mb-static/2502/sa-1.26.18/_.js"><'+'/script>')</script><script defer="defer" src="mb-proto2/6.3688a-vendor-0d07687f4be09b8b3eca.js"></script><script defer="defer" src="mb-proto2/5.fxqum-vendor-f8aaf1fb2db7ed4b19df.js"></script><script defer="defer" src="mb-proto2/5.7b24m-vendor-c6215ade32c4d6e04f4c.js"></script><script defer="defer" src="mb-proto2/4.ekpaa-vendor-4a8c0d8af0989de4a89f.js"></script><script defer="defer" src="mb-proto2/4.n9fxu-vendor-121f3fbb2320541a30bc.js"></script><script defer="defer" src="mb-proto2/3.h4vam-vendor-5567a1235ac230e00561.js"></script><script defer="defer" src="mb-proto2/preview-html-zip-40b1c65b44de21c4ab8a.js"></script><link href="mb-proto2/6.3688a-vendor-16f3ece222913e7058d1.css" rel="stylesheet"><link href="mb-proto2/preview-html-zip-f0d9de76208db26b1137.css" rel="stylesheet"><script>function loadGTM() {
if (ENV.NO_TRACK) {
return
}
(function (w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({
'gtm.start': new Date().getTime(),
event: 'gtm.js',
});
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l !== 'dataLayer' ? '&l=' + l : '';
j.async = true;
j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', 'GTM-TZJK297T');
}
loadGTM()</script></head><body><div id="workspace"></div><script>HZv5_PREVIEW_MODE="device"</script>
<script src="extra/data.0.js"></script>
<script src="extra/data.2.js"></script>
<script src="extra/data.1.js"></script>
</body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 375 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 665 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Some files were not shown because too many files have changed in this diff Show More