viw_kg_form_card.sql
2.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
-- ============================================================
-- 视图:viw_kg_form_card —— ERP 知识图谱·表单卡片 (RAG 文档, 1748 行)
-- 每个表单一段结构化文本 sCard,用于灌入向量库做召回;另暴露结构化元数据列供过滤。
-- 汇聚三层图谱:节点(viw_kg_form) + 上下游单据名(viw_kg_edge_flow) + 字段中文名清单。
--
-- ⚠ 字段清单用 GROUP_CONCAT 拼接,单表单字段可达 269 个 / 2477 字,
-- 默认 group_concat_max_len=1024 会截断 —— 查询前必须
-- SET SESSION group_concat_max_len = 1000000; (见 export_form_cards.sql)
--
-- sCard 结构:表单名 / 业务域 / 数据源(执行类型) / 上游单据 / 下游单据 / 字段 / 标识(formId,moduleId)
-- 节点粒度 = 表单 sFormId (1748);上下游为菜单级。
-- ============================================================
CREATE OR REPLACE VIEW viw_kg_form_card AS
SELECT
fm.sFormId,
fm.sModuleId,
fm.sFormTitle,
fm.sModuleName,
fm.sDomain,
fm.sDataSource,
fm.sExecType,
fm.iUpstream,
fm.iDownstream,
fm.bAiTool,
fm.sAiScene,
up.names AS sUpstreamForms, -- 上游单据名(逗号)
dn.names AS sDownstreamForms, -- 下游单据名(逗号)
fl.field_names AS sFieldList, -- 字段中文名清单(顿号)
CONCAT_WS('\n',
CONCAT('【表单】', fm.sFormTitle),
CONCAT('业务域:', fm.sDomain),
CONCAT('数据源:', fm.sDataSource, '(', fm.sExecType, ')'),
CONCAT('上游单据:', IFNULL(up.names, '无')),
CONCAT('下游单据:', IFNULL(dn.names, '无')),
CONCAT('字段:', IFNULL(fl.field_names, '')),
CONCAT('标识:formId=', fm.sFormId, ' moduleId=', fm.sModuleId,
CASE WHEN fm.bAiTool = 1 THEN CONCAT(' AI场景=', IFNULL(fm.sAiScene,'')) ELSE '' END)
) AS sCard -- 可直接向量化的卡片文本
FROM viw_kg_form fm
LEFT JOIN (
SELECT sParentId,
GROUP_CONCAT(DISTINCT sChinese ORDER BY iOrder SEPARATOR '、') AS field_names
FROM gdsconfigformslave
WHERE IFNULL(sChinese,'') <> '' AND sControlName NOT LIKE 'Btn%'
GROUP BY sParentId
) fl ON fl.sParentId = fm.sFormId
LEFT JOIN (
SELECT sSrcModuleId AS mid,
GROUP_CONCAT(DISTINCT sTgtName ORDER BY sTgtName SEPARATOR ',') AS names
FROM viw_kg_edge_flow WHERE bSelfLoop = 0 GROUP BY sSrcModuleId
) dn ON dn.mid = fm.sModuleId
LEFT JOIN (
SELECT sTgtModuleId AS mid,
GROUP_CONCAT(DISTINCT sSrcName ORDER BY sSrcName SEPARATOR ',') AS names
FROM viw_kg_edge_flow WHERE bSelfLoop = 0 GROUP BY sTgtModuleId
) up ON up.mid = fm.sModuleId;