imei.go 2.43 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
package user_m

import (
	"git.hilo.cn/hilo-common/domain"
	"git.hilo.cn/hilo-common/resource/mysql"
	"gorm.io/gorm"
	"hilo-group/myerr"
)

//用户设备
type UserImei struct {
	mysql.Entity
	*domain.Model `gorm:"-"`
	UserId        mysql.ID
	Imei          mysql.Str
}

func getUserImeiOrCreate(model *domain.Model, userId mysql.ID) (*UserImei, error) {
	var userImei UserImei
	if err := model.Db.Where(&UserImei{
		UserId: userId,
	}).First(&userImei).Error; err != nil {
		if err == gorm.ErrRecordNotFound {
			userImei.UserId = userId
			//userImei.Imei = imei
		} else {
			return nil, myerr.WrapErr(err)
		}
	}
	/*	else {
		if userImei.Imei == imei {
			userImei.SetLasyLoad()
		} else {
			userImei.Imei = imei
		}
	}*/
	userImei.Model = model
	return &userImei, nil
}

func GetUserImeiStr(model *domain.Model, userId mysql.ID) (string, error) {
	var userImei UserImei
	if err := model.Db.Where(&UserImei{
		UserId: userId,
	}).First(&userImei).Error; err != nil {
		if err == gorm.ErrRecordNotFound {
			return "", nil
		} else {
			return "", myerr.WrapErr(err)
		}
	}
	return userImei.Imei, nil
}

func (userImei *UserImei) updateImei(imei mysql.Str) {
	if userImei.Imei == imei {
		userImei.SetLasyLoad()
	} else {
		userImei.Imei = imei
	}
}

//统计imei数量
func countImei(model *domain.Model, imei string) (int64, error) {
	var c int64 = 0
	if err := model.Db.Model(&UserImei{}).Where(&UserImei{
		Imei: imei,
	}).Count(&c).Error; err != nil {
		return 0, myerr.WrapErr(err)
	}
	return c, nil
}

func ImeiUserIds(model *domain.Model, imei string) ([]uint64, error) {
	rows := []UserImei{}
	if err := model.Db.Model(&UserImei{}).Where(&UserImei{
		Imei: imei,
	}).Find(&rows).Error; err != nil {
		return nil, myerr.WrapErr(err)
	}
	userIds := make([]uint64, 0, len(rows))
	for _, i := range rows {
		userIds = append(userIds, i.UserId)
	}
	return userIds, nil
}

func GetSameImeiUsers(model *domain.Model, userId uint64) ([]uint64, error) {
	userImei, err := getUserImeiOrCreate(model, userId)
	if err != nil {
		return nil, err
	}

	if len(userImei.Imei) <= 0 {
		return nil, nil
	}
	userIds, err := ImeiUserIds(model, userImei.Imei)
	if err != nil {
		return nil, err
	}
	return userIds, nil
}

func GetSameImeiMap(model *domain.Model, userId uint64) (map[uint64]uint64, error) {
	rows, err := GetSameImeiUsers(model, userId)
	if err != nil {
		return nil, err
	}
	result := make(map[uint64]uint64, 0)
	for _, i := range rows {
		result[i] = userId
	}
	return result, nil
}