sunty
2024-05-26 d6a49ae26c8723d737e36d1ee544b2edafdae501
添加布控模块,合并person_status和snapshot_count_summary数据库等
1个文件已添加
8个文件已修改
206 ■■■■ 已修改文件
api/analysisApi/server.go 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
config/app.yaml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
config/config.go 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
db/elasticScriptToId.go 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.mod 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.go 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rule/service.go 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
task/engine.go 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
task/service.go 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/analysisApi/server.go
@@ -11,6 +11,6 @@
}
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
}
config/app.yaml
@@ -26,4 +26,7 @@
  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  进出异常间隔时间
config/config.go
@@ -39,8 +39,11 @@
}
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{}
db/elasticScriptToId.go
New file
@@ -0,0 +1,43 @@
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
}
go.mod
@@ -11,7 +11,7 @@
)
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
main.go
@@ -2,12 +2,14 @@
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"
@@ -63,8 +65,14 @@
        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())
rule/service.go
@@ -3,8 +3,11 @@
import (
    "basic.com/valib/logger.git"
    "fmt"
    "ruleModelEngine/config"
    "ruleModelEngine/data"
    "ruleModelEngine/db"
    "ruleModelEngine/task"
    "strconv"
)
//
@@ -28,7 +31,43 @@
// 执行程序入口
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)
task/engine.go
@@ -4,9 +4,13 @@
    "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)
@@ -30,14 +34,33 @@
    }
    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
}
task/service.go
@@ -2,20 +2,16 @@
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++ {
@@ -26,47 +22,66 @@
        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)
    }
}