新增图谱功能及验收清单
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
# Fund Graph Backend Implementation Plan
|
||||
|
||||
**目标:** 基于图谱结果表和手工补录边提供一期资金流图谱后端能力,支持按身份证号或员工姓名查询一层资金往来,并支持点击图谱边后分页查看该边每一笔流水。
|
||||
|
||||
**一期范围:**
|
||||
- 搜索条件:`projectId` 保留为历史字段但不参与过滤,`keyword` 支持身份证号精确匹配、员工姓名匹配。
|
||||
- 图谱范围:仅返回当前人员或姓名命中的直接对手方资金往来,不自动追溯二、三层。
|
||||
- 边明细:按图谱边的 `fromKey/toKey` 查询每笔流水,保留交易时间、本方、对手方、摘要、金额、方向。
|
||||
- 预留扩展:DTO/VO 保留 `depth`、`canTrace`、`canExpand` 字段,后续可以扩展节点点击追溯。
|
||||
|
||||
**实现内容:**
|
||||
- 新增 `CcdiFundGraphController`,暴露 `/ccdi/project/fund-graph/search`、`/ccdi/project/fund-graph/graph`、`/ccdi/project/fund-graph/edge-detail` 和 `/ccdi/project/fund-graph/manual-edge`。
|
||||
- 新增 `ICcdiFundGraphService` 与 `CcdiFundGraphServiceImpl`,负责查询参数归一化、TopN 限制、节点构建和追溯字段赋值。
|
||||
- 新增 `CcdiFundGraphMapper` 与 XML SQL,基于 `lx_fund_flow_*` 图谱结果表查询主体、汇总边、逐笔流水,并支持手工边落库。
|
||||
- 新增 DTO/VO:`CcdiFundGraphQueryDTO`、`CcdiFundGraphEdgeDetailQueryDTO`、`CcdiFundGraphVO`、`CcdiFundGraphNodeVO`、`CcdiFundGraphEdgeVO`、`CcdiFundGraphStatementVO`。
|
||||
|
||||
**数据口径:**
|
||||
- 一期查询不按 `projectId` 过滤,统一按全局图谱关系查询。
|
||||
- 资金边来自 `lx_fund_flow_detail_edge` 归并后的主体层汇总边,并叠加 `lx_fund_flow_manual_edge` 手工边。
|
||||
- 图谱边按 `fromKey/toKey/direction/familyRelationType` 聚合,统计累计金额、交易笔数、首末交易时间。
|
||||
- 手工边与真实边统一排序后再按 `limit` 截断,避免结果条数和排序口径不一致。
|
||||
|
||||
**后续追溯口子:**
|
||||
- 当前接口接收 `depth` 但服务层固定为一期一层。
|
||||
- 节点返回 `canExpand`,边返回 `canTrace`,后续可新增 `rootKey/currentNodeKey/depth` 参数做按节点展开。
|
||||
- 一期 SQL 已把人员、企业、账号、名称代理做成统一节点键,后续多层追溯可沿用同一套节点键。
|
||||
@@ -0,0 +1,29 @@
|
||||
# Fund Graph Frontend Implementation Plan
|
||||
|
||||
**目标:** 在专项排查页签落地完整版图谱工作台,在项目分析弹窗内落地简版图谱展示,支持查看一层资金流和关系图谱,并通过点击资金边查看代表性流水。
|
||||
|
||||
**一期范围:**
|
||||
- 专项排查版保留搜索栏:身份证号/员工姓名、交易时间范围、最小汇总金额。
|
||||
- 项目分析弹窗版不提供搜索栏与手工新增入口,使用当前人员自动定位图谱。
|
||||
- 图谱区:用 ECharts force graph 展示人员、企业、账号代理、名称代理节点和有向资金边。
|
||||
- 汇总区:展示节点数、资金边数、交易笔数、汇总金额。
|
||||
- 明细区:点击任意边后展示累计金额、交易笔数、最近交易和关系标签。
|
||||
- 专项排查版保留分页逐笔流水;项目分析弹窗版仅展示最近 5 条代表性流水。
|
||||
|
||||
**实现内容:**
|
||||
- 新增 `src/api/ccdi/graph/fundGraph.js` 与 `src/api/ccdi/graph/relationGraph.js`,封装图谱接口。
|
||||
- 新增 `ProjectAnalysisFundFlowTab.vue`,承接项目分析弹窗内的简版图谱展示。
|
||||
- 新增 `graph/FundGraphSection.vue`,统一承载完整版和弹窗简版两种模式。
|
||||
- 修改 `ProjectAnalysisDialog.vue` 与 `SpecialCheck.vue`,分别接入简版与完整版图谱组件。
|
||||
|
||||
**交互口径:**
|
||||
- 打开页签时优先使用模型摘要或人员对象中的身份证号/姓名自动查询。
|
||||
- 专项排查版允许手工输入身份证号或员工姓名重新查询,并支持手工新增资金流向。
|
||||
- 项目分析弹窗版保留图、基础节点详情、边汇总和轻量明细,不保留搜索、手工新增、疑似企业弹层和复杂操作。
|
||||
- 默认展示 Top 20 资金边,避免一次渲染过多边影响交互。
|
||||
- 一期不自动展开追溯层级,节点“一层展开”通过追加一圈节点和边 merge 回现有图谱。
|
||||
|
||||
**后续追溯口子:**
|
||||
- 当前图谱节点已保留原始 `nodeKey` 和 `canExpand`。
|
||||
- 未来可在节点点击事件中调用后端追溯接口,把新增节点和边合并进现有图谱。
|
||||
- 组件已按一层查询和边明细查询拆分,后续追溯不会影响“点边看流水”的核心链路。
|
||||
609
docs/plans/fullstack/2026-05-28-graph-development-decisions.md
Normal file
609
docs/plans/fullstack/2026-05-28-graph-development-decisions.md
Normal file
@@ -0,0 +1,609 @@
|
||||
# 图谱开发决策记录
|
||||
|
||||
记录当前已确认的资金流图谱和关系图谱开发口径,作为后续开发、验收和跨对话延续的依据。
|
||||
|
||||
## 1. 页面嵌入位置
|
||||
|
||||
- 图谱功能先嵌入项目详情页的“专项排查”页签。
|
||||
- 现有前端入口为 `ruoyi-ui/src/views/ccdiProject/components/detail/SpecialCheck.vue`。
|
||||
- 页面在项目详情内承载,但资金流图谱本身不按 `project_id` 过滤。
|
||||
- 查询入口以全局身份证号 `cret_no` 或员工姓名为准。
|
||||
|
||||
## 2. 图谱表结构原则
|
||||
|
||||
- 建表逻辑尽量保持图谱平台已验证过的 SQL 逻辑。
|
||||
- 不重新设计统一点表/边表。
|
||||
- 表名保留图谱平台 SQL 中的五张结果表:
|
||||
- `lx_fund_flow_subject_node`
|
||||
- `lx_fund_flow_account_node`
|
||||
- `lx_fund_flow_own_account_edge`
|
||||
- `lx_fund_flow_detail_edge`
|
||||
- `lx_fund_flow_sum_edge`
|
||||
- 不在五张图谱表中增加 `project_id` 作为查询过滤口径。
|
||||
- 一条流水可能存在于多个项目中,资金流图谱按全局资金关系构建,避免项目维度导致重复建点或重复算边。
|
||||
|
||||
## 3. 五张表职责
|
||||
|
||||
| 表名 | 作用 |
|
||||
| --- | --- |
|
||||
| `lx_fund_flow_subject_node` | 主体点,表示人员、企业、名称代理主体 |
|
||||
| `lx_fund_flow_account_node` | 账户点,表示具体账号或名称代理账户 |
|
||||
| `lx_fund_flow_own_account_edge` | 主体到账户的持有关系 |
|
||||
| `lx_fund_flow_detail_edge` | 账户层逐笔资金交易边 |
|
||||
| `lx_fund_flow_sum_edge` | 主体层资金汇总边,前端默认展示 |
|
||||
|
||||
关键点:
|
||||
|
||||
- 一个人可能有多个账号,所以必须保留主体点、账户点、持有边三层结构。
|
||||
- 前端默认展示主体层汇总边,不默认展示全部账户层明细边,避免节点过多。
|
||||
- 点击汇总边后,再查询账户层逐笔流水。
|
||||
|
||||
## 4. 构建逻辑
|
||||
|
||||
构建逻辑以 `tupu/资金流图谱代码/lanxi_liushui_no_relation_simplified.sql` 为主。
|
||||
|
||||
重要口径:
|
||||
|
||||
- 项目内 SQL 尽量和图谱平台原 SQL 保持一致。
|
||||
- 先导入一部分“所有员工流水明细”作为图谱基座。
|
||||
- 这部分基座数据视为已验证、绝对正确,不应被后续构建流程随意清空或覆盖。
|
||||
- 后续从 `ccdi_bank_statement` 拉取新增流水时,需要先和图谱基座做一致性判断。
|
||||
- 如果 `ccdi_bank_statement` 中的流水已经能在图谱基座中匹配到一致流水,则不同步进图谱,避免重复计入。
|
||||
- 如果没有匹配到一致流水,则按原图谱 SQL 逻辑增量插入图谱。
|
||||
|
||||
保留的核心口径:
|
||||
|
||||
- 本方证件号 `cret_no` 必须存在。
|
||||
- 对手方名称必须存在,空值、空串、`0` 过滤。
|
||||
- 金额必须有效,支出和收入统一成 `amount` 与 `flag`。
|
||||
- 支出 `flag = 1`,收入 `flag = 2`。
|
||||
- 明细去重,避免重复流水导致金额和笔数翻倍。
|
||||
- 同名归并只作用于主体层,不改变账户节点和账户明细边。
|
||||
- 无账号但有名称的对手方,按原 SQL 逻辑生成名称代理账户和名称代理主体。
|
||||
|
||||
一期先不展开追溯能力。需要为后续追溯预留字段和逻辑口子:
|
||||
|
||||
- `source_table`
|
||||
- `penetrate_level`
|
||||
- 后续可扩展 `FIRST`、`LEVEL1` 等来源。
|
||||
|
||||
## 4.1 基座与增量同步口径
|
||||
|
||||
图谱表不是“清空重建”的临时结果表,而是承载已验证图谱基座和后续增量的正式结果表。
|
||||
|
||||
基座数据:
|
||||
|
||||
- 来源为先导入的所有员工流水明细。
|
||||
- 按原图谱平台 SQL 生成五张 `lx_*` 表。
|
||||
- 基座数据作为可信结果保留。
|
||||
|
||||
增量数据:
|
||||
|
||||
- 来源为后续 `ccdi_bank_statement`。
|
||||
- 拉取后先按原 SQL 的流水标准化和去重口径生成候选流水。
|
||||
- 候选流水和既有 `lx_fund_flow_detail_edge` 做一致性比对。
|
||||
- 已存在一致流水时跳过,不插入图谱。
|
||||
- 不存在一致流水时,再增量生成账户点、主体点、持有边、明细边和汇总边。
|
||||
|
||||
一致性比对建议使用稳定业务特征,而不是 `project_id`:
|
||||
|
||||
- 本方账号
|
||||
- 本方户名
|
||||
- 对手方账号
|
||||
- 对手方户名
|
||||
- 交易日期
|
||||
- 金额
|
||||
- 收支方向 `flag`
|
||||
- 摘要 `user_memo`
|
||||
- 银行流水号或交易流水号,如果有
|
||||
|
||||
增量插入要求:
|
||||
|
||||
- 点表按 `object_key` 去重插入。
|
||||
- 持有边按 `object_key` 去重插入。
|
||||
- 明细边先判重,未存在才插入。
|
||||
- 汇总边需要按主体对和方向重新聚合或局部 upsert,不能简单追加导致金额翻倍。
|
||||
|
||||
## 4.2 ODPS 基座同步到 MySQL
|
||||
|
||||
当前真实部署口径:
|
||||
|
||||
- 原图谱 SQL 已在 ODPS 中有一份结果。
|
||||
- ODPS 结果只涉及行内流水。
|
||||
- ODPS 已经产出五张图谱结果表。
|
||||
- 可以先将 ODPS 中五张结果表一次性同步到纪检 MySQL。
|
||||
- MySQL 同步建表脚本记录在 `sql/ccdi/graph/01_lx_fund_graph_mysql_ddl.sql`。
|
||||
- 生产数据库表结构变更由人工单独执行,不跟随测试环境或应用发布自动更新。
|
||||
- 项目内保留 SQL 文件,用于本地验证、评审和生产手动执行参考。
|
||||
|
||||
同步后的 MySQL 五张表继续使用原图谱表名:
|
||||
|
||||
- `lx_fund_flow_subject_node`
|
||||
- `lx_fund_flow_account_node`
|
||||
- `lx_fund_flow_own_account_edge`
|
||||
- `lx_fund_flow_detail_edge`
|
||||
- `lx_fund_flow_sum_edge`
|
||||
|
||||
同步要求:
|
||||
|
||||
- ODPS 到 MySQL 首次同步只做基座装载。
|
||||
- 基座装载完成后,后续不再通过清空五张表重建处理。
|
||||
- ODPS 字段和 MySQL 字段同名的按显式字段列表导入。
|
||||
- MySQL 侧新增字段如 `family_relation_type`、`summary_object_key`、`source_table`、`penetrate_level`、`bank_statement_id`、`bank_trx_number` 可为空。
|
||||
- `lx_fund_flow_sum_edge.detail_ids` 在 MySQL 中使用 `LONGTEXT` 接收 ODPS ARRAY 同步后的 JSON 或字符串表示,前后端查询不强依赖该字段。
|
||||
|
||||
## 4.3 MySQL 后续增量方式
|
||||
|
||||
后续新增数据都在纪检 MySQL 内处理:
|
||||
|
||||
- 来源表为 `ccdi_bank_statement`。
|
||||
- 增量逻辑从 `ccdi_bank_statement` 抽取候选流水。
|
||||
- 候选流水按原图谱 SQL 口径标准化、过滤、生成 object_key。
|
||||
- 先和既有 `lx_fund_flow_detail_edge` 做一致性判重。
|
||||
- 已存在一致流水时不插入图谱。
|
||||
- 不存在一致流水时,才增量插入点、账户、持有边、明细边。
|
||||
- 汇总边 `lx_fund_flow_sum_edge` 按主体对和方向重新聚合或局部 upsert。
|
||||
|
||||
调度建议:
|
||||
|
||||
- 一期建议做每日定时调度,不建议一开始做实时。
|
||||
- 推荐使用 RuoYi/Quartz 定时任务,每天凌晨或低峰期执行。
|
||||
- 同时保留后台手动触发能力,便于首次补跑、排查和修复。
|
||||
- 实时同步不是不能做,但没有必要优先做;实时会增加事务、锁、重复判断和汇总边更新复杂度。
|
||||
|
||||
推荐执行节奏:
|
||||
|
||||
1. ODPS 五张结果表一次性同步到 MySQL。
|
||||
2. MySQL 跑一次家庭关系补充和 `summary_object_key` 回填。
|
||||
3. 每日 Quartz 调度从 `ccdi_bank_statement` 抽取新增候选流水。
|
||||
4. 候选流水与 `lx_fund_flow_detail_edge` 判重。
|
||||
5. 未命中重复的流水增量入图。
|
||||
6. 更新对应主体层汇总边。
|
||||
7. 前端始终只基于 MySQL 五张 `lx_*` 图谱表查询展示。
|
||||
|
||||
## 4.4 数据库变更执行边界
|
||||
|
||||
数据库表结构改动属于生产库手工变更,不纳入测试环境自动更新。
|
||||
|
||||
后续开发分工:
|
||||
|
||||
- SQL 文件由代码库保留,作为生产手工执行依据和本地验证依据。
|
||||
- 生产执行由人工确认后单独处理。
|
||||
- 后端开发默认这些表在目标库中已经存在。
|
||||
- 前端开发不感知数据库变更,只调用后端接口。
|
||||
- 测试环境如没有这五张表,需要手动执行 SQL 后再联调。
|
||||
- 应用发布包不自动执行这些 DDL。
|
||||
|
||||
## 5. 家庭关系
|
||||
|
||||
家庭关系是本次项目内新增能力,参考 `tupu/资金流图谱代码/资金流图谱_家庭关系补充.sql`。
|
||||
|
||||
处理原则:
|
||||
|
||||
- 不改变资金方向。
|
||||
- 不改变主体归并逻辑。
|
||||
- 不改变账户层明细边生成逻辑。
|
||||
- 只在资金边上增加家庭关系标注。
|
||||
|
||||
匹配规则:
|
||||
|
||||
- 交易任意一侧可映射到员工主体。
|
||||
- 员工主体必须有身份证号。
|
||||
- 对手方姓名命中 `ccdi_staff_fmy_relation.relation_name`。
|
||||
- 同一员工和同一关系人姓名只有一个 `relation_type` 时才标注。
|
||||
- 多个关系类型冲突时不打标,避免误判。
|
||||
|
||||
建议补充字段:
|
||||
|
||||
- `lx_fund_flow_detail_edge.family_relation_type`
|
||||
- `lx_fund_flow_sum_edge.family_relation_type`
|
||||
|
||||
## 6. 查询逻辑
|
||||
|
||||
搜索主体:
|
||||
|
||||
```sql
|
||||
select *
|
||||
from lx_fund_flow_subject_node
|
||||
where idnocfno = #{keyword}
|
||||
or name like concat('%', #{keyword}, '%');
|
||||
```
|
||||
|
||||
查询主体层资金图:
|
||||
|
||||
```sql
|
||||
select *
|
||||
from lx_fund_flow_sum_edge
|
||||
where from_key = concat('idno_node/', #{objectKey})
|
||||
or to_key = concat('idno_node/', #{objectKey})
|
||||
order by amount desc, total_trans_cnt desc
|
||||
limit #{limit};
|
||||
```
|
||||
|
||||
点击汇总边查询逐笔流水:
|
||||
|
||||
```sql
|
||||
select *
|
||||
from lx_fund_flow_detail_edge
|
||||
where summary_object_key = #{sumObjectKey}
|
||||
order by trx_date desc
|
||||
limit #{offset}, #{pageSize};
|
||||
```
|
||||
|
||||
说明:
|
||||
|
||||
- 原图谱平台 `detail_ids` 可以保留。
|
||||
- MySQL 分页查询建议增加 `summary_object_key`,用于从汇总边直接查明细边。
|
||||
- `summary_object_key` 是查询优化字段,不改变原图谱平台点边模型。
|
||||
|
||||
## 7. 前后端开发边界
|
||||
|
||||
后端负责:
|
||||
|
||||
- 从五张 `lx_*` 图谱结果表读取数据。
|
||||
- 按身份证号或姓名定位主体。
|
||||
- 返回主体层图谱节点和汇总边。
|
||||
- 支持点击资金汇总边分页查询逐笔流水。
|
||||
- 透出家庭关系字段。
|
||||
- 空表或脏数据时返回空结果,不让前端报错。
|
||||
|
||||
前端负责:
|
||||
|
||||
- 在“专项排查”页签中呈现图谱展示区域。
|
||||
- 支持身份证号或员工姓名搜索。
|
||||
- 支持“资金图谱 / 关系图谱”页签。
|
||||
- 一期资金图谱做实,关系图谱可先保留入口。
|
||||
- 默认展示主体层资金汇总图。
|
||||
- 点击边展示逐笔流水明细。
|
||||
- 展示图谱明细边中已写入的家庭关系标签,如配偶、父母、子女。
|
||||
|
||||
## 8. 基座保护与异常数据处理
|
||||
|
||||
图谱表承载已验证基座,不按“可随意清空重建”设计。人工可以维护或清理异常数据,但默认应保护已有基座。
|
||||
|
||||
处理要求:
|
||||
|
||||
- 后续增量同步不得清空五张 `lx_*` 表。
|
||||
- 增量同步前必须先判断候选流水是否已存在于 `lx_fund_flow_detail_edge`。
|
||||
- 已存在一致流水时跳过,避免重复金额和重复笔数。
|
||||
- 人工清理异常边后,后端查询需要能容忍局部缺失数据。
|
||||
- 边表有、点表缺失时,后端过滤无法匹配节点的边,不让前端报错。
|
||||
- 明细边为空时,点击汇总边提示暂无逐笔流水。
|
||||
- 如果人工确实清理了部分图谱数据,后续增量插入仍需按 `object_key` 和流水一致性规则防重。
|
||||
|
||||
## 9. UI 风格
|
||||
|
||||
固定设计口径:
|
||||
|
||||
- 浅色系统风格。
|
||||
- 正式后台质感。
|
||||
- 与当前纪检系统色调保持一致,蓝、白、灰为主。
|
||||
- 朝图谱平台式交互靠齐。
|
||||
- 不做黑色大屏。
|
||||
- 不做网感、霓虹、炫光科技风。
|
||||
- 图谱画布使用浅灰白背景,边界清楚。
|
||||
- 搜索区放在顶部,支持身份证号和姓名。
|
||||
- 页签为“资金图谱”和“关系图谱”。
|
||||
- 明细使用右侧抽屉或下方面板展示,优先保证字段清楚和分页性能。
|
||||
|
||||
## 10. 后续开发顺序
|
||||
|
||||
建议顺序:
|
||||
|
||||
1. 先落项目内 SQL:DDL、构建 SQL、家庭关系补充 SQL、索引 SQL。
|
||||
2. 先支持已导入员工流水明细作为图谱基座。
|
||||
3. 增加 `ccdi_bank_statement` 到图谱表的增量同步逻辑。
|
||||
4. 增量同步必须先和既有 `lx_fund_flow_detail_edge` 做一致性判重,已存在则不同步。
|
||||
5. 后端接口改为读取五张 `lx_*` 图谱表。
|
||||
6. 前端在“专项排查”页签接入图谱展示区域。
|
||||
7. 完成资金图谱搜索、展示、点击边查明细。
|
||||
8. 增加家庭关系标签展示。
|
||||
9. 验证基座保护、增量防重、一个人多个账号、家庭关系命中等场景。
|
||||
|
||||
## 11. 当前代码进度与偏差
|
||||
|
||||
截至 2026-05-28,项目内已经做过一版一期资金流图谱代码,但这版实现口径与当前最终方案不完全一致,后续需要重构而不是直接当最终版。
|
||||
|
||||
已完成过的代码:
|
||||
|
||||
- 后端新增 `CcdiFundGraphController`,接口路径为 `/ccdi/project/fund-graph/graph` 和 `/ccdi/project/fund-graph/edge-detail`。
|
||||
- 后端新增 DTO/VO:`CcdiFundGraphQueryDTO`、`CcdiFundGraphEdgeDetailQueryDTO`、`CcdiFundGraphVO`、`CcdiFundGraphNodeVO`、`CcdiFundGraphEdgeVO`、`CcdiFundGraphStatementVO`。
|
||||
- 后端新增 Mapper 和 Service:`CcdiFundGraphMapper`、`ICcdiFundGraphService`、`CcdiFundGraphServiceImpl`、`CcdiFundGraphMapper.xml`。
|
||||
- 前端新增接口文件 `ruoyi-ui/src/api/ccdi/fundGraph.js`。
|
||||
- 前端新增组件 `ProjectAnalysisFundFlowTab.vue`。
|
||||
- 前端已在 `ProjectAnalysisDialog.vue` 中接入资金流图谱页签。
|
||||
|
||||
旧版已验证情况:
|
||||
|
||||
- `mvn -pl ccdi-project -am compile -DskipTests` 通过。
|
||||
- `npm run build:prod` 通过。
|
||||
- 真实库只读校验过项目 33 和姓名样例,能查出资金边,点击边能查逐笔流水。
|
||||
- 曾修正 MySQL 8 保留词别名 `rows` 和字符集排序规则不一致问题。
|
||||
|
||||
当前偏差:
|
||||
|
||||
- 旧版接口是实时从 `ccdi_bank_statement` 聚合资金图谱,不读取五张 `lx_*` 图谱结果表。
|
||||
- 旧版查询带项目上下文,当前最终口径是不按 `project_id` 过滤,以全局 `cret_no` 或姓名为入口。
|
||||
- 旧版前端接在项目分析弹窗 `ProjectAnalysisDialog`,当前最终入口应放在“专项排查”页签。
|
||||
- 旧版没有按图谱平台五表基座和增量同步口径处理。
|
||||
- 旧版没有家庭关系标注。
|
||||
|
||||
后续处理原则:
|
||||
|
||||
- 可复用旧版的图谱展示、点击边查明细、分页表格等前端交互经验。
|
||||
- 可复用旧版 DTO/VO 中适合前端展示的字段,但字段来源需要改为五张 `lx_*` 表。
|
||||
- 后端 SQL 必须从实时聚合 `ccdi_bank_statement` 改为读取 `lx_fund_flow_subject_node`、`lx_fund_flow_account_node`、`lx_fund_flow_own_account_edge`、`lx_fund_flow_detail_edge`、`lx_fund_flow_sum_edge`。
|
||||
- 前端入口需要从项目分析弹窗迁移或重做到“专项排查”页签。
|
||||
- 旧版文件在重构时应谨慎处理,避免影响当前项目分析弹窗已有功能。
|
||||
|
||||
## 12. 页面查询与汇总表最新决策
|
||||
|
||||
最新决策:
|
||||
|
||||
- 纪检平台资金流图谱页面不强依赖 `lx_fund_flow_sum_edge`。
|
||||
- 页面查询以 `lx_fund_flow_detail_edge` 为事实表,由后端按当前查询条件实时聚合。
|
||||
- 前端不做金额和笔数聚合,只负责渲染后端返回的节点、边和明细。
|
||||
- `lx_fund_flow_sum_edge` 如生产侧不需要兼容图谱平台页面,可以不作为纪检页面必需表。
|
||||
- 如果 ODPS 已有 `lx_fund_flow_sum_edge`,可以选择不同步到 MySQL,或同步后仅作为参考缓存,不作为纪检页面查询依据。
|
||||
|
||||
原因:
|
||||
|
||||
- 用户每次查询通常以一个人为中心,一跳图谱范围可控。
|
||||
- 用户需要按 `trx_date` 任意筛选时间范围。
|
||||
- 全量 `lx_fund_flow_sum_edge` 不能准确表达任意时间段内的金额和笔数。
|
||||
- 每天新增明细后维护汇总表会增加复杂度。
|
||||
- 后端从明细边实时聚合能保证筛选结果准确,且比前端聚合更可靠。
|
||||
|
||||
后端聚合口径:
|
||||
|
||||
1. 用身份证号、姓名或 `object_key` 定位主体点。
|
||||
2. 查询该主体名下账户。
|
||||
3. 从 `lx_fund_flow_detail_edge` 查询这些账户相关流水。
|
||||
4. 按 `trx_date`、金额、方向、家庭关系等筛选条件过滤。
|
||||
5. 后端将账户层明细边聚合为主体层资金边。
|
||||
6. 返回前端用于图谱展示。
|
||||
|
||||
时间筛选字段:
|
||||
|
||||
- 所有时间筛选基于 `lx_fund_flow_detail_edge.trx_date`。
|
||||
- 不用 `lx_fund_flow_sum_edge.first_trx_date` 或 `lastest_trx_date` 判断筛选结果。
|
||||
|
||||
## 13. 节点穿透最新决策
|
||||
|
||||
节点穿透以 `lx_fund_flow_subject_node.object_key` 为唯一标识,不按姓名穿透。
|
||||
|
||||
口径:
|
||||
|
||||
- 实名主体按原 SQL 逻辑生成 `object_key`,即 `md5(trim(idnocfno))`。
|
||||
- 用户点击节点后,可选择“以此节点为中心查询”或“展开此节点”。
|
||||
- 默认不自动穿透,避免图谱过长和误展开。
|
||||
- 后端按被选节点的 `object_key` 查询其账户和流水。
|
||||
- 节点是否可穿透由后端返回 `canExpand` 控制。
|
||||
|
||||
允许穿透:
|
||||
|
||||
- 有明确身份证号或证件号的实名主体。
|
||||
- 有明确账户归属、能通过 `lx_fund_flow_own_account_edge` 找到账户的主体。
|
||||
|
||||
默认不穿透:
|
||||
|
||||
- 只有名称、没有证件号、没有明确账户归属的名称代理主体。
|
||||
- 无法通过 `object_key` 准确定位账户集合的节点。
|
||||
|
||||
交互建议:
|
||||
|
||||
- 一期做“设为中心查询”,即点击节点后重新以该节点为中心画一跳图。
|
||||
- 后续再做“在当前图上追加展开”,避免一期图谱状态管理过复杂。
|
||||
|
||||
## 14. 最终减法版决策
|
||||
|
||||
本节覆盖前文早期关于五张表、`lx_fund_flow_sum_edge`、关系图谱页签的旧设想。后续开发以本节为准。
|
||||
|
||||
本节为 2026-05-28 资金流图谱减法版决策,重点是不依赖 `lx_fund_flow_sum_edge`。关于关系图谱页签,后续已在第 16 节更新为“保留关系图谱能力”,以第 16 节为准。
|
||||
|
||||
必要表:
|
||||
|
||||
- `lx_fund_flow_subject_node`
|
||||
- `lx_fund_flow_account_node`
|
||||
- `lx_fund_flow_own_account_edge`
|
||||
- `lx_fund_flow_detail_edge`
|
||||
|
||||
不依赖:
|
||||
|
||||
- `lx_fund_flow_sum_edge`
|
||||
|
||||
页面查询:
|
||||
|
||||
- 输入身份证号、姓名或点击节点 `object_key`。
|
||||
- 后端定位主体点。
|
||||
- 后端查询主体持有账户。
|
||||
- 后端从 `lx_fund_flow_detail_edge` 按账户、`trx_date`、金额等条件实时聚合资金边。
|
||||
- 前端只渲染后端返回的资金节点、资金边和逐笔明细。
|
||||
|
||||
家庭关系:
|
||||
|
||||
- 只作为资金流图谱中的标签展示。
|
||||
- 家庭关系识别在图谱构建或数据加工阶段完成,并写入 `lx_fund_flow_detail_edge.family_relation_type`;后端查询接口只读取并返回该字段,不实时匹配家庭表。
|
||||
- 如果生产构建需要按对手方户名匹配 `ccdi_staff_fmy_relation.relation_name`,应在构建 SQL 中完成,并控制同名误判风险。
|
||||
- 有明确 `relation_cert_no` 的家庭关系人按实名主体处理,`object_key = md5(trim(relation_cert_no))`。
|
||||
- 用户点击该节点时,可按该节点 `object_key` 设为中心继续查询。
|
||||
|
||||
测试数据:
|
||||
|
||||
- 测试 DDL 为 `sql/ccdi/graph/01_lx_fund_graph_mysql_ddl.sql`。
|
||||
- 测试数据脚本为 `sql/ccdi/graph/02_lx_fund_graph_seed_test_data.sql`。
|
||||
- 测试数据只写四张必要表。
|
||||
- 测试数据来源于 dev 库 `ccdi_bank_statement` 和 `ccdi_staff_fmy_relation`。
|
||||
- 原始流水表不被修改。
|
||||
|
||||
## 15. 前后端与页面交互设计
|
||||
|
||||
默认查询:
|
||||
|
||||
- 默认查询全部流水,不默认带交易日期过滤。
|
||||
- 用户选择交易日期后,后端才按 `lx_fund_flow_detail_edge.trx_date` 过滤。
|
||||
- 时间过滤不查汇总表,直接从明细边实时聚合。
|
||||
|
||||
后端接口建议:
|
||||
|
||||
```text
|
||||
GET /ccdi/project/fund-graph/search
|
||||
GET /ccdi/project/fund-graph/graph
|
||||
GET /ccdi/project/fund-graph/edge-detail
|
||||
POST /ccdi/project/fund-graph/manual-edge
|
||||
|
||||
GET /ccdi/project/relation-graph/search
|
||||
GET /ccdi/project/relation-graph/graph
|
||||
GET /ccdi/project/relation-graph/suspected-enterprises
|
||||
```
|
||||
|
||||
接口职责:
|
||||
|
||||
- `search`:按身份证号或姓名查主体点,返回候选主体列表。
|
||||
- `graph`:按主体 `object_key` 查询一跳资金图,默认全部流水,可选日期、金额、方向过滤。
|
||||
- `edge-detail`:点击资金边后,分页查询该边下的逐笔流水。
|
||||
|
||||
`graph` 入参:
|
||||
|
||||
```text
|
||||
objectKey 必填,主体 object_key
|
||||
startDate 可选,交易开始日期
|
||||
endDate 可选,交易结束日期
|
||||
amountMin 可选,最小金额
|
||||
amountMax 可选,最大金额
|
||||
direction 可选,1支出、2收入
|
||||
limit 可选,默认20
|
||||
```
|
||||
|
||||
`graph` 返回:
|
||||
|
||||
```text
|
||||
centerNode 当前中心主体
|
||||
nodes 图谱节点
|
||||
edges 聚合后的资金边
|
||||
summary 当前查询范围的总金额、总笔数、家庭关系边数量
|
||||
```
|
||||
|
||||
节点字段:
|
||||
|
||||
```text
|
||||
objectKey
|
||||
nodeKey idno_node/{object_key}
|
||||
name
|
||||
idNo
|
||||
nodeType PERSON / PROXY
|
||||
canExpand
|
||||
relationType 如果是家庭关系节点,返回配偶/父亲/母亲等
|
||||
```
|
||||
|
||||
边字段:
|
||||
|
||||
```text
|
||||
edgeKey
|
||||
fromKey
|
||||
toKey
|
||||
fromName
|
||||
toName
|
||||
direction 1支出、2收入
|
||||
amount
|
||||
transactionCount
|
||||
firstTrxDate
|
||||
lastTrxDate
|
||||
familyRelationType
|
||||
```
|
||||
|
||||
`edge-detail` 入参:
|
||||
|
||||
```text
|
||||
fromObjectKey
|
||||
toObjectKey
|
||||
direction
|
||||
startDate
|
||||
endDate
|
||||
pageNum
|
||||
pageSize
|
||||
```
|
||||
|
||||
页面交互:
|
||||
|
||||
- 页面位置:项目详情“专项排查”页签。
|
||||
- 页面标题:图谱展示。
|
||||
- 展示“资金流图谱”和“关系图谱”两个页签。
|
||||
- 搜索区只保留必要控件:身份证号/姓名、交易日期、查询、重置。
|
||||
- 默认空态提示:请输入身份证号或姓名查询资金流图谱。
|
||||
- 查询后画一跳图,中心节点为当前人员。
|
||||
- 边上只显示金额和笔数,家庭关系用标签显示。
|
||||
- 点击资金边,右侧抽屉展示逐笔流水。
|
||||
- 点击节点,提供“设为中心查询”;默认不自动穿透。
|
||||
- 只有 `canExpand = true` 的节点展示“设为中心查询”。
|
||||
|
||||
性能口径:
|
||||
|
||||
- 前端不聚合金额和笔数。
|
||||
- 后端只围绕一个主体的账户集合查明细边。
|
||||
- 默认全部流水也只查当前主体相关边,不扫全表。
|
||||
- 必须使用 `lx_fund_flow_own_account_edge.from_key`、`lx_fund_flow_detail_edge.from_key/trx_date`、`lx_fund_flow_detail_edge.to_key/trx_date` 索引。
|
||||
- 后端 SQL 参数比较需要显式 `COLLATE utf8mb4_general_ci`,避免当前库连接排序规则和表排序规则不一致。
|
||||
|
||||
当前 dev 测试数据:
|
||||
|
||||
```text
|
||||
测试身份证号:617673198109148314
|
||||
测试 object_key:以 `MD5('617673198109148314')` 为准
|
||||
主体点:10
|
||||
账户点:14
|
||||
持有边:14
|
||||
明细边:72
|
||||
```
|
||||
|
||||
测试覆盖:
|
||||
|
||||
- 默认全部流水聚合。
|
||||
- 日期范围筛选聚合。
|
||||
- 支出方向 `flag = 1`。
|
||||
- 收入方向 `flag = 2`。
|
||||
- 家庭关系标签:配偶、父亲、母亲。
|
||||
- 普通对手方:支付宝、淘宝、美团、财付通、小店、银行转账。
|
||||
- 点击家庭关系节点按 `object_key` 设为中心查询。
|
||||
|
||||
## 16. 2026-05-29 最新验收口径
|
||||
|
||||
本节为当前最新口径,用于覆盖前文早期变更记录中的冲突描述。
|
||||
|
||||
当前图谱功能保留两类能力:
|
||||
|
||||
- 资金流图谱:作为专项排查中的核心图谱能力,读取 `lx_fund_flow_subject_node`、`lx_fund_flow_account_node`、`lx_fund_flow_own_account_edge`、`lx_fund_flow_detail_edge`,并叠加 `lx_fund_flow_manual_edge` 手工资金流向。
|
||||
- 关系图谱:保留页面页签和接口能力,读取 `lx_rel_node`、`lx_rel_family_edge`、`lx_rel_stock_edge`、`lx_rel_represent_edge`,支持家庭关系、股东持股、法定代表人关系和疑似同名企业召回。
|
||||
|
||||
当前页面入口:
|
||||
|
||||
- 项目详情“专项排查”页签展示完整图谱工作台,包含“资金流图谱”和“关系图谱”两个页签。
|
||||
- 项目分析弹窗“资金流向”页签展示简版资金流图谱。
|
||||
- 项目分析弹窗“关系图谱”页签展示简版关系图谱。
|
||||
|
||||
当前接口入口:
|
||||
|
||||
```text
|
||||
GET /ccdi/project/fund-graph/search
|
||||
GET /ccdi/project/fund-graph/graph
|
||||
GET /ccdi/project/fund-graph/edge-detail
|
||||
POST /ccdi/project/fund-graph/manual-edge
|
||||
|
||||
GET /ccdi/project/relation-graph/search
|
||||
GET /ccdi/project/relation-graph/graph
|
||||
GET /ccdi/project/relation-graph/suspected-enterprises
|
||||
```
|
||||
|
||||
当前数据库执行口径:
|
||||
|
||||
- 新环境可参考 `sql/ccdi/graph/01_lx_fund_graph_mysql_ddl.sql` 和 `sql/ccdi/graph/03_lx_relation_graph_mysql_ddl.sql`。
|
||||
- 已建资金流图谱表的环境使用 `sql/ccdi/graph/06_lx_fund_graph_existing_table_supplement.sql` 补字段和补索引,不删除、不重建、不清空基座数据。
|
||||
- 已建关系图谱表的环境使用 `sql/ccdi/graph/03_lx_relation_graph_mysql_ddl.sql` 中的补充逻辑补字段和补索引。
|
||||
- 生产 DDL 和补充 SQL 都由人工确认后手动执行,不随应用发布自动执行。
|
||||
|
||||
当前验收样例:
|
||||
|
||||
```text
|
||||
资金流图谱测试身份证号:617673198109148314
|
||||
关系图谱测试身份证号:330101198001010011
|
||||
```
|
||||
@@ -0,0 +1,98 @@
|
||||
# 图谱生产数据库手工变更清单
|
||||
|
||||
本清单只记录资金流图谱涉及的生产数据库表结构和数据准备事项。该部分由人工在生产库手动执行,不随应用发布自动执行,也不要求测试环境自动更新。
|
||||
|
||||
## 1. DDL 脚本
|
||||
|
||||
生产建表脚本:
|
||||
|
||||
```text
|
||||
sql/ccdi/graph/01_lx_fund_graph_mysql_ddl.sql
|
||||
```
|
||||
|
||||
当前减法版创建五张资金流图谱必要表:
|
||||
|
||||
- `lx_fund_flow_subject_node`
|
||||
- `lx_fund_flow_account_node`
|
||||
- `lx_fund_flow_own_account_edge`
|
||||
- `lx_fund_flow_detail_edge`
|
||||
- `lx_fund_flow_manual_edge`
|
||||
|
||||
不创建、不依赖 `lx_fund_flow_sum_edge`。资金图谱页面由后端基于 `lx_fund_flow_detail_edge.trx_date` 按当前查询条件实时聚合真实资金边,手工资金流向汇总边单独存入 `lx_fund_flow_manual_edge`。
|
||||
|
||||
## 2. 生产执行边界
|
||||
|
||||
- 生产库 DDL 由人工手动执行。
|
||||
- 应用发布包不自动执行 DDL。
|
||||
- 测试环境不会自动同步这些变更。
|
||||
- 代码库保留 SQL 文件,只作为生产执行、评审和本地验证依据。
|
||||
- 后端开发默认目标库中上述 `lx_*` 表已存在。
|
||||
|
||||
## 3. ODPS 基座同步
|
||||
|
||||
生产建表后,先从 ODPS 同步已验证的资金流图谱基座到 MySQL。
|
||||
|
||||
同步来源:
|
||||
|
||||
- ODPS 中原图谱 SQL 产出的 `lx_fund_flow_subject_node`
|
||||
- ODPS 中原图谱 SQL 产出的 `lx_fund_flow_account_node`
|
||||
- ODPS 中原图谱 SQL 产出的 `lx_fund_flow_own_account_edge`
|
||||
- ODPS 中原图谱 SQL 产出的 `lx_fund_flow_detail_edge`
|
||||
|
||||
同步原则:
|
||||
|
||||
- ODPS 基座是已验证数据,作为 MySQL 图谱基座保留。
|
||||
- 同步时建议使用显式字段列表,不依赖 `select *`。
|
||||
- MySQL 侧新增字段允许为空。
|
||||
- `lx_fund_flow_sum_edge` 不作为纪检资金图谱页面必要表,可不从 ODPS 同步。
|
||||
- `lx_fund_flow_manual_edge` 不从 ODPS 同步,生产建表后初始为空,由纪检平台手工分析功能写入。
|
||||
|
||||
## 4. 后续增量
|
||||
|
||||
ODPS 基座同步后,后续新增流水在纪检 MySQL 内处理。
|
||||
|
||||
增量来源:
|
||||
|
||||
- `ccdi_bank_statement`
|
||||
|
||||
增量原则:
|
||||
|
||||
- 先标准化候选流水。
|
||||
- 再和既有 `lx_fund_flow_detail_edge` 做一致性判重。
|
||||
- 已存在一致流水,不同步进图谱。
|
||||
- 不存在一致流水,才增量插入主体点、账户点、持有边、明细边。
|
||||
- 不维护汇总表;页面查询时实时聚合。
|
||||
|
||||
## 5. 调度建议
|
||||
|
||||
一期建议采用每日定时任务,不建议一开始做实时。
|
||||
|
||||
推荐方式:
|
||||
|
||||
- RuoYi/Quartz 定时任务。
|
||||
- 每日低峰期执行。
|
||||
- 保留手动触发能力,用于补跑、排查和修复。
|
||||
|
||||
## 6. 前后端依赖
|
||||
|
||||
前后端开发依赖上述 MySQL 图谱表的查询结果。
|
||||
|
||||
- 前端不直接访问数据库。
|
||||
- 后端接口读取 `lx_*` 表。
|
||||
- 页面入口放在项目详情的“专项排查”页签。
|
||||
- 资金流图谱中真实资金边基于 `lx_fund_flow_detail_edge` 实时聚合。
|
||||
- 手工资金边来自 `lx_fund_flow_manual_edge`,属于主体级汇总边,只存 `from_object_key`、`to_object_key`,不存冗余 `from_key`、`to_key`;图谱展示时由后端临时拼出 `idno_node/{object_key}`,不提供逐笔流水下钻。
|
||||
- 查询按全局 `cret_no`、姓名或节点 `object_key`,不按 `project_id` 过滤。
|
||||
|
||||
## 7. 性能和索引口径
|
||||
|
||||
一期资金图谱默认只查一个中心主体的一层资金边,并设置 `minTotalAmount = 1000`、`limit = 20`,不会默认拉全量毛刺边。
|
||||
|
||||
生产索引重点:
|
||||
|
||||
- `lx_fund_flow_subject_node`:`PRIMARY KEY(object_key)`、`idx_lx_fund_flow_subject_idnocfno(idnocfno)`、`idx_lx_fund_flow_subject_name(name)`。
|
||||
- `lx_fund_flow_own_account_edge`:`idx_lx_fund_flow_own_from_key(from_key)`、`idx_lx_fund_flow_own_to_key(to_key)`。
|
||||
- `lx_fund_flow_detail_edge`:`idx_lx_fund_flow_detail_from_date(from_key, trx_date)`、`idx_lx_fund_flow_detail_to_date(to_key, trx_date)`、`idx_lx_fund_flow_detail_from_to(from_key, to_key)`。
|
||||
- `lx_fund_flow_manual_edge`:`idx_lx_fund_flow_manual_from(from_object_key)`、`idx_lx_fund_flow_manual_to(to_object_key)`、`idx_lx_fund_flow_manual_pair_direction(from_object_key, to_object_key, direction)`。
|
||||
|
||||
如果后续单个主体关联流水达到几十万级,再考虑增加主体级冗余字段或月度汇总表;一期不建 `sum_edge`。
|
||||
@@ -0,0 +1,75 @@
|
||||
# 专项排查图谱实施记录
|
||||
|
||||
## 实施范围
|
||||
|
||||
- 当前口径保留资金流图谱和关系图谱两个页签。
|
||||
- 页面嵌入项目详情“专项排查”页签。
|
||||
- 后端不再实时聚合 `ccdi_bank_statement`。
|
||||
- 资金流图谱后端读取四张基础图谱表,并叠加手工资金流向表:
|
||||
- `lx_fund_flow_subject_node`
|
||||
- `lx_fund_flow_account_node`
|
||||
- `lx_fund_flow_own_account_edge`
|
||||
- `lx_fund_flow_detail_edge`
|
||||
- `lx_fund_flow_manual_edge`
|
||||
- 关系图谱后端读取四张关系图谱表:
|
||||
- `lx_rel_node`
|
||||
- `lx_rel_family_edge`
|
||||
- `lx_rel_stock_edge`
|
||||
- `lx_rel_represent_edge`
|
||||
- 默认查询全部流水;用户选择日期时按 `lx_fund_flow_detail_edge.trx_date` 过滤。
|
||||
- 点击资金边可分页查看逐笔流水。
|
||||
- 点击可穿透节点可按 `object_key` 设为中心重新查询。
|
||||
|
||||
## 关键改动
|
||||
|
||||
- 后端 `CcdiFundGraphMapper.xml` 改为四表查询和实时聚合。
|
||||
- 后端 `CcdiFundGraphServiceImpl` 支持 `objectKey` 查询、节点穿透和边明细查询。
|
||||
- 后端新增 `/ccdi/project/fund-graph/search` 主体搜索接口。
|
||||
- 前端新增 `ruoyi-ui/src/api/ccdi/graph/fundGraph.js`。
|
||||
- 前端新增 `ruoyi-ui/src/api/ccdi/graph/relationGraph.js`。
|
||||
- 前端新增 `FundGraphSection.vue`,提供紧凑型图谱卡片和边明细抽屉。
|
||||
- `SpecialCheck.vue` 中原“图谱外链展示”占位卡替换为图谱组件。
|
||||
- `ProjectAnalysisDialog.vue` 中“资金流向”和“关系图谱”页签替换为简版图谱展示。
|
||||
|
||||
## 测试数据
|
||||
|
||||
测试数据脚本:
|
||||
|
||||
```text
|
||||
sql/ccdi/graph/02_lx_fund_graph_seed_test_data.sql
|
||||
```
|
||||
|
||||
dev 库测试数据:
|
||||
|
||||
```text
|
||||
资金流图谱测试身份证号:617673198109148314
|
||||
关系图谱测试身份证号:330101198001010011
|
||||
主体点:10
|
||||
账户点:14
|
||||
持有边:14
|
||||
明细边:72
|
||||
```
|
||||
|
||||
覆盖场景:
|
||||
|
||||
- 默认全部流水聚合。
|
||||
- 日期范围筛选聚合。
|
||||
- 支出 `flag = 1`。
|
||||
- 收入 `flag = 2`。
|
||||
- 家庭关系标签:配偶、父亲、母亲。
|
||||
- 普通对手方:支付宝、淘宝、美团、财付通、小店、银行转账。
|
||||
- 家庭关系节点按 `object_key` 设为中心查询。
|
||||
|
||||
## 验证
|
||||
|
||||
- `mvn -pl ccdi-project -am compile -DskipTests` 通过。
|
||||
- `npm run build:prod` 通过。
|
||||
- dev 库 SQL 校验通过:身份证号可定位主体,默认全部流水和日期筛选均能聚合出资金边。
|
||||
|
||||
## 注意
|
||||
|
||||
- 生产库 DDL 不随应用发布自动执行。
|
||||
- 生产需人工执行 `sql/ccdi/graph/01_lx_fund_graph_mysql_ddl.sql` 后再发布后端。
|
||||
- 生产如已建资金流图谱旧表,优先执行 `sql/ccdi/graph/06_lx_fund_graph_existing_table_supplement.sql` 补字段和补索引。
|
||||
- `lx_fund_flow_sum_edge` 不作为当前纪检资金图谱页面依赖。
|
||||
- 如果目标库未建四张 `lx_*` 表,后端接口会报表不存在。
|
||||
@@ -0,0 +1,26 @@
|
||||
# 图谱评审问题修复实施记录
|
||||
|
||||
## 本次修改
|
||||
|
||||
- 修复资金流图谱手工新增边在参数缺失时直接抛出服务端异常的问题,改为返回明确业务错误信息。
|
||||
- 修复资金流图谱“展开一层”可追溯判断固定按 `to` 侧判断的问题,改为按当前中心节点的对端主体判断是否可继续扩展。
|
||||
- 调整资金流图谱边列表组装逻辑,将真实边与手工边合并后统一排序,再按同一 `limit` 截断,避免结果条数放大和排序口径不一致。
|
||||
- 删除未使用的重复前端 API 文件,收敛资金流图谱接口引用入口。
|
||||
|
||||
## 影响范围
|
||||
|
||||
- 后端资金流图谱接口:
|
||||
- `POST /ccdi/project/fund-graph/manual-edge`
|
||||
- `GET /ccdi/project/fund-graph/graph`
|
||||
- 前端资金流图谱 API 组织方式:
|
||||
- 保留 `ruoyi-ui/src/api/ccdi/graph/fundGraph.js`
|
||||
- 删除未使用的 `ruoyi-ui/src/api/ccdi/fundGraph.js`
|
||||
|
||||
## 验证计划
|
||||
|
||||
- 后端执行 `mvn -pl ccdi-project -am -DskipTests compile`
|
||||
- 前端进入 `ruoyi-ui` 后先执行 `nvm use`,再执行 `npm run build:prod`
|
||||
- 真实页面验收重点:
|
||||
- 手工新增资金流向缺少必填项时返回明确错误提示
|
||||
- 资金边“展开一层”按钮在流入/流出两类边下判断更符合对端主体实际可扩展性
|
||||
- 同一查询条件下真实边与手工边整体排序和数量上限一致
|
||||
@@ -0,0 +1,18 @@
|
||||
# 资金流图谱流水查询报错修复实施记录
|
||||
|
||||
## 本次修改
|
||||
|
||||
- 修复资金流图谱构建节点列表时,对边两端主体二次回查未设置 `limit` 的问题。
|
||||
- 该问题会使 MyBatis 生成 `LIMIT null`,MySQL 报 `near 'null'`,进而导致资金流图谱查询或点击资金边后的流水明细下钻显示失败。
|
||||
- 保留 Mapper 层默认 `LIMIT 20`,同时在服务层补齐默认上限,避免其他调用路径再次传入空分页上限。
|
||||
|
||||
## 影响范围
|
||||
|
||||
- 后端接口:`GET /ccdi/project/fund-graph/graph`
|
||||
- 关联前端表现:资金流图谱加载和资金边流水明细查询
|
||||
|
||||
## 验证
|
||||
|
||||
- 执行后端编译,确认图谱模块通过编译。
|
||||
- 重新打包并按项目脚本重启后端,使运行中的 jar 包含本次修复。
|
||||
- 使用真实接口查询资金流图谱和资金边流水明细,确认不再出现 `LIMIT null` SQL 错误。
|
||||
@@ -0,0 +1,36 @@
|
||||
# 图谱改动梳理与验收文档实施记录
|
||||
|
||||
## 本次修改
|
||||
|
||||
- 新增图谱功能改动梳理与验收清单:`docs/tests/plans/2026-05-29-graph-acceptance-checklist.md`。
|
||||
- 新增本轮图谱验收执行记录:`docs/tests/records/2026-05-29-graph-acceptance-record.md`。
|
||||
- 新增资金流图谱已建表环境补充 SQL:`sql/ccdi/graph/06_lx_fund_graph_existing_table_supplement.sql`。
|
||||
- 明确已建表场景下的 SQL 口径:保留 `CREATE TABLE IF NOT EXISTS` 作为新环境参考,已建表只做字段、索引、字符集、排序规则核对和补充。
|
||||
- 明确当前图谱口径:保留资金流图谱和关系图谱两个页签。
|
||||
- 明确资金流图谱验收样例:当前可用身份证号为 `617673198109148314`。
|
||||
|
||||
## 影响范围
|
||||
|
||||
- 不修改业务代码或运行配置。
|
||||
- 新增的 SQL 只用于已建表环境补字段、补索引和补建手工边表,不会删除或清空已有图谱数据。
|
||||
- 文档覆盖资金流图谱、关系图谱、专项排查页面、项目分析弹窗和数据库补充口径。
|
||||
|
||||
## 验证情况
|
||||
|
||||
- 后端编译:`mvn -pl ccdi-project -am compile -DskipTests` 通过。
|
||||
- 前端构建:`npm run build:prod` 通过;`nvm` 在当前 PowerShell 环境不可用,实际 Node 为 `v22.22.0`。
|
||||
- 接口验收:
|
||||
- 资金图谱查询返回 10 个节点、18 条边、72 笔。
|
||||
- 资金边明细分页返回正常。
|
||||
- 关系图谱查询返回 3 个节点、2 条边。
|
||||
- 疑似同名企业查询返回 1 条候选。
|
||||
- 页面验收:
|
||||
- 已打开真实 `http://localhost/` 页面并进入项目 `90342` 专项排查页。
|
||||
- 资金图谱查询展示 `18 条资金边`、`72 笔`、`302,844.78 元`。
|
||||
- 图谱相关网络请求均返回 `200`。
|
||||
- 浏览器控制台未发现 `error`。
|
||||
|
||||
## 后续事项
|
||||
|
||||
- 若生产已建资金流旧表,执行 `06_lx_fund_graph_existing_table_supplement.sql` 前需先人工核对目标库和表结构差异。
|
||||
- 当前 PowerShell 环境 `nvm` 不可用,前端构建实际使用 Node `v22.22.0`。
|
||||
@@ -0,0 +1,145 @@
|
||||
# 图谱预备提交改动与功能清单
|
||||
|
||||
## 1. 提交范围建议
|
||||
|
||||
本清单按“图谱功能”口径整理预备提交内容。提交前建议只纳入下列图谱相关文件,避免混入其他业务、环境配置或本地产物。
|
||||
|
||||
### 1.1 后端图谱代码
|
||||
|
||||
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/CcdiFundGraphController.java`
|
||||
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/CcdiRelationGraphController.java`
|
||||
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/dto/CcdiFundGraph*.java`
|
||||
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/dto/CcdiRelationGraph*.java`
|
||||
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiFundGraph*.java`
|
||||
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiRelationGraph*.java`
|
||||
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiFundGraphMapper.java`
|
||||
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/mapper/CcdiRelationGraphMapper.java`
|
||||
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/ICcdiFundGraphService.java`
|
||||
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/ICcdiRelationGraphService.java`
|
||||
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiFundGraphServiceImpl.java`
|
||||
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiRelationGraphServiceImpl.java`
|
||||
- `ccdi-project/src/main/resources/mapper/ccdi/project/CcdiFundGraphMapper.xml`
|
||||
- `ccdi-project/src/main/resources/mapper/ccdi/project/CcdiRelationGraphMapper.xml`
|
||||
|
||||
### 1.2 前端图谱代码
|
||||
|
||||
- `ruoyi-ui/src/api/ccdi/graph/fundGraph.js`
|
||||
- `ruoyi-ui/src/api/ccdi/graph/relationGraph.js`
|
||||
- `ruoyi-ui/src/views/ccdiProject/components/detail/graph/FundGraphSection.vue`
|
||||
- `ruoyi-ui/src/views/ccdiProject/components/detail/ProjectAnalysisFundFlowTab.vue`
|
||||
- `ruoyi-ui/src/views/ccdiProject/components/detail/SpecialCheck.vue`
|
||||
- `ruoyi-ui/src/views/ccdiProject/components/detail/ProjectAnalysisDialog.vue`
|
||||
|
||||
### 1.3 数据库脚本
|
||||
|
||||
- `sql/ccdi/graph/01_lx_fund_graph_mysql_ddl.sql`
|
||||
- `sql/ccdi/graph/02_lx_fund_graph_seed_test_data.sql`
|
||||
- `sql/ccdi/graph/03_lx_relation_graph_mysql_ddl.sql`
|
||||
- `sql/ccdi/graph/04_lx_relation_graph_build_mysql.sql`
|
||||
- `sql/ccdi/graph/05_lx_relation_graph_seed_test_data.sql`
|
||||
- `sql/ccdi/graph/06_lx_fund_graph_existing_table_supplement.sql`
|
||||
|
||||
说明:
|
||||
|
||||
- `01`、`03` 是新环境建表参考。
|
||||
- `06` 是资金流图谱已建表环境补字段、补索引脚本,不删除、不重建、不清空基座数据。
|
||||
- 生产数据库变更由人工确认后手动执行,不随应用发布自动执行。
|
||||
|
||||
### 1.4 文档与验收记录
|
||||
|
||||
- `docs/plans/backend/2026-05-28-fund-graph-backend-implementation.md`
|
||||
- `docs/plans/frontend/2026-05-28-fund-graph-frontend-implementation.md`
|
||||
- `docs/plans/fullstack/2026-05-28-graph-development-decisions.md`
|
||||
- `docs/plans/fullstack/2026-05-28-graph-production-db-change-list.md`
|
||||
- `docs/reports/implementation/2026-05-28-fund-graph-special-check-implementation.md`
|
||||
- `docs/reports/implementation/2026-05-29-fund-graph-review-fixes-implementation.md`
|
||||
- `docs/reports/implementation/2026-05-29-fund-graph-statement-query-fix.md`
|
||||
- `docs/reports/implementation/2026-05-29-graph-acceptance-doc-and-verification.md`
|
||||
- `docs/reports/implementation/2026-05-29-graph-precommit-summary.md`
|
||||
- `docs/tests/plans/2026-05-29-graph-acceptance-checklist.md`
|
||||
- `docs/tests/records/2026-05-29-graph-acceptance-record.md`
|
||||
|
||||
### 1.5 提交前需要谨慎确认的文件
|
||||
|
||||
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiModelParamServiceImpl.java`
|
||||
- `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewServiceImpl.java`
|
||||
|
||||
这两个文件只增加 `@Lazy` 解决服务循环依赖,属于图谱运行联动修复,可纳入图谱提交。
|
||||
|
||||
以下文件当前工作区存在改动,但是否属于图谱提交需单独确认:
|
||||
|
||||
- `ruoyi-admin/src/main/resources/application-dev.yml`
|
||||
- `tongweb_62318.properties`
|
||||
- `ruoyi-ui/src/views/ccdiProject/components/detail/FamilyAssetLiabilityDetail.vue`
|
||||
- `ruoyi-ui/src/views/ccdiProject/components/detail/FamilyAssetLiabilitySection.vue`
|
||||
- `ruoyi-ui/src/views/ccdiProject/components/detail/RiskModelSection.vue`
|
||||
- `ruoyi-ui/src/views/ccdiProject/components/detail/RiskPeopleSection.vue`
|
||||
|
||||
以下内容不建议纳入提交:
|
||||
|
||||
- `output/` 下的浏览器截图和验收临时产物。
|
||||
- `docs/prototypes/` 下的视觉探索图片,除非本次明确要提交设计参考图。
|
||||
- `ruoyi-admin/src/main/resources/!cLEZGP.docx`。
|
||||
- `.DS_Store`。
|
||||
|
||||
## 2. 功能清单
|
||||
|
||||
### 2.1 资金流图谱
|
||||
|
||||
- 主体搜索:按身份证号、姓名或 `object_key` 定位资金流主体。
|
||||
- 一跳图谱:以当前主体为中心查询一层资金往来。
|
||||
- 实时聚合:基于 `lx_fund_flow_detail_edge` 按当前筛选条件聚合金额、笔数、首末交易时间。
|
||||
- 日期筛选:按 `trx_date` 做交易日期范围过滤。
|
||||
- 金额筛选:支持最小汇总金额和金额范围过滤。
|
||||
- 方向筛选:支持支出 `1`、收入 `2`。
|
||||
- 家庭关系标签:资金边可展示已写入 `lx_fund_flow_detail_edge.family_relation_type` 的配偶、父母、子女等标签;后端不实时按家庭表匹配。
|
||||
- 边明细下钻:点击真实资金边分页查看逐笔流水。
|
||||
- 节点详情:点击节点查看主体字段、证件号、账户数、累计金额和笔数。
|
||||
- 节点穿透:可穿透节点支持“设为中心查询”和“一层展开”。
|
||||
- 手工资金流向:支持人工录入主体级资金流向边。
|
||||
- 手工边展示:手工边参与图谱展示和统一排序,但不提供逐笔流水下钻。
|
||||
- 排序与上限:真实边和手工边合并后统一按金额、笔数、最近交易时间排序并按 `limit` 截断。
|
||||
- 缺参提示:手工新增缺少起点或终点时返回明确业务提示。
|
||||
|
||||
### 2.2 关系图谱
|
||||
|
||||
- 主体搜索:按身份证号、姓名、统一社会信用代码或 `object_key` 查主体。
|
||||
- 一跳关系图谱:以主体为中心展示家庭、股东、法人关系。
|
||||
- 家庭关系边:展示员工与家庭成员关系。
|
||||
- 股东持股边:展示自然人股东、企业股东与企业之间的持股关系。
|
||||
- 法定代表人边:展示法人和企业之间的代表关系。
|
||||
- 节点详情:展示主体名称、证件号或统一社会信用代码、主体类型、来源类型。
|
||||
- 边详情:按关系来源展示关系类型、企业名称、持股比例、出资额、家庭关系字段等。
|
||||
- 疑似同名企业:按人员姓名召回工商法人和自然人股东候选。
|
||||
- 同名过多阻断:同名候选过多时提示缩小线索范围。
|
||||
- 年龄过滤:能解析出生日期时过滤企业成立时未满 18 岁的候选。
|
||||
|
||||
### 2.3 页面集成
|
||||
|
||||
- 专项排查页:原图谱占位卡替换为真实图谱工作台。
|
||||
- 专项排查资金图谱:展示搜索区、图谱画布、右侧节点/边详情、边明细分页。
|
||||
- 专项排查关系图谱:展示关系搜索、图谱画布、右侧节点/边详情、疑似企业面板。
|
||||
- 项目分析弹窗资金流向:展示简版资金图谱,不展示逐笔流水表。
|
||||
- 项目分析弹窗关系图谱:展示简版关系图谱,切换页签时触发图谱 resize。
|
||||
- 图谱画布:使用 ECharts 渲染节点、边、方向、标签和关系区分样式。
|
||||
|
||||
### 2.4 数据库与部署
|
||||
|
||||
- 资金流图谱新环境表结构脚本。
|
||||
- 资金流图谱测试数据脚本。
|
||||
- 资金流图谱已建表补充脚本。
|
||||
- 关系图谱新环境表结构脚本。
|
||||
- 关系图谱构建脚本。
|
||||
- 关系图谱测试数据脚本。
|
||||
- 统一 `utf8mb4`、`utf8mb4_general_ci` 口径。
|
||||
- 图谱 DDL 不自动随应用发布执行。
|
||||
|
||||
## 3. 最新内容检查
|
||||
|
||||
截至 2026-05-29,本预备提交清单已按当前代码和验收结果更新:
|
||||
|
||||
- 当前范围是“资金流图谱 + 关系图谱”。
|
||||
- 当前资金流图谱验收样例为 `617673198109148314`。
|
||||
- 当前关系图谱验收样例为 `330101198001010011`。
|
||||
- `docs/tests/` 下本轮图谱验收清单和记录已纳入本次提交清单。
|
||||
- `output/` 仍保持忽略,浏览器截图不纳入提交。
|
||||
127
docs/tests/plans/2026-05-29-graph-acceptance-checklist.md
Normal file
127
docs/tests/plans/2026-05-29-graph-acceptance-checklist.md
Normal file
@@ -0,0 +1,127 @@
|
||||
# 图谱功能改动梳理与验收清单
|
||||
|
||||
## 1. 验收目标
|
||||
|
||||
本清单用于继续验收当前图谱相关改动,覆盖资金流图谱和关系图谱两部分,重点确认:
|
||||
|
||||
- 已改动内容分别承担什么功能。
|
||||
- 后端接口是否返回正常,是否出现 `500`、鉴权异常或 SQL 报错。
|
||||
- 专项排查和项目分析弹窗中的真实页面是否能打开和查询。
|
||||
- 已建图谱表不重复建表,仅核对必要字段、索引和补充脚本。
|
||||
|
||||
## 2. 改动梳理
|
||||
|
||||
### 2.1 资金流图谱
|
||||
|
||||
| 类型 | 文件/入口 | 功能 |
|
||||
| --- | --- | --- |
|
||||
| 后端 Controller | `ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/CcdiFundGraphController.java` | 提供主体搜索、一层资金图谱查询、边流水明细分页、手工资金流向保存接口。 |
|
||||
| 后端 Service | `CcdiFundGraphServiceImpl.java` | 参数归一化、中心主体定位、真实边和手工边合并排序、节点组装、手工边保存、默认 `limit` 防空。 |
|
||||
| 后端 Mapper | `CcdiFundGraphMapper.java`、`CcdiFundGraphMapper.xml` | 读取 `lx_fund_flow_*` 表,按账户明细实时聚合主体资金边,查询逐笔流水,写入手工边。 |
|
||||
| DTO/VO | `CcdiFundGraph*DTO.java`、`CcdiFundGraph*VO.java` | 定义查询条件、手工边保存参数、图谱节点、资金边、流水明细返回结构。 |
|
||||
| 前端 API | `ruoyi-ui/src/api/ccdi/graph/fundGraph.js` | 封装 `/ccdi/project/fund-graph/*` 接口。 |
|
||||
| 前端组件 | `FundGraphSection.vue` | 资金图谱主工作台:搜索、日期范围、最小金额、ECharts 图谱、节点/边详情、边流水分页、手工新增资金流向。 |
|
||||
| 专项排查入口 | `SpecialCheck.vue` | 将原图谱占位卡替换为真实图谱组件。 |
|
||||
| 项目分析弹窗 | `ProjectAnalysisDialog.vue`、`ProjectAnalysisFundFlowTab.vue` | 在“资金流向”页签内展示简版资金图谱,弹窗内不展示逐笔流水表。 |
|
||||
| SQL | `sql/ccdi/graph/01_lx_fund_graph_mysql_ddl.sql`、`02_lx_fund_graph_seed_test_data.sql`、`06_lx_fund_graph_existing_table_supplement.sql` | 记录资金图谱必要表结构、开发联调测试数据,以及已建表环境补字段/补索引脚本。 |
|
||||
|
||||
### 2.2 关系图谱
|
||||
|
||||
| 类型 | 文件/入口 | 功能 |
|
||||
| --- | --- | --- |
|
||||
| 后端 Controller | `CcdiRelationGraphController.java` | 提供主体搜索、一层关系图谱查询、疑似同名企业查询接口。 |
|
||||
| 后端 Service | `CcdiRelationGraphServiceImpl.java` | 关系图谱主体定位、家庭/股东/法人边合并展示、疑似企业按姓名召回与年龄规则过滤。 |
|
||||
| 后端 Mapper | `CcdiRelationGraphMapper.java`、`CcdiRelationGraphMapper.xml` | 读取 `lx_rel_node`、`lx_rel_family_edge`、`lx_rel_stock_edge`、`lx_rel_represent_edge`。 |
|
||||
| DTO/VO | `CcdiRelationGraph*DTO.java`、`CcdiRelationGraph*VO.java` | 定义关系图谱查询、节点、边、疑似企业候选返回结构。 |
|
||||
| 前端 API | `ruoyi-ui/src/api/ccdi/graph/relationGraph.js` | 封装 `/ccdi/project/relation-graph/*` 接口。 |
|
||||
| 前端组件 | `FundGraphSection.vue` | 同一组件内提供“关系图谱”页签、节点/边详情和疑似同名企业面板。 |
|
||||
| 项目分析弹窗 | `ProjectAnalysisDialog.vue` | “关系图谱”页签由占位页改为真实关系图谱简版展示。 |
|
||||
| SQL | `03_lx_relation_graph_mysql_ddl.sql`、`04_lx_relation_graph_build_mysql.sql`、`05_lx_relation_graph_seed_test_data.sql` | 关系图谱建表、构建和测试数据脚本。DDL 已包含旧表补字段/补索引逻辑。 |
|
||||
|
||||
### 2.3 关联修复
|
||||
|
||||
| 文件 | 功能 |
|
||||
| --- | --- |
|
||||
| `CcdiModelParamServiceImpl.java` | 对 `ICcdiBankTagService` 增加 `@Lazy`,缓解服务循环依赖启动问题。 |
|
||||
| `CcdiProjectOverviewServiceImpl.java` | 对 `ICcdiModelParamService` 增加 `@Lazy`,缓解服务循环依赖启动问题。 |
|
||||
| `application-dev.yml`、`tongweb_62318.properties` | 本地/部署运行配置存在改动,不纳入本次图谱验收清单。 |
|
||||
|
||||
## 3. 建表与补充脚本验收口径
|
||||
|
||||
当前表已建好,本轮不重复执行建表脚本。验收时按以下口径处理:
|
||||
|
||||
- `CREATE TABLE IF NOT EXISTS` 可保留在仓库内,作为新环境初始化和评审依据。
|
||||
- 已存在表只做字段、索引、字符集、排序规则核对。
|
||||
- 如已建资金流图谱表缺字段或缺索引,优先使用 `sql/ccdi/graph/06_lx_fund_graph_existing_table_supplement.sql` 补充,不要先删表再重建。
|
||||
- 如已建关系图谱表缺字段或缺索引,优先使用 `sql/ccdi/graph/03_lx_relation_graph_mysql_ddl.sql` 中的补充逻辑。
|
||||
- 所有图谱表、字符字段和新增索引保持 `utf8mb4`、`utf8mb4_general_ci` 口径。
|
||||
- 执行包含中文内容的 SQL 文件时使用 `bin/mysql_utf8_exec.sh <sql-file>`。
|
||||
- 生产环境 DDL 和补充 SQL 由人工确认后手动执行,不随应用发布自动执行。
|
||||
|
||||
资金流图谱需核对:
|
||||
|
||||
- `lx_fund_flow_subject_node`
|
||||
- `lx_fund_flow_account_node`
|
||||
- `lx_fund_flow_own_account_edge`
|
||||
- `lx_fund_flow_detail_edge`
|
||||
- `lx_fund_flow_manual_edge`
|
||||
|
||||
关系图谱需核对:
|
||||
|
||||
- `lx_rel_node`
|
||||
- `lx_rel_family_edge`
|
||||
- `lx_rel_stock_edge`
|
||||
- `lx_rel_represent_edge`
|
||||
|
||||
## 4. 验收清单
|
||||
|
||||
### 4.1 静态与构建
|
||||
|
||||
- [ ] 后端 `mvn -pl ccdi-project -am compile -DskipTests` 通过。
|
||||
- [ ] 前端执行前确认 Node 版本;如 `nvm` 不可用,记录实际 Node 版本。
|
||||
- [ ] 前端 `npm run build:prod` 通过,无新增编译错误。
|
||||
- [ ] 检查暂存区,确认验收文档、业务代码、SQL、构建产物边界清晰。
|
||||
|
||||
### 4.2 资金流图谱接口
|
||||
|
||||
- [ ] 未登录访问图谱接口返回认证失败,不泄露数据。
|
||||
- [ ] 管理员登录后,`/ccdi/project/fund-graph/search` 可按身份证号查到主体。
|
||||
- [ ] `/ccdi/project/fund-graph/graph` 默认查询返回节点、边、总金额、交易笔数。
|
||||
- [ ] 日期范围查询返回正常,不出现 SQL 字符集/排序规则错误。
|
||||
- [ ] `direction=1` 支出查询返回正常。
|
||||
- [ ] `direction=2` 收入查询返回正常。
|
||||
- [ ] 点击边对应的 `/edge-detail` 分页返回正常,不再出现 `LIMIT null`。
|
||||
- [ ] 手工新增资金流向缺少起点时返回明确业务错误,不抛服务端异常栈。
|
||||
- [ ] 手工边与真实边合并后统一排序和统一 `limit`。
|
||||
|
||||
### 4.3 关系图谱接口
|
||||
|
||||
- [ ] `/ccdi/project/relation-graph/search` 可按身份证号或姓名查到主体。
|
||||
- [ ] `/ccdi/project/relation-graph/graph` 返回家庭、股东、法人关系边。
|
||||
- [ ] `/ccdi/project/relation-graph/suspected-enterprises` 可按姓名召回疑似企业。
|
||||
- [ ] 同名候选过多时返回阻断提示,不直接大批量展示。
|
||||
- [ ] 出生日期或身份证可用时,成立时未满 18 岁候选被过滤。
|
||||
|
||||
### 4.4 专项排查页面
|
||||
|
||||
- [ ] 登录后进入真实项目详情页,不打开原型页。
|
||||
- [ ] 切换到“专项排查”,图谱分析区域出现。
|
||||
- [ ] 资金流图谱默认空态文案正确。
|
||||
- [ ] 输入身份证号后点击查询,资金边统计展示正确。
|
||||
- [ ] 图谱画布非空白,页面无明显遮挡、错位。
|
||||
- [ ] 点击资金边后右侧展示金额、笔数、关系标签和逐笔流水。
|
||||
- [ ] 切换到关系图谱页签,搜索后页面无白屏、无控制台错误。
|
||||
- [ ] 浏览器控制台无 `error`,图谱相关网络请求均为 `200`。
|
||||
|
||||
### 4.5 项目分析弹窗
|
||||
|
||||
- [ ] 在结果总览人员行点击“查看详情”打开项目分析弹窗。
|
||||
- [ ] “资金流向”页签展示简版图谱,无搜索栏,画布能渲染。
|
||||
- [ ] “关系图谱”页签展示简版关系图谱,切换页签后图谱重新 resize。
|
||||
- [ ] 弹窗版不展示逐笔流水表,仅展示汇总信息。
|
||||
- [ ] 弹窗控制台无图谱 resize、ECharts 初始化、接口调用异常。
|
||||
|
||||
### 4.6 待重点复核项
|
||||
|
||||
- [ ] `nvm` 在当前 PowerShell 环境不可用;前端构建已记录实际 Node 版本。
|
||||
- [ ] 已建表环境执行补充前,先人工确认目标库、表结构差异和备份策略。
|
||||
101
docs/tests/records/2026-05-29-graph-acceptance-record.md
Normal file
101
docs/tests/records/2026-05-29-graph-acceptance-record.md
Normal file
@@ -0,0 +1,101 @@
|
||||
# 2026-05-29 图谱功能验收执行记录
|
||||
|
||||
## 1. 执行信息
|
||||
|
||||
- 执行时间:2026-05-29 17:36 ~ 17:43(Asia/Shanghai)
|
||||
- 验收环境:本机真实服务
|
||||
- 前端地址:`http://localhost/`
|
||||
- 后端地址:`http://localhost:62318`
|
||||
- 验收清单:`docs/tests/plans/2026-05-29-graph-acceptance-checklist.md`
|
||||
- 测试项目:`projectId=90342`,项目名 `test拉取行内流水`
|
||||
- 管理员账号:`admin`
|
||||
|
||||
## 2. 构建与静态验证
|
||||
|
||||
| 项目 | 命令 | 结果 |
|
||||
| --- | --- | --- |
|
||||
| 后端编译 | `mvn -pl ccdi-project -am compile -DskipTests` | 通过 |
|
||||
| 前端 Node 确认 | `nvm use; node -v` | `nvm` 不可用,实际 Node 为 `v22.22.0` |
|
||||
| 前端构建 | `npm run build:prod` | 通过,有既有资源体积 warning |
|
||||
|
||||
说明:
|
||||
|
||||
- Maven 输出存在既有重复依赖声明 warning:`ccdi-info-collection` 中 `ccdi-lsfx` 依赖重复。
|
||||
- 前端构建只有资源体积 warning,无编译失败。
|
||||
|
||||
## 3. 接口验收
|
||||
|
||||
### 3.1 鉴权
|
||||
|
||||
- 未登录访问 `/ccdi/project/fund-graph/search`:返回 `401`,符合预期。
|
||||
- 未登录访问 `/ccdi/project/relation-graph/search`:返回 `401`,符合预期。
|
||||
- 使用 `/login` 登录成功,后续接口带 `Bearer token` 验收。
|
||||
|
||||
### 3.2 资金流图谱
|
||||
|
||||
测试身份证号:`617673198109148314`
|
||||
|
||||
| 接口/场景 | 结果 |
|
||||
| --- | --- |
|
||||
| `/ccdi/project/fund-graph/search?keyword=617673198109148314` | `code=200`,查到 1 个主体 |
|
||||
| `/ccdi/project/fund-graph/graph?keyword=617673198109148314&limit=20&minTotalAmount=0` | `code=200`,10 个节点、18 条边、72 笔、总金额 `302844.78` |
|
||||
| 日期范围查询 | `code=200`,18 条边、72 笔 |
|
||||
| `direction=1` 支出查询 | `code=200`,9 条边、45 笔 |
|
||||
| `direction=2` 收入查询 | `code=200`,9 条边、27 笔 |
|
||||
| 第一条资金边明细分页 | `code=200`,返回 5 条,总数 5 |
|
||||
| 手工新增资金流向缺少起点 | 返回 `code=500`,业务提示:`起点主体不能为空` |
|
||||
|
||||
结论:
|
||||
|
||||
- 资金图谱核心查询、方向筛选、边明细分页可用。
|
||||
- 手工新增缺少必填项时已返回明确提示,未出现服务端异常栈。
|
||||
|
||||
### 3.3 关系图谱
|
||||
|
||||
测试身份证号:`330101198001010011`
|
||||
|
||||
| 接口/场景 | 结果 |
|
||||
| --- | --- |
|
||||
| `/ccdi/project/relation-graph/search?keyword=330101198001010011` | `code=200`,查到 1 个主体 |
|
||||
| `/ccdi/project/relation-graph/graph?keyword=330101198001010011&limit=80` | `code=200`,3 个节点、2 条边 |
|
||||
| `/ccdi/project/relation-graph/suspected-enterprises` | `code=200`,返回 1 条疑似企业,`blocked=false` |
|
||||
|
||||
结论:
|
||||
|
||||
- 关系图谱接口可用,疑似企业查询可用。
|
||||
|
||||
## 4. 页面验收
|
||||
|
||||
使用 Playwright CLI 打开真实页面 `http://localhost/` 执行:
|
||||
|
||||
1. 登录系统。
|
||||
2. 进入初核项目管理。
|
||||
3. 打开项目 `90342` 的详情页。
|
||||
4. 切换到“专项排查”。
|
||||
5. 在“资金流图谱”输入 `617673198109148314` 并查询。
|
||||
6. 切换“关系图谱”,输入 `330101198001010011` 并查询。
|
||||
7. 检查控制台和网络请求。
|
||||
|
||||
结果:
|
||||
|
||||
- 专项排查页面可正常加载图谱分析区域。
|
||||
- 资金流图谱查询后页面展示 `18 条资金边`、`72 笔`、`302,844.78 元`。
|
||||
- 关系图谱查询接口返回 `200`,页面无白屏。
|
||||
- 图谱相关网络请求:
|
||||
- `/dev-api/ccdi/project/fund-graph/graph?keyword=617673198109148314&minTotalAmount=1000&limit=20` 返回 `200`
|
||||
- `/dev-api/ccdi/project/relation-graph/graph?keyword=330101198001010011&limit=80` 返回 `200`
|
||||
- 浏览器控制台 `error` 数量为 0。
|
||||
- 截图证据:`output/playwright/graph-acceptance-special-check.png`
|
||||
|
||||
## 5. 注意事项
|
||||
|
||||
| 编号 | 级别 | 事项 | 影响 | 建议 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| GRAPH-002 | P2 | 当前 PowerShell 环境 `nvm` 不可用 | 不满足“前端命令前先 nvm use”的执行规范 | 修复 nvm 安装或 PATH;本轮实际使用 Node `v22.22.0` |
|
||||
| GRAPH-004 | P2 | 资金流 DDL 原先只有新建表口径,已建旧表需要差异补充 | 生产若已建旧表但缺字段,单靠 `CREATE TABLE IF NOT EXISTS` 不会补齐 | 已补充 `sql/ccdi/graph/06_lx_fund_graph_existing_table_supplement.sql`,执行前需人工核对 |
|
||||
|
||||
## 6. 阶段性结论
|
||||
|
||||
本轮未发现图谱接口 `500`、页面白屏或浏览器控制台 error。资金流图谱和关系图谱在当前本机真实服务上均可查询。
|
||||
|
||||
当前图谱主链路验收通过。剩余事项为环境类或发布前核对类事项:`GRAPH-002` 需要修复本机 `nvm` 环境,`GRAPH-004` 需要在生产执行补充 SQL 前人工核对目标库和表结构差异。
|
||||
Reference in New Issue
Block a user