Browse Source

fix(用户): 用户拥有多个角色时,查询用户重复问题修复

lk 2 years ago
parent
commit
00abbbee8d
1 changed files with 10 additions and 0 deletions
  1. 10 0
      opms_admin/app/service/sys_user.go

+ 10 - 0
opms_admin/app/service/sys_user.go

@@ -84,6 +84,7 @@ func (s *UserService) Login(username, password string) (*request.UserInfo, error
 
 func (s *UserService) GetUserList(req *model.SysUserSearchReq) (total int, userList []*model.SysUserRes, err error) {
 	userModel := s.Dao.As("u")
+	isNeedGroup := false
 	if req.KeyWords != "" {
 		keyWords := "%" + req.KeyWords + "%"
 		userModel = userModel.Where("u.user_name like ? or  u.nick_name like ?", keyWords, keyWords)
@@ -107,17 +108,26 @@ func (s *UserService) GetUserList(req *model.SysUserSearchReq) (total int, userL
 		userModel = userModel.WhereLTE("u.created_time", req.EndTime)
 	}
 	if len(req.Roles) > 0 {
+		isNeedGroup = true
 		insql := dao.NewSysRoleDao(s.Tenant).Fields(dao.SysRole.C.Id).WhereIn(dao.SysRole.C.RoleKey, req.Roles).M
 		userModel = userModel.LeftJoin(dao.SysUserRole.Table, "ur", "u.id=ur.user_id").WhereIn("ur.role_id", insql)
 	}
 	if len(req.Posts) > 0 {
+		isNeedGroup = true
 		insql := dao.NewSysPostDao(s.Tenant).Fields(dao.SysPost.C.Id).WhereIn(dao.SysPost.C.PostCode, req.Posts).M
 		userModel = userModel.LeftJoin(dao.SysUserPost.Table, "up", "u.id=up.user_id").WhereIn("up.post_id", insql)
 	}
 	if len(req.Groups) > 0 {
+		isNeedGroup = true
 		insql := dao.NewSysGroupDao(s.Tenant).Fields(dao.SysGroup.C.Id).WhereIn(dao.SysGroup.C.GroupCode, req.Groups).M
 		userModel = userModel.LeftJoin(dao.SysUserGroup.Table, "ug", "u.id=ug.user_id").WhereIn("ug.group_id", insql)
 	}
+
+	// 连表查询导致数据重复
+	if isNeedGroup {
+		userModel = userModel.GroupBy("u.id")
+	}
+
 	total, err = userModel.Count()
 	if err != nil {
 		return