zhangqian
2024-12-13 6b59a711b9af0825858c408cdba95102b8b51cb3
结果表增加联合唯一索引,防止重复报警
3个文件已修改
56 ■■■■■ 已修改文件
db/task_results.go 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/gather_model.go 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/task_results.go 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
db/task_results.go
@@ -14,11 +14,13 @@
    ModelTaskID string `json:"modelTaskID" gorm:"type:varchar(255)"`                                     //模型任务ID
    OrgID       string `json:"orgID" gorm:"index;column:org_id;type:varchar(299);not null;"`             //派出所 domain unit ID
    CommunityId string `json:"communityID" gorm:"index;column:community_id;type:varchar(299);not null;"` //小区ID
    PicDate       string `json:"picDate"       gorm:"uniqueIndex:pic_date_first_person_id;type:varchar(255);"` //抓拍时间
    FirstPersonID string `json:"-" gorm:"uniqueIndex:pic_date_first_person_id;type:varchar(255);"`             //第一个人的ID
    ObjectIds   string `json:"objectIds" gorm:"type:text"`                                               //事件对象,可以是人,多个用逗号分隔
    Location    string `json:"location" gorm:"type:varchar(255)"`                                        //发生地点
    Building    string `json:"building" gorm:"type:varchar(255);"`                                       //楼栋
    Floor       string `json:"floor"       gorm:"type:varchar(255);"`                                    //楼层
    PicDate     string `json:"picDate"       gorm:"type:varchar(255);"`                                  //抓拍时间
}
func (m *ModelTaskResults) TableName() string {
@@ -67,6 +69,16 @@
    return slf
}
func (slf *ModelTaskResultsSearch) SetFirstPersonId(firstId string) *ModelTaskResultsSearch {
    slf.FirstPersonID = firstId
    return slf
}
func (slf *ModelTaskResultsSearch) SetPicDate(picDate string) *ModelTaskResultsSearch {
    slf.PicDate = picDate
    return slf
}
func (slf *ModelTaskResultsSearch) build() *gorm.DB {
    var db = slf.Orm.Table(slf.TableName())
    if slf.Order != "" {
@@ -75,6 +87,14 @@
    if slf.ID != "" {
        db = db.Where("id = ?", slf.ID)
    }
    if slf.PicDate != "" {
        db = db.Where("pic_date = ?", slf.PicDate)
    }
    if slf.FirstPersonID != "" {
        db = db.Where("first_person_id = ?", slf.FirstPersonID)
    }
    if slf.Keyword != "" {
@@ -163,6 +183,19 @@
    return nil
}
func (slf *ModelTaskResultsSearch) FirstOrCreate(record *ModelTaskResults) error {
    var db = slf.build()
    var exists ModelTaskResults
    if err := db.First(&exists).Error; err == nil {
        return nil
    }
    if err2 := slf.Orm.Table(slf.TableName()).Create(record).Error; err2 != nil {
        return fmt.Errorf("FirstOrCreate err: %v, record: %+v", err2, record)
    }
    return nil
}
func (slf *ModelTaskResultsSearch) Save(record *ModelTaskResults) error {
    var db = slf.build()
    record.UpdatedAt = time.Now()
models/gather_model.go
@@ -133,6 +133,10 @@
    }
    event := strings.Join(typeNames, ",")
    for lt, persons := range aggregation {
        if persons.Size() == 0 {
            continue
        }
        personIds := persons.Elements()
        result := &db.ModelTaskResults{
            Title:       m.Task.Name,
            Event:       fmt.Sprintf("%s/%d人", event, len(persons)),
@@ -140,11 +144,12 @@
            ModelTaskID: m.Task.ID,
            CommunityId: lt.CommunityId,
            OrgID:       lt.OrgId,
            ObjectIds:   strings.Join(persons.Elements(), ","),
            ObjectIds:     strings.Join(personIds, ","),
            Location:    lt.Location,
            Building:    lt.Building,
            Floor:       lt.Floor,
            PicDate:     lt.Time,
            FirstPersonID: personIds[0],
        }
        results = append(results, result)
    }
service/task_results.go
@@ -1,7 +1,17 @@
package service
import "model-engine/db"
import (
    "model-engine/db"
    "model-engine/pkg/logger"
)
func SaveTaskResults(results []*db.ModelTaskResults) error {
    return db.NewModelTaskResultsSearch().BatchCreate(results)
    for _, v := range results {
        err := db.NewModelTaskResultsSearch().SetPicDate(v.PicDate).SetFirstPersonId(v.FirstPersonID).FirstOrCreate(v)
        if err != nil {
            logger.Errorf("save task result err:%v", err)
            return err
        }
    }
    return nil
}