ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

华为MetaERP “可直接交给开发/规则引擎同学”的 R1~R7 伪代码。先说明:SPARQL 本身不擅长“主动触发”,更适合做差异检测查询;真正落地通常用 SPARQL + 规则引擎

华为MetaERP “可直接交给开发/规则引擎同学”的 R1~R7 伪代码。先说明:SPARQL 本身不擅长“主动触发”,更适合做差异检测查询;真正落地通常用 SPARQL + 规则引擎 “可直接交给开发/规则引擎同学”的 R1~R7 伪代码。先说明SPARQL 本身不擅长“主动触发”更适合做差异检测查询真正落地通常用SPARQL 规则引擎Drools/自研或图事件流。下面我按“可运行思路 工程化写法”给你。一、本体前缀统一约定PREFIX asset: http://metaerp.huawei.com/ontology/asset# PREFIX diff: http://metaerp.huawei.com/ontology/diff# PREFIX txn: http://metaerp.huawei.com/ontology/transaction# PREFIX cc: http://metaerp.huawei.com/ontology/costcenter# PREFIX org: http://metaerp.huawei.com/ontology/org#二、R1状态错配 → L2建议减值报废预审SPARQL 检测找出命中资产SELECT ?asset ?diff ?netValue WHERE { ?diff a diff:AssetDiff ; diff:diffType diff:STATUS_MISMATCH ; diff:refersTo ?asset . ?asset asset:status asset:CAPITALIZED ; asset:observedState ?obs . FILTER (?obs IN (asset:PENDING_RETIRE, asset:IDLE)) ?asset asset:hasBook ?book . ?book asset:netValue ?netValue . }规则引擎伪代码Drools 风格rule R1-状态错配预警 when $d: AssetDiff( diffType STATUS_MISMATCH, asset.status CAPITALIZED, asset.observedState in [PENDING_RETIRE, IDLE] ) then $d.setSeverity(L2); $d.setSlaHours(48); $d.addAction(发起减值评估); $d.addAction(发起报废预审); alertService.push($d, $d.getCustodian(), $d.getCostCenterManager()); end三、R2子件缺失 → L2查维修工单SELECT ?asset ?diff ?component WHERE { ?diff a diff:AssetDiff ; diff:diffType diff:COMPONENT_MISSING ; diff:refersTo ?asset . ?asset asset:hasComponent ?component . }rule R2-子件缺失预警 when $d: AssetDiff(diffType COMPONENT_MISSING) $a: Asset(refersTo $d.asset) exists(Asset.hasComponent) then $d.setSeverity(L2); $d.setSlaHours(48); if (!workOrderService.hasRecentRepair($a)) { $d.addAction(子件盘亏核销); } else { $d.addAction(关联维修工单暂不核销); } end四、R3有账无物超时未扫→ L3SELECT ?asset ?line WHERE { ?task a diff:StocktakeTask ; diff:contains ?line . ?line diff:refersTo ?asset ; diff:hasScan ?scan . FILTER NOT EXISTS { ?line diff:hasScan ?anyScan } BIND(now() - ?task.createTime AS ?elapsed) FILTER (?elapsed P3D^^xsd:duration) }rule R3-有账无物超时 when $line: StocktakeLine(scan null, createdBefore(3 days ago)) then AssetDiff d new AssetDiff(L3, $line.asset); d.setSlaHours(24); d.addAction(现场复核); d.addAction(责任追溯); end五、R4有物无账盘盈候选SELECT ?scan WHERE { ?scan a diff:PhysicalScan . FILTER NOT EXISTS { ?asset asset:assetCode ?scan.code } }rule R4-有物无账盘盈 when $scan: PhysicalScan(asset null) then AssetDiff d new AssetDiff(L2, $scan); d.addAction(盘盈候选建卡); d.addAction(Addition预审); end六、R5位置漂移跨车间SELECT ?asset ?recorded ?physical WHERE { ?asset asset:recordedAt ?recorded ; asset:physicallyAt ?physical . ?recorded cc:plant ?p1 . ?physical cc:plant ?p2 . FILTER (?p1 ! ?p2) }rule R5-跨车间位置漂移 when $a: Asset(recordedPlant ! physicalPlant) then AssetDiff d new AssetDiff(L1, $a); d.addAction(补调拨单); end七、R6超时未ACK → 升级rule R6-超时升级 when $d: AssetDiff( status OPEN, createdTime before now() - slaHours ) then $d.escalateTo($d.getNextLevelManager()); alertService.resend($d); end八、R7净值敏感 → 强制升级rule R7-净值敏感升级 when $d: AssetDiff( severity L2, asset.netValue 500000 ) then $d.setSeverity(L3); $d.setSlaHours(24); end九、工程落地建议给架构/开发SPARQL 负责“找事实”​差异检测查询关系边遍历位置/净值/状态规则引擎负责“做决策”​Drools / EasyRules / 自研规则表支持热更新财务规则常变事件驱动闭环PhysicalScan事件 → SPARQL检测差异 → 规则引擎打标 → 消息总线推送 → 审批流回写AssetTransactionSLA 用调度任务扫AssetDiff[OPEN]​不建议纯SPARQL定时跑性能差十、一句话给开发SPARQL 用来“找谁有问题”规则引擎用来“决定怎么告警”事件总线用来“推给谁”。
返回列表