| | |
| | | "aps_crm/pkg/mysqlx" |
| | | "fmt" |
| | | "gorm.io/gorm" |
| | | "time" |
| | | ) |
| | | |
| | | type ( |
| | | // User token里边把用户ID、父用户ID、角色都带上 |
| | | User struct { |
| | | ID string `json:"id" gorm:"primaryKey;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:用户登录密码"` |
| | | NickName string `json:"nickName" gorm:"type:varchar(255);default:系统用户;comment:用户昵称"` |
| | | HeaderImg string `json:"headerImg" gorm:"type:varchar(255);comment:用户头像"` |
| | | Phone string `json:"phone" gorm:"type:varchar(255);comment:用户手机号"` |
| | | Email string `json:"email" gorm:"type:varchar(255);comment:用户邮箱"` |
| | | Enable bool `json:"enable" gorm:"type:tinyint(1);comment:用户是否被冻结"` |
| | | ParentId string `json:"parentId" gorm:"type:varchar(255);comment:父用户ID"` |
| | | ParentName string `json:"parentName" gorm:"type:varchar(255);comment:父用户名称"` |
| | | CompanyName string `json:"companyName" gorm:"type:varchar(255);comment:公司名称"` |
| | | Pos string `json:"pos" gorm:"type:varchar(255);comment:岗位"` |
| | | ModifiedPwd bool `json:"-" gorm:"type:tinyint(1);comment:是否改过密码"` |
| | | CreateTime int64 `json:"-" gorm:"type:bigint(20);comment:创建时间"` |
| | | UpdateTime int64 `json:"-" gorm:"type:bigint(20);comment:更新时间"` |
| | | Menus []Menu `json:"-" gorm:"many2many:user_menu;"` // 用户菜单 |
| | | CreateAt string `json:"createAt" gorm:"-"` // 创建时间 |
| | | UpdateAt string `json:"updateAt" gorm:"-"` // 更新时间 |
| | | MenuIds []uint `json:"menuIds" gorm:"-"` // 菜单ID列表 |
| | | Ip string `json:"ip" gorm:"type:varchar(255);comment:集群Ip"` |
| | | Port string `json:"port" gorm:"type:varchar(255);comment:端口号"` |
| | | Status int `json:"status" gorm:"type:int(11);comment:用户审核状态 0:禁用; 1:正常; 2:审核中"` |
| | | AuthorityId uint `json:"authorityId" gorm:"default:888;comment:用户角色ID"` // 用户角色ID |
| | | Authority Authority `json:"authority" gorm:"foreignKey:AuthorityId"` |
| | | 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:用户登录密码"` |
| | | NickName string `json:"nickName" gorm:"type:varchar(255);default:系统用户;comment:用户昵称"` |
| | | RealName string `json:"realName" gorm:"type:varchar(255);comment:用户真实姓名"` |
| | | DepartmentId int `json:"departmentId" gorm:"type:int(11);comment:用户部门ID"` |
| | | HeaderImg string `json:"headerImg" gorm:"type:varchar(255);comment:用户头像"` |
| | | Phone string `json:"phone" gorm:"type:varchar(255);comment:用户手机号"` |
| | | Email string `json:"email" gorm:"type:varchar(255);comment:用户邮箱"` |
| | | Pos string `json:"pos" gorm:"type:varchar(255);comment:岗位"` |
| | | Menus []Menu `json:"-" gorm:"many2many:user_menu;"` // 用户菜单 |
| | | 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:"-"` |
| | | } |
| | | |
| | | UserSearch struct { |
| | |
| | | PageNum int |
| | | PageSize int |
| | | Orm *gorm.DB |
| | | IDs []int |
| | | } |
| | | ) |
| | | |
| | | func (slf User) TableName() string { |
| | | return "user" |
| | | } |
| | | |
| | | func (slf *User) BeforeCreate(tx *gorm.DB) error { |
| | | slf.CreateTime = time.Now().Unix() |
| | | slf.UpdateTime = slf.CreateTime |
| | | return nil |
| | | } |
| | | |
| | | func (slf *User) BeforeSave(tx *gorm.DB) error { |
| | | slf.UpdateTime = time.Now().Unix() |
| | | return nil |
| | | } |
| | | |
| | | func (slf *User) BeforeUpdate(tx *gorm.DB) error { |
| | | slf.UpdateTime = time.Now().Unix() |
| | | return nil |
| | | } |
| | | |
| | | func (slf *User) AfterFind(tx *gorm.DB) error { |
| | | slf.CreateAt = time.Unix(slf.CreateTime, 0).Format("2006-01-02 15:04:05") |
| | | slf.UpdateAt = time.Unix(slf.UpdateTime, 0).Format("2006-01-02 15:04:05") |
| | | return nil |
| | | } |
| | | |
| | | func NewUserSearch(db *gorm.DB) *UserSearch { |
| | |
| | | } |
| | | |
| | | func (slf *UserSearch) SetId(id string) *UserSearch { |
| | | slf.ID = id |
| | | slf.UUID = id |
| | | return slf |
| | | } |
| | | |
| | | func (slf *UserSearch) SetParentId(parentId string) *UserSearch { |
| | | slf.ParentId = parentId |
| | | func (slf *UserSearch) SetUserId(userId int) *UserSearch { |
| | | slf.ID = userId |
| | | return slf |
| | | } |
| | | |
| | | func (slf *UserSearch) SetParentName(parentName string) *UserSearch { |
| | | slf.ParentName = parentName |
| | | func (slf *UserSearch) SetUserIds(userIds []int) *UserSearch { |
| | | slf.IDs = userIds |
| | | return slf |
| | | } |
| | | |
| | |
| | | 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 != "" { |
| | | db = db.Where("username = ?", slf.Username) |
| | | } |
| | | |
| | | if slf.ParentName != "" { |
| | | db = db.Where("parent_name = ?", slf.ParentName) |
| | | } |
| | | |
| | | if slf.Keyword != "" { |
| | |
| | | |
| | | 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 |
| | |
| | | func (slf *UserSearch) ReplaceMenu(user *User, menus []*Menu) error { |
| | | return slf.Orm.Model(user).Association("Menus").Replace(menus) |
| | | } |
| | | |
| | | func (slf *UserSearch) FindAll() ([]*User, error) { |
| | | var ( |
| | | records = make([]*User, 0) |
| | | db = slf.build() |
| | | ) |
| | | |
| | | if err := db.Find(&records).Error; err != nil { |
| | | return records, fmt.Errorf("find all err: %v", err) |
| | | } |
| | | |
| | | 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 |
| | | } |