package db import ( "github.com/elastic/go-elasticsearch/v6" "gorm.io/gorm" "model-engine/config" "model-engine/db/es" "model-engine/pkg/mysqlx" ) // Init 初始化mysql和es func Init() error { if err := mysqlx.Init(config.MysqlConf, nil); err != nil { return err } if err := es.InitClient([]string{"http://" + config.EsInfo.Ip + ":" + config.EsInfo.Port}); err != nil { return err } InitDefaultData() return nil } // GetDB ... func GetDB() *gorm.DB { return mysqlx.GetDB() } func GetEsClient() *elasticsearch.Client { return es.EsClient } func WithTransaction(fn func(*gorm.DB) error) error { var err error tx := mysqlx.GetDB().Begin() defer func() { if r := recover(); r != nil { tx.Rollback() return } else if err == nil { tx.Commit() return } }() err = fn(tx) if err != nil { tx.Rollback() return err } return nil } // InitDefaultData 初始化数据 func InitDefaultData() error { var models = []*Model{ { BaseModel: BaseModel{ ID: ModelIdGather, }, Name: "疑似聚集", Description: "通用聚集模型", Version: "v1.0.2", Enabled: false, }, { BaseModel: BaseModel{ ID: ModelIdDisappear, }, Name: "疑似脱管", Description: "通用脱管模型", Version: "v1.1.0", Enabled: false, }, { BaseModel: BaseModel{ ID: ModelIdLocationAnalysis, }, Name: "重点场所分析", Description: "通用场所分析模型", Version: "v1.0.0", Enabled: false, }, } for i := range models { var existingModel Model if err := GetDB().Model(models[i]).Where("id = ?", models[i].ID).First(&existingModel).Error; err != nil { GetDB().Model(models[i]).Create(models[i]) } else { GetDB().Model(models[i]).Update("version", models[i].Version) } } 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: 3, }, }, // 托管 { Id: "7a1f0a3a-c207-4d94-bc28-cc9e017b3628", ModelId: ModelIdDisappear, Scope: "", RuleArg: RuleArg{ Alias: "disappearTime", Name: "持续时间", Type: "input", Must: true, Unit: "小时", Range: "1,2400", Value: "24", ValType: "int", Operator: ">=", Sort: 0, }, }, { Id: "f1b99f28-1be0-4f78-b7c1-b01b1656b7fa", ModelId: ModelIdDisappear, Scope: "", RuleArg: RuleArg{ Alias: "age", Name: "年龄段", Type: "range", Must: false, Unit: "岁", Range: "1,100", Value: "60, 90", ValType: "int", Operator: "==", Sort: 2, }, }, { Id: "47366fa6-2f61-4fe0-957a-b1e0606bb1f0", ModelId: ModelIdDisappear, Scope: "", RuleArg: RuleArg{ Alias: "lastDirection", Name: "进出方向", Type: "input", Must: false, Unit: "", Range: "", Value: "", ValType: "string", Operator: "==", Sort: 1, }, }, // 场所分析 { Id: "3f667e5a-bd10-4673-be45-f385e19a9c25", ModelId: ModelIdLocationAnalysis, Scope: "", RuleArg: RuleArg{ Alias: "duration", Name: "时间段", Type: "input", Must: false, Unit: "天", Range: "1,2400", Value: "30", ValType: "int", Operator: ">=", Sort: 2, }, }, { Id: "ce298639-0cf8-4a8f-89f9-a932034a1e86", ModelId: ModelIdLocationAnalysis, Scope: "", RuleArg: RuleArg{ Alias: "personCount", Name: "出现人数", Type: "input", Must: true, Unit: "个", Range: "1,100", Value: "1, 90", ValType: "int", Operator: ">=", Sort: 0, }, }, { Id: "f85ae400-0114-4862-99f7-14a41530d235", ModelId: ModelIdLocationAnalysis, Scope: "", RuleArg: RuleArg{ Alias: "appearances", Name: "出现次数", Type: "input", Must: true, Unit: "", Range: "", Value: "", ValType: "int", Operator: ">=", Sort: 1, }, }, } for i := range rules { GetDB().Save(&rules[i]) } return nil }