| | |
| | | "aps_crm/pkg/mysqlx" |
| | | "fmt" |
| | | "gorm.io/gorm" |
| | | "gorm.io/gorm/clause" |
| | | ) |
| | | |
| | | type ( |
| | | // User token里边把用户ID、父用户ID、角色都带上 |
| | | User struct { |
| | | ID int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` |
| | | UUID string `json:"uuid" gorm:"unique;type:varchar(255);comment:用户ID"` |
| | | 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:用户登录密码"` |
| | |
| | | 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:"-"` |
| | | } |
| | | |
| | |
| | | PageNum int |
| | | PageSize int |
| | | Orm *gorm.DB |
| | | IDs []int |
| | | } |
| | | ) |
| | | |
| | |
| | | return slf |
| | | } |
| | | |
| | | func (slf *UserSearch) SetUserIds(userIds []int) *UserSearch { |
| | | slf.IDs = userIds |
| | | return slf |
| | | } |
| | | |
| | | func (slf *UserSearch) SetUserName(username string) *UserSearch { |
| | | slf.Username = username |
| | | return slf |
| | |
| | | |
| | | 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 |
| | |
| | | return records, nil |
| | | } |
| | | |
| | | func (slf *UserSearch) Upsert(record User) error { |
| | | var db = slf.build() |
| | | func (slf *UserSearch) Upsert(record User, SubUserQueried bool) error { |
| | | |
| | | if err := db.Clauses(clause.OnConflict{ |
| | | Columns: []clause.Column{{Name: "uuid"}}, |
| | | DoUpdates: clause.AssignmentColumns([]string{"uuid", "username", "user_type", "nick_name"}), |
| | | }).Create(&record).Error; err != nil { |
| | | return fmt.Errorf("first or create err: %v, record: %+v", err, record) |
| | | 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 |
| | | } |