Gengine规则引擎

时间:2025-02-23 07:48:07

package main

import (

   "fmt"

   "/bilibili/gengine/engine"

   "/bilibili/gengine/engine"

   "/bilibili/gengine/engine"

)

type Temperature struct {

   Tag string             //标签点名称

   Value float64           //数据值

   State int64                //状态

   Event string            //报警事件

}

type Water struct {

   Tag string             //标签点名称

   Value int64             //数据值

   State int64                //状态

   Event string            //报警事件

}

type Smoke struct {

   Tag string             //标签点名称

   Value int64             //数据值

   State int64                //状态

   Event string            //报警事件

}

const (

   eventRule = `

rule "TemperatureRule" "温度事件计算规则"

begin

   println("/***************** 温度事件计算规则 ***************/")

   tempState = 0

   if  < 0{

      tempState = 1

   }else if  > 80{

      tempState = 2

   }

   if  != tempState{

      if tempState == 0{

         "温度正常"

      }else if tempState == 1{

         "低温报警"

      }else{

         "高温报警"

      }

   }else{

      ""

   }

    = tempState

end

rule "WaterRule" "水浸事件计算规则"

begin

   println("/***************** 水浸事件计算规则 ***************/")

   tempState = 0

   if  != 0{

      tempState = 1

   }

   if  != tempState{

      if tempState == 0{

         "水浸正常"

      }else{

         "水浸异常"

      }

   }else{

      ""

   }

    = tempState

end

rule "SmokeRule" "烟雾事件计算规则"

begin

   println("/***************** 烟雾事件计算规则 ***************/")

   tempState = 0

   if  != 0{

      tempState = 1

   }

   if  != tempState{

      if tempState == 0{

         "烟雾正常"

      }else{

         "烟雾报警"

      }

   }else{

      ""

   }

    = tempState

end

`)

func main(){

   temperature := &Temperature{

      Tag: "temperature",

      Value:  90,

      State: 0,

      Event: "",

   }

   water := &Water{

      Tag: "water",

      Value:  0,

      State: 0,

      Event: "",

   }

   smoke := &Smoke{

      Tag: "smoke",

      Value:  1,

      State: 0,

      Event: "",

   }

   dataContext := ()

   ("Temperature", temperature)

   ("Water", water)

   ("Smoke", smoke)

   ("println",)

   ruleBuilder := (dataContext)

   err1 := (eventRule)

   if err1 != nil {

      panic(err1)

   }

   eng := ()

   (ruleBuilder)

   ("temperature Event=%s\n", )

   ("water Event=%s\n", )

   ("smoke Event=%s\n", )

   for i := 0; i < 10; i++ {

       = int64(i % 3)

      (ruleBuilder)

      ("smoke Event=%s\n", )

   }

}