From 39d53cf7a2080b49224dec6c395fc4ed2463a424 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期三, 18 十二月 2024 18:23:20 +0800
Subject: [PATCH] 修改参数的获取逻辑
---
models/gather_model.go | 63 +++++++---
cron/cron.go | 10 +
db/task.go | 54 +++++---
db/db.go | 104 +++++++++++++++++
db/model_rule.go | 86 ++++++++++++++
5 files changed, 275 insertions(+), 42 deletions(-)
diff --git a/cron/cron.go b/cron/cron.go
index b77c86e..551c6f2 100644
--- a/cron/cron.go
+++ b/cron/cron.go
@@ -1,12 +1,14 @@
package cron
import (
+ "time"
+
"github.com/go-co-op/gocron"
+
"model-engine/models"
"model-engine/pkg/logger"
"model-engine/pkg/safe"
"model-engine/service"
- "time"
)
var s *gocron.Scheduler
@@ -20,15 +22,17 @@
if err != nil {
panic(err)
}
+
for _, task := range tasks {
model, err := models.GetModel(task.ModelID)
if err != nil {
logger.Errorf("can not find model for id:%v", task.ModelID)
continue
}
- task := task
+
+ t := task
safe.Go(func() {
- if err := model.Init(task); err != nil {
+ if err := model.Init(t); err != nil {
return
}
if err := model.Run(); err != nil {
diff --git a/db/db.go b/db/db.go
index 54de63e..057191e 100644
--- a/db/db.go
+++ b/db/db.go
@@ -1,8 +1,11 @@
package db
import (
+ "time"
+
"github.com/elastic/go-elasticsearch/v6"
"gorm.io/gorm"
+
"model-engine/config"
"model-engine/db/es"
"model-engine/pkg/logger"
@@ -17,6 +20,9 @@
if err := es.InitClient([]string{"http://" + config.EsInfo.Ip + ":" + config.EsInfo.Port}); err != nil {
return err
}
+
+ InitDefaultData()
+
return nil
}
@@ -50,3 +56,101 @@
return nil
}
+
+// InitDefaultData 鍒濆鍖栨暟鎹�
+func InitDefaultData() error {
+ var models = []Model{
+ {
+ BaseModel: BaseModel{
+ ID: ModelIdGather,
+ CreatedAt: time.Time{},
+ UpdatedAt: time.Time{},
+ },
+ Name: "鐤戜技鑱氶泦",
+ Description: "閫氱敤鑱氶泦妯″瀷",
+ Version: "v1.0.0",
+ Enabled: false,
+ },
+ }
+
+ for i := range models {
+ GetDB().Save(&models[i])
+ }
+
+ var rules = []ModelRule{
+ {
+ Id: "bfbdba7f-ee39-41fb-b188-b4c114a51eaa",
+ ModelId: ModelIdGather,
+ Scope: "",
+ RuleArg: RuleArg{
+ Alias: "gatherPersons",
+ Name: "鑱氶泦浜烘暟",
+ Type: "input",
+ Must: true,
+ Unit: "浜�",
+ Range: "1,100",
+ Value: "2",
+ ValType: "int",
+ Operator: ">=",
+ Sort: 0,
+ },
+ },
+ {
+ Id: "941bef84-ff7f-4460-b5dc-2ac6060304a4",
+ ModelId: ModelIdGather,
+ Scope: "",
+ RuleArg: RuleArg{
+ Alias: "appearInterval",
+ Name: "鍑虹幇闂撮殧",
+ Type: "input",
+ Must: true,
+ Unit: "绉�",
+ Range: "1,7200",
+ Value: "60",
+ ValType: "int",
+ Operator: ">=",
+ Sort: 1,
+ },
+ },
+ {
+ Id: "a9b50bae-2c40-40a1-9ebc-ac34850db964",
+ ModelId: ModelIdGather,
+ Scope: "",
+ RuleArg: RuleArg{
+ Alias: "threshold",
+ Name: "鍑虹幇娆℃暟",
+ Type: "input",
+ Must: true,
+ Unit: "娆�",
+ Range: "1,60",
+ Value: "1",
+ ValType: "int",
+ Operator: ">=",
+ Sort: 2,
+ },
+ },
+ {
+ Id: "aed7f95e-1ce6-4fa2-b1b3-aaf59ed86c50",
+ ModelId: ModelIdGather,
+ Scope: "",
+ RuleArg: RuleArg{
+ Alias: "daysWindow",
+ Name: "鐩戞帶鏃堕棿",
+ Type: "input",
+ Must: true,
+ Unit: "澶╁唴",
+ Range: "1,7",
+ Value: "1",
+ ValType: "int",
+ Operator: "==",
+ Sort: 2,
+ },
+ },
+ }
+
+ for i := range rules {
+ GetDB().Save(&rules[i])
+ }
+
+ return nil
+}
diff --git a/db/model_rule.go b/db/model_rule.go
new file mode 100644
index 0000000..a6aab41
--- /dev/null
+++ b/db/model_rule.go
@@ -0,0 +1,86 @@
+package db
+
+import (
+ "fmt"
+
+ "gorm.io/gorm"
+)
+
+type (
+ ModelRule struct {
+ Id string `gorm:"primary_key;column:id" json:"id"`
+ ModelId string `gorm:"column:model_id" json:"modelId"`
+ Scope string `gorm:"column:scope" json:"scope"`
+ RuleArg
+ }
+
+ RuleArg struct {
+ Alias string `gorm:"column:alias" json:"alias"` // 鍙傛暟鐨勫埆鍚�
+ Name string `gorm:"column:name" json:"name"` // 鍙傛暟鍚嶇О
+ Type string `gorm:"column:type" json:"type"` // 鍙傛暟绫诲瀷: input, option, range, image
+ Must bool `gorm:"column:must" json:"must"` // 鏄惁蹇呭~
+ Unit string `gorm:"column:unit" json:"unit"` // 鍗曚綅
+ Range string `gorm:"column:range" json:"range"` // 鍊肩殑鑼冨洿锛宔g锛�0,100琛ㄧず浠�0鍒�100
+ Value string `gorm:"column:value" json:"value"` // 鍙傛暟鍊�
+ ValType string `gorm:"column:val_type" json:"valType"` // 鍙傛暟鍊肩被鍨� int, string, bool
+ Operator string `gorm:"column:operator" json:"operator"` // 杩愮畻绗�
+ Sort int `gorm:"column:sort;default:0" json:"sort"` // 鍙傛暟椤哄簭
+ }
+
+ ModelRuleSet struct {
+ Alias string `json:"alias"` // 鍙傛暟鐨勫埆鍚�
+ Type string `json:"type"` // 鍙傛暟绫诲瀷: input, option, range, image
+ Name string `json:"name"` // 鍙傛暟鍚嶇О
+ Value interface{} `json:"value"` // 鍙傛暟鍊�
+ ValType string `json:"valType"` // 鍊肩被鍨�
+ Operator string `json:"operator"` // 杩愮畻绗�
+ }
+
+ ModelRuleSearch struct {
+ ModelRule
+ Orm *gorm.DB
+ }
+)
+
+func (e *ModelRule) TableName() string {
+ return "model_rule"
+}
+
+func NewModelRuleSearch() *ModelRuleSearch {
+ return &ModelRuleSearch{
+ Orm: GetDB(),
+ }
+}
+
+func (slf *ModelRuleSearch) SetOrm(tx *gorm.DB) *ModelRuleSearch {
+ slf.Orm = tx
+ return slf
+}
+
+func (slf *ModelRuleSearch) SetModelID(id string) *ModelRuleSearch {
+ slf.ModelId = id
+ return slf
+}
+
+func (slf *ModelRuleSearch) build() *gorm.DB {
+ var db = slf.Orm.Table(slf.TableName())
+
+ if slf.ModelId != "" {
+ db = db.Where("model_id = ?", slf.ModelId)
+ }
+
+ return db
+}
+
+func (slf *ModelRuleSearch) Find() ([]*ModelRule, error) {
+ var (
+ records = make([]*ModelRule, 0)
+ db = slf.build()
+ )
+
+ if err := db.Find(&records).Error; err != nil {
+ return records, fmt.Errorf("find records err: %v", err)
+ }
+
+ return records, nil
+}
diff --git a/db/task.go b/db/task.go
index e7c6dc3..cc22131 100644
--- a/db/task.go
+++ b/db/task.go
@@ -1,48 +1,55 @@
package db
import (
+ "encoding/json"
"fmt"
- "gorm.io/gorm"
"strings"
"time"
+
+ "gorm.io/gorm"
)
type (
ModelTask struct {
BaseModel
- Name string `gorm:"type:varchar(255)" json:"name"` //浠诲姟鍚嶇О
- ModelID string `gorm:"type:varchar(255)" json:"modelID"` //妯″瀷ID
- BeginTime time.Time //宸ヤ綔鏃堕棿寮�濮�
- EndTime time.Time //鍏鏃堕棿缁撴潫
- DomainUnitIds []string `gorm:"-" json:"domainUnitIds"` //鍖哄煙id鍒楄〃
- DomainIds string `gorm:"type:varchar(1000)" json:"-"`
- Building string `gorm:"type:varchar(255)" json:"building"` //妤兼爧
- Floor string `gorm:"type:varchar(255)" json:"floor"` //妤煎眰
- AlarmType AlarmType `gorm:"type:varchar(255);" json:"alarmType"` //棰勮鏂瑰紡
- PersonType string `gorm:"type:varchar(255);" json:"personType"` //浜哄憳绫诲瀷
- GatherPersons int `gorm:"type:int;" json:"gatherPersons"` //鑱氶泦浜烘暟
- AppearInterval int `gorm:"type:int;" json:"appearInterval"` //鍑虹幇闂撮殧锛屽崟浣嶄负绉�
- DaysWindow int `gorm:"type:int;" json:"daysWindow" ` //杩戝嚑澶╁唴
- Threshold int `gorm:"type:int;" json:"threshold" ` //杈惧嚑娆�
- Enabled bool `json:"enabled"` //鏄惁寮�鍚�
+ Name string `gorm:"type:varchar(255)" json:"name"` // 浠诲姟鍚嶇О
+ ModelID string `gorm:"type:varchar(255)" json:"modelID"` // 妯″瀷ID
+ BeginTime time.Time `json:"beginTime"` // 宸ヤ綔鏃堕棿寮�濮�
+ EndTime time.Time `json:"endTime"` // 宸ヤ綔鏃堕棿缁撴潫
+ DomainUnitIds []string `gorm:"-" json:"domainUnitIds"` // 鍖哄煙id鍒楄〃
+ DomainIds string `gorm:"type:varchar(1000)" json:"-"`
+ Building string `gorm:"type:varchar(255)" json:"building"` // 妤兼爧
+ Floor string `gorm:"type:varchar(255)" json:"floor"` // 妤煎眰
+ AlarmType AlarmType `gorm:"type:varchar(255);" json:"alarmType"` // 棰勮鏂瑰紡
+ PersonType string `gorm:"type:varchar(255);" json:"personType"` // 浜哄憳绫诲瀷
+ PersonLabel string `gorm:"type:varchar(255);" json:"personLabel"` // 浜哄憳鏍囩
+ IdentityType string `gorm:"type:varchar(255);" json:"identityType"` // 韬唤鏍囩, 闄岀敓浜�, 璁垮, 浣忔埛
+ AlarmLevel string `gorm:"type:varchar(255);" json:"alarmLevel"` // 棰勮绾у埆
+ GatherPersons int `gorm:"type:int;" json:"gatherPersons"` // 鑱氶泦浜烘暟
+ AppearInterval int `gorm:"type:int;" json:"appearInterval"` // 鍑虹幇闂撮殧锛屽崟浣嶄负绉�
+ DaysWindow int `gorm:"type:int;" json:"daysWindow" ` // 杩戝嚑澶╁唴
+ Threshold int `gorm:"type:int;" json:"threshold" ` // 杈惧嚑娆�
+ Enabled bool `json:"enabled"` // 鏄惁寮�鍚�
+ RuleSet string `gorm:"type:text" json:"-"` // 瀛樺偍妯″瀷浠诲姟璁剧疆鐨勮鍒欏弬鏁�
+ Rules []ModelRuleSet `gorm:"-" json:"rules"` // 瑙勫垯閰嶇疆
}
ModelTaskSearch struct {
ModelTask
Orm *gorm.DB
+ ModelIDs []string
+ Unexpired bool
PageNum int
PageSize int
Keyword string
- ModelIDs []string
- Unexpired bool
}
)
type AlarmType string
const (
- AlarmTypeSave AlarmType = "save" //浠呬繚瀛�
- AlarmTypeSendMessage AlarmType = "message" //鍙戞秷鎭�
+ AlarmTypeSave AlarmType = "save" // 浠呬繚瀛�
+ AlarmTypeSendMessage AlarmType = "message" // 鍙戞秷鎭�
)
func (slf *ModelTask) TableName() string {
@@ -78,6 +85,13 @@
if slf.DomainIds != "" {
slf.DomainUnitIds = strings.Split(slf.DomainIds, ",")
}
+ if slf.DomainIds != "" {
+ slf.DomainUnitIds = strings.Split(slf.DomainIds, ",")
+ }
+
+ if slf.RuleSet != "" {
+ _ = json.Unmarshal([]byte(slf.RuleSet), &slf.Rules)
+ }
return nil
}
diff --git a/models/gather_model.go b/models/gather_model.go
index c384db2..b22f24c 100644
--- a/models/gather_model.go
+++ b/models/gather_model.go
@@ -6,28 +6,30 @@
"encoding/json"
"errors"
"fmt"
- "github.com/elastic/go-elasticsearch/v6"
"log"
+ "strings"
+ "sync"
+ "time"
+
+ "github.com/elastic/go-elasticsearch/v6"
+
"model-engine/config"
"model-engine/db"
"model-engine/pkg/set"
"model-engine/service"
- "strings"
- "sync"
- "time"
)
type GatherModel struct {
OrgIds []interface{} `json:"-"`
AreaIds []interface{} `json:"-"`
- Building string `gorm:"type:varchar(255)" json:"building"` //妤兼爧
- Floor string `gorm:"type:varchar(255)" json:"floor"` //妤煎眰
- AlarmType db.AlarmType `gorm:"type:varchar(255);" json:"alarmType"` //棰勮鏂瑰紡
- PersonType string `gorm:"type:varchar(255);" json:"personType"` //浜哄憳绫诲瀷
- GatherPersons int `gorm:"type:int;" json:"gatherPersons"` //鑱氶泦浜烘暟
- AppearInterval int `gorm:"type:int;" json:"appearInterval"` //鍑虹幇闂撮殧锛屽崟浣嶄负绉�
- DaysWindow int `gorm:"type:int;" json:"daysWindow" ` //杩戝嚑澶╁唴
- Threshold int `gorm:"type:int;" json:"threshold" ` //杈惧嚑娆�
+ Building string `gorm:"type:varchar(255)" json:"building"` // 妤兼爧
+ Floor string `gorm:"type:varchar(255)" json:"floor"` // 妤煎眰
+ AlarmType db.AlarmType `gorm:"type:varchar(255);" json:"alarmType"` // 棰勮鏂瑰紡
+ PersonType string `gorm:"type:varchar(255);" json:"personType"` // 浜哄憳绫诲瀷
+ GatherPersons int `gorm:"type:int;" json:"gatherPersons"` // 鑱氶泦浜烘暟
+ AppearInterval int `gorm:"type:int;" json:"appearInterval"` // 锛屽崟浣嶄负绉�
+ DaysWindow int `gorm:"type:int;" json:"daysWindow" ` // 杩戝嚑澶╁唴
+ Threshold int `gorm:"type:int;" json:"threshold" ` // 杈惧嚑娆�
Task *db.ModelTask
}
@@ -52,11 +54,34 @@
m.Floor = task.Floor
m.AlarmType = task.AlarmType
m.PersonType = task.PersonType
- m.GatherPersons = task.GatherPersons
- m.AppearInterval = task.AppearInterval
- m.DaysWindow = task.DaysWindow
- m.Threshold = task.Threshold
- fmt.Println("GatherModel init finish ...")
+
+ for _, v := range task.Rules {
+ if v.Alias == "gatherPersons" {
+ if val, ok := v.Value.(float64); ok {
+ m.GatherPersons = int(val)
+ }
+ }
+
+ if v.Alias == "appearInterval" {
+ if val, ok := v.Value.(float64); ok {
+ m.AppearInterval = int(val)
+ }
+ }
+
+ if v.Alias == "daysWindow" {
+ if val, ok := v.Value.(float64); ok {
+ m.DaysWindow = int(val)
+ }
+ }
+
+ if v.Alias == "threshold" {
+ if val, ok := v.Value.(float64); ok {
+ m.Threshold = int(val)
+ }
+ }
+ }
+
+ fmt.Printf("GatherModel init finish ... rule:%+v\n", m)
return nil
}
@@ -68,8 +93,8 @@
OrgId string `json:"orgId"`
Building string `json:"building"`
Floor string `json:"floor"`
- GatherPersons int `gorm:"type:int;" json:"gatherPersons"` //鑱氶泦浜烘暟
- AppearInterval int `gorm:"type:int;" json:"appearInterval"` //鍑虹幇闂撮殧锛屽崟浣嶄负绉�
+ GatherPersons int `gorm:"type:int;" json:"gatherPersons"` // 鑱氶泦浜烘暟
+ AppearInterval int `gorm:"type:int;" json:"appearInterval"` // 鍑虹幇闂撮殧锛屽崟浣嶄负绉�
}
var (
--
Gitblit v1.8.0