package model import ( "ArmedPolice/app/common/model" "ArmedPolice/serve/orm" "ArmedPolice/utils" "errors" "fmt" "gorm.io/gorm" ) // SysUser 用户信息 type SysUser struct { *model.SysUser } type ( // SysUserInfo 用户信息 SysUserInfo struct { *model.SysUser TenantName string `json:"tenant_name"` } ) func (m *SysUser) ValidatePassword(password string) bool { return utils.HashCompare([]byte(m.Password), []byte(utils.Md5String(password, m.Salt))) } func (m *SysUser) IsAdminUser() bool { return m.IsAdmin == model.SysUserAdministratorForAdmin } func (m *SysUser) GetByAccountOrMobile(param string) (bool, error) { db := orm.GetDB().Table(m.TableName()).Select("id", "tenant_id", "uuid", "name", "account", "avatar", "mobile", "password", "salt", "is_admin", "status"). Where("(account = ? OR mobile = ?)", param, param). Where("is_deleted = ?", model.DeleteStatusForNot) if err := db.First(m.SysUser).Error; err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return false, nil } return false, err } return true, nil } // Users 用户信息 func (m *SysUser) Users(page, pageSize int, count *int64, where ...*model.ModelWhere) ([]*SysUserInfo, error) { mSysTenant := model.NewSysTenant() db := orm.GetDB().Table(m.TableName()+" As u").Select("u.id", "u.uuid", "account", "u.name", "u.avatar", "u.mobile", "u.email", "u.gender", "u.status", "t.name AS tenant_name", "u.remark", "u.created_at"). Joins(fmt.Sprintf("LEFT JOIN %s AS t ON u.tenant_id = t.id", mSysTenant.TableName())). Where("u.is_deleted = ?", model.DeleteStatusForNot) out := make([]*SysUserInfo, 0) if len(where) > 0 { for _, wo := range where { db = db.Where(wo.Condition, wo.Value) } } if err := db.Count(count).Error; err != nil { return nil, err } if err := db.Order("u.id " + model.OrderModeToAsc).Offset((page - 1) * pageSize).Limit(pageSize).Scan(&out).Error; err != nil { return nil, err } return out, nil } func NewSysUser() *SysUser { return &SysUser{SysUser: model.NewSysUser()} }