zhangzengfei
2023-09-05 63645d248c765244488cd34dbc1bb6528ca6b7c7
system-service/service/userService.go
@@ -1,509 +1,509 @@
package service
import (
   "errors"
   "fmt"
   "path"
   "strconv"
   "strings"
   "time"
   "vamicro/extend/util"
   "vamicro/system-service/models"
   "vamicro/system-service/vo"
   "basic.com/fileServer/WeedFSClient.git"
   "basic.com/valib/bhomedbapi.git"
   "basic.com/valib/logger.git"
   uuid "github.com/satori/go.uuid"
)
type UserService struct {
}
func (sv UserService) Login(loginVo vo.UserVo) (flag bool, loginAppUser vo.LoginAppUser) {
   if loginVo.UserName == "" || loginVo.Password == "" {
      return false, loginAppUser
   }
   /*if AuthInfo.ExpirationTime < time.Now().Unix() {
      loginAppUser.RoleName = "未授权用户"
      return false,loginAppUser
   }*/
   var userE models.SysUser
   rows, err := userE.FindByName(loginVo.UserName)
   if err != nil || rows == 0 {
      return false, loginAppUser
   }
   if pwdStr, err := util.Encrypt(loginVo.Password); err == nil && pwdStr == userE.Password {
      user2LoginAppUser(&userE, &loginAppUser)
      var roleE models.SysRole
      roles := roleE.FindByUserId(userE.Id)
      loginAppUser.SysRoles = roles
      if len(roles) > 0 {
         loginAppUser.RoleName = roles[0].Name
      }
      loginAppUser.HeadPic = userE.HeadPic
      return true, loginAppUser
   }
   return false, loginAppUser
}
func user2LoginAppUser(userE *models.SysUser, loginAppUser *vo.LoginAppUser) {
   loginAppUser.Id = userE.Id
   loginAppUser.Username = userE.Username
   loginAppUser.Nickname = userE.Nickname
   loginAppUser.HeadPic = userE.HeadPic
   loginAppUser.BackgroundPic = userE.BackgroundPic
   loginAppUser.UseIconType = userE.UseIconType
   permissions := make([]string, 0)
   pM := make(map[string]models.SysMenu, 0)
   var roleE models.SysRole
   var menuE models.SysMenu
   var srm models.SysRoleMenu
   var sum models.SysUserMenu
   allMenus := menuE.FindAll()
   roles := roleE.FindByUserId(userE.Id) //用户角色
   loginAppUser.SysRoles = roles
   if roles != nil && allMenus != nil {
      menuMap := make(map[string]models.SysMenu, 0)
      for _, menuE := range allMenus {
         menuMap[menuE.Id] = menuE
      }
      var userMenus []vo.SysMenuVo
      if len(roles) > 0 && roles[0].Name == "超级管理员" {
         for _, menuModel := range menuMap {
            userMenus = append(userMenus, vo.SysMenuVo{
               SysMenu: menuModel,
            })
            pM[menuModel.Id] = menuModel
         }
      } else {
         sumList, _ := sum.FindByRoleId(userE.Id)
         if nil != sumList && len(sumList) > 0 {
            for _, srmE := range sumList {
               if _, ok := pM[srmE.MenuId]; !ok {
                  menuModel := menuMap[srmE.MenuId]
                  pM[menuModel.Id] = menuModel
                  pidArr := strings.Split(menuModel.ParentIds, ",")
                  for _, pid := range pidArr {
                     if pid != "" && pid != "0" {
                        if _, k := pM[pid]; !k {
                           pM[pid] = menuMap[pid]
                        }
                     }
                  }
                  userMenus = append(userMenus, vo.SysMenuVo{
                     SysMenu: menuModel,
                  })
               }
            }
         } else {
            for _, role := range roles {
               srmList, _ := srm.FindByRoleId(role.Id)
               if srmList != nil {
                  //var userMenus []vo.SysMenuVo
                  for _, srmE := range srmList {
                     if _, ok := pM[srmE.MenuId]; !ok {
                        menuModel := menuMap[srmE.MenuId]
                        pM[menuModel.Id] = menuModel
                        pidArr := strings.Split(menuModel.ParentIds, ",")
                        for _, pid := range pidArr {
                           if pid != "" && pid != "0" {
                              if _, k := pM[pid]; !k {
                                 pM[pid] = menuMap[pid]
                              }
                           }
                        }
                        userMenus = append(userMenus, vo.SysMenuVo{
                           SysMenu: menuModel,
                        })
                     }
                  }
               }
            }
         }
      }
      loginAppUser.SysMenus = userMenus
   }
   for _, v := range pM {
      permissions = append(permissions, v.Permission)
   }
   loginAppUser.Permissions = permissions
   logger.Debug("permissions:", permissions)
}
func (sv UserService) UpdatePwd(userId string, oldPwd string, newPwd string, opUserId string) (bool, error) {
   var userE models.SysUser
   rows, err := userE.SelectById(userId)
   if err != nil || rows == 0 {
      return false, errors.New("用户未找到!")
   }
   if oldPwd != "" {
      if encryOldPwd, _ := util.Encrypt(oldPwd); encryOldPwd == userE.Password { //旧密码匹配
         encryNewPwd, err := util.Encrypt(newPwd)
         if err == nil {
            return userE.UpdatePwd(userId, encryNewPwd), nil
         } else {
            return false, err
         }
      } else {
         return false, errors.New("原密码不正确!")
      }
   } else {
      var roleE models.SysRole
      roles := roleE.FindByUserId(userE.Id) //用户角色
      opRoles := roleE.FindByUserId(opUserId)
      if len(roles) > 0 && roles[0].Name == "超级管理员" {
         return false, errors.New("您没有权限修改超级管理员的密码!")
      }
      if len(roles) > 0 && roles[0].Name == "管理员" {
         if len(opRoles) < 0 || opRoles[0].Name != "超级管理员" {
            return false, errors.New("您没有权限修改管理员的密码!")
         }
      }
      if len(roles) > 0 && roles[0].Name == "普通用户" {
         if len(opRoles) < 0 || opRoles[0].Name != "超级管理员" && opRoles[0].Name != "管理员" {
            return false, errors.New("您没有权限修改普通用户的密码!")
         }
      }
      encryNewPwd, err := util.Encrypt(newPwd)
      if err == nil {
         return userE.UpdatePwd(userId, encryNewPwd), nil
      } else {
         return false, err
      }
   }
}
func (sv UserService) AddUser(userVo vo.UserVo) (bool, string) {
   var userE models.SysUser
   var userR models.SysRole
   rows, err := userE.FindByName(userVo.UserName)
   if err != nil {
      return false, ""
   }
   if rows > 0 {
      return false, "用户名已存在"
   } else {
      if len([]byte(userVo.Password)) < 6 {
         return false, "密码长度不能小于6位"
      }
      pwdStr, err := util.Encrypt(userVo.Password)
      if err != nil {
         return false, "添加失败"
      }
      addModel := models.SysUser{
         Username:      userVo.UserName,
         Password:      pwdStr,
         Nickname:      userVo.Nickname,
         HeadPic:       userVo.HeadPic,
         BackgroundPic: models.DefaultBgPic,
      }
      if flag, err := addModel.Insert(); flag && err == nil {
         if "" == userVo.RoleId {
            _, err := userR.FindByName("普通用户")
            if err == nil {
               userVo.RoleId = userR.Id
            }
         }
         if "" != userVo.RoleId {
            userRole := models.SysUserRole{
               UserId: addModel.Id,
               RoleId: userVo.RoleId,
            }
            userRole.Insert()
         }
         return true, "添加成功"
      } else {
         return false, "添加失败"
      }
   }
}
func (sv UserService) FindAll(curUserId string) (allAppUser []vo.LoginAppUser, err error) {
   var userE models.SysUser
   rows, err := userE.SelectById(curUserId)
   if err != nil || rows == 0 {
      return nil, err
   } else {
      list, _ := userE.FindAll()
      var myself vo.LoginAppUser
      if list != nil {
         tmpList := make([]vo.LoginAppUser, 1)
         var roleE models.SysRole
         roles := roleE.FindByUserId(userE.Id)
         if roles != nil && len(roles) == 1 {
            if roles[0].Name == "超级管理员" {
               for _, u := range list {
                  if u.Id == curUserId {
                     user2LoginAppUser(&u, &myself)
                  } else {
                     var appUE vo.LoginAppUser
                     user2LoginAppUser(&u, &appUE)
                     tmpList = append(tmpList, appUE)
                  }
               }
            } else if roles[0].Name == "管理员" {
               for _, u := range list {
                  var appUE vo.LoginAppUser
                  appUERoles := roleE.FindByUserId(u.Id)
                  if appUERoles != nil && len(appUERoles) == 1 {
                     if u.Id == curUserId {
                        user2LoginAppUser(&u, &myself)
                     } else if appUERoles[0].Name == "普通用户" {
                        user2LoginAppUser(&u, &appUE)
                        tmpList = append(tmpList, appUE)
                     }
                  }
               }
            } else if roles[0].Name == "普通用户" {
               for _, u := range list {
                  //var appUE vo.LoginAppUser
                  appUERoles := roleE.FindByUserId(u.Id)
                  if appUERoles != nil && len(appUERoles) == 1 {
                     if u.Id == curUserId {
                        user2LoginAppUser(&u, &myself)
                     }
                  }
               }
            }
         }
         tmpList[0] = myself
         return tmpList, nil
      } else {
         return []vo.LoginAppUser{}, nil
      }
   }
}
func (sv UserService) FindByUserId(userId string) (userAuth vo.UserAuthVo, err error) {
   var userE models.SysUser
   rows, _ := userE.SelectById(userId)
   if rows > 0 {
      //userAuth.Id = userE.Id
      //userAuth.Username = userE.Username
      //userAuth.Nickname = userE.Nickname
      //userAuth.HeadPic = userE.HeadPic
      userAuth.SysUser = userE
      var appUE vo.LoginAppUser
      user2LoginAppUser(&userE, &appUE)
      userAuth.Menus = appUE.SysMenus
      //var roleE models.SysRole
      //var menuE models.SysMenu
      //userAuth.Menus = menuE.FindByUserId(userE.Id)
      //if nil == userAuth.Menus {
      //   roles := roleE.FindByUserId(userE.Id)
      //   if roles!=nil && len(roles) == 1{
      //      userAuth.Menus = menuE.FindByRoleId(roles[0].Id)
      //   }
      //}
      return userAuth, nil
   }
   return userAuth, errors.New("user not found")
}
func (sv UserService) SaveAuth(userEditVo *vo.UserEditVo, opuserId string) error {
   var userE models.SysUser
   rows, e1 := userE.SelectById(userEditVo.Id)
   if e1 == nil && rows > 0 {
      //var userTmp models.SysUser
      //userEditVo.UserName = rows[]
      //existU, e2 := userTmp.FindByName(userEditVo.UserName)
      //existU := -1
      e2 := e1
      if e2 == nil {
         /*if existU > 0 && userTmp.Id != userE.Id { //企图修改为他人的用户名
            return false
         }
         reUname := false
         if existU == 0 { //修改用户名为一个未被使用的用户名
            reUname = true
         }*/
         //uNewPwd, _ := util.Encrypt(userEditVo.NewPwd)
         var roleE models.SysRole
         roles := roleE.FindByUserId(userE.Id)
         if roles != nil && len(roles) == 1 {
            userRole := roles[0]
            oproles := roleE.FindByUserId(opuserId)
            if oproles[0].Name == "管理员" && userRole.Name != "普通用户" {
               return errors.New("管理员只能修改普通用户权限")
            }
            if oproles[0].Name == "普通用户" {
               return errors.New("普通用户不能修改权限")
            }
            //userRole := roles[0]
            var err error
            tx := models.GetDB().Begin()
            defer func() {
               if err != nil && tx != nil {
                  tx.Rollback()
               }
            }()
            /*if reUname && userRole.Name == "普通用户" { //只有普通用户才允许修改用户名
               err = tx.Exec("update sys_user set username=? where id=?", userEditVo.UserName, userEditVo.Id).Error
               if err !=nil {
                  return false
               }
            }
            if userEditVo.NewPwd !="" {//如果密码不为空,则修改密码
               err = tx.Exec("update sys_user set password=? where id=?",uNewPwd,userEditVo.Id).Error
               if err !=nil {
                  return false
               }
            }*/
            //处理当前用户权限
            err = tx.Exec("delete from sys_user_menu where user_id=?", userE.Id).Error
            if err != nil {
               return err
            }
            for _, menuId := range userEditVo.MenuIds {
               err = tx.Exec("insert into sys_user_menu (id,user_id,menu_id) values (?,?,?)", uuid.NewV4().String(), userE.Id, menuId).Error
               if err != nil {
                  return err
               }
            }
            tx.Commit()
            return nil
         } else {
            return errors.New("user role is not set")
         }
      }
   }
   return errors.New("user not found")
}
//上传头像
func (sv UserService) UploadHeadPic(fileBytes []byte, filename string) (string, error) {
   fileExt := path.Ext(filename)
   fileExt = strings.ToLower(fileExt)
   if fileExt != ".jpg" && fileExt != ".jpeg" && fileExt != ".png" {
      return "", errors.New("pic format error")
   }
   var sApi bhomedbapi.SysSetApi
   flag, localConf := sApi.GetServerInfo()
   if !flag || localConf.AlarmIp == "" || localConf.AlarmPort == 0 {
      logger.Debug("localConf err")
      return "", errors.New("localConf err")
   }
   var weedfsUri = "http://" + localConf.WebPicIp + ":" + strconv.Itoa(int(localConf.WebPicPort)) + "/submit?collection=headpic"
   logger.Debug("weedfsUri:", weedfsUri)
   weedFilePath, err := WeedFSClient.UploadFile(weedfsUri, filename, fileBytes, 5*time.Second)
   if err != nil {
      logger.Debug("WeedFSClient.UploadFile err:", err, filename)
      return "", errors.New("WeedFSClient.UploadFile err")
   }
   return weedFilePath, nil
}
//更新头像、昵称
func (sv UserService) UpdateProfile(userEditVo *vo.UserEditVo) bool {
   var userE models.SysUser
   rows, e1 := userE.SelectById(userEditVo.Id)
   if e1 == nil && rows > 0 {
      var err error
      tx := models.GetDB().Begin()
      defer func() {
         if err != nil && tx != nil {
            tx.Rollback()
         }
      }()
      if userEditVo.HeadPic != "" {
         err = tx.Exec("update sys_user set headpic=? where id=?", userEditVo.HeadPic, userEditVo.Id).Error
         if err != nil {
            return false
         }
      }
      if userEditVo.BackgroundPic != "" {
         err = tx.Exec("update sys_user set backgroundpic = ? where id = ?", userEditVo.BackgroundPic, userEditVo.Id).Error
         if err != nil {
            return false
         }
      }
      if userEditVo.IconType != 0 {
         err = tx.Exec("update sys_user set useIconType = ? where id = ?", userEditVo.IconType, userEditVo.Id).Error
         if err != nil {
            return false
         }
      }
      if userEditVo.Nickname != "" {
         err = tx.Exec("update sys_user set nickname=? where id=?", userEditVo.Nickname, userEditVo.Id).Error
         if err != nil {
            return false
         }
      }
      if userEditVo.NewPwd != "" {
         uppwd, err := util.Encrypt(userEditVo.NewPwd)
         if nil == err {
            err = tx.Exec("update sys_user set password=? where id=?", uppwd, userEditVo.Id).Error
            if err != nil {
               return false
            }
         } else {
            return false
         }
      }
      tx.Commit()
      return true
   }
   return false
}
func (sv UserService) GetRoles(useId string) ([]models.SysRole, error) {
   var roleE models.SysRole
   roles := roleE.FindByUserId(useId)
   tempList, err := roleE.FindAll()
   if nil != err {
      return tempList, err
   }
   var res = make([]models.SysRole, 1)
   for _, role := range tempList {
      if roles[0].Name == "管理员" {
         if role.Name == "普通用户" {
            res[0] = role
         }
      } else if "超级管理员" == roles[0].Name && role.Name != "超级管理员" {
         if role.Name == "管理员" {
            res[0] = role
         } else {
            res = append(res, role)
         }
      }
   }
   return res, nil
}
func (sv UserService) GetProfile(uid string) (loginAppUser vo.LoginAppUser) {
   var userE models.SysUser
   rows, err := userE.SelectById(uid)
   fmt.Println("user icon type is :", userE.UseIconType)
   if err != nil || rows == 0 {
      return loginAppUser
   }
   user2LoginAppUser(&userE, &loginAppUser)
   var roleE models.SysRole
   roles := roleE.FindByUserId(userE.Id)
   loginAppUser.SysRoles = roles
   if len(roles) > 0 {
      loginAppUser.RoleName = roles[0].Name
   }
   loginAppUser.HeadPic = userE.HeadPic
   loginAppUser.BackgroundPic = userE.BackgroundPic
   // loginAppUser.UseIconType = userE.UseIconType
   fmt.Println("loginAppUser icon type is :", loginAppUser.UseIconType)
   return loginAppUser
}
package service
import (
   "errors"
   "fmt"
   "path"
   "strconv"
   "strings"
   "time"
   "vamicro/extend/util"
   "vamicro/system-service/models"
   "vamicro/system-service/vo"
   "basic.com/fileServer/WeedFSClient.git"
   "basic.com/valib/bhomedbapi.git"
   "basic.com/valib/logger.git"
   uuid "github.com/satori/go.uuid"
)
type UserService struct {
}
func (sv UserService) Login(loginVo vo.UserVo) (flag bool, loginAppUser vo.LoginAppUser) {
   if loginVo.UserName == "" || loginVo.Password == "" {
      return false, loginAppUser
   }
   /*if AuthInfo.ExpirationTime < time.Now().Unix() {
      loginAppUser.RoleName = "未授权用户"
      return false,loginAppUser
   }*/
   var userE models.SysUser
   rows, err := userE.FindByName(loginVo.UserName)
   if err != nil || rows == 0 {
      return false, loginAppUser
   }
   if pwdStr, err := util.Encrypt(loginVo.Password); err == nil && pwdStr == userE.Password {
      user2LoginAppUser(&userE, &loginAppUser)
      var roleE models.SysRole
      roles := roleE.FindByUserId(userE.Id)
      loginAppUser.SysRoles = roles
      if len(roles) > 0 {
         loginAppUser.RoleName = roles[0].Name
      }
      loginAppUser.HeadPic = userE.HeadPic
      return true, loginAppUser
   }
   return false, loginAppUser
}
func user2LoginAppUser(userE *models.SysUser, loginAppUser *vo.LoginAppUser) {
   loginAppUser.Id = userE.Id
   loginAppUser.Username = userE.Username
   loginAppUser.Nickname = userE.Nickname
   loginAppUser.HeadPic = userE.HeadPic
   loginAppUser.BackgroundPic = userE.BackgroundPic
   loginAppUser.UseIconType = userE.UseIconType
   permissions := make([]string, 0)
   pM := make(map[string]models.SysMenu, 0)
   var roleE models.SysRole
   var menuE models.SysMenu
   var srm models.SysRoleMenu
   var sum models.SysUserMenu
   allMenus := menuE.FindAll()
   roles := roleE.FindByUserId(userE.Id) //用户角色
   loginAppUser.SysRoles = roles
   if roles != nil && allMenus != nil {
      menuMap := make(map[string]models.SysMenu, 0)
      for _, menuE := range allMenus {
         menuMap[menuE.Id] = menuE
      }
      var userMenus []vo.SysMenuVo
      if len(roles) > 0 && roles[0].Name == "超级管理员" {
         for _, menuModel := range menuMap {
            userMenus = append(userMenus, vo.SysMenuVo{
               SysMenu: menuModel,
            })
            pM[menuModel.Id] = menuModel
         }
      } else {
         sumList, _ := sum.FindByRoleId(userE.Id)
         if nil != sumList && len(sumList) > 0 {
            for _, srmE := range sumList {
               if _, ok := pM[srmE.MenuId]; !ok {
                  menuModel := menuMap[srmE.MenuId]
                  pM[menuModel.Id] = menuModel
                  pidArr := strings.Split(menuModel.ParentIds, ",")
                  for _, pid := range pidArr {
                     if pid != "" && pid != "0" {
                        if _, k := pM[pid]; !k {
                           pM[pid] = menuMap[pid]
                        }
                     }
                  }
                  userMenus = append(userMenus, vo.SysMenuVo{
                     SysMenu: menuModel,
                  })
               }
            }
         } else {
            for _, role := range roles {
               srmList, _ := srm.FindByRoleId(role.Id)
               if srmList != nil {
                  //var userMenus []vo.SysMenuVo
                  for _, srmE := range srmList {
                     if _, ok := pM[srmE.MenuId]; !ok {
                        menuModel := menuMap[srmE.MenuId]
                        pM[menuModel.Id] = menuModel
                        pidArr := strings.Split(menuModel.ParentIds, ",")
                        for _, pid := range pidArr {
                           if pid != "" && pid != "0" {
                              if _, k := pM[pid]; !k {
                                 pM[pid] = menuMap[pid]
                              }
                           }
                        }
                        userMenus = append(userMenus, vo.SysMenuVo{
                           SysMenu: menuModel,
                        })
                     }
                  }
               }
            }
         }
      }
      loginAppUser.SysMenus = userMenus
   }
   for _, v := range pM {
      permissions = append(permissions, v.Permission)
   }
   loginAppUser.Permissions = permissions
   logger.Debug("permissions:", permissions)
}
func (sv UserService) UpdatePwd(userId string, oldPwd string, newPwd string, opUserId string) (bool, error) {
   var userE models.SysUser
   rows, err := userE.SelectById(userId)
   if err != nil || rows == 0 {
      return false, errors.New("用户未找到!")
   }
   if oldPwd != "" {
      if encryOldPwd, _ := util.Encrypt(oldPwd); encryOldPwd == userE.Password { //旧密码匹配
         encryNewPwd, err := util.Encrypt(newPwd)
         if err == nil {
            return userE.UpdatePwd(userId, encryNewPwd), nil
         } else {
            return false, err
         }
      } else {
         return false, errors.New("原密码不正确!")
      }
   } else {
      var roleE models.SysRole
      roles := roleE.FindByUserId(userE.Id) //用户角色
      opRoles := roleE.FindByUserId(opUserId)
      if len(roles) > 0 && roles[0].Name == "超级管理员" {
         return false, errors.New("您没有权限修改超级管理员的密码!")
      }
      if len(roles) > 0 && roles[0].Name == "管理员" {
         if len(opRoles) < 0 || opRoles[0].Name != "超级管理员" {
            return false, errors.New("您没有权限修改管理员的密码!")
         }
      }
      if len(roles) > 0 && roles[0].Name == "普通用户" {
         if len(opRoles) < 0 || opRoles[0].Name != "超级管理员" && opRoles[0].Name != "管理员" {
            return false, errors.New("您没有权限修改普通用户的密码!")
         }
      }
      encryNewPwd, err := util.Encrypt(newPwd)
      if err == nil {
         return userE.UpdatePwd(userId, encryNewPwd), nil
      } else {
         return false, err
      }
   }
}
func (sv UserService) AddUser(userVo vo.UserVo) (bool, string) {
   var userE models.SysUser
   var userR models.SysRole
   rows, err := userE.FindByName(userVo.UserName)
   if err != nil {
      return false, ""
   }
   if rows > 0 {
      return false, "用户名已存在"
   } else {
      if len([]byte(userVo.Password)) < 6 {
         return false, "密码长度不能小于6位"
      }
      pwdStr, err := util.Encrypt(userVo.Password)
      if err != nil {
         return false, "添加失败"
      }
      addModel := models.SysUser{
         Username:      userVo.UserName,
         Password:      pwdStr,
         Nickname:      userVo.Nickname,
         HeadPic:       userVo.HeadPic,
         BackgroundPic: models.DefaultBgPic,
      }
      if flag, err := addModel.Insert(); flag && err == nil {
         if "" == userVo.RoleId {
            _, err := userR.FindByName("普通用户")
            if err == nil {
               userVo.RoleId = userR.Id
            }
         }
         if "" != userVo.RoleId {
            userRole := models.SysUserRole{
               UserId: addModel.Id,
               RoleId: userVo.RoleId,
            }
            userRole.Insert()
         }
         return true, "添加成功"
      } else {
         return false, "添加失败"
      }
   }
}
func (sv UserService) FindAll(curUserId string) (allAppUser []vo.LoginAppUser, err error) {
   var userE models.SysUser
   rows, err := userE.SelectById(curUserId)
   if err != nil || rows == 0 {
      return nil, err
   } else {
      list, _ := userE.FindAll()
      var myself vo.LoginAppUser
      if list != nil {
         tmpList := make([]vo.LoginAppUser, 1)
         var roleE models.SysRole
         roles := roleE.FindByUserId(userE.Id)
         if roles != nil && len(roles) == 1 {
            if roles[0].Name == "超级管理员" {
               for _, u := range list {
                  if u.Id == curUserId {
                     user2LoginAppUser(&u, &myself)
                  } else {
                     var appUE vo.LoginAppUser
                     user2LoginAppUser(&u, &appUE)
                     tmpList = append(tmpList, appUE)
                  }
               }
            } else if roles[0].Name == "管理员" {
               for _, u := range list {
                  var appUE vo.LoginAppUser
                  appUERoles := roleE.FindByUserId(u.Id)
                  if appUERoles != nil && len(appUERoles) == 1 {
                     if u.Id == curUserId {
                        user2LoginAppUser(&u, &myself)
                     } else if appUERoles[0].Name == "普通用户" {
                        user2LoginAppUser(&u, &appUE)
                        tmpList = append(tmpList, appUE)
                     }
                  }
               }
            } else if roles[0].Name == "普通用户" {
               for _, u := range list {
                  //var appUE vo.LoginAppUser
                  appUERoles := roleE.FindByUserId(u.Id)
                  if appUERoles != nil && len(appUERoles) == 1 {
                     if u.Id == curUserId {
                        user2LoginAppUser(&u, &myself)
                     }
                  }
               }
            }
         }
         tmpList[0] = myself
         return tmpList, nil
      } else {
         return []vo.LoginAppUser{}, nil
      }
   }
}
func (sv UserService) FindByUserId(userId string) (userAuth vo.UserAuthVo, err error) {
   var userE models.SysUser
   rows, _ := userE.SelectById(userId)
   if rows > 0 {
      //userAuth.Id = userE.Id
      //userAuth.Username = userE.Username
      //userAuth.Nickname = userE.Nickname
      //userAuth.HeadPic = userE.HeadPic
      userAuth.SysUser = userE
      var appUE vo.LoginAppUser
      user2LoginAppUser(&userE, &appUE)
      userAuth.Menus = appUE.SysMenus
      //var roleE models.SysRole
      //var menuE models.SysMenu
      //userAuth.Menus = menuE.FindByUserId(userE.Id)
      //if nil == userAuth.Menus {
      //   roles := roleE.FindByUserId(userE.Id)
      //   if roles!=nil && len(roles) == 1{
      //      userAuth.Menus = menuE.FindByRoleId(roles[0].Id)
      //   }
      //}
      return userAuth, nil
   }
   return userAuth, errors.New("user not found")
}
func (sv UserService) SaveAuth(userEditVo *vo.UserEditVo, opuserId string) error {
   var userE models.SysUser
   rows, e1 := userE.SelectById(userEditVo.Id)
   if e1 == nil && rows > 0 {
      //var userTmp models.SysUser
      //userEditVo.UserName = rows[]
      //existU, e2 := userTmp.FindByName(userEditVo.UserName)
      //existU := -1
      e2 := e1
      if e2 == nil {
         /*if existU > 0 && userTmp.Id != userE.Id { //企图修改为他人的用户名
            return false
         }
         reUname := false
         if existU == 0 { //修改用户名为一个未被使用的用户名
            reUname = true
         }*/
         //uNewPwd, _ := util.Encrypt(userEditVo.NewPwd)
         var roleE models.SysRole
         roles := roleE.FindByUserId(userE.Id)
         if roles != nil && len(roles) == 1 {
            userRole := roles[0]
            oproles := roleE.FindByUserId(opuserId)
            if oproles[0].Name == "管理员" && userRole.Name != "普通用户" {
               return errors.New("管理员只能修改普通用户权限")
            }
            if oproles[0].Name == "普通用户" {
               return errors.New("普通用户不能修改权限")
            }
            //userRole := roles[0]
            var err error
            tx := models.GetDB().Begin()
            defer func() {
               if err != nil && tx != nil {
                  tx.Rollback()
               }
            }()
            /*if reUname && userRole.Name == "普通用户" { //只有普通用户才允许修改用户名
               err = tx.Exec("update sys_user set username=? where id=?", userEditVo.UserName, userEditVo.Id).Error
               if err !=nil {
                  return false
               }
            }
            if userEditVo.NewPwd !="" {//如果密码不为空,则修改密码
               err = tx.Exec("update sys_user set password=? where id=?",uNewPwd,userEditVo.Id).Error
               if err !=nil {
                  return false
               }
            }*/
            //处理当前用户权限
            err = tx.Exec("delete from sys_user_menu where user_id=?", userE.Id).Error
            if err != nil {
               return err
            }
            for _, menuId := range userEditVo.MenuIds {
               err = tx.Exec("insert into sys_user_menu (id,user_id,menu_id) values (?,?,?)", uuid.NewV4().String(), userE.Id, menuId).Error
               if err != nil {
                  return err
               }
            }
            tx.Commit()
            return nil
         } else {
            return errors.New("user role is not set")
         }
      }
   }
   return errors.New("user not found")
}
//上传头像
func (sv UserService) UploadHeadPic(fileBytes []byte, filename string) (string, error) {
   fileExt := path.Ext(filename)
   fileExt = strings.ToLower(fileExt)
   if fileExt != ".jpg" && fileExt != ".jpeg" && fileExt != ".png" {
      return "", errors.New("pic format error")
   }
   var sApi bhomedbapi.SysSetApi
   flag, localConf := sApi.GetServerInfo()
   if !flag || localConf.AlarmIp == "" || localConf.AlarmPort == 0 {
      logger.Debug("localConf err")
      return "", errors.New("localConf err")
   }
   var weedfsUri = "http://" + localConf.WebPicIp + ":" + strconv.Itoa(int(localConf.WebPicPort)) + "/submit?collection=headpic"
   logger.Debug("weedfsUri:", weedfsUri)
   weedFilePath, err := WeedFSClient.UploadFile(weedfsUri, filename, fileBytes, 5*time.Second)
   if err != nil {
      logger.Debug("WeedFSClient.UploadFile err:", err, filename)
      return "", errors.New("WeedFSClient.UploadFile err")
   }
   return weedFilePath, nil
}
//更新头像、昵称
func (sv UserService) UpdateProfile(userEditVo *vo.UserEditVo) bool {
   var userE models.SysUser
   rows, e1 := userE.SelectById(userEditVo.Id)
   if e1 == nil && rows > 0 {
      var err error
      tx := models.GetDB().Begin()
      defer func() {
         if err != nil && tx != nil {
            tx.Rollback()
         }
      }()
      if userEditVo.HeadPic != "" {
         err = tx.Exec("update sys_user set headpic=? where id=?", userEditVo.HeadPic, userEditVo.Id).Error
         if err != nil {
            return false
         }
      }
      if userEditVo.BackgroundPic != "" {
         err = tx.Exec("update sys_user set backgroundpic = ? where id = ?", userEditVo.BackgroundPic, userEditVo.Id).Error
         if err != nil {
            return false
         }
      }
      if userEditVo.IconType != 0 {
         err = tx.Exec("update sys_user set useIconType = ? where id = ?", userEditVo.IconType, userEditVo.Id).Error
         if err != nil {
            return false
         }
      }
      if userEditVo.Nickname != "" {
         err = tx.Exec("update sys_user set nickname=? where id=?", userEditVo.Nickname, userEditVo.Id).Error
         if err != nil {
            return false
         }
      }
      if userEditVo.NewPwd != "" {
         uppwd, err := util.Encrypt(userEditVo.NewPwd)
         if nil == err {
            err = tx.Exec("update sys_user set password=? where id=?", uppwd, userEditVo.Id).Error
            if err != nil {
               return false
            }
         } else {
            return false
         }
      }
      tx.Commit()
      return true
   }
   return false
}
func (sv UserService) GetRoles(useId string) ([]models.SysRole, error) {
   var roleE models.SysRole
   roles := roleE.FindByUserId(useId)
   tempList, err := roleE.FindAll()
   if nil != err {
      return tempList, err
   }
   var res = make([]models.SysRole, 1)
   for _, role := range tempList {
      if roles[0].Name == "管理员" {
         if role.Name == "普通用户" {
            res[0] = role
         }
      } else if "超级管理员" == roles[0].Name && role.Name != "超级管理员" {
         if role.Name == "管理员" {
            res[0] = role
         } else {
            res = append(res, role)
         }
      }
   }
   return res, nil
}
func (sv UserService) GetProfile(uid string) (loginAppUser vo.LoginAppUser) {
   var userE models.SysUser
   rows, err := userE.SelectById(uid)
   fmt.Println("user icon type is :", userE.UseIconType)
   if err != nil || rows == 0 {
      return loginAppUser
   }
   user2LoginAppUser(&userE, &loginAppUser)
   var roleE models.SysRole
   roles := roleE.FindByUserId(userE.Id)
   loginAppUser.SysRoles = roles
   if len(roles) > 0 {
      loginAppUser.RoleName = roles[0].Name
   }
   loginAppUser.HeadPic = userE.HeadPic
   loginAppUser.BackgroundPic = userE.BackgroundPic
   // loginAppUser.UseIconType = userE.UseIconType
   fmt.Println("loginAppUser icon type is :", loginAppUser.UseIconType)
   return loginAppUser
}