| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 |
- package models
- import (
- "errors"
- "fmt"
- "log"
- "strings"
- "gorm.io/gorm"
- "golang.org/x/crypto/bcrypt"
- orm "device-manage/common/global"
- "device-manage/tools"
- )
- // User
- type User struct {
- // key
- IdentityKey string
- // 用户名
- UserName string
- FirstName string
- LastName string
- // 角色
- Role string
- }
- type UserName struct {
- Username string `gorm:"size:64" json:"username"`
- }
- type PassWord struct {
- // 密码
- Password string `gorm:"size:128" json:"password"`
- }
- type LoginM struct {
- UserName
- PassWord
- }
- type SysUserId struct {
- UserId int `gorm:"primary_key;AUTO_INCREMENT" json:"userId"` // 编码
- Pid int `json:"pid"` // 编码
- }
- type SysUserB struct {
- NickName string `gorm:"size:128" json:"nickName"` // 昵称
- Phone string `gorm:"size:11" json:"phone"` // 手机号
- RoleId int `gorm:"" json:"roleId"` // 角色编码
- Salt string `gorm:"size:255" json:"salt"` //盐
- Avatar string `gorm:"size:255" json:"avatar"` //头像
- Sex string `gorm:"size:255" json:"sex"` //性别
- Email string `gorm:"size:128" json:"email"` //邮箱
- DeptId int `gorm:"" json:"deptId"` //部门编码
- PostId int `gorm:"" json:"postId"` //职位编码
- CreateBy string `gorm:"size:128" json:"createBy"` //
- UpdateBy string `gorm:"size:128" json:"updateBy"` //
- Remark string `gorm:"size:255" json:"remark"` //备注
- Status string `gorm:"size:4;" json:"status"`
- BaseModel
- DataScope string `gorm:"-" json:"dataScope"`
- Params string `gorm:"-" json:"params"`
- GroupName string `gorm:"-" json:"groupName"`
- }
- type SysUser struct {
- SysUserId
- LoginM
- SysUserB
- }
- func (SysUser) TableName() string {
- return "sys_user"
- }
- type SysUserPwd struct {
- OldPassword string `json:"oldPassword"`
- NewPassword string `json:"newPassword"`
- }
- type SysUserPage struct {
- SysUserId
- SysUserB
- LoginM
- DeptName string `gorm:"-" json:"deptName"`
- }
- type SysUserView struct {
- SysUserId
- SysUserB
- LoginM
- RoleName string `gorm:"column:role_name" json:"role_name"`
- }
- // 获取用户数据
- func (e *SysUser) Get() (SysUserView SysUserView, err error) {
- table := orm.Eloquent.Table(e.TableName()).Select([]string{"sys_user.*", "sys_role.role_name"})
- table = table.Joins("left join sys_role on sys_user.role_id=sys_role.role_id")
- if e.UserId != 0 {
- table = table.Where("user_id = ?", e.UserId)
- }
- if e.Username != "" {
- table = table.Where("username = ?", e.Username)
- }
- if e.Password != "" {
- table = table.Where("password = ?", e.Password)
- }
- if e.RoleId != 0 {
- table = table.Where("role_id = ?", e.RoleId)
- }
- if e.DeptId != 0 {
- table = table.Where("dept_id = ?", e.DeptId)
- }
- if e.PostId != 0 {
- table = table.Where("post_id = ?", e.PostId)
- }
- if err = table.First(&SysUserView).Error; err != nil {
- return
- }
- SysUserView.Password = ""
- return
- }
- func (e *SysUser) GetUserInfo() (SysUserView SysUserView, err error) {
- table := orm.Eloquent.Table(e.TableName()).Select([]string{"sys_user.*", "sys_role.role_name"})
- table = table.Joins("left join sys_role on sys_user.role_id=sys_role.role_id")
- if e.UserId != 0 {
- table = table.Where("user_id = ?", e.UserId)
- }
- if e.Username != "" {
- table = table.Where("username = ?", e.Username)
- }
- if e.Password != "" {
- table = table.Where("password = ?", e.Password)
- }
- if e.RoleId != 0 {
- table = table.Where("role_id = ?", e.RoleId)
- }
- if e.DeptId != 0 {
- table = table.Where("dept_id = ?", e.DeptId)
- }
- if e.PostId != 0 {
- table = table.Where("post_id = ?", e.PostId)
- }
- if err = table.First(&SysUserView).Error; err != nil {
- return
- }
- return
- }
- func (e *SysUser) GetList() (SysUserView []SysUserView, err error) {
- table := orm.Eloquent.Table(e.TableName()).Select([]string{"sys_user.*", "sys_role.role_name"})
- table = table.Joins("left join sys_role on sys_user.role_id=sys_role.role_id")
- if e.UserId != 0 {
- table = table.Where("user_id = ?", e.UserId)
- }
- if e.Username != "" {
- table = table.Where("username = ?", e.Username)
- }
- if e.Password != "" {
- table = table.Where("password = ?", e.Password)
- }
- if e.RoleId != 0 {
- table = table.Where("role_id = ?", e.RoleId)
- }
- if e.DeptId != 0 {
- table = table.Where("dept_id = ?", e.DeptId)
- }
- if e.PostId != 0 {
- table = table.Where("post_id = ?", e.PostId)
- }
- if err = table.Find(&SysUserView).Error; err != nil {
- return
- }
- return
- }
- func (e *SysUser) GetPage(pageSize int, pageIndex int) ([]SysUserPage, int, error) {
- var doc []SysUserPage
- table := orm.Eloquent.Select("sys_user.*,sys_dept.dept_name").Table(e.TableName())
- table = table.Joins("left join sys_dept on sys_dept.dept_id = sys_user.dept_id")
- if e.Username != "" {
- table = table.Where("username = ?", e.Username)
- }
- if e.Status != "" {
- table = table.Where("sys_user.status = ?", e.Status)
- }
- if e.Phone != "" {
- table = table.Where("sys_user.phone = ?", e.Phone)
- }
- if e.DeptId != 0 {
- table = table.Where("sys_user.dept_id in (select dept_id from sys_dept where dept_path like ? )", "%"+tools.IntToString(e.DeptId)+"%")
- }
- // 数据权限控制(如果不需要数据权限请将此处去掉)
- dataPermission := new(DataPermission)
- dataPermission.UserId, _ = tools.StringToInt(e.DataScope)
- table, err := dataPermission.GetDataScope(e.TableName(), table)
- if err != nil {
- return nil, 0, err
- }
- var count int64
- if err := table.Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil {
- return nil, 0, err
- }
- return doc, int(count), nil
- }
- //加密
- func (e *SysUser) Encrypt() (err error) {
- if e.Password == "" {
- return
- }
- var hash []byte
- if hash, err = bcrypt.GenerateFromPassword([]byte(e.Password), bcrypt.DefaultCost); err != nil {
- return
- } else {
- e.Password = string(hash)
- return
- }
- }
- //添加
- func (e SysUser) Insert() (id int, err error) {
- if err = e.Encrypt(); err != nil {
- return
- }
- // check 用户名
- var count int64
- orm.Eloquent.Table(e.TableName()).Where("username = ?", e.Username).Count(&count)
- if count > 0 {
- err = errors.New("账户已存在!")
- return
- }
- fmt.Println("--------------")
- fmt.Println(e.UserId)
- //添加数据
- if err = orm.Eloquent.Table(e.TableName()).Create(&e).Error; err != nil {
- return
- }
- id = e.UserId
- return
- }
- //修改
- func (e *SysUser) Update(id int) (update SysUser, err error) {
- if e.Password != "" {
- if err = e.Encrypt(); err != nil {
- return
- }
- }
- if err = orm.Eloquent.Table(e.TableName()).First(&update, id).Error; err != nil {
- return
- }
- if e.RoleId == 0 {
- e.RoleId = update.RoleId
- }
- fmt.Println(e)
- fmt.Println(e.UserName)
- //参数1:是要修改的数据
- //参数2:是修改的数据
- if err = orm.Eloquent.Table(e.TableName()).Model(&update).Updates(&e).Error; err != nil {
- return
- }
- return
- }
- func (e *SysUser) BatchDelete(id []int) (Result bool, err error) {
- if err = orm.Eloquent.Table(e.TableName()).Where("user_id in (?)", id).Delete(&SysUser{}).Error; err != nil {
- return
- }
- Result = true
- return
- }
- func (e *SysUser) SetPwd(pwd SysUserPwd) (Result bool, err error) {
- user, err := e.GetUserInfo()
- if err != nil {
- tools.HasError(err, "获取用户数据失败(代码202)", 500)
- }
- _, err = tools.CompareHashAndPassword(user.Password, pwd.OldPassword)
- if err != nil {
- if strings.Contains(err.Error(), "hashedPassword is not the hash of the given password") {
- tools.HasError(err, "密码错误(代码202)", 500)
- }
- log.Print(err)
- return
- }
- e.Password = pwd.NewPassword
- _, err = e.Update(e.UserId)
- tools.HasError(err, "更新密码失败(代码202)", 500)
- return
- }
- func (e *SysUser) GetByUserId(tx *gorm.DB, id interface{}) error {
- return tx.First(e, id).Error
- }
- func (e *SysUser) GetUserById() (user SysUser) {
- table := orm.Eloquent.Table("sys_user")
- if e.UserId > 0 {
- table.Where("user_id = ?", e.UserId)
- }
- if err := table.First(&user).Error; err != nil {
- return
- }
- return
- }
- //根据pid查询子用户.
- func getUsersByPid(userIds []int, uid int) (err error) {
- var count int64
- var ids []SysUserId
- table := orm.Eloquent.Table("sys_user")
- if uid < 0 {
- return
- }
- table = table.Where("pid = ?", uid)
- if err = table.Find(&ids).Count(&count).Error; err != nil {
- return
- }
- fmt.Println("count:", count)
- for _, user := range ids {
- fmt.Println("user.id:", user.UserId)
- userIds = append(userIds, user.UserId)
- getUsersByPid(userIds, user.UserId)
- }
- return
- }
- //根据pid查询所有子用户.
- func (e *SysUser) GetSubUsersByUserPid(userIds *[]int, pid int) (err error) {
- *userIds = append(*userIds, pid)
- err = getUsersByPid(*userIds, pid)
- fmt.Println(">>", len(*userIds))
- return err
- }
|