添加布控模块,合并person_status和snapshot_count_summary数据库等
| | |
| | | } |
| | | |
| | | func (s *Server) GetCodeList(ctx context.Context, params *analysis.SendAnalysisRequest) (*analysis.EmptyResponse, error) { |
| | | go task.TaskAnalysisService(params.DocumentNumber) |
| | | go task.TaskAnalysisService(params.Id) |
| | | return &analysis.EmptyResponse{}, nil |
| | | } |
| | |
| | | maxAge: 15 |
| | | api: |
| | | host: 192.168.20.115 |
| | | port: 4101 |
| | | port: 4101 |
| | | csTimes: 10 #climbed stairs times 窜楼次数 |
| | | csHours: 5 #climbed stairs hours 窜楼预警时间 该csHours时间范围之内 |
| | | aInterval: 3 #interval time between anomalies 进出异常间隔时间 |
| | |
| | | } |
| | | |
| | | type api struct { |
| | | Host string `mapstructure: "host"` |
| | | Port string `mapstructure: "port"` |
| | | Host string `mapstructure: "host"` |
| | | Port string `mapstructure: "port"` |
| | | CsTimes int `mapstructure:"csTimes"` |
| | | CsHours int `mapstructure:"csHours"` |
| | | AInterval int `mapstructure:"aInterval"` |
| | | } |
| | | |
| | | var LogConf = &LogConfig{} |
New file |
| | |
| | | package db |
| | | |
| | | import ( |
| | | "basic.com/pubsub/esutil.git" |
| | | "ruleModelEngine/config" |
| | | "strconv" |
| | | ) |
| | | |
| | | func QueryByDays(days int) ([]string, error) { |
| | | esURL := "http://" + config.Elastic.Host + ":" + config.Elastic.Port + "/" + config.Elastic.Index + "/_search" |
| | | queryDSL := `{ |
| | | "query": { |
| | | "bool": { |
| | | "filter": [ |
| | | { |
| | | "range": { |
| | | "picDate": { |
| | | "gte": "now-` + strconv.Itoa(days) + `d/d" |
| | | } |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | "size":22139, |
| | | "_source": [ |
| | | "id" |
| | | ] |
| | | }` |
| | | ids := make([]string, 0) |
| | | buf, err := esutil.EsReq("POST", esURL, []byte(queryDSL)) |
| | | if err != nil { |
| | | return nil, err |
| | | } |
| | | source, err := esutil.Sourcelist(buf) |
| | | if err != nil { |
| | | return nil, err |
| | | } |
| | | for _, info := range source { |
| | | ids = append(ids, info["id"].(string)) |
| | | } |
| | | return ids, nil |
| | | } |
| | |
| | | ) |
| | | |
| | | require ( |
| | | basic.com/CloudAI/protomsg.git v0.0.0-20240523091240-77f661e9c66f // indirect |
| | | basic.com/CloudAI/protomsg.git v0.0.0-20240524094225-61cfc0043e88 // indirect |
| | | basic.com/pubsub/protomsg.git v0.0.0-20230210092337-5f1e6cdae7c3 // indirect |
| | | filippo.io/edwards25519 v1.1.0 // indirect |
| | | github.com/fsnotify/fsnotify v1.7.0 // indirect |
| | |
| | | |
| | | import ( |
| | | "basic.com/CloudAI/protomsg.git/analysis" |
| | | "fmt" |
| | | "google.golang.org/grpc" |
| | | "net" |
| | | "ruleModelEngine/api/analysisApi" |
| | | "ruleModelEngine/cache" |
| | | "ruleModelEngine/config" |
| | | "ruleModelEngine/db" |
| | | "ruleModelEngine/task" |
| | | |
| | | //"ruleModelEngine/task" |
| | | |
| | |
| | | logger.Info("Executing immediately...") |
| | | rule.ExecuteTask() |
| | | } |
| | | //r, _ := db.QueryByDays(3) |
| | | //for _, id := range r { |
| | | // task.TaskAnalysisService(id) |
| | | //} |
| | | //fmt.Println("ids: ", len(r)) |
| | | //return |
| | | //task.TaskAnalysisService("3407b20e-6343-4832-88fa-a8e986552532") |
| | | //go initApiServer() |
| | | go initApiServer() |
| | | //return |
| | | now := time.Now() |
| | | next := time.Date(now.Year(), now.Month(), now.Day()+1, 1, 0, 0, 0, now.Location()) |
| | |
| | | import ( |
| | | "basic.com/valib/logger.git" |
| | | "fmt" |
| | | "ruleModelEngine/config" |
| | | "ruleModelEngine/data" |
| | | "ruleModelEngine/db" |
| | | "ruleModelEngine/task" |
| | | "strconv" |
| | | ) |
| | | |
| | | // |
| | |
| | | |
| | | // 执行程序入口 |
| | | func ExecuteTask() { |
| | | //return |
| | | //进出异常布控任务,暂时归类到标签计算部分 |
| | | fmt.Println("进出异常开始入口!!!!!!") |
| | | tasks, err := db.GetAllTaskData() |
| | | if err != nil { |
| | | logger.Error("GetAllTaskData Error", err) |
| | | } |
| | | var tkInfo db.Task |
| | | for _, taskInfo := range tasks { |
| | | if taskInfo.Name == "进出异常" { |
| | | tkInfo.Id = taskInfo.Id |
| | | tkInfo.Name = taskInfo.Name |
| | | } |
| | | } |
| | | fmt.Println("tkInfo: ", tkInfo) |
| | | days := config.Api.AInterval |
| | | docNumIdMap, err := db.QueryLastIdByDayRange(days, days-1) |
| | | if err != nil { |
| | | logger.Error("QueryByDayRange err: ", err) |
| | | } |
| | | fmt.Println("docNumIdMap: ", len(docNumIdMap)) |
| | | for docNumber, id := range docNumIdMap { |
| | | fmt.Println(docNumber, id) |
| | | alarmRules := make([]db.AlarmRule, 0) |
| | | flag := task.EnteringButNotLeaving(docNumber, id, days) |
| | | if flag == true { |
| | | alarmRules = append(alarmRules, db.AlarmRule{RuleId: strconv.Itoa(tkInfo.Id), RuleText: tkInfo.Name, AlarmLevel: "0"}) |
| | | } |
| | | addFlag, err := db.AddAlarmRules(alarmRules, id) |
| | | if err != nil { |
| | | logger.Error("AddAlarmRules err: ", err) |
| | | } |
| | | if addFlag == true { |
| | | logger.Info("AddAlarmRules success: ", id) |
| | | } |
| | | } |
| | | |
| | | return |
| | | ruleInfo, err := db.GetAllData() |
| | | if err != nil { |
| | | logger.Error("GetAllData Error", err) |
| | |
| | | "basic.com/valib/logger.git" |
| | | "ruleModelEngine/cache" |
| | | "ruleModelEngine/db" |
| | | "time" |
| | | ) |
| | | |
| | | func UnderageClimbingToRooftop(taskPerson db.TaskPerson) bool { |
| | | if taskPerson.Floor == "" { |
| | | return false |
| | | } |
| | | age, err := db.GetAgeById(taskPerson.DocumentNumber) |
| | | if err != nil { |
| | | logger.Error("GetAgeById: ", err) |
| | |
| | | } |
| | | return false |
| | | } |
| | | func ClimbingFloorsIllegally(taskPerson db.TaskPerson) bool { |
| | | |
| | | return true |
| | | func ClimbingFloorsIllegally(taskPerson db.TaskPerson, hours int, times int) bool { |
| | | layout := "2006-01-02 15:04:05" |
| | | picDate, err := time.Parse(layout, taskPerson.PicDate) |
| | | startTime := picDate.Add(time.Duration(-hours) * time.Hour).Format(layout) |
| | | floors, err := db.QueryCheckDataByDocumentNumber(taskPerson.DocumentNumber, startTime, taskPerson.PicDate) |
| | | if err != nil { |
| | | logger.Error("QueryCheckDataByDocumentNumber: ", err) |
| | | return false |
| | | } |
| | | if floors >= times { |
| | | return true |
| | | } |
| | | return false |
| | | } |
| | | func EnteringButNotLeaving(taskPerson db.TaskPerson) bool { |
| | | |
| | | return true |
| | | func EnteringButNotLeaving(docNumber string, id string, days int) bool { |
| | | total, err := db.QueryTimesByDocNumberDays(days-1, docNumber) |
| | | if err != nil { |
| | | logger.Error("QueryTimesByDocNumberDays err: ", err) |
| | | } |
| | | if total == 0 { |
| | | return true |
| | | } |
| | | |
| | | return false |
| | | } |
| | | |
| | | func registeredAddressNotMatchActualResidence(taskPerson db.TaskPerson) bool { |
| | | return true |
| | | return false |
| | | } |
| | |
| | | |
| | | import ( |
| | | "basic.com/valib/logger.git" |
| | | "fmt" |
| | | "ruleModelEngine/cache" |
| | | "ruleModelEngine/config" |
| | | "ruleModelEngine/db" |
| | | "strconv" |
| | | "time" |
| | | ) |
| | | |
| | | type alarmRule struct { |
| | | ruleId int |
| | | ruleText string |
| | | } |
| | | |
| | | func TaskAnalysisService(id string) { |
| | | alarmRules := make([]alarmRule, 0) |
| | | time.Sleep(time.Second * 2) |
| | | //fmt.Println("布控入口") |
| | | alarmRules := make([]db.AlarmRule, 0) |
| | | time.Sleep(time.Millisecond * 1) |
| | | var taskPerson db.TaskPerson |
| | | var err error |
| | | for i := 0; i <= 2; i++ { |
| | |
| | | if taskPerson.Id != "" { |
| | | break |
| | | } |
| | | time.Sleep(time.Second * 15) |
| | | time.Sleep(time.Second * 1) |
| | | } |
| | | fmt.Println("personInfo: ", taskPerson) |
| | | fmt.Println("device: ", cache.Device) |
| | | //fmt.Println("personInfo: ", taskPerson) |
| | | //fmt.Println("device: ", cache.Device) |
| | | tasks, err := db.GetAllTaskData() |
| | | if err != nil { |
| | | logger.Error("GetAllTaskData Error", err) |
| | | } |
| | | fmt.Println(tasks) |
| | | //fmt.Println(tasks) |
| | | |
| | | for _, task := range tasks { |
| | | switch task.Name { |
| | | case "未成年出顶楼": |
| | | flag := UnderageClimbingToRooftop(taskPerson) |
| | | if flag == true { |
| | | alarmRules = append(alarmRules, alarmRule{ruleId: task.Id, ruleText: task.Name}) |
| | | alarmRules = append(alarmRules, db.AlarmRule{RuleId: strconv.Itoa(task.Id), RuleText: task.Name, AlarmLevel: "0"}) |
| | | } |
| | | case "未成年入商住楼": |
| | | flag := UnderageEnteringCommercialBuilding(taskPerson) |
| | | if flag == true { |
| | | alarmRules = append(alarmRules, alarmRule{ruleId: task.Id, ruleText: task.Name}) |
| | | alarmRules = append(alarmRules, db.AlarmRule{RuleId: strconv.Itoa(task.Id), RuleText: task.Name, AlarmLevel: "0"}) |
| | | } |
| | | case "窜楼": |
| | | flag := ClimbingFloorsIllegally(taskPerson) |
| | | flag := ClimbingFloorsIllegally(taskPerson, config.Api.CsHours, config.Api.CsTimes) |
| | | if flag == true { |
| | | alarmRules = append(alarmRules, alarmRule{ruleId: task.Id, ruleText: task.Name}) |
| | | alarmRules = append(alarmRules, db.AlarmRule{RuleId: strconv.Itoa(task.Id), RuleText: task.Name, AlarmLevel: "0"}) |
| | | } |
| | | case "只进不出": |
| | | flag := EnteringButNotLeaving(taskPerson) |
| | | if flag == true { |
| | | alarmRules = append(alarmRules, alarmRule{ruleId: task.Id, ruleText: task.Name}) |
| | | } |
| | | case "进出异常": |
| | | continue |
| | | //days := config.Api.AInterval |
| | | //docNumIdMap, err := db.QueryLastIdByDayRange(days, days-1) |
| | | //if err != nil { |
| | | // logger.Error("QueryByDayRange err: ", err) |
| | | //} |
| | | // |
| | | //for docNumber, id := range docNumIdMap { |
| | | // flag := EnteringButNotLeaving(docNumber, id, days) |
| | | // alarmRules = append(alarmRules, db.AlarmRule{RuleId: strconv.Itoa(task.Id), RuleText: task.Name, AlarmLevel: "0"}) |
| | | // |
| | | // if flag == true { |
| | | // alarmRules = append(alarmRules, db.AlarmRule{RuleId: strconv.Itoa(task.Id), RuleText: task.Name, AlarmLevel: "0"}) |
| | | // } |
| | | //} |
| | | |
| | | case "申住不一": |
| | | flag := registeredAddressNotMatchActualResidence(taskPerson) |
| | | if flag == true { |
| | | alarmRules = append(alarmRules, alarmRule{ruleId: task.Id, ruleText: task.Name}) |
| | | alarmRules = append(alarmRules, db.AlarmRule{RuleId: strconv.Itoa(task.Id), RuleText: task.Name, AlarmLevel: "0"}) |
| | | } |
| | | default: |
| | | continue |
| | | |
| | | } |
| | | } |
| | | addFlag, err := db.AddAlarmRules(alarmRules, id) |
| | | if err != nil { |
| | | logger.Error("AddAlarmRules err: ", err) |
| | | } |
| | | if addFlag == true { |
| | | logger.Info("AddAlarmRules success: ", id) |
| | | } |
| | | |
| | | } |