From f1c2453aaf74d17048b3f80c08a92e5f69d575e1 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期一, 10 二月 2025 16:36:23 +0800 Subject: [PATCH] 添加出行习惯模型 --- models/accessRegularity.go | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 103 insertions(+), 0 deletions(-) diff --git a/models/accessRegularity.go b/models/accessRegularity.go new file mode 100644 index 0000000..8e2d123 --- /dev/null +++ b/models/accessRegularity.go @@ -0,0 +1,103 @@ +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 "" +} -- Gitblit v1.8.0