package models
|
|
import (
|
"errors"
|
"fmt"
|
"strconv"
|
"strings"
|
"time"
|
|
"model-engine/db"
|
"model-engine/pkg/logger"
|
"model-engine/service"
|
)
|
|
type RegularityModel struct {
|
OrgIds []interface{} `json:"-"`
|
AreaIds []interface{} `json:"-"`
|
IdentityType string // 人员身份类型 陌生人, 访客, 住户
|
KeyPersonType string // 重点人员类型
|
PersonLabel string // 人员身份标签
|
Task *db.ModelTask
|
AlarmType db.AlarmType // 预警方式
|
|
Appearances int // 出现次数
|
Duration int // 时间范围, 单位天
|
StartHour int // 开始计算的时间 配置为小时 23 - 02 表示第一天23点 - 第二天的2点
|
EndHour int // 结束时间
|
}
|
|
func (m *RegularityModel) Init(task *db.ModelTask) error {
|
if len(task.DomainUnitIds) == 0 {
|
return errors.New("empty domain set")
|
}
|
orgIds, areaIds, err := service.GetOrgIdsAndAreaIdsByDomainUnitIds(task.DomainUnitIds)
|
if err != nil {
|
return err
|
}
|
|
m.Task = task
|
m.OrgIds = orgIds
|
m.AreaIds = areaIds
|
m.AlarmType = task.AlarmType
|
m.KeyPersonType = task.PersonType
|
m.PersonLabel = task.PersonLabel
|
m.IdentityType = task.IdentityType
|
|
for _, v := range task.Rules {
|
if v.Alias == "timeRange" {
|
if val, ok := v.Value.(string); ok {
|
ages := strings.Split(val, ",")
|
m.StartHour, _ = strconv.Atoi(ages[0])
|
m.EndHour, _ = strconv.Atoi(ages[1])
|
}
|
}
|
|
if v.Alias == "appearances" {
|
if val, ok := v.Value.(float64); ok {
|
m.Appearances = int(val)
|
}
|
}
|
|
if v.Alias == "duration" {
|
if val, ok := v.Value.(float64); ok {
|
m.Duration = int(val)
|
}
|
}
|
}
|
|
// 默认计算30天的数据
|
if m.Duration == 0 {
|
m.Duration = 30
|
}
|
|
if m.StartHour == 0 || m.EndHour == 0 {
|
return fmt.Errorf("task id:%s, %s timeRange Time range setting error. %+v", task.ID, task.Name, task.Rules)
|
}
|
|
logger.Debugf("LocationModel init finish ...task id:%s, name:%s, rule:%+v", task.ID, task.Name, m)
|
|
return nil
|
}
|
|
func (m *RegularityModel) Run() error {
|
results := make([]*db.ModelTaskResults, 0)
|
|
logger.Debugf("task %s last filter result %d", m.Task.Name, len(results))
|
return service.SaveTaskResults(results)
|
}
|
|
func (m *RegularityModel) KeepAlive() error {
|
db.GetDB().Model(m.Task).Where("id = ?", m.Task.ID).Update("last_run_time", time.Now())
|
return nil
|
}
|
|
func (m *RegularityModel) Shutdown() error {
|
// 清理资源
|
fmt.Println("Shutting down LocationModel Model")
|
return nil
|
}
|
|
func (m *RegularityModel) eventFormat() string {
|
return ""
|
}
|