Commit a3391c968441d4eda9bca0db735564f779c0de2c

Authored by zichun
1 parent befe9392

Add viw_kg_form: enriched KG form nodes (1748)

One row per useful form enriched with business domain (L1, derived from
normalized data-source prefix + AI-scene override), data source/exec type,
and upstream/downstream flow counts from viw_kg_edge_flow. 857 forms
participate in document flow; 63 back an AI tool; 92% domain-classified.
Showing 1 changed file with 75 additions and 0 deletions
sql/viw_kg_form.sql 0 → 100644
  1 +-- ============================================================
  2 +-- 视图:viw_kg_form —— ERP 知识图谱·表单节点 (form nodes, 1748 行)
  3 +-- 在 viw_ai_useful_forms(节点目录) 之上富化每个表单节点:
  4 +-- 业务域 sDomain (L1 路由) · 数据源/执行类型 · 上下游单据数(来自 viw_kg_edge_flow) · AI工具挂载
  5 +--
  6 +-- 业务域 sDomain 推导(best-effort,L1 路由用,价值最低的一层):
  7 +-- 最可靠信号是数据源表名。命名高度规范:剥掉 viw_/sp_ 包装前缀后,
  8 +-- 前缀词即业务域 (sal=销售 pur=采购 mft/man=生产 quo=报价 qly=品质 ops=发外
  9 +-- mit/inv/pit/sgd/sto=库存 cah/pay/rec/bil/cos=财务 ele/sis=基础资料 ept=设备)。
  10 +-- 命中 61 张 AI 工具表单时,另有 bAiTool/sAiScene 作权威场景标注。
  11 +-- 剩余无法归类者 = '其他'。原始信号(sDataSource/sModelType)一并暴露供下游细化。
  12 +--
  13 +-- 上下游计数(来自 viw_kg_edge_flow,按菜单粒度聚合,排除自环补单):
  14 +-- iDownstream = 本单据可「生成」的不同目标单据数
  15 +-- iUpstream = 有多少不同上游单据可「生成」本单据
  16 +-- bHasFlow = 是否参与任何单据流转
  17 +--
  18 +-- 节点粒度 = 表单 sFormId (1748 唯一);同一菜单下多表单共享菜单级的上下游计数。
  19 +-- ============================================================
  20 +CREATE OR REPLACE VIEW viw_kg_form AS
  21 +SELECT
  22 + u.sModuleId, -- 菜单窗体id (= 接口 sModelsId)
  23 + u.sFormId, -- 表单id (= 接口路径 id, 节点主键)
  24 + u.sModuleName, -- 菜单/窗体名
  25 + u.sFormTitle, -- 表单标题
  26 + /* --- 业务域 L1(表名规范前缀 → 域)--- */
  27 + CASE LEFT(LOWER(REGEXP_REPLACE(IFNULL(u.sDataSource,''),'^(viw_|viw|v_|sp_|sp|proc_|proc|udf_|fun_|calc_)','')), 3)
  28 + WHEN 'sal' THEN '销售'
  29 + WHEN 'pur' THEN '采购'
  30 + WHEN 'quo' THEN '报价'
  31 + WHEN 'qly' THEN '品质'
  32 + WHEN 'ops' THEN '发外'
  33 + WHEN 'mft' THEN '生产'
  34 + WHEN 'man' THEN '生产'
  35 + WHEN 'mes' THEN '生产'
  36 + WHEN 'wor' THEN '生产'
  37 + WHEN 'mit' THEN '库存'
  38 + WHEN 'inv' THEN '库存'
  39 + WHEN 'pit' THEN '库存'
  40 + WHEN 'sgd' THEN '库存'
  41 + WHEN 'sto' THEN '库存'
  42 + WHEN 'cah' THEN '财务'
  43 + WHEN 'pay' THEN '财务'
  44 + WHEN 'rec' THEN '财务'
  45 + WHEN 'bil' THEN '财务'
  46 + WHEN 'cos' THEN '财务'
  47 + WHEN 'cas' THEN '财务'
  48 + WHEN 'ele' THEN '基础资料'
  49 + WHEN 'sis' THEN '基础资料'
  50 + WHEN 'con' THEN '基础资料'
  51 + WHEN 'ept' THEN '设备'
  52 + ELSE '其他'
  53 + END AS sDomain, -- 业务域(L1 路由, best-effort)
  54 + u.sModelType, -- 原始前端路由(信号, 可空)
  55 + u.sDataSource, -- 数据源(表/视图/过程)
  56 + u.sExecType, -- 执行类型 table/view/proc
  57 + u.bIsGrid, -- 1=列表型
  58 + u.bVisibleMenu, -- 1=主菜单可见
  59 + IFNULL(d.n_down, 0) AS iDownstream, -- 可生成的下游单据数
  60 + IFNULL(up.n_up, 0) AS iUpstream, -- 上游来源单据数
  61 + CAST(IFNULL(d.n_down,0) + IFNULL(up.n_up,0) > 0 AS UNSIGNED) AS bHasFlow, -- 参与流转
  62 + CAST(t.sSrcFormId IS NOT NULL AS UNSIGNED) AS bAiTool, -- 已挂载 AI 工具
  63 + t.sceneName AS sAiScene -- AI 场景(权威, 仅工具表单)
  64 +FROM viw_ai_useful_forms u
  65 +LEFT JOIN (
  66 + SELECT sSrcModuleId AS mid, COUNT(DISTINCT sTgtModuleId) AS n_down
  67 + FROM viw_kg_edge_flow WHERE bSelfLoop = 0 GROUP BY sSrcModuleId
  68 +) d ON d.mid = u.sModuleId
  69 +LEFT JOIN (
  70 + SELECT sTgtModuleId AS mid, COUNT(DISTINCT sSrcModuleId) AS n_up
  71 + FROM viw_kg_edge_flow WHERE bSelfLoop = 0 GROUP BY sTgtModuleId
  72 +) up ON up.mid = u.sModuleId
  73 +LEFT JOIN (
  74 + SELECT sSrcFormId, MIN(sceneName) AS sceneName FROM ai_tool GROUP BY sSrcFormId
  75 +) t ON t.sSrcFormId = u.sModuleId;