本文引用的文件
交易模块 trans 围绕调查场景中的资金流展开,覆盖资金流水、固定存款、现金、大额、频率、敏感、金融等子场景。其核心目标是:
该模块同时包含前端页面入口、API 类型定义、后端控制器与服务层、实体模型以及用于复杂分析的测试 SQL。
交易模块在前端以 ai-electron/frontend/src/trans 为根,主要包含:
后端以 ai-server 中 module.trans 为主,包含控制器、服务、Mapper、实体与查询对象;表结构定义集中在 sql/case_table_1.sql,复杂关系分析脚本集中在 sql/testSql。
graph TB
subgraph "前端"
FE_API["transApi.ts<br/>交易API客户端"]
FE_TYPES["types/query.ts<br/>types/dto.ts<br/>查询与响应类型"]
FE_MODAL["TransRecordModal.vue<br/>交易记录弹窗"]
FE_VIEWS["views/*<br/>资金流水/大额/频率/敏感/金融/固定存款等页面"]
end
subgraph "后端"
BE_CTRL["controller/*<br/>TransRecordController 等"]
BE_SVC["service/*<br/>TransRecordService 等"]
BE_ENT["common/model/trans/entity/*<br/>TransRecord/TransRecordAll 等"]
BE_MQ["mapper/*<br/>各类 Mapper"]
end
subgraph "数据"
DB_TRANS["trans_record<br/>trans_record_all"]
DB_KEYS["cash_key<br/>trans_financial_key<br/>fixed_deposit_key"]
DB_TEST["testSql/*.sql<br/>交易共同/全部交易关系/相互交易"]
end
FE_API --> BE_CTRL
FE_TYPES --> FE_API
FE_MODAL --> FE_API
FE_VIEWS --> FE_API
BE_CTRL --> BE_SVC
BE_SVC --> BE_MQ
BE_SVC --> DB_TRANS
BE_SVC --> DB_KEYS
DB_TEST --> DB_TRANS
图表来源
章节来源
TransRecord 映射 trans_record,表示标准交易记录;TransRecordAll 映射 trans_record_all,表示聚合或扩展交易记录;cash_key:现金关键字;trans_financial_key:金融理财关键字,带标签;fixed_deposit_key:固定存款关键字。TransRecordQuery 构造查询条件,后端由 TransRecordService.getTransRecord 返回分页结果;章节来源
交易模块采用前后端分离架构:
transApi.ts 暴露的统一方法;trans_record 或 trans_record_all 表进行查询;cash_key 对扩展字段做模糊匹配;复杂关系分析(共同交易、全部交易关系、相互交易)通过测试 SQL 直接操作临时表与清洗关系表。
sequenceDiagram
participant UI as "前端页面"
participant API as "transApi.ts"
participant CTRL as "TransRecordController"
participant SVC as "TransRecordService"
participant MAP as "Mapper"
participant DB as "trans_record / trans_record_all"
UI->>API: "getTransRecord(query)"
API->>CTRL: "POST /trans/getTransRecord"
CTRL->>SVC: "getTransRecord(query)"
SVC->>MAP: "page(..., wrapper)"
MAP->>DB: "执行分页查询"
DB-->>MAP: "返回分页数据"
MAP-->>SVC: "返回结果"
SVC-->>CTRL: "Page<TransRecord>"
CTRL-->>API: "Result.success(page)"
API-->>UI: "渲染表格与筛选"
图表来源
章节来源
TransRecordService.getTransRecord 是交易记录查询的核心逻辑:
trans_record 还是 trans_record_all;cash_key 并对 ext1 做多个 LIKE 条件组合;返回分页对象,并在走 trans_record_all 路径时使用 MapStruct 转换。
flowchart TD
Start(["进入 getTransRecord"]) --> Route["读取配置决定目标表"]
Route --> BuildWrapper["构建查询包装器"]
BuildWrapper --> BaseFilters["应用基础过滤条件"]
BaseFilters --> AmountSymbol{"金额比较符"}
AmountSymbol -->|小于等于| LE["LE 条件"]
AmountSymbol -->|大于等于| GE["GE 条件"]
AmountSymbol -->|大于| GT["GT 条件"]
AmountSymbol -->|小于| LT["LT 条件"]
AmountSymbol -->|等于| EQ["EQ 条件"]
LE --> SpecialOther["处理对方名称/卡号特殊值"]
GE --> SpecialOther
GT --> SpecialOther
LT --> SpecialOther
EQ --> SpecialOther
SpecialOther --> CashSource{"source 是否为现金"}
CashSource -->|是| LoadKeys["加载 cash_key 并拼接 LIKE 条件"]
CashSource -->|否| SortOrder["应用排序"]
LoadKeys --> SortOrder
SortOrder --> PageExec["执行分页查询"]
PageExec --> Return(["返回分页结果"])
图表来源
章节来源
cash_key:用于标记与现金相关的交易特征,结合 ext1 字段实现灵活文本匹配;trans_financial_key:包含关键字与标签,可用于金融类交易筛选与归类;fixed_deposit_key:用于固定存取类交易识别。这些关键字表不存储交易流水本身,而是作为业务规则表参与查询与分析。
章节来源
TransRecordModal.vue 提供可复用的交易记录查询弹窗,具备:
transApi.ts 的 getTransRecord 对接。章节来源
前端 transApi.ts 提供资金流向分页、关系图、追溯、首次资金快转等方法,配合 MoneyFlowGraphQuery、TransFundFlowQuery 等查询类型,实现:
SQL 测试脚本则展示了基于清洗关系表的复杂关系推导,例如:
相互交易:双向筛选同一对手方的交易对。
graph TB
A["clean_table_dx<br/>清洗对象"] --> B["temp_clean_dx<br/>临时清洗对象"]
C["clean_table_gx<br/>清洗关系"] --> D["temp_clean_gx<br/>临时清洗关系"]
E["temp_dx_main<br/>主对象集合"] --> F["temp_dx<br/>交易对象集"]
G["temp_yh<br/>交易对汇总"] --> H["temp_tel<br/>通话关系汇总"]
F --> G
D --> G
B --> F
C --> D
图表来源
章节来源
transApi.ts 依赖 axios 封装与全局设置;types/query.ts,响应类型集中在 types/dto.ts;后端依赖
关键字表独立维护,供 Service 在业务规则中使用。
classDiagram
class TransRecordController {
+getTransRecord(query) Result
}
class TransRecordService {
+getTransRecord(query) Page
}
class TransRecordMapper
class TransRecordAllMapper
class TransRecord
class TransRecordAll
class TransCashKey
class TransFinancialKey
class TransFixedDepositKey
TransRecordController --> TransRecordService : "调用"
TransRecordService --> TransRecordMapper : "可能使用"
TransRecordService --> TransRecordAllMapper : "可能使用"
TransRecordService --> TransCashKey : "读取关键字"
TransRecord --> TransRecordAll : "结构相似"
TransCashKey --> TransRecordService : "规则输入"
TransFinancialKey --> TransRecordService : "规则输入"
TransFixedDepositKey --> TransRecordService : "规则输入"
图表来源
章节来源
针对交易数据量大的情况,建议:
LIKE 会显著降低索引命中率;personCardNo、otherCardNo、transDateTime、transDate、debitCreditFlag;(personCardNo, transDate)、(otherCardNo, transAmount)。[本节为通用优化建议,不直接分析具体文件]
[本节为通用治理建议,不直接分析具体文件]
章节来源
TransRecordService.getTransRecord 根据条件构建查询包装器并分页;章节来源
TransBigQuery:总金额、交易次数、对方名称/卡号、金额比较符、次数比较符;statFirstTransBig、statSecondTransBig、statThirdTransBig;章节来源
章节来源
章节来源
TransFrequencyQuery:交易次数、对方名称/卡号、次数比较符;章节来源
cash_key 是否配置了关键字;ext1 字段是否包含预期文本;LIKE 匹配的性能影响。章节来源
交易模块 trans 以交易记录为核心,结合关键字规则与多维度查询条件,支撑资金流水、大额、频率、敏感、金融、固定存款等调查场景。其后端通过动态表路由与灵活的查询包装器实现可扩展的数据访问,前端通过统一 API 与类型定义提供一致的交互体验。复杂关系分析借助测试 SQL 与临时表完成,适合在大数据量下通过索引、分页、分层查询与脱敏策略保障性能与合规。未来可在审计日志、权限控制、规则版本管理等方面进一步增强,以提升系统可运维性与安全性。