package db import ( "basic.com/valib/logger.git" "encoding/base64" "sdkCompare/util" "strconv" ) type DbPersons struct { BaseEntity TableId string `gorm:"column:table_id"` FaceFeature string `gorm:"column:face_feature"` CommunityID string `gorm:"column:community_id"` // 常住小区 domain unit ID OrgID string `gorm:"column:org_id"` // 常住派出所 domain unit ID OrgName string `gorm:"column:community"` } func (dbp *DbPersons) GetPersonTotal() (total int64, err error) { sql := "select id from person where is_delete = 0 and table_id = 'system'" err = db.Raw(sql).Count(&total).Error return } func (dbp *DbPersons) GetPersonsCacheBase(from int, size int) (arr []*FeatureCacheBase, err error) { var persons []DbPersons sql := "select id, table_id, face_feature, community_id from person where is_delete = 0 and table_id = 'system'" sql += " order by id asc limit " + strconv.Itoa(from) + "," + strconv.Itoa(size) err = db.Raw(sql).Find(&persons).Error if err != nil { return nil, err } for _, p := range persons { if p.FaceFeature != "" { byteFeat, err := base64.StdEncoding.DecodeString(p.FaceFeature) if err != nil { logger.Errorf("Person %s feature is invalid", p.ID) continue } arr = append(arr, &FeatureCacheBase{ Id: p.ID, TableId: p.TableId, AreaId: p.CommunityID, FaceFeature: util.ByteSlice2float32Slice(byteFeat), }) } else { logger.Warnf("Person %s feature is empty", p.ID) } } return } func (dbp *DbPersons) GetPersonsById(id string) (info *FeatureCacheBase, err error) { var p DbPersons err = db.Table("person"). Select("id", "table_id", "face_feature", "community_id"). First(&p, "id = ?", id).Error if err != nil { return nil, err } if p.FaceFeature != "" { byteFeat, err := base64.StdEncoding.DecodeString(p.FaceFeature) if err != nil { return nil, err } info = &FeatureCacheBase{ Id: p.ID, TableId: p.TableId, AreaId: p.CommunityID, FaceFeature: util.ByteSlice2float32Slice(byteFeat), } } return }