添加按钮
This commit is contained in:
@@ -44,7 +44,20 @@
|
|||||||
"Bash(git rm:*)",
|
"Bash(git rm:*)",
|
||||||
"Bash(git add:*)",
|
"Bash(git add:*)",
|
||||||
"Skill(document-skills:frontend-design)",
|
"Skill(document-skills:frontend-design)",
|
||||||
"Bash(test:*)"
|
"Bash(test:*)",
|
||||||
|
"mcp__chrome-devtools__list_pages",
|
||||||
|
"mcp__chrome-devtools__navigate_page",
|
||||||
|
"mcp__chrome-devtools__take_snapshot",
|
||||||
|
"mcp__chrome-devtools__take_screenshot",
|
||||||
|
"mcp__zai-mcp-server__ui_to_artifact",
|
||||||
|
"mcp__chrome-devtools__click",
|
||||||
|
"Skill(backend-restart)",
|
||||||
|
"Bash(tasklist:*)",
|
||||||
|
"Bash(wmic:*)",
|
||||||
|
"Bash(mvn spring-boot:run:*)",
|
||||||
|
"Bash(timeout:*)",
|
||||||
|
"mcp__chrome-devtools__wait_for",
|
||||||
|
"Bash(start cmd /k \"mvn spring-boot:run -pl ruoyi-admin\")"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"enabledMcpjsonServers": [
|
"enabledMcpjsonServers": [
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
- 在进行需求分析与分解任务时,按照不同的模块分为不同的文件,创建模块名的文件夹并将对应文件保存在文件夹中,然后对模块的功能文件进行继续分解
|
- 在进行需求分析与分解任务时,按照不同的模块分为不同的文件,创建模块名的文件夹并将对应文件保存在文件夹中,然后对模块的功能文件进行继续分解
|
||||||
- 在使用/openspec:proposal时,自动开启深度思考模式,输入 “think more”、“think a lot”、“think harder” 或 “think longer” 触发更深层的思考
|
- 在使用/openspec:proposal时,自动开启深度思考模式,输入 “think more”、“think a lot”、“think harder” 或 “think longer” 触发更深层的思考
|
||||||
- 在执行/openspec:apply后,使用code-simplifier 进行代码精简
|
- 在执行/openspec:apply后,使用code-simplifier 进行代码精简
|
||||||
|
- 在分析生成需求文档时,每次都需要在doc目录下新建文件夹并以需求内容为命名
|
||||||
|
|
||||||
## Communication
|
## Communication
|
||||||
- 永远使用简体中文进行思考和对话
|
- 永远使用简体中文进行思考和对话
|
||||||
|
|||||||
919
doc/frontend/上传数据页面UI设计文档.md
Normal file
919
doc/frontend/上传数据页面UI设计文档.md
Normal file
@@ -0,0 +1,919 @@
|
|||||||
|
# 上传数据页面 UI 设计文档
|
||||||
|
|
||||||
|
## 1. 页面概述
|
||||||
|
|
||||||
|
### 1.1 功能描述
|
||||||
|
上传数据页面是纪检初核系统中项目管理模块的核心页面,支持在一个项目中上传多个主体/账户数据进行汇总/独立分析。提供流水导入、征信导入、员工家庭关系导入、名单库选择等功能。
|
||||||
|
|
||||||
|
### 1.2 页面路径
|
||||||
|
- 菜单位置:项目管理 > 项目详情 > 上传数据
|
||||||
|
- 路由路径:`/project/:id/upload-data`
|
||||||
|
|
||||||
|
### 1.3 页面状态
|
||||||
|
- 项目状态:已完成
|
||||||
|
- 最后更新时间:2024-01-20 15:30
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 页面布局
|
||||||
|
|
||||||
|
### 2.1 整体结构
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────────┐
|
||||||
|
│ 面包屑导航:项目管理 / 项目详情 / 上传数据 │
|
||||||
|
├─────────────────────────────────────────────────────────────┤
|
||||||
|
│ 页面标题区 │
|
||||||
|
│ ┌───────────────────────────────────────────────────────┐ │
|
||||||
|
│ │ 上传数据 │ │
|
||||||
|
│ │ 项目状态:已完成 最后更新:2024-01-20 15:30 │ │
|
||||||
|
│ │ 支持在一个项目中上传多个主体/账户数据,进行汇总/独立分析 │ │
|
||||||
|
│ └───────────────────────────────────────────────────────┘ │
|
||||||
|
├─────────────────────────────────────────────────────────────┤
|
||||||
|
│ 主要内容区(网格布局) │
|
||||||
|
│ ┌─────────────────┐ ┌─────────────────┐ │
|
||||||
|
│ │ 流水导入 │ │ 已上传流水查询 │ │
|
||||||
|
│ │ [上传组件] │ │ [上传组件] │ │
|
||||||
|
│ └─────────────────┘ └─────────────────┘ │
|
||||||
|
│ ┌─────────────────┐ ┌─────────────────┐ │
|
||||||
|
│ │ 征信导入 │ │ 员工家庭关系导入 │ │
|
||||||
|
│ │ [上传组件] │ │ [上传组件] │ │
|
||||||
|
│ └─────────────────┘ └─────────────────┘ │
|
||||||
|
│ ┌─────────────────────────────────────────────┐ │
|
||||||
|
│ │ 名单库选择 │ │
|
||||||
|
│ │ ☑ 高风险人员名单(68人) ☑ 历史可疑人员名单 │ │
|
||||||
|
│ │ ☑ 监管关注名单(32人) │ │
|
||||||
|
│ └─────────────────────────────────────────────┘ │
|
||||||
|
├─────────────────────────────────────────────────────────────┤
|
||||||
|
│ 数据质量检查区 │
|
||||||
|
│ ┌────────────────────────────────────────────────────────┐ │
|
||||||
|
│ │ 数据完整性 格式一致性 余额连续性 │ │
|
||||||
|
│ │ 98.5% 95.2% 92.8% │ │
|
||||||
|
│ │ 检查结果: [查看详情] │ │
|
||||||
|
│ │ • 发现 23 条数据格式不一致 │ │
|
||||||
|
│ │ • 发现 5 条余额连续性异常 │ │
|
||||||
|
│ │ • 发现 12 条缺失关键字段 │ │
|
||||||
|
│ └────────────────────────────────────────────────────────┘ │
|
||||||
|
├─────────────────────────────────────────────────────────────┤
|
||||||
|
│ 操作按钮区 │
|
||||||
|
│ [拉取本行信息] [生成报告] │
|
||||||
|
└─────────────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.2 响应式布局
|
||||||
|
- 桌面端(≥1200px):4列网格布局
|
||||||
|
- 平板端(768px-1199px):2列网格布局
|
||||||
|
- 移动端(<768px):单列布局
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. 组件设计
|
||||||
|
|
||||||
|
### 3.1 FileUploadCard 上传卡片组件
|
||||||
|
|
||||||
|
**Props:**
|
||||||
|
```typescript
|
||||||
|
interface FileUploadCardProps {
|
||||||
|
title: string; // 卡片标题
|
||||||
|
description: string; // 描述文字
|
||||||
|
acceptTypes: string[]; // 接受的文件类型,如 ['xlsx', 'xls', 'pdf']
|
||||||
|
maxSize?: number; // 最大文件大小(MB),默认 10
|
||||||
|
multiple?: boolean; // 是否支持多文件上传
|
||||||
|
uploadUrl: string; // 上传接口地址
|
||||||
|
onUploadSuccess?: (files: UploadedFile[]) => void;
|
||||||
|
onUploadError?: (error: Error) => void;
|
||||||
|
showFileList?: boolean; // 是否显示已上传文件列表
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**UI 结构:**
|
||||||
|
```vue
|
||||||
|
<template>
|
||||||
|
<el-card class="upload-card">
|
||||||
|
<template #header>
|
||||||
|
<div class="card-header">
|
||||||
|
<h3>{{ title }}</h3>
|
||||||
|
<el-tooltip :content="description" placement="top">
|
||||||
|
<i class="el-icon-info"></i>
|
||||||
|
</el-tooltip>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<el-upload
|
||||||
|
class="upload-area"
|
||||||
|
:action="uploadUrl"
|
||||||
|
:accept="acceptTypes.join(',')"
|
||||||
|
:multiple="multiple"
|
||||||
|
:limit="10"
|
||||||
|
:file-list="fileList"
|
||||||
|
:on-success="handleSuccess"
|
||||||
|
:on-error="handleError"
|
||||||
|
:before-upload="beforeUpload"
|
||||||
|
drag
|
||||||
|
>
|
||||||
|
<div class="upload-content">
|
||||||
|
<i class="el-icon-upload"></i>
|
||||||
|
<p>拖拽文件到此处或点击上传</p>
|
||||||
|
<p class="upload-tip">支持格式: {{ acceptTypes.join(', ') }}</p>
|
||||||
|
</div>
|
||||||
|
</el-upload>
|
||||||
|
|
||||||
|
<div v-if="showFileList && uploadedFiles.length" class="file-list">
|
||||||
|
<h4>已上传文件</h4>
|
||||||
|
<el-table :data="uploadedFiles" size="small">
|
||||||
|
<el-table-column prop="fileName" label="文件名" />
|
||||||
|
<el-table-column prop="fileSize" label="大小" width="100" />
|
||||||
|
<el-table-column prop="uploadTime" label="上传时间" width="160" />
|
||||||
|
<el-table-column prop="status" label="状态" width="80">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-tag :type="row.status === 'success' ? 'success' : 'danger'">
|
||||||
|
{{ row.status === 'success' ? '成功' : '失败' }}
|
||||||
|
</el-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" width="100" fixed="right">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-button type="text" size="small" @click="handleDelete(row)">
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
</template>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.2 CheckboxGroupSelector 名单库选择组件
|
||||||
|
|
||||||
|
**Props:**
|
||||||
|
```typescript
|
||||||
|
interface CheckboxGroupSelectorProps {
|
||||||
|
options: NameListOption[];
|
||||||
|
modelValue: string[];
|
||||||
|
onChange: (value: string[]) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface NameListOption {
|
||||||
|
label: string; // 显示文本
|
||||||
|
value: string; // 选中值
|
||||||
|
count: number; // 人数统计
|
||||||
|
disabled?: boolean;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**UI 结构:**
|
||||||
|
```vue
|
||||||
|
<template>
|
||||||
|
<el-card class="name-list-selector">
|
||||||
|
<template #header>
|
||||||
|
<h3>名单库选择</h3>
|
||||||
|
</template>
|
||||||
|
<p class="selector-description">选择中介库管理内的名单</p>
|
||||||
|
<el-checkbox-group v-model="selectedLists" @change="handleChange">
|
||||||
|
<el-checkbox
|
||||||
|
v-for="option in options"
|
||||||
|
:key="option.value"
|
||||||
|
:label="option.value"
|
||||||
|
:disabled="option.disabled"
|
||||||
|
>
|
||||||
|
{{ option.label }}({{ option.count }}人)
|
||||||
|
</el-checkbox>
|
||||||
|
</el-checkbox-group>
|
||||||
|
</el-card>
|
||||||
|
</template>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.3 DataQualityPanel 数据质量检查面板
|
||||||
|
|
||||||
|
**Props:**
|
||||||
|
```typescript
|
||||||
|
interface DataQualityPanelProps {
|
||||||
|
metrics: QualityMetric[];
|
||||||
|
issues: QualityIssue[];
|
||||||
|
onCheckQuality?: () => void;
|
||||||
|
onViewDetails?: (issue: QualityIssue) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface QualityMetric {
|
||||||
|
name: string; // 指标名称
|
||||||
|
value: number; // 百分比值
|
||||||
|
status: 'good' | 'warning' | 'error';
|
||||||
|
}
|
||||||
|
|
||||||
|
interface QualityIssue {
|
||||||
|
type: string; // 问题类型
|
||||||
|
count: number; // 数量
|
||||||
|
description: string;
|
||||||
|
details?: any[];
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**UI 结构:**
|
||||||
|
```vue
|
||||||
|
<template>
|
||||||
|
<el-card class="quality-panel">
|
||||||
|
<template #header>
|
||||||
|
<div class="panel-header">
|
||||||
|
<h3>数据质量检查</h3>
|
||||||
|
<el-button type="primary" size="small" @click="handleCheck">
|
||||||
|
重新检查
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- 质量指标 -->
|
||||||
|
<div class="metrics-container">
|
||||||
|
<div
|
||||||
|
v-for="metric in metrics"
|
||||||
|
:key="metric.name"
|
||||||
|
class="metric-item"
|
||||||
|
:class="`metric-${metric.status}`"
|
||||||
|
>
|
||||||
|
<el-progress
|
||||||
|
type="circle"
|
||||||
|
:percentage="metric.value"
|
||||||
|
:status="metric.status"
|
||||||
|
/>
|
||||||
|
<span class="metric-name">{{ metric.name }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 问题列表 -->
|
||||||
|
<div class="issues-section">
|
||||||
|
<h4>检查结果</h4>
|
||||||
|
<el-alert
|
||||||
|
v-for="(issue, index) in issues"
|
||||||
|
:key="index"
|
||||||
|
:type="getIssueType(issue)"
|
||||||
|
:closable="false"
|
||||||
|
class="issue-item"
|
||||||
|
>
|
||||||
|
<template #title>
|
||||||
|
发现 <strong>{{ issue.count }}</strong> {{ issue.description }}
|
||||||
|
</template>
|
||||||
|
</el-alert>
|
||||||
|
<el-button type="text" @click="handleViewDetails">查看详情 →</el-button>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
</template>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 交互说明
|
||||||
|
|
||||||
|
### 4.1 文件上传流程
|
||||||
|
|
||||||
|
1. **拖拽上传**
|
||||||
|
- 用户拖拽文件到上传区域
|
||||||
|
- 显示上传进度条
|
||||||
|
- 上传成功后显示成功提示
|
||||||
|
- 自动添加到已上传文件列表
|
||||||
|
|
||||||
|
2. **点击上传**
|
||||||
|
- 点击上传区域触发文件选择对话框
|
||||||
|
- 选择文件后开始上传
|
||||||
|
- 显示上传进度
|
||||||
|
|
||||||
|
3. **文件验证**
|
||||||
|
- 文件格式验证:只接受指定格式
|
||||||
|
- 文件大小验证:超过限制显示错误提示
|
||||||
|
- 重复文件验证:同名文件提示是否覆盖
|
||||||
|
|
||||||
|
4. **上传状态**
|
||||||
|
- 上传中:显示进度条
|
||||||
|
- 上传成功:绿色勾选标记
|
||||||
|
- 上传失败:红色错误标记,显示错误信息
|
||||||
|
|
||||||
|
### 4.2 名单库选择
|
||||||
|
|
||||||
|
1. 默认选中全部名单库
|
||||||
|
2. 点击复选框切换选中状态
|
||||||
|
3. 实时更新选中人数统计
|
||||||
|
4. 取消选中时显示确认提示
|
||||||
|
|
||||||
|
### 4.3 数据质量检查
|
||||||
|
|
||||||
|
1. **自动触发**
|
||||||
|
- 文件上传完成后自动触发
|
||||||
|
- 显示检查进度
|
||||||
|
|
||||||
|
2. **手动触发**
|
||||||
|
- 点击"重新检查"按钮
|
||||||
|
- 覆盖之前的检查结果
|
||||||
|
|
||||||
|
3. **结果展示**
|
||||||
|
- 三个核心指标以环形进度图展示
|
||||||
|
- 颜色指示:绿色(≥95%)、黄色(85-94%)、红色(<85%)
|
||||||
|
- 问题列表按严重程度排序
|
||||||
|
|
||||||
|
### 4.4 按钮操作
|
||||||
|
|
||||||
|
1. **拉取本行信息**
|
||||||
|
- 点击后显示加载状态
|
||||||
|
- 从本行系统拉取相关数据
|
||||||
|
- 完成后显示成功提示并刷新页面
|
||||||
|
|
||||||
|
2. **生成报告**
|
||||||
|
- 验证必须上传至少一个文件
|
||||||
|
- 显示报告生成进度
|
||||||
|
- 生成成功后跳转到报告页面
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. 数据结构
|
||||||
|
|
||||||
|
### 5.1 后端接口
|
||||||
|
|
||||||
|
#### 5.1.1 获取项目上传数据状态
|
||||||
|
```typescript
|
||||||
|
GET /api/project/{projectId}/upload-status
|
||||||
|
|
||||||
|
Response:
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"data": {
|
||||||
|
"projectStatus": "已完成",
|
||||||
|
"lastUpdateTime": "2024-01-20 15:30:00",
|
||||||
|
"uploadedFiles": {
|
||||||
|
"transactionFiles": [], // 流水文件列表
|
||||||
|
"inquiryFiles": [], // 征信文件列表
|
||||||
|
"familyRelationFiles": [] // 家庭关系文件列表
|
||||||
|
},
|
||||||
|
"selectedNameLists": [], // 已选名单库
|
||||||
|
"qualityMetrics": { // 质量指标
|
||||||
|
"completeness": 98.5,
|
||||||
|
"consistency": 95.2,
|
||||||
|
"continuity": 92.8
|
||||||
|
},
|
||||||
|
"qualityIssues": [] // 质量问题列表
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 5.1.2 上传文件接口
|
||||||
|
```typescript
|
||||||
|
POST /api/project/{projectId}/upload
|
||||||
|
Content-Type: multipart/form-data
|
||||||
|
|
||||||
|
Body:
|
||||||
|
{
|
||||||
|
"fileType": "transaction" | "inquiry" | "family_relation",
|
||||||
|
"files": File[]
|
||||||
|
}
|
||||||
|
|
||||||
|
Response:
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"data": {
|
||||||
|
"successCount": 2,
|
||||||
|
"failedCount": 0,
|
||||||
|
"uploadedFiles": [
|
||||||
|
{
|
||||||
|
"fileId": "123456",
|
||||||
|
"fileName": "流水数据.xlsx",
|
||||||
|
"fileSize": 2048576,
|
||||||
|
"uploadTime": "2024-01-20 15:30:00",
|
||||||
|
"status": "success"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 5.1.3 删除文件接口
|
||||||
|
```typescript
|
||||||
|
DELETE /api/project/{projectId}/file/{fileId}
|
||||||
|
|
||||||
|
Response:
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "删除成功"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 5.1.4 获取名单库列表
|
||||||
|
```typescript
|
||||||
|
GET /api/name-list/options
|
||||||
|
|
||||||
|
Response:
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"value": "high_risk",
|
||||||
|
"label": "高风险人员名单",
|
||||||
|
"count": 68
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"value": "history_suspicious",
|
||||||
|
"label": "历史可疑人员名单",
|
||||||
|
"count": 45
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"value": "regulatory_focus",
|
||||||
|
"label": "监管关注名单",
|
||||||
|
"count": 32
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 5.1.5 更新名单库选择
|
||||||
|
```typescript
|
||||||
|
PUT /api/project/{projectId}/name-lists
|
||||||
|
|
||||||
|
Body:
|
||||||
|
{
|
||||||
|
"selectedLists": ["high_risk", "history_suspicious", "regulatory_focus"]
|
||||||
|
}
|
||||||
|
|
||||||
|
Response:
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "更新成功"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 5.1.6 执行数据质量检查
|
||||||
|
```typescript
|
||||||
|
POST /api/project/{projectId}/quality-check
|
||||||
|
|
||||||
|
Response:
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"data": {
|
||||||
|
"checkId": "qc_123456",
|
||||||
|
"status": "completed",
|
||||||
|
"metrics": {
|
||||||
|
"completeness": 98.5,
|
||||||
|
"consistency": 95.2,
|
||||||
|
"continuity": 92.8
|
||||||
|
},
|
||||||
|
"issues": [
|
||||||
|
{
|
||||||
|
"type": "format_inconsistency",
|
||||||
|
"count": 23,
|
||||||
|
"description": "条数据格式不一致"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "balance_anomaly",
|
||||||
|
"count": 5,
|
||||||
|
"description": "条余额连续性异常"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "missing_field",
|
||||||
|
"count": 12,
|
||||||
|
"description": "条缺失关键字段"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 5.1.7 拉取本行信息
|
||||||
|
```typescript
|
||||||
|
POST /api/project/{projectId}/pull-bank-info
|
||||||
|
|
||||||
|
Response:
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "拉取成功",
|
||||||
|
"data": {
|
||||||
|
"pulledRecords": 156,
|
||||||
|
"pullTime": "2024-01-20 15:35:00"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 5.1.8 生成报告
|
||||||
|
```typescript
|
||||||
|
POST /api/project/{projectId}/generate-report
|
||||||
|
|
||||||
|
Response:
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"data": {
|
||||||
|
"reportId": "rpt_789012",
|
||||||
|
"reportUrl": "/project/123/report/rpt_789012",
|
||||||
|
"generateTime": "2024-01-20 15:40:00"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.2 前端数据模型
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// 上传文件类型
|
||||||
|
type UploadFileType = 'transaction' | 'inquiry' | 'family_relation';
|
||||||
|
|
||||||
|
// 上传文件状态
|
||||||
|
type UploadStatus = 'uploading' | 'success' | 'error';
|
||||||
|
|
||||||
|
// 上传的文件
|
||||||
|
interface UploadedFile {
|
||||||
|
fileId: string;
|
||||||
|
fileName: string;
|
||||||
|
fileSize: number;
|
||||||
|
uploadTime: string;
|
||||||
|
status: UploadStatus;
|
||||||
|
errorMessage?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 名单库选项
|
||||||
|
interface NameListOption {
|
||||||
|
value: string;
|
||||||
|
label: string;
|
||||||
|
count: number;
|
||||||
|
disabled?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 质量指标
|
||||||
|
interface QualityMetric {
|
||||||
|
name: string;
|
||||||
|
value: number;
|
||||||
|
status: 'good' | 'warning' | 'error';
|
||||||
|
}
|
||||||
|
|
||||||
|
// 质量问题
|
||||||
|
interface QualityIssue {
|
||||||
|
type: string;
|
||||||
|
count: number;
|
||||||
|
description: string;
|
||||||
|
details?: any[];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 项目上传数据状态
|
||||||
|
interface ProjectUploadStatus {
|
||||||
|
projectStatus: string;
|
||||||
|
lastUpdateTime: string;
|
||||||
|
uploadedFiles: {
|
||||||
|
transactionFiles: UploadedFile[];
|
||||||
|
inquiryFiles: UploadedFile[];
|
||||||
|
familyRelationFiles: UploadedFile[];
|
||||||
|
};
|
||||||
|
selectedNameLists: string[];
|
||||||
|
qualityMetrics: {
|
||||||
|
completeness: number;
|
||||||
|
consistency: number;
|
||||||
|
continuity: number;
|
||||||
|
};
|
||||||
|
qualityIssues: QualityIssue[];
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. 样式规范
|
||||||
|
|
||||||
|
### 6.1 颜色规范
|
||||||
|
```scss
|
||||||
|
// 主色
|
||||||
|
$primary-color: #409EFF;
|
||||||
|
$success-color: #67C23A;
|
||||||
|
$warning-color: #E6A23C;
|
||||||
|
$danger-color: #F56C6C;
|
||||||
|
$info-color: #909399;
|
||||||
|
|
||||||
|
// 中性色
|
||||||
|
$text-primary: #303133;
|
||||||
|
$text-regular: #606266;
|
||||||
|
$text-secondary: #909399;
|
||||||
|
$text-placeholder: #C0C4CC;
|
||||||
|
|
||||||
|
// 边框色
|
||||||
|
$border-base: #DCDFE6;
|
||||||
|
$border-light: #E4E7ED;
|
||||||
|
$border-lighter: #EBEEF5;
|
||||||
|
$border-extra-light: #F2F6FC;
|
||||||
|
|
||||||
|
// 背景色
|
||||||
|
$bg-color: #F5F7FA;
|
||||||
|
$card-bg: #FFFFFF;
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.2 间距规范
|
||||||
|
```scss
|
||||||
|
$spacing-xs: 4px;
|
||||||
|
$spacing-sm: 8px;
|
||||||
|
$spacing-md: 16px;
|
||||||
|
$spacing-lg: 24px;
|
||||||
|
$spacing-xl: 32px;
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.3 圆角规范
|
||||||
|
```scss
|
||||||
|
$border-radius-sm: 2px;
|
||||||
|
$border-radius-base: 4px;
|
||||||
|
$border-radius-lg: 8px;
|
||||||
|
$border-radius-circle: 50%;
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.4 阴影规范
|
||||||
|
```scss
|
||||||
|
$box-shadow-base: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);
|
||||||
|
$box-shadow-dark: 0 2px 8px rgba(0, 0, 0, 0.15), 0 0 6px rgba(0, 0, 0, 0.1);
|
||||||
|
$box-shadow-light: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. 组件样式代码
|
||||||
|
|
||||||
|
### 7.1 上传卡片样式
|
||||||
|
```scss
|
||||||
|
.upload-card {
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.card-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: $text-primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-icon-info {
|
||||||
|
color: $info-color;
|
||||||
|
cursor: help;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload-area {
|
||||||
|
margin-bottom: $spacing-md;
|
||||||
|
|
||||||
|
.el-upload-dragger {
|
||||||
|
width: 100%;
|
||||||
|
height: 180px;
|
||||||
|
border: 2px dashed $border-base;
|
||||||
|
border-radius: $border-radius-lg;
|
||||||
|
background: $bg-color;
|
||||||
|
transition: all 0.3s;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
border-color: $primary-color;
|
||||||
|
background: #F0F7FF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload-content {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.el-icon-upload {
|
||||||
|
font-size: 48px;
|
||||||
|
color: $primary-color;
|
||||||
|
margin-bottom: $spacing-sm;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin: $spacing-xs 0;
|
||||||
|
font-size: 14px;
|
||||||
|
color: $text-regular;
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload-tip {
|
||||||
|
font-size: 12px;
|
||||||
|
color: $text-secondary;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.file-list {
|
||||||
|
border-top: 1px solid $border-light;
|
||||||
|
padding-top: $spacing-md;
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
margin: 0 0 $spacing-sm 0;
|
||||||
|
font-size: 14px;
|
||||||
|
color: $text-primary;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.2 数据质量面板样式
|
||||||
|
```scss
|
||||||
|
.quality-panel {
|
||||||
|
.panel-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.metrics-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-around;
|
||||||
|
margin-bottom: $spacing-lg;
|
||||||
|
|
||||||
|
.metric-item {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.el-progress {
|
||||||
|
margin-bottom: $spacing-sm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.metric-name {
|
||||||
|
font-size: 14px;
|
||||||
|
color: $text-regular;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.issues-section {
|
||||||
|
border-top: 1px solid $border-light;
|
||||||
|
padding-top: $spacing-md;
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
margin: 0 0 $spacing-md 0;
|
||||||
|
font-size: 14px;
|
||||||
|
color: $text-primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
.issue-item {
|
||||||
|
margin-bottom: $spacing-sm;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.3 页面整体布局样式
|
||||||
|
```scss
|
||||||
|
.upload-data-page {
|
||||||
|
padding: $spacing-lg;
|
||||||
|
background: $bg-color;
|
||||||
|
min-height: calc(100vh - 84px);
|
||||||
|
|
||||||
|
.page-header {
|
||||||
|
background: $card-bg;
|
||||||
|
padding: $spacing-lg;
|
||||||
|
border-radius: $border-radius-lg;
|
||||||
|
margin-bottom: $spacing-lg;
|
||||||
|
box-shadow: $box-shadow-base;
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
margin: 0 0 $spacing-sm 0;
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-info {
|
||||||
|
display: flex;
|
||||||
|
gap: $spacing-lg;
|
||||||
|
font-size: 14px;
|
||||||
|
color: $text-secondary;
|
||||||
|
margin-top: $spacing-sm;
|
||||||
|
|
||||||
|
.info-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.label {
|
||||||
|
margin-right: $spacing-xs;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status {
|
||||||
|
color: $success-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-description {
|
||||||
|
margin-top: $spacing-md;
|
||||||
|
padding: $spacing-md;
|
||||||
|
background: #F0F9FF;
|
||||||
|
border-left: 3px solid $primary-color;
|
||||||
|
border-radius: $border-radius-base;
|
||||||
|
font-size: 14px;
|
||||||
|
color: $text-regular;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(2, 1fr);
|
||||||
|
gap: $spacing-lg;
|
||||||
|
margin-bottom: $spacing-lg;
|
||||||
|
|
||||||
|
@media (min-width: 1200px) {
|
||||||
|
grid-template-columns: repeat(4, 1fr);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-width {
|
||||||
|
grid-column: 1 / -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-bar {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
gap: $spacing-lg;
|
||||||
|
margin-top: $spacing-xl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. 技术实现要点
|
||||||
|
|
||||||
|
### 8.1 文件上传
|
||||||
|
- 使用 Element UI 的 `el-upload` 组件
|
||||||
|
- 支持拖拽上传和点击上传
|
||||||
|
- 实现文件类型和大小校验
|
||||||
|
- 显示上传进度
|
||||||
|
- 支持断点续传(可选)
|
||||||
|
|
||||||
|
### 8.2 数据质量检查
|
||||||
|
- 异步执行检查任务
|
||||||
|
- 使用 WebSocket 或轮询获取检查进度
|
||||||
|
- 实时更新进度和结果
|
||||||
|
|
||||||
|
### 8.3 状态管理
|
||||||
|
- 使用 Vuex 管理上传状态
|
||||||
|
- 缓存已上传文件列表
|
||||||
|
- 同步名单库选择状态
|
||||||
|
|
||||||
|
### 8.4 性能优化
|
||||||
|
- 文件分片上传大文件
|
||||||
|
- 使用 Web Worker 处理文件预检查
|
||||||
|
- 虚拟滚动展示大量文件列表
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. 测试要点
|
||||||
|
|
||||||
|
### 9.1 功能测试
|
||||||
|
- 文件上传各种格式
|
||||||
|
- 文件大小限制验证
|
||||||
|
- 删除文件功能
|
||||||
|
- 名单库选择功能
|
||||||
|
- 数据质量检查准确性
|
||||||
|
- 报告生成功能
|
||||||
|
|
||||||
|
### 9.2 兼容性测试
|
||||||
|
- 主流浏览器兼容
|
||||||
|
- 不同屏幕尺寸适配
|
||||||
|
- 文件格式兼容性
|
||||||
|
|
||||||
|
### 9.3 性能测试
|
||||||
|
- 大文件上传性能
|
||||||
|
- 多文件同时上传
|
||||||
|
- 页面加载性能
|
||||||
|
|
||||||
|
### 9.4 异常处理测试
|
||||||
|
- 网络中断处理
|
||||||
|
- 文件上传失败处理
|
||||||
|
- 服务器错误处理
|
||||||
|
- 文件格式错误处理
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. 附录
|
||||||
|
|
||||||
|
### 10.1 相关页面
|
||||||
|
- 项目详情页:`/project/:id/detail`
|
||||||
|
- 参数配置页:`/project/:id/config`
|
||||||
|
- 初核结果页:`/project/:id/result`
|
||||||
|
- 报告页面:`/project/:id/report/:reportId`
|
||||||
|
|
||||||
|
### 10.2 权限要求
|
||||||
|
- 需要项目成员权限
|
||||||
|
- 上传操作需要编辑权限
|
||||||
|
- 删除操作需要删除权限
|
||||||
|
- 生成报告需要报告权限
|
||||||
|
|
||||||
|
### 10.3 相关文档
|
||||||
|
- [Element UI Upload 组件文档](https://element.eleme.cn/#/zh-CN/component/upload)
|
||||||
|
- [若依框架前端开发规范](../前端开发规范.md)
|
||||||
|
- [项目接口文档](../API文档/项目管理模块.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**文档版本**: v1.0
|
||||||
|
**创建时间**: 2024-01-30
|
||||||
|
**最后更新**: 2024-01-30
|
||||||
|
**文档状态**: 待评审
|
||||||
BIN
doc/原型图-上传数据页面.png
Normal file
BIN
doc/原型图-上传数据页面.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 260 KiB |
821
doc/原型图开发设计文档.md
Normal file
821
doc/原型图开发设计文档.md
Normal file
@@ -0,0 +1,821 @@
|
|||||||
|
# 纪检初核系统 - 原型图开发设计文档
|
||||||
|
|
||||||
|
## 一、项目概述
|
||||||
|
|
||||||
|
### 1.1 项目背景
|
||||||
|
本项目是一个**纪检初核系统**,用于对银行信贷部门员工进行初步核查,通过分析银行流水、征信报告、员工关系等数据,识别潜在的违规行为和风险。
|
||||||
|
|
||||||
|
### 1.2 项目目标
|
||||||
|
- 支持多维度数据导入(流水、征信、员工关系)
|
||||||
|
- 提供可配置的风险监测模型
|
||||||
|
- 自动识别高风险人员并生成初核提示
|
||||||
|
- 提供专项排查工作台进行深入分析
|
||||||
|
- 支持关系图谱和资金流向分析
|
||||||
|
|
||||||
|
### 1.3 技术栈
|
||||||
|
- **后端**: Spring Boot 3.5.8 + MyBatis 3.0.5 + MySQL 8.2.0
|
||||||
|
- **前端**: Vue 2.6.12 + Element UI 2.15.14
|
||||||
|
- **数据库**: MySQL(表前缀:ccdi_)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、页面结构与功能分析
|
||||||
|
|
||||||
|
### 2.1 页面导航结构
|
||||||
|
|
||||||
|
```
|
||||||
|
纪检初核系统
|
||||||
|
├── 项目管理
|
||||||
|
│ ├── 项目详情
|
||||||
|
│ ├── 上传数据
|
||||||
|
│ ├── 参数配置
|
||||||
|
│ └── 初核提示
|
||||||
|
├── 初核结果
|
||||||
|
│ ├── 专项排查工作台(高风险)
|
||||||
|
│ ├── 专项排查工作台(中风险)
|
||||||
|
│ └── 专项排查
|
||||||
|
└── 流水明细查询
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2.2 页面1:上传数据
|
||||||
|
|
||||||
|
#### 功能描述
|
||||||
|
支持在一个项目中上传多个主体/账户数据,进行汇总/独立分析。
|
||||||
|
|
||||||
|
#### 页面元素
|
||||||
|
| 元素类型 | 元素名称/内容 | 说明 |
|
||||||
|
|---------|--------------|------|
|
||||||
|
| 项目信息 | 项目状态 | 显示项目当前状态(如:已完成) |
|
||||||
|
| | 最后更新时间 | 显示项目最后更新时间 |
|
||||||
|
| 上传模块1 | 流水导入 | 支持Excel、PDF格式文件批量上传 |
|
||||||
|
| | | 占位符:拖拽文件到此处或点击上传 |
|
||||||
|
| | | 支持格式:xlsx, xls, pdf |
|
||||||
|
| 上传模块2 | 已上传流水查询 | 支持HTML格式 |
|
||||||
|
| | | 占位符:拖拽文件到此处或点击上传 |
|
||||||
|
| 上传模块3 | 征信导入 | 支持HTML格式征信报告解析 |
|
||||||
|
| 上传模块4 | 员工家庭关系导入 | Excel模板上传员工家庭关系信息 |
|
||||||
|
| | | 支持格式:xlsx, xls |
|
||||||
|
| 名单库选择 | 高风险人员名单 | 复选框,显示人数(如68人) |
|
||||||
|
| | 历史可疑人员名单 | 复选框,显示人数(如45人) |
|
||||||
|
| | 监管关注名单 | 复选框,显示人数(如32人) |
|
||||||
|
| 数据质量检查 | 数据完整性 | 进度条,显示百分比(如98.5%) |
|
||||||
|
| | 格式一致性 | 进度条,显示百分比(如95.2%) |
|
||||||
|
| | 余额连续性 | 进度条,显示百分比(如92.8%) |
|
||||||
|
| | 检查结果 | 显示发现的问题数量 |
|
||||||
|
| 操作按钮 | 拉取本行信息 | 触发拉取银行内部信息 |
|
||||||
|
| | 生成报告 | 生成初核报告 |
|
||||||
|
|
||||||
|
#### 数据模型
|
||||||
|
```sql
|
||||||
|
-- 项目表
|
||||||
|
CREATE TABLE ccdi_project (
|
||||||
|
project_id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
project_name VARCHAR(200) NOT NULL COMMENT '项目名称',
|
||||||
|
project_status VARCHAR(50) COMMENT '项目状态',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
create_by VARCHAR(100),
|
||||||
|
update_by VARCHAR(100),
|
||||||
|
remark VARCHAR(500)
|
||||||
|
) COMMENT '项目表';
|
||||||
|
|
||||||
|
-- 数据上传记录表
|
||||||
|
CREATE TABLE ccdi_data_upload (
|
||||||
|
upload_id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
project_id BIGINT COMMENT '项目ID',
|
||||||
|
upload_type VARCHAR(50) COMMENT '上传类型:流水/征信/家庭关系',
|
||||||
|
file_name VARCHAR(500) COMMENT '文件名',
|
||||||
|
file_path VARCHAR(1000) COMMENT '文件路径',
|
||||||
|
upload_status VARCHAR(50) COMMENT '上传状态',
|
||||||
|
upload_time DATETIME COMMENT '上传时间',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
create_by VARCHAR(100)
|
||||||
|
) COMMENT '数据上传记录表';
|
||||||
|
|
||||||
|
-- 名单库选择记录表
|
||||||
|
CREATE TABLE ccdi_blacklist_selection (
|
||||||
|
selection_id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
project_id BIGINT COMMENT '项目ID',
|
||||||
|
blacklist_type VARCHAR(50) COMMENT '名单类型:高风险/历史可疑/监管关注',
|
||||||
|
blacklist_id BIGINT COMMENT '名单ID',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) COMMENT '名单库选择记录表';
|
||||||
|
|
||||||
|
-- 数据质量检查表
|
||||||
|
CREATE TABLE ccdi_data_quality (
|
||||||
|
quality_id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
project_id BIGINT COMMENT '项目ID',
|
||||||
|
check_item VARCHAR(100) COMMENT '检查项:完整性/一致性/连续性',
|
||||||
|
check_result DECIMAL(5,2) COMMENT '检查结果百分比',
|
||||||
|
issue_count INT COMMENT '问题数量',
|
||||||
|
issue_detail TEXT COMMENT '问题详情',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) COMMENT '数据质量检查表';
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2.3 页面2:参数配置
|
||||||
|
|
||||||
|
#### 功能描述
|
||||||
|
配置风险监测模型的阈值参数。
|
||||||
|
|
||||||
|
#### 页面元素
|
||||||
|
| 元素类型 | 元素名称/内容 | 说明 |
|
||||||
|
|---------|--------------|------|
|
||||||
|
| 模型名称 | 大额交易模型 | 下拉选择 |
|
||||||
|
| 阈值参数配置表格 | | |
|
||||||
|
| 表格列1 | 监测项 | 如:单笔交易额 |
|
||||||
|
| 表格列2 | 描述 | 如:单笔超过该金额视为大额交易 |
|
||||||
|
| 表格列3 | 阈值设置 | 输入框,如:50000 |
|
||||||
|
| 表格列4 | 单位 | 如:元 |
|
||||||
|
| 操作按钮 | 保存配置 | 保存当前配置 |
|
||||||
|
| | 恢复默认 | 恢复默认值 |
|
||||||
|
| | 一键导出配置 | 导出配置文件 |
|
||||||
|
|
||||||
|
#### 监测项配置
|
||||||
|
1. **单笔交易额**: 50000元
|
||||||
|
2. **累计交易额**: 5000000元
|
||||||
|
3. **大额存现**: 200000元
|
||||||
|
4. **短时多次存现**: 100000元/4小时
|
||||||
|
5. **频繁转账**: 10次/日
|
||||||
|
6. **转账频率**: 1000000元/日
|
||||||
|
|
||||||
|
#### 数据模型
|
||||||
|
```sql
|
||||||
|
-- 风险模型表
|
||||||
|
CREATE TABLE ccdi_risk_model (
|
||||||
|
model_id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
model_name VARCHAR(200) NOT NULL COMMENT '模型名称',
|
||||||
|
model_code VARCHAR(100) COMMENT '模型编码',
|
||||||
|
status VARCHAR(50) DEFAULT 'active' COMMENT '状态',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
create_by VARCHAR(100),
|
||||||
|
update_by VARCHAR(100)
|
||||||
|
) COMMENT '风险模型表';
|
||||||
|
|
||||||
|
-- 模型参数配置表
|
||||||
|
CREATE TABLE ccdi_model_parameter (
|
||||||
|
parameter_id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
model_id BIGINT COMMENT '模型ID',
|
||||||
|
parameter_name VARCHAR(200) COMMENT '参数名称',
|
||||||
|
parameter_code VARCHAR(100) COMMENT '参数编码',
|
||||||
|
parameter_desc VARCHAR(500) COMMENT '参数描述',
|
||||||
|
threshold_value DECIMAL(20,2) COMMENT '阈值',
|
||||||
|
unit VARCHAR(50) COMMENT '单位',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||||
|
) COMMENT '模型参数配置表';
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2.4 页面3:初核提示
|
||||||
|
|
||||||
|
#### 功能描述
|
||||||
|
展示初核结果的总体概况,包括人员风险分布、模型触发情况、可疑交易明细等。
|
||||||
|
|
||||||
|
#### 页面元素
|
||||||
|
| 元素类型 | 元素名称/内容 | 说明 |
|
||||||
|
|---------|--------------|------|
|
||||||
|
| 统计卡片 | 总人数 | 显示总人数(如500) |
|
||||||
|
| | 无预警人数 | 显示无预警人数(如432) |
|
||||||
|
| | 低风险 | 显示低风险人数(如38) |
|
||||||
|
| | 中风险 | 显示中风险人数(如20) |
|
||||||
|
| | 高风险 | 显示高风险人数(如10) |
|
||||||
|
| 模型触发情况表格 | 模型名称 | 如:大额交易监测 |
|
||||||
|
| | 触发数 | 触发次数 |
|
||||||
|
| | 触发人员 | 触发人员列表 |
|
||||||
|
| | 操作 | 查看详情 |
|
||||||
|
| 涉疑交易明细表 | 交易时间、可疑人员、关联人、关联员工、关系、摘要/交易类型、交易金额、操作 | |
|
||||||
|
| 高风险人员清单 | 姓名、身份证号、所属部门、风险评分、触发模型数、核心异常点、操作 | 复选框支持批量操作 |
|
||||||
|
| 中风险人员TOP10 | 姓名、身份证号、所属部门、触发模型、触发模型数、操作 | |
|
||||||
|
| 异常账户清单 | 账户号、开户人姓名、开户银行、异常类型、异常发生时间、状态、操作 | |
|
||||||
|
| 涉及违法人员清单表 | 姓名、身份证号、失信被执行人、刑事判决、行政处罚、公安涉案记录、限制高消费、违法信息更新时间、操作 | |
|
||||||
|
| 筛选条件 | 姓名/工号搜索 | 输入框 |
|
||||||
|
| | 部门筛选 | 下拉选择 |
|
||||||
|
| | 风险等级筛选 | 下拉选择(全部/高风险/中风险/低风险) |
|
||||||
|
| | 可疑人员类型筛选 | 下拉选择(全部/名单库命中/模型规则命中) |
|
||||||
|
| | 模型筛选 | 复选框(大额交易/可疑财产/频繁转账等) |
|
||||||
|
| | 模型筛选逻辑 | 单选:同时触发以上模型/触发任意模型 |
|
||||||
|
| 批量操作 | 批量生成报告 | |
|
||||||
|
| | 批量导出证据 | |
|
||||||
|
| | 批量添加到关注列表 | |
|
||||||
|
|
||||||
|
#### 数据模型
|
||||||
|
```sql
|
||||||
|
-- 人员风险评分表
|
||||||
|
CREATE TABLE ccdi_person_risk_score (
|
||||||
|
score_id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
project_id BIGINT COMMENT '项目ID',
|
||||||
|
person_id BIGINT COMMENT '人员ID',
|
||||||
|
person_name VARCHAR(100) COMMENT '姓名',
|
||||||
|
id_card VARCHAR(50) COMMENT '身份证号',
|
||||||
|
department VARCHAR(200) COMMENT '所属部门',
|
||||||
|
risk_level VARCHAR(50) COMMENT '风险等级:高/中/低',
|
||||||
|
risk_score INT COMMENT '风险评分',
|
||||||
|
trigger_model_count INT COMMENT '触发模型数量',
|
||||||
|
core_issue VARCHAR(500) COMMENT '核心异常点',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) COMMENT '人员风险评分表';
|
||||||
|
|
||||||
|
-- 模型触发记录表
|
||||||
|
CREATE TABLE ccdi_model_trigger_record (
|
||||||
|
trigger_id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
project_id BIGINT COMMENT '项目ID',
|
||||||
|
model_id BIGINT COMMENT '模型ID',
|
||||||
|
model_name VARCHAR(200) COMMENT '模型名称',
|
||||||
|
trigger_count INT COMMENT '触发次数',
|
||||||
|
trigger_persons TEXT COMMENT '触发人员列表',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) COMMENT '模型触发记录表';
|
||||||
|
|
||||||
|
-- 涉疑交易明细表
|
||||||
|
CREATE TABLE ccdi_suspicious_transaction (
|
||||||
|
transaction_id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
project_id BIGINT COMMENT '项目ID',
|
||||||
|
transaction_time DATETIME COMMENT '交易时间',
|
||||||
|
suspicious_person VARCHAR(100) COMMENT '可疑人员',
|
||||||
|
related_person VARCHAR(100) COMMENT '关联人',
|
||||||
|
related_employee VARCHAR(100) COMMENT '关联员工',
|
||||||
|
relationship VARCHAR(100) COMMENT '关系',
|
||||||
|
transaction_type VARCHAR(200) COMMENT '摘要/交易类型',
|
||||||
|
transaction_amount DECIMAL(20,2) COMMENT '交易金额',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) COMMENT '涉嫌交易明细表';
|
||||||
|
|
||||||
|
-- 异常账户表
|
||||||
|
CREATE TABLE ccdi_abnormal_account (
|
||||||
|
account_id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
project_id BIGINT COMMENT '项目ID',
|
||||||
|
account_no VARCHAR(100) COMMENT '账户号',
|
||||||
|
account_holder VARCHAR(100) COMMENT '开户人姓名',
|
||||||
|
bank_name VARCHAR(200) COMMENT '开户银行',
|
||||||
|
abnormal_type VARCHAR(100) COMMENT '异常类型',
|
||||||
|
abnormal_time DATETIME COMMENT '异常发生时间',
|
||||||
|
account_status VARCHAR(50) COMMENT '状态',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) COMMENT '异常账户表';
|
||||||
|
|
||||||
|
-- 违法人员信息表
|
||||||
|
CREATE TABLE ccdi_illegal_person_info (
|
||||||
|
info_id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
person_id BIGINT COMMENT '人员ID',
|
||||||
|
person_name VARCHAR(100) COMMENT '姓名',
|
||||||
|
id_card VARCHAR(50) COMMENT '身份证号',
|
||||||
|
is_dishonesty_executor VARCHAR(10) COMMENT '是否失信被执行人',
|
||||||
|
is_criminal_penalty VARCHAR(10) COMMENT '是否有刑事判决',
|
||||||
|
is_administrative_penalty VARCHAR(10) COMMENT '是否有行政处罚',
|
||||||
|
is_police_case VARCHAR(10) COMMENT '是否有公安涉案记录',
|
||||||
|
is_limit_consumption VARCHAR(10) COMMENT '是否限制高消费',
|
||||||
|
update_time DATETIME COMMENT '违法信息更新时间',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) COMMENT '违法人员信息表';
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2.5 页面4:专项排查工作台-高风险
|
||||||
|
|
||||||
|
#### 功能描述
|
||||||
|
针对高风险人员的详细排查工作台。
|
||||||
|
|
||||||
|
#### 页面元素
|
||||||
|
| 元素类型 | 元素名称/内容 | 说明 |
|
||||||
|
|---------|--------------|------|
|
||||||
|
| 排查对象信息 | 排查对象 | 如:李四 |
|
||||||
|
| | 姓名、工号、部门、职级、入职时间、风险等级、所属项目 | |
|
||||||
|
| 触发模型列表 | 触发模型(5个) | |
|
||||||
|
| | 大额交易监测 | 3笔 > 50万 |
|
||||||
|
| | 频繁转账监测 | 1小时25笔 |
|
||||||
|
| | 关联交易排查 | 配偶账户频繁交易 |
|
||||||
|
| | 异常销户监测 | 1个账户突然销户 |
|
||||||
|
| | 疑似赌博交易 | 涉赌商户5笔 |
|
||||||
|
| 初核评分 | 风险评分 | 如:85分(高风险阈值:60分) |
|
||||||
|
| 异常详情-大额交易 | 交易时间、本方账号/主体、对方名称/账户、摘要/交易类型、交易金额、标记状态 | 标记状态下拉:标记正常/标记可疑/确认异常 |
|
||||||
|
| 异常详情-频繁转账 | 时间段、总笔数、总金额、主要对手、模式特征、核查建议 | |
|
||||||
|
| 异常详情-关联交易 | 关联人、关联账户、交易特征、异常点、需核实 | |
|
||||||
|
| 排查工具箱 | 查看完整流水、查看征信报告、查看资产信息、关系图谱分析、资金流向分析、导出所有证据、添加到案例库 | |
|
||||||
|
| 排查进度标签页 | 异常明细、资产分析、征信摘要、关系人图谱、资金流向 | |
|
||||||
|
| 操作按钮 | 生成报告、生成排查报告、标记为案例、关注 | |
|
||||||
|
|
||||||
|
#### 数据模型
|
||||||
|
```sql
|
||||||
|
-- 排查对象表
|
||||||
|
CREATE TABLE ccdi_investigation_object (
|
||||||
|
object_id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
project_id BIGINT COMMENT '项目ID',
|
||||||
|
person_id BIGINT COMMENT '人员ID',
|
||||||
|
person_name VARCHAR(100) COMMENT '姓名',
|
||||||
|
employee_no VARCHAR(100) COMMENT '工号',
|
||||||
|
department VARCHAR(200) COMMENT '部门',
|
||||||
|
position_level VARCHAR(100) COMMENT '职级',
|
||||||
|
entry_date DATE COMMENT '入职时间',
|
||||||
|
risk_level VARCHAR(50) COMMENT '风险等级',
|
||||||
|
risk_score INT COMMENT '风险评分',
|
||||||
|
investigation_status VARCHAR(50) COMMENT '排查状态',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||||
|
) COMMENT '排查对象表';
|
||||||
|
|
||||||
|
-- 排查触发模型表
|
||||||
|
CREATE TABLE ccdi_investigation_trigger_model (
|
||||||
|
trigger_model_id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
object_id BIGINT COMMENT '排查对象ID',
|
||||||
|
model_id BIGINT COMMENT '模型ID',
|
||||||
|
model_name VARCHAR(200) COMMENT '模型名称',
|
||||||
|
trigger_desc VARCHAR(500) COMMENT '触发描述',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) COMMENT '排查触发模型表';
|
||||||
|
|
||||||
|
-- 异常交易明细表
|
||||||
|
CREATE TABLE ccdi_abnormal_transaction_detail (
|
||||||
|
detail_id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
object_id BIGINT COMMENT '排查对象ID',
|
||||||
|
transaction_time DATETIME COMMENT '交易时间',
|
||||||
|
own_account VARCHAR(200) COMMENT '本方账号/主体',
|
||||||
|
counterparty VARCHAR(200) COMMENT '对方名称/账户',
|
||||||
|
transaction_type VARCHAR(200) COMMENT '摘要/交易类型',
|
||||||
|
transaction_amount DECIMAL(20,2) COMMENT '交易金额',
|
||||||
|
mark_status VARCHAR(50) COMMENT '标记状态:正常/可疑/异常',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) COMMENT '异常交易明细表';
|
||||||
|
|
||||||
|
-- 排查进度表
|
||||||
|
CREATE TABLE ccdi_investigation_progress (
|
||||||
|
progress_id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
object_id BIGINT COMMENT '排查对象ID',
|
||||||
|
progress_type VARCHAR(100) COMMENT '进度类型:流水分析/征信分析/资产比对/人工核实',
|
||||||
|
progress_status VARCHAR(50) COMMENT '进度状态',
|
||||||
|
complete_time DATETIME COMMENT '完成时间',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) COMMENT '排查进度表';
|
||||||
|
|
||||||
|
-- 关注列表表
|
||||||
|
CREATE TABLE ccdi_attention_list (
|
||||||
|
attention_id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
object_id BIGINT COMMENT '排查对象ID',
|
||||||
|
person_id BIGINT COMMENT '人员ID',
|
||||||
|
attention_type VARCHAR(50) COMMENT '关注类型',
|
||||||
|
create_by VARCHAR(100) COMMENT '创建人',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) COMMENT '关注列表表';
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2.6 页面5:专项排查
|
||||||
|
|
||||||
|
#### 功能描述
|
||||||
|
员工详查分析功能,包括资产收入分析、图谱分析、采购查询等。
|
||||||
|
|
||||||
|
#### 页面元素
|
||||||
|
| 元素类型 | 元素名称/内容 | 说明 |
|
||||||
|
|---------|--------------|------|
|
||||||
|
| 查询条件 | 身份证号 | 输入框 |
|
||||||
|
| | 开始日期、结束日期 | 日期选择器 |
|
||||||
|
| | 查询、重置 | 按钮 |
|
||||||
|
| 详查结果 | 详查结果描述 | 如:收入+负债远低于资产 |
|
||||||
|
| 基本信息 | 姓名、身份证号、资产/收入比 | |
|
||||||
|
| 收入分析 | 工资收入、其他收入 | 显示金额和百分比 |
|
||||||
|
| 本人资产分析 | 房产、存款、其他 | 显示金额和百分比 |
|
||||||
|
| 配偶资产分析 | 房产、车产、其他 | 显示金额和百分比 |
|
||||||
|
| 负债分析 | 房贷、其他贷款 | 显示金额和百分比 |
|
||||||
|
| 汇总信息 | 本人+配偶资产合计、总负债 | |
|
||||||
|
| 图谱分析标签页 | 关系人图谱、资金流图谱、实控账户图谱 | |
|
||||||
|
| 关系人图谱 | 姓名搜索框、生成图谱按钮 | |
|
||||||
|
| | 可视化图谱 | 显示配偶、对外投资、股东、高管关联等 |
|
||||||
|
| | 操作按钮 | 展开所有关联、仅显示直接关联、导出图谱、筛选、刷新 |
|
||||||
|
| 采购查询表格 | 序号、采购事项名称、交易日期、采购金额、供应商名称、对方账号、联系人、关联员工 | |
|
||||||
|
| 扩展查询标签页 | 采购查询、人员调动查询、招聘查询 | |
|
||||||
|
| 采购查询条件 | 采购时间范围、关联员工 | |
|
||||||
|
|
||||||
|
#### 数据模型
|
||||||
|
```sql
|
||||||
|
-- 员工资产分析表
|
||||||
|
CREATE TABLE ccdi_employee_asset_analysis (
|
||||||
|
analysis_id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
person_id BIGINT COMMENT '人员ID',
|
||||||
|
person_name VARCHAR(100) COMMENT '姓名',
|
||||||
|
id_card VARCHAR(50) COMMENT '身份证号',
|
||||||
|
asset_income_ratio DECIMAL(10,2) COMMENT '资产/收入比',
|
||||||
|
annual_income DECIMAL(20,2) COMMENT '年收入',
|
||||||
|
own_asset DECIMAL(20,2) COMMENT '本人资产',
|
||||||
|
spouse_asset DECIMAL(20,2) COMMENT '配偶资产',
|
||||||
|
total_asset DECIMAL(20,2) COMMENT '本人+配偶资产合计',
|
||||||
|
total_liability DECIMAL(20,2) COMMENT '总负债',
|
||||||
|
income_salary DECIMAL(20,2) COMMENT '工资收入',
|
||||||
|
income_other DECIMAL(20,2) COMMENT '其他收入',
|
||||||
|
asset_house DECIMAL(20,2) COMMENT '房产',
|
||||||
|
asset_deposit DECIMAL(20,2) COMMENT '存款',
|
||||||
|
asset_other DECIMAL(20,2) COMMENT '其他',
|
||||||
|
liability_mortgage DECIMAL(20,2) COMMENT '房贷',
|
||||||
|
liability_loan DECIMAL(20,2) COMMENT '其他贷款',
|
||||||
|
spouse_asset_house DECIMAL(20,2) COMMENT '配偶房产',
|
||||||
|
spouse_asset_car DECIMAL(20,2) COMMENT '配偶车产',
|
||||||
|
spouse_asset_other DECIMAL(20,2) COMMENT '配偶其他',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) COMMENT '员工资产分析表';
|
||||||
|
|
||||||
|
-- 关系人图谱表
|
||||||
|
CREATE TABLE ccdi_relationship_graph (
|
||||||
|
graph_id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
person_id BIGINT COMMENT '人员ID',
|
||||||
|
related_person_name VARCHAR(100) COMMENT '关联人姓名',
|
||||||
|
relationship_type VARCHAR(100) COMMENT '关系类型:配偶/对外投资/股东/高管关联',
|
||||||
|
related_entity_name VARCHAR(200) COMMENT '关联实体名称',
|
||||||
|
share_ratio DECIMAL(5,2) COMMENT '持股比例',
|
||||||
|
position VARCHAR(200) COMMENT '职位',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) COMMENT '关系人图谱表';
|
||||||
|
|
||||||
|
-- 采购查询记录表
|
||||||
|
CREATE TABLE ccdi_purchase_record (
|
||||||
|
purchase_id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
purchase_name VARCHAR(500) COMMENT '采购事项名称',
|
||||||
|
transaction_date DATE COMMENT '交易日期',
|
||||||
|
purchase_amount DECIMAL(20,2) COMMENT '采购金额',
|
||||||
|
supplier_name VARCHAR(500) COMMENT '供应商名称',
|
||||||
|
supplier_account VARCHAR(200) COMMENT '对方账号',
|
||||||
|
contact_person VARCHAR(100) COMMENT '联系人',
|
||||||
|
related_employee VARCHAR(100) COMMENT '关联员工',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) COMMENT '采购查询记录表';
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2.7 页面6:专项排查工作台-中风险
|
||||||
|
|
||||||
|
#### 功能描述
|
||||||
|
针对中风险人员的排查工作台,功能与高风险工作台类似,但风险等级不同。
|
||||||
|
|
||||||
|
#### 页面元素
|
||||||
|
与高风险工作台结构相同,主要区别:
|
||||||
|
- 风险等级显示为"中风险"
|
||||||
|
- 初核评分可能较低
|
||||||
|
- 触发模型数量可能较少
|
||||||
|
|
||||||
|
数据模型与高风险工作台共用。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2.8 页面7:流水明细查询
|
||||||
|
|
||||||
|
#### 功能描述
|
||||||
|
查询和筛选银行流水明细。
|
||||||
|
|
||||||
|
#### 页面元素
|
||||||
|
| 元素类型 | 元素名称/内容 | 说明 |
|
||||||
|
|---------|--------------|------|
|
||||||
|
| 筛选条件 | 交易时间范围 | 开始日期、结束日期 |
|
||||||
|
| | 对方名称 | 输入框,支持空值筛选 |
|
||||||
|
| | 摘要 | 输入框,支持空值筛选 |
|
||||||
|
| | 分类 | 多选下拉 |
|
||||||
|
| | 本方主体 | 多选下拉 |
|
||||||
|
| | 本方银行 | 多选下拉 |
|
||||||
|
| | 本方账户 | 多选下拉 |
|
||||||
|
| | 交易金额 | 范围输入(最小~最大) |
|
||||||
|
| | 对方账户 | 输入框,支持空值筛选 |
|
||||||
|
| | 交易类型 | 输入框,支持空值筛选 |
|
||||||
|
| | 剔除关联方与本方 | 复选框 |
|
||||||
|
| | 查询、重置 | 按钮 |
|
||||||
|
| 流水类型切换 | 全部、流入、流出 | 单选或Tab切换 |
|
||||||
|
| 流水明细表格 | 交易时间、本行账户/主体、对方名称/账户、摘要/交易类型、交易金额、分类、操作 | 支持复选框 |
|
||||||
|
| 表格操作 | 修改分类 | 下拉或弹窗 |
|
||||||
|
| 底部操作栏 | 已筛选X笔流水,已选中X笔流水 | |
|
||||||
|
| | 导出流水 | |
|
||||||
|
| | 加入分析 | |
|
||||||
|
| 标签页 | 流水、对手方 | |
|
||||||
|
|
||||||
|
#### 数据模型
|
||||||
|
```sql
|
||||||
|
-- 流水明细表
|
||||||
|
CREATE TABLE ccdi_transaction_detail (
|
||||||
|
detail_id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
project_id BIGINT COMMENT '项目ID',
|
||||||
|
transaction_time DATETIME COMMENT '交易时间',
|
||||||
|
own_account VARCHAR(200) COMMENT '本方账户/主体',
|
||||||
|
own_bank VARCHAR(200) COMMENT '本方银行',
|
||||||
|
counterparty_name VARCHAR(500) COMMENT '对方名称/账户',
|
||||||
|
counterparty_account VARCHAR(200) COMMENT '对方账户',
|
||||||
|
transaction_summary VARCHAR(500) COMMENT '摘要',
|
||||||
|
transaction_type VARCHAR(200) COMMENT '交易类型',
|
||||||
|
transaction_amount DECIMAL(20,2) COMMENT '交易金额',
|
||||||
|
transaction_direction VARCHAR(50) COMMENT '交易方向:流入/流出',
|
||||||
|
category VARCHAR(200) COMMENT '分类',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) COMMENT '流水明细表';
|
||||||
|
|
||||||
|
-- 流水分类表
|
||||||
|
CREATE TABLE ccdi_transaction_category (
|
||||||
|
category_id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
category_code VARCHAR(100) COMMENT '分类编码',
|
||||||
|
category_name VARCHAR(200) COMMENT '分类名称',
|
||||||
|
parent_id BIGINT COMMENT '父分类ID',
|
||||||
|
sort_order INT COMMENT '排序',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
) COMMENT '流水分类表';
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、模块划分与开发建议
|
||||||
|
|
||||||
|
### 3.1 后端模块划分
|
||||||
|
|
||||||
|
```
|
||||||
|
ruoyi-ccdi/ (新建模块)
|
||||||
|
├── controller/
|
||||||
|
│ ├── CcdiProjectController.java # 项目管理
|
||||||
|
│ ├── CcdiDataUploadController.java # 数据上传
|
||||||
|
│ ├── CcdiModelConfigController.java # 模型配置
|
||||||
|
│ ├── CcdiPreliminaryCheckController.java # 初核提示
|
||||||
|
│ ├── CcdiInvestigationController.java # 专项排查工作台
|
||||||
|
│ ├── CcdiSpecialCheckController.java # 专项排查
|
||||||
|
│ └── CcdiTransactionController.java # 流水明细查询
|
||||||
|
├── service/
|
||||||
|
│ ├── ICcdiProjectService.java
|
||||||
|
│ ├── ICcdiDataUploadService.java
|
||||||
|
│ ├── ICcdiModelConfigService.java
|
||||||
|
│ ├── ICcdiPreliminaryCheckService.java
|
||||||
|
│ ├── ICcdiInvestigationService.java
|
||||||
|
│ ├── ICcdiSpecialCheckService.java
|
||||||
|
│ └── ICcdiTransactionService.java
|
||||||
|
├── mapper/
|
||||||
|
│ ├── CcdiProjectMapper.java
|
||||||
|
│ ├── CcdiDataUploadMapper.java
|
||||||
|
│ ├── CcdiModelConfigMapper.java
|
||||||
|
│ ├── CcdiPreliminaryCheckMapper.java
|
||||||
|
│ ├── CcdiInvestigationMapper.java
|
||||||
|
│ ├── CcdiSpecialCheckMapper.java
|
||||||
|
│ └── CcdiTransactionMapper.java
|
||||||
|
├── domain/
|
||||||
|
│ ├── CcdiProject.java
|
||||||
|
│ ├── CcdiDataUpload.java
|
||||||
|
│ ├── CcdiModelConfig.java
|
||||||
|
│ ├── CcdiPersonRiskScore.java
|
||||||
|
│ ├── CcdiInvestigationObject.java
|
||||||
|
│ └── ...
|
||||||
|
├── dto/
|
||||||
|
│ ├── CcdiProjectQueryDTO.java
|
||||||
|
│ ├── CcdiDataUploadDTO.java
|
||||||
|
│ ├── CcdiModelConfigDTO.java
|
||||||
|
│ └── ...
|
||||||
|
└── vo/
|
||||||
|
├── CcdiProjectVO.java
|
||||||
|
├── CcdiPreliminaryCheckVO.java
|
||||||
|
├── CcdiInvestigationVO.java
|
||||||
|
└── ...
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.2 前端模块划分
|
||||||
|
|
||||||
|
```
|
||||||
|
ruoyi-ui/src/views/ccdi/
|
||||||
|
├── project/
|
||||||
|
│ ├── index.vue # 项目列表
|
||||||
|
│ ├── detail.vue # 项目详情
|
||||||
|
│ ├── upload.vue # 上传数据
|
||||||
|
│ └── components/
|
||||||
|
│ ├── UploadCard.vue # 上传卡片组件
|
||||||
|
│ ├── QualityCheck.vue # 数据质量检查组件
|
||||||
|
│ └── BlacklistSelect.vue # 名单库选择组件
|
||||||
|
├── model/
|
||||||
|
│ ├── config.vue # 参数配置
|
||||||
|
│ └── components/
|
||||||
|
│ └── ModelConfigTable.vue # 模型配置表格组件
|
||||||
|
├── preliminary/
|
||||||
|
│ ├── index.vue # 初核提示
|
||||||
|
│ └── components/
|
||||||
|
│ ├── RiskStatistics.vue # 风险统计卡片
|
||||||
|
│ ├── ModelTriggerTable.vue # 模型触发表格
|
||||||
|
│ ├── SuspiciousTransactionTable.vue # 涉疑交易表格
|
||||||
|
│ └── PersonRiskList.vue # 人员风险列表
|
||||||
|
├── investigation/
|
||||||
|
│ ├── high-risk.vue # 高风险工作台
|
||||||
|
│ ├── mid-risk.vue # 中风险工作台
|
||||||
|
│ └── components/
|
||||||
|
│ ├── ObjectInfo.vue # 排查对象信息
|
||||||
|
│ ├── AbnormalTransaction.vue # 异常交易明细
|
||||||
|
│ ├── InvestigationTools.vue # 排查工具箱
|
||||||
|
│ └── InvestigationTabs.vue # 排查进度标签页
|
||||||
|
├── special/
|
||||||
|
│ ├── index.vue # 专项排查
|
||||||
|
│ └── components/
|
||||||
|
│ ├── AssetAnalysis.vue # 资产分析
|
||||||
|
│ ├── RelationshipGraph.vue # 关系人图谱
|
||||||
|
│ └── PurchaseTable.vue # 采购查询表格
|
||||||
|
└── transaction/
|
||||||
|
└── index.vue # 流水明细查询
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3.3 开发顺序建议
|
||||||
|
|
||||||
|
1. **第一阶段:基础数据管理**
|
||||||
|
- 项目管理(创建、查询、更新)
|
||||||
|
- 数据上传功能
|
||||||
|
- 数据质量检查
|
||||||
|
|
||||||
|
2. **第二阶段:模型配置**
|
||||||
|
- 风险模型配置
|
||||||
|
- 模型参数配置
|
||||||
|
- 模型触发规则
|
||||||
|
|
||||||
|
3. **第三阶段:初核分析**
|
||||||
|
- 初核提示页面
|
||||||
|
- 风险评分计算
|
||||||
|
- 人员风险分类
|
||||||
|
|
||||||
|
4. **第四阶段:排查工作台**
|
||||||
|
- 高风险工作台
|
||||||
|
- 中风险工作台
|
||||||
|
- 排查进度跟踪
|
||||||
|
|
||||||
|
5. **第五阶段:专项排查**
|
||||||
|
- 员工详查分析
|
||||||
|
- 资产收入分析
|
||||||
|
- 关系图谱分析
|
||||||
|
- 采购查询
|
||||||
|
|
||||||
|
6. **第六阶段:流水查询**
|
||||||
|
- 流水明细查询
|
||||||
|
- 多维度筛选
|
||||||
|
- 流水分类管理
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 四、关键技术要点
|
||||||
|
|
||||||
|
### 4.1 文件上传处理
|
||||||
|
- 支持Excel、PDF、HTML多种格式
|
||||||
|
- 需要实现文件解析功能
|
||||||
|
- 大文件上传需要分片处理
|
||||||
|
- 上传进度显示
|
||||||
|
|
||||||
|
### 4.2 数据质量检查
|
||||||
|
- 数据完整性检查
|
||||||
|
- 格式一致性检查
|
||||||
|
- 余额连续性检查
|
||||||
|
- 异常数据识别
|
||||||
|
|
||||||
|
### 4.3 风险评分模型
|
||||||
|
- 可配置的风险模型
|
||||||
|
- 可配置的阈值参数
|
||||||
|
- 多模型触发计算
|
||||||
|
- 风险等级分类
|
||||||
|
|
||||||
|
### 4.4 图谱可视化
|
||||||
|
- 关系人图谱展示
|
||||||
|
- 资金流向图谱
|
||||||
|
- 实控账户图谱
|
||||||
|
- 图谱交互操作
|
||||||
|
|
||||||
|
### 4.5 数据导出
|
||||||
|
- 支持多种导出格式
|
||||||
|
- 大数据量导出优化
|
||||||
|
- 批量导出功能
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 五、接口设计建议
|
||||||
|
|
||||||
|
### 5.1 项目管理接口
|
||||||
|
|
||||||
|
```
|
||||||
|
POST /ccdi/project/list # 项目列表查询
|
||||||
|
GET /ccdi/project/{id} # 项目详情
|
||||||
|
POST /ccdi/project # 新增项目
|
||||||
|
PUT /ccdi/project # 更新项目
|
||||||
|
DELETE /ccdi/project/{id} # 删除项目
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.2 数据上传接口
|
||||||
|
|
||||||
|
```
|
||||||
|
POST /ccdi/upload/transaction # 上传流水文件
|
||||||
|
POST /ccdi/upload/credit # 上传征信文件
|
||||||
|
POST /ccdi/upload/relation # 上传家庭关系文件
|
||||||
|
GET /ccdi/upload/progress/{id} # 查询上传进度
|
||||||
|
POST /ccdi/upload/quality/check # 数据质量检查
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.3 初核分析接口
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /ccdi/preliminary/statistics # 获取统计数据
|
||||||
|
GET /ccdi/preliminary/model/trigger # 模型触发情况
|
||||||
|
GET /ccdi/preliminary/transaction # 涉疑交易明细
|
||||||
|
GET /ccdi/preliminary/person/list # 人员风险列表
|
||||||
|
GET /ccdi/preliminary/abnormal/account # 异常账户列表
|
||||||
|
POST /ccdi/preliminary/batch/report # 批量生成报告
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.4 排查工作台接口
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /ccdi/investigation/object/{id} # 获取排查对象详情
|
||||||
|
GET /ccdi/investigation/abnormal/{id} # 获取异常交易详情
|
||||||
|
GET /ccdi/investigation/progress/{id} # 获取排查进度
|
||||||
|
PUT /ccdi/investigation/mark/status # 标记状态
|
||||||
|
POST /ccdi/investigation/report # 生成排查报告
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 六、数据库表汇总
|
||||||
|
|
||||||
|
| 序号 | 表名 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| 1 | ccdi_project | 项目表 |
|
||||||
|
| 2 | ccdi_data_upload | 数据上传记录表 |
|
||||||
|
| 3 | ccdi_blacklist_selection | 名单库选择记录表 |
|
||||||
|
| 4 | ccdi_data_quality | 数据质量检查表 |
|
||||||
|
| 5 | ccdi_risk_model | 风险模型表 |
|
||||||
|
| 6 | ccdi_model_parameter | 模型参数配置表 |
|
||||||
|
| 7 | ccdi_person_risk_score | 人员风险评分表 |
|
||||||
|
| 8 | ccdi_model_trigger_record | 模型触发记录表 |
|
||||||
|
| 9 | ccdi_suspicious_transaction | 涉嫌交易明细表 |
|
||||||
|
| 10 | ccdi_abnormal_account | 异常账户表 |
|
||||||
|
| 11 | ccdi_illegal_person_info | 违法人员信息表 |
|
||||||
|
| 12 | ccdi_investigation_object | 排查对象表 |
|
||||||
|
| 13 | ccdi_investigation_trigger_model | 排查触发模型表 |
|
||||||
|
| 14 | ccdi_abnormal_transaction_detail | 异常交易明细表 |
|
||||||
|
| 15 | ccdi_investigation_progress | 排查进度表 |
|
||||||
|
| 16 | ccdi_attention_list | 关注列表表 |
|
||||||
|
| 17 | ccdi_employee_asset_analysis | 员工资产分析表 |
|
||||||
|
| 18 | ccdi_relationship_graph | 关系人图谱表 |
|
||||||
|
| 19 | ccdi_purchase_record | 采购查询记录表 |
|
||||||
|
| 20 | ccdi_transaction_detail | 流水明细表 |
|
||||||
|
| 21 | ccdi_transaction_category | 流水分类表 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 七、前端组件建议
|
||||||
|
|
||||||
|
### 7.1 通用组件
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// components/ccdi/
|
||||||
|
├── UploadCard.vue # 文件上传卡片
|
||||||
|
├── RiskStatisticsCard.vue # 风险统计卡片
|
||||||
|
├── QualityProgressBar.vue # 质量检查进度条
|
||||||
|
├── ModelTriggerTable.vue # 模型触发表格
|
||||||
|
├── PersonRiskList.vue # 人员风险列表
|
||||||
|
├── TransactionTable.vue # 交易明细表格
|
||||||
|
├── RelationshipGraph.vue # 关系图谱组件
|
||||||
|
└── FilterPanel.vue # 筛选面板组件
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7.2 图表组件
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// 使用ECharts实现
|
||||||
|
├── RiskDistributionChart.vue # 风险分布图
|
||||||
|
├── ModelTriggerChart.vue # 模型触发图表
|
||||||
|
├── AssetAnalysisChart.vue # 资产分析图表
|
||||||
|
└── RelationshipGraphChart.vue # 关系图谱
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 八、开发注意事项
|
||||||
|
|
||||||
|
### 8.1 权限控制
|
||||||
|
- 项目级权限控制
|
||||||
|
- 数据访问权限
|
||||||
|
- 敏感信息脱敏
|
||||||
|
|
||||||
|
### 8.2 性能优化
|
||||||
|
- 大数据量查询分页
|
||||||
|
- 索引优化
|
||||||
|
- 缓存策略
|
||||||
|
|
||||||
|
### 8.3 数据安全
|
||||||
|
- 敏感数据加密
|
||||||
|
- 操作日志记录
|
||||||
|
- 数据备份
|
||||||
|
|
||||||
|
### 8.4 用户体验
|
||||||
|
- 加载状态提示
|
||||||
|
- 操作反馈
|
||||||
|
- 错误提示
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 九、后续扩展方向
|
||||||
|
|
||||||
|
1. **智能分析**:引入机器学习算法,提高风险识别准确率
|
||||||
|
2. **移动端适配**:开发移动端应用,支持移动办公
|
||||||
|
3. **报表中心**:自定义报表功能
|
||||||
|
4. **预警机制**:实时预警通知
|
||||||
|
5. **案例库管理**:典型案例沉淀和复用
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**文档版本**: v1.0
|
||||||
|
**创建时间**: 2025-01-30
|
||||||
|
**最后更新**: 2025-01-30
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# 页面标题
|
# 页面标题
|
||||||
VUE_APP_TITLE = 若依管理系统
|
VUE_APP_TITLE = 纪检初核系统
|
||||||
|
|
||||||
# 开发环境配置
|
# 开发环境配置
|
||||||
ENV = 'development'
|
ENV = 'development'
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# 页面标题
|
# 页面标题
|
||||||
VUE_APP_TITLE = 若依管理系统
|
VUE_APP_TITLE = 纪检初核系统
|
||||||
|
|
||||||
# 生产环境配置
|
# 生产环境配置
|
||||||
ENV = 'production'
|
ENV = 'production'
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# 页面标题
|
# 页面标题
|
||||||
VUE_APP_TITLE = 若依管理系统
|
VUE_APP_TITLE = 纪检初核系统
|
||||||
|
|
||||||
BABEL_ENV = production
|
BABEL_ENV = production
|
||||||
|
|
||||||
|
|||||||
@@ -96,6 +96,12 @@
|
|||||||
icon="el-icon-s-data"
|
icon="el-icon-s-data"
|
||||||
@click="handleEnter(scope.row)"
|
@click="handleEnter(scope.row)"
|
||||||
>进入项目</el-button>
|
>进入项目</el-button>
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-refresh"
|
||||||
|
@click="handleReAnalyze(scope.row)"
|
||||||
|
>重新分析</el-button>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<!-- 已完成项目 -->
|
<!-- 已完成项目 -->
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ function resolve(dir) {
|
|||||||
|
|
||||||
const CompressionPlugin = require('compression-webpack-plugin')
|
const CompressionPlugin = require('compression-webpack-plugin')
|
||||||
|
|
||||||
const name = process.env.VUE_APP_TITLE || '若依管理系统' // 网页标题
|
const name = process.env.VUE_APP_TITLE || '纪检初核系统' // 网页标题
|
||||||
|
|
||||||
const baseUrl = 'http://localhost:8080' // 后端接口
|
const baseUrl = 'http://localhost:8080' // 后端接口
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user