diff --git a/sql/viw_kg_form.sql b/sql/viw_kg_form.sql new file mode 100644 index 0000000..6b053f2 --- /dev/null +++ b/sql/viw_kg_form.sql @@ -0,0 +1,75 @@ +-- ============================================================ +-- 视图:viw_kg_form —— ERP 知识图谱·表单节点 (form nodes, 1748 行) +-- 在 viw_ai_useful_forms(节点目录) 之上富化每个表单节点: +-- 业务域 sDomain (L1 路由) · 数据源/执行类型 · 上下游单据数(来自 viw_kg_edge_flow) · AI工具挂载 +-- +-- 业务域 sDomain 推导(best-effort,L1 路由用,价值最低的一层): +-- 最可靠信号是数据源表名。命名高度规范:剥掉 viw_/sp_ 包装前缀后, +-- 前缀词即业务域 (sal=销售 pur=采购 mft/man=生产 quo=报价 qly=品质 ops=发外 +-- mit/inv/pit/sgd/sto=库存 cah/pay/rec/bil/cos=财务 ele/sis=基础资料 ept=设备)。 +-- 命中 61 张 AI 工具表单时,另有 bAiTool/sAiScene 作权威场景标注。 +-- 剩余无法归类者 = '其他'。原始信号(sDataSource/sModelType)一并暴露供下游细化。 +-- +-- 上下游计数(来自 viw_kg_edge_flow,按菜单粒度聚合,排除自环补单): +-- iDownstream = 本单据可「生成」的不同目标单据数 +-- iUpstream = 有多少不同上游单据可「生成」本单据 +-- bHasFlow = 是否参与任何单据流转 +-- +-- 节点粒度 = 表单 sFormId (1748 唯一);同一菜单下多表单共享菜单级的上下游计数。 +-- ============================================================ +CREATE OR REPLACE VIEW viw_kg_form AS +SELECT + u.sModuleId, -- 菜单窗体id (= 接口 sModelsId) + u.sFormId, -- 表单id (= 接口路径 id, 节点主键) + u.sModuleName, -- 菜单/窗体名 + u.sFormTitle, -- 表单标题 + /* --- 业务域 L1(表名规范前缀 → 域)--- */ + CASE LEFT(LOWER(REGEXP_REPLACE(IFNULL(u.sDataSource,''),'^(viw_|viw|v_|sp_|sp|proc_|proc|udf_|fun_|calc_)','')), 3) + WHEN 'sal' THEN '销售' + WHEN 'pur' THEN '采购' + WHEN 'quo' THEN '报价' + WHEN 'qly' THEN '品质' + WHEN 'ops' THEN '发外' + WHEN 'mft' THEN '生产' + WHEN 'man' THEN '生产' + WHEN 'mes' THEN '生产' + WHEN 'wor' THEN '生产' + WHEN 'mit' THEN '库存' + WHEN 'inv' THEN '库存' + WHEN 'pit' THEN '库存' + WHEN 'sgd' THEN '库存' + WHEN 'sto' THEN '库存' + WHEN 'cah' THEN '财务' + WHEN 'pay' THEN '财务' + WHEN 'rec' THEN '财务' + WHEN 'bil' THEN '财务' + WHEN 'cos' THEN '财务' + WHEN 'cas' THEN '财务' + WHEN 'ele' THEN '基础资料' + WHEN 'sis' THEN '基础资料' + WHEN 'con' THEN '基础资料' + WHEN 'ept' THEN '设备' + ELSE '其他' + END AS sDomain, -- 业务域(L1 路由, best-effort) + u.sModelType, -- 原始前端路由(信号, 可空) + u.sDataSource, -- 数据源(表/视图/过程) + u.sExecType, -- 执行类型 table/view/proc + u.bIsGrid, -- 1=列表型 + u.bVisibleMenu, -- 1=主菜单可见 + IFNULL(d.n_down, 0) AS iDownstream, -- 可生成的下游单据数 + IFNULL(up.n_up, 0) AS iUpstream, -- 上游来源单据数 + CAST(IFNULL(d.n_down,0) + IFNULL(up.n_up,0) > 0 AS UNSIGNED) AS bHasFlow, -- 参与流转 + CAST(t.sSrcFormId IS NOT NULL AS UNSIGNED) AS bAiTool, -- 已挂载 AI 工具 + t.sceneName AS sAiScene -- AI 场景(权威, 仅工具表单) +FROM viw_ai_useful_forms u +LEFT JOIN ( + SELECT sSrcModuleId AS mid, COUNT(DISTINCT sTgtModuleId) AS n_down + FROM viw_kg_edge_flow WHERE bSelfLoop = 0 GROUP BY sSrcModuleId +) d ON d.mid = u.sModuleId +LEFT JOIN ( + SELECT sTgtModuleId AS mid, COUNT(DISTINCT sSrcModuleId) AS n_up + FROM viw_kg_edge_flow WHERE bSelfLoop = 0 GROUP BY sTgtModuleId +) up ON up.mid = u.sModuleId +LEFT JOIN ( + SELECT sSrcFormId, MIN(sceneName) AS sceneName FROM ai_tool GROUP BY sSrcFormId +) t ON t.sSrcFormId = u.sModuleId;