-- ============================================================
-- 视图：viw_kg_domain —— ERP 知识图谱·业务域 (L1, 路由层, 塞 system prompt 用)
-- 约 11 行，每行一个业务域：规模 + 锚点单据 + 域级流转邻接 + 对应 AI 智能体场景。
-- 这是 L1 的"全局地图"：把 L2 单据流转上卷到 域→域，信息密度最高、最适合常驻提示词。
--
-- 域名对齐 ai_agent 的 8 个业务智能体 (销售/采购/生产/报价/品质/发外/库存/财务)；
--   基础资料/设备/其他 无专属智能体 → 归 ERP代理人(通用)。
-- sDownstreamDomains/sUpstreamDomains = 本域可生成到 / 来源于 的其它域(来自 viw_kg_edge_flow 上卷)。
-- sAnchorForms = 本域内流转枢纽单据 Top6(按 上下游度数 排序)。
-- ============================================================
CREATE OR REPLACE VIEW viw_kg_domain AS
WITH mod_dom AS (
    SELECT sModuleId AS mid, MIN(sDomain) AS dom
    FROM viw_kg_form GROUP BY sModuleId
),
dom_flow AS (
    SELECT sd.dom AS src_dom, td.dom AS tgt_dom
    FROM viw_kg_edge_flow e
    JOIN mod_dom sd ON sd.mid = e.sSrcModuleId
    JOIN mod_dom td ON td.mid = e.sTgtModuleId
    WHERE e.bSelfLoop = 0
)
SELECT
    f.sDomain,                                                     -- 业务域(L1)
    CASE f.sDomain
        WHEN '销售' THEN '销售智能体' WHEN '采购' THEN '采购智能体'
        WHEN '生产' THEN '生产智能体' WHEN '报价' THEN '报价智能体'
        WHEN '品质' THEN '品质智能体' WHEN '发外' THEN '发外智能体'
        WHEN '库存' THEN '库存智能体' WHEN '财务' THEN '财务智能体'
        ELSE 'ERP代理人'
    END                                                            AS sAiScene,         -- 对应智能体场景
    COUNT(*)                                                       AS iForms,           -- 域内表单数
    SUM(f.bHasFlow)                                                AS iFlowForms,       -- 参与流转的表单数
    SUM(f.bAiTool)                                                 AS iAiTools,         -- 已挂 AI 工具数
    SUBSTRING_INDEX(
        GROUP_CONCAT(CASE WHEN f.bHasFlow = 1 THEN f.sFormTitle END
                     ORDER BY (f.iDownstream + f.iUpstream) DESC SEPARATOR '、'),
        '、', 6)                                                   AS sAnchorForms,     -- 枢纽单据Top6
    (SELECT GROUP_CONCAT(DISTINCT df.tgt_dom ORDER BY df.tgt_dom SEPARATOR '，')
       FROM dom_flow df WHERE df.src_dom = f.sDomain AND df.tgt_dom <> f.sDomain)
                                                                   AS sDownstreamDomains, -- 下游域
    (SELECT GROUP_CONCAT(DISTINCT df.src_dom ORDER BY df.src_dom SEPARATOR '，')
       FROM dom_flow df WHERE df.tgt_dom = f.sDomain AND df.src_dom <> f.sDomain)
                                                                   AS sUpstreamDomains    -- 上游域
FROM viw_kg_form f
GROUP BY f.sDomain
ORDER BY iForms DESC;
