zhangqian
2023-11-01 530fed8ec225453572d57b15c200ab062c335457
model/user.go
@@ -10,7 +10,8 @@
type (
   // User token里边把用户ID、父用户ID、角色都带上
   User struct {
      ID           string            `json:"id" gorm:"primaryKey;type:varchar(255);comment:用户ID"`
      ID           int               `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
      UUID         string            `json:"uuid" gorm:"uniqueIndex;type:varchar(255);comment:用户ID"`
      Username     string            `json:"username" gorm:"index;type:varchar(255);comment:用户登录名"`
      UserType     constvar.UserType `json:"userType" gorm:"type:int(11);comment:用户类型 1超级管理员 2主账户 3子账户"`
      Password     string            `json:"-"  gorm:"type:varchar(255);comment:用户登录密码"`
@@ -25,6 +26,7 @@
      MenuIds      []uint            `json:"menuIds" gorm:"-"`                              // 菜单ID列表
      AuthorityId  uint              `json:"authorityId" gorm:"default:888;comment:用户角色ID"` // 用户角色ID
      Authority    Authority         `json:"authority" gorm:"foreignKey:AuthorityId"`
      SubUserIds   string            `json:"subUserIds" gorm:"sub_user_ids"` //下属员工用户id,用逗号分开
      gorm.Model   `json:"-"`
   }
@@ -35,6 +37,7 @@
      PageNum  int
      PageSize int
      Orm      *gorm.DB
      IDs      []int
   }
)
@@ -65,7 +68,17 @@
}
func (slf *UserSearch) SetId(id string) *UserSearch {
   slf.ID = id
   slf.UUID = id
   return slf
}
func (slf *UserSearch) SetUserId(userId int) *UserSearch {
   slf.ID = userId
   return slf
}
func (slf *UserSearch) SetUserIds(userIds []int) *UserSearch {
   slf.IDs = userIds
   return slf
}
@@ -82,8 +95,8 @@
func (slf *UserSearch) build() *gorm.DB {
   var db = slf.Orm.Model(&User{}).Preload("Menus")
   if slf.ID != "" {
      db = db.Where("id = ?", slf.ID)
   if slf.UUID != "" {
      db = db.Where("uuid = ?", slf.UUID)
   }
   if slf.Username != "" {
@@ -96,6 +109,14 @@
   if slf.Order != "" {
      db = db.Order(slf.Order)
   }
   if slf.ID != 0 {
      db = db.Where("id = ?", slf.ID)
   }
   if len(slf.IDs) > 0 {
      db = db.Where("id in ?", slf.IDs)
   }
   return db
@@ -270,3 +291,46 @@
   return records, nil
}
func (slf *UserSearch) Upsert(record User, SubUserQueried bool) error {
   var db = slf.SetId(record.UUID).build()
   old, err := slf.First()
   if err == gorm.ErrRecordNotFound {
      if err := db.Create(&record).Error; err != nil {
         return fmt.Errorf("create user err: %v, record: %+v", err, record)
      }
   } else if old.Username != record.Username ||
      old.UserType != record.UserType ||
      old.NickName != record.NickName ||
      SubUserQueried && old.SubUserIds != record.SubUserIds {
      old.Username = record.Username
      old.UserType = record.UserType
      old.NickName = record.NickName
      old.SubUserIds = record.SubUserIds
      if err := db.Save(&old).Error; err != nil {
         return fmt.Errorf("update user err: %v, old record: %+v", err, old)
      }
   }
   return nil
}
type IdPair struct {
   ID   int    `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
   UUID string `json:"uuid" gorm:"unique;type:varchar(255);comment:用户ID"`
}
func (slf *UserSearch) UUID2CrmUserId(userIds []string) ([]*IdPair, error) {
   var (
      records = make([]*IdPair, 0)
      db      = slf.Orm.Model(&User{})
   )
   db = db.Where("uuid in ?", userIds)
   if err := db.Select("user.id, user.uuid").Find(&records).Error; err != nil {
      return records, fmt.Errorf("find all err: %v", err)
   }
   return records, nil
}