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