|
@@ -7,6 +7,8 @@ import (
|
|
|
"kpt-pasture/model"
|
|
|
"kpt-pasture/util"
|
|
|
"net/http"
|
|
|
+ "strconv"
|
|
|
+ "strings"
|
|
|
"time"
|
|
|
|
|
|
"gitee.com/xuyiping_admin/pkg/logger/zaplog"
|
|
@@ -44,12 +46,19 @@ func (s *StoreEntry) Login(ctx context.Context, req *pasturePb.SearchUserRequest
|
|
|
return nil, xerr.Customf("该账号已被删除,请联系管理员")
|
|
|
}
|
|
|
|
|
|
- systemRole := &model.SystemRole{Id: systemUser.RoleId}
|
|
|
- if err := s.DB.Where("is_show = ? and is_delete = ?", pasturePb.IsShow_Ok, pasturePb.IsShow_Ok).
|
|
|
- First(systemRole).Error; err != nil {
|
|
|
+ systemRoleList := make([]*model.SystemRole, 0)
|
|
|
+ if err := s.DB.Model(new(model.SystemRole)).
|
|
|
+ Where("is_show = ? and is_delete = ?", pasturePb.IsShow_Ok, pasturePb.IsShow_Ok).
|
|
|
+ Where("id IN ?", strings.Split(systemUser.RoleIds, ",")).
|
|
|
+ Find(&systemRoleList).Error; err != nil {
|
|
|
zaplog.Error("Login", zap.Any("systemRole", err))
|
|
|
}
|
|
|
|
|
|
+ roleNameList := make([]string, 0)
|
|
|
+ for _, role := range systemRoleList {
|
|
|
+ roleNameList = append(roleNameList, role.Name)
|
|
|
+ }
|
|
|
+
|
|
|
jwtToken := jwt.NewJWTTokenGen(s.Cfg.AppName, s.Cfg.JwtTokenKeyConfig.PrivateKey)
|
|
|
token, err := jwtToken.GenerateToken(systemUser.Name, s.Cfg.JwtExpireTime)
|
|
|
if err != nil {
|
|
@@ -73,7 +82,7 @@ func (s *StoreEntry) Login(ctx context.Context, req *pasturePb.SearchUserRequest
|
|
|
Expires: expires,
|
|
|
RefreshToken: token,
|
|
|
Username: systemUser.Name,
|
|
|
- Roles: []string{systemRole.Name},
|
|
|
+ Roles: roleNameList,
|
|
|
Avatar: systemUser.Avatar,
|
|
|
FarmId: farmList[0].FarmId,
|
|
|
},
|
|
@@ -101,8 +110,18 @@ func (s *StoreEntry) SearchSystemUserList(ctx context.Context, req *pasturePb.Se
|
|
|
pref.Where("mobile = ?", req.Mobile)
|
|
|
}
|
|
|
|
|
|
- if req.DeptId > 0 {
|
|
|
- pref.Where("dept_id = ?", req.DeptId)
|
|
|
+ if req.DepthId > 0 {
|
|
|
+ systemDept := &model.SystemDept{}
|
|
|
+ if err = s.DB.Model(new(model.SystemDept)).Where("id = ?", req.DepthId).
|
|
|
+ Where("is_delete = ?", operationPb.IsShow_OK).
|
|
|
+ First(systemDept).Error; err != nil {
|
|
|
+ return nil, xerr.Custom("部门信息错误")
|
|
|
+ }
|
|
|
+
|
|
|
+ pref.Where("pasture_id = ?", systemDept.PastureId)
|
|
|
+ if systemDept.DeptType == pasturePb.Depth_Department {
|
|
|
+ pref.Where("dept_id = ?", req.DepthId)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if req.IsShow > 0 {
|
|
@@ -113,7 +132,7 @@ func (s *StoreEntry) SearchSystemUserList(ctx context.Context, req *pasturePb.Se
|
|
|
Count(&count).
|
|
|
Limit(int(pagination.PageSize)).
|
|
|
Offset(int(pagination.PageOffset)).
|
|
|
- Find(&systemUserList).Debug().Error; err != nil {
|
|
|
+ Find(&systemUserList).Error; err != nil {
|
|
|
return nil, xerr.WithStack(err)
|
|
|
}
|
|
|
|
|
@@ -154,14 +173,15 @@ func (s *StoreEntry) DeleteSystemUser(ctx context.Context, userId int64) error {
|
|
|
systemUser := &model.SystemUser{
|
|
|
Id: userId,
|
|
|
}
|
|
|
- if err := s.DB.First(systemUser).Error; err != nil {
|
|
|
+ if err := s.DB.Model(new(model.SystemUser)).First(systemUser).Error; err != nil {
|
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
return xerr.Custom("该用户不存在")
|
|
|
}
|
|
|
return xerr.WithStack(err)
|
|
|
}
|
|
|
|
|
|
- if err := s.DB.Model(systemUser).Update("is_delete", operationPb.IsShow_NO).Error; err != nil {
|
|
|
+ if err := s.DB.Model(systemUser).
|
|
|
+ Update("is_delete", operationPb.IsShow_NO).Error; err != nil {
|
|
|
return xerr.WithStack(err)
|
|
|
}
|
|
|
return nil
|
|
@@ -169,9 +189,7 @@ func (s *StoreEntry) DeleteSystemUser(ctx context.Context, userId int64) error {
|
|
|
|
|
|
// IsShowSystemUser 用户是否启用
|
|
|
func (s *StoreEntry) IsShowSystemUser(ctx context.Context, userId int64) error {
|
|
|
- systemUser := &model.SystemUser{
|
|
|
- Id: userId,
|
|
|
- }
|
|
|
+ systemUser := &model.SystemUser{Id: userId}
|
|
|
if err := s.DB.First(systemUser).Error; err != nil {
|
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
return xerr.Custom("该用户不存在")
|
|
@@ -194,12 +212,14 @@ func (s *StoreEntry) SystemUserCreateOrUpdate(ctx context.Context, req *pastureP
|
|
|
systemUser := &model.SystemUser{}
|
|
|
if req.Id > 0 {
|
|
|
systemUser.Id = int64(req.Id)
|
|
|
- if err := s.DB.First(systemUser).Error; err != nil {
|
|
|
+ if err := s.DB.Model(new(model.SystemUser)).First(systemUser).Error; err != nil {
|
|
|
return xerr.WithStack(err)
|
|
|
}
|
|
|
req.Password = systemUser.Password
|
|
|
} else {
|
|
|
- if err := s.DB.Where("name = ?", req.Name).First(systemUser).Error; err != nil {
|
|
|
+ if err := s.DB.Model(new(model.SystemUser)).
|
|
|
+ Where("name = ?", req.Name).
|
|
|
+ First(systemUser).Error; err != nil {
|
|
|
if !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
return xerr.WithStack(err)
|
|
|
}
|
|
@@ -208,15 +228,26 @@ func (s *StoreEntry) SystemUserCreateOrUpdate(ctx context.Context, req *pastureP
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if err := s.DB.Model(&model.SystemUser{}).Where(map[string]interface{}{
|
|
|
- "id": req.Id,
|
|
|
- }).Assign(map[string]interface{}{
|
|
|
+ deptIds := ""
|
|
|
+ if len(req.DepthList) > 0 {
|
|
|
+ for _, dept := range req.DepthList {
|
|
|
+ deptIds += fmt.Sprintf("%d,", dept.Id)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if len(deptIds) > 0 {
|
|
|
+ deptIds = strings.TrimRight(deptIds, ",")
|
|
|
+ }
|
|
|
+
|
|
|
+ if err := s.DB.Model(&model.SystemUser{}).
|
|
|
+ Where(map[string]interface{}{
|
|
|
+ "id": req.Id,
|
|
|
+ }).Assign(map[string]interface{}{
|
|
|
"name": req.Name,
|
|
|
"nick_name": req.NickName,
|
|
|
"mobile": req.Mobile,
|
|
|
"gender": req.Gender,
|
|
|
"password": req.Password,
|
|
|
- "dept_id": req.DeptId,
|
|
|
+ "dept_ids": deptIds,
|
|
|
"remarks": req.Remarks,
|
|
|
"is_delete": operationPb.IsShow_OK,
|
|
|
"is_show": req.IsShow,
|
|
@@ -253,13 +284,19 @@ func (s *StoreEntry) SystemUserRole(ctx context.Context, userId int64) (*pasture
|
|
|
return nil, xerr.WithStack(err)
|
|
|
}
|
|
|
|
|
|
+ roleIds := make([]int32, 0)
|
|
|
+ if len(systemUser.RoleIds) > 0 {
|
|
|
+ roleIdsString := strings.Split(systemUser.RoleIds, ",")
|
|
|
+ for _, r := range roleIdsString {
|
|
|
+ r1, _ := strconv.Atoi(r)
|
|
|
+ roleIds = append(roleIds, int32(r1))
|
|
|
+ }
|
|
|
+ }
|
|
|
return &pasturePb.SystemUserRoleResponse{
|
|
|
Code: http.StatusOK,
|
|
|
Msg: "ok",
|
|
|
Data: &pasturePb.UserRoleData{
|
|
|
- RoleIds: []int32{
|
|
|
- int32(systemUser.RoleId),
|
|
|
- },
|
|
|
+ RoleIds: roleIds,
|
|
|
},
|
|
|
}, nil
|
|
|
}
|
|
@@ -273,16 +310,28 @@ func (s *StoreEntry) SystemUserRoleSave(ctx context.Context, req *pasturePb.Syst
|
|
|
return xerr.WithStack(err)
|
|
|
}
|
|
|
|
|
|
- // todo 用户觉得绑定单个还是多少q
|
|
|
- systemRole := &model.SystemRole{Id: int64(req.RoleIds[0])}
|
|
|
- if err := s.DB.First(systemRole).Error; err != nil {
|
|
|
+ systemRoleList := make([]*model.SystemRole, 0)
|
|
|
+ if err := s.DB.Model(new(model.SystemRole)).
|
|
|
+ Where("is_delete = ?", pasturePb.IsShow_Ok).
|
|
|
+ Where("id IN ?", req.RoleIds).
|
|
|
+ Find(&systemRoleList).Error; err != nil {
|
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
return xerr.Custom("该角色不存在")
|
|
|
}
|
|
|
return xerr.WithStack(err)
|
|
|
}
|
|
|
+
|
|
|
+ roleIdsStr := ""
|
|
|
+ for _, systemRole := range systemRoleList {
|
|
|
+ roleIdsStr += fmt.Sprintf("%d,", systemRole.Id)
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(roleIdsStr) > 0 {
|
|
|
+ roleIdsStr = strings.TrimRight(roleIdsStr, ",")
|
|
|
+ }
|
|
|
+
|
|
|
if err := s.DB.Model(systemUser).
|
|
|
- Update("role_id", systemRole.Id).Error; err != nil {
|
|
|
+ Update("role_ids", roleIdsStr).Error; err != nil {
|
|
|
return xerr.WithStack(err)
|
|
|
}
|
|
|
return nil
|
|
@@ -295,12 +344,15 @@ func (s *StoreEntry) GetSystemUserMenu(ctx context.Context) (*pasturePb.SystemUs
|
|
|
if err != nil {
|
|
|
return nil, xerr.Custom("该用户数据不存在")
|
|
|
}
|
|
|
- if systemUser.RoleId <= 0 {
|
|
|
+ if len(systemUser.RoleIds) <= 0 {
|
|
|
return nil, xerr.Custom("该用户没有角色")
|
|
|
}
|
|
|
+
|
|
|
+ roleIds := strings.Split(systemUser.RoleIds, ",")
|
|
|
// 获取用户角色数据
|
|
|
- systemRole := &model.SystemRole{}
|
|
|
- if err = s.DB.Where("id = ?", systemUser.RoleId).First(systemRole).Error; err != nil {
|
|
|
+ systemRoleList := make([]*model.SystemRole, 0)
|
|
|
+ if err = s.DB.Where("id IN ?", roleIds).
|
|
|
+ Find(&systemRoleList).Error; err != nil {
|
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
return nil, xerr.Custom("该用户角色不存在")
|
|
|
}
|
|
@@ -311,7 +363,7 @@ func (s *StoreEntry) GetSystemUserMenu(ctx context.Context) (*pasturePb.SystemUs
|
|
|
if err = s.DB.Table(fmt.Sprintf("%s as a", new(model.SystemRoleMenu).TableName())).
|
|
|
Select("b.*").
|
|
|
Joins("LEFT JOIN system_menu AS b ON a.menu_id = b.id").
|
|
|
- Where("a.role_id = ? and b.is_delete = ?", systemRole.Id, pasturePb.IsShow_Ok).
|
|
|
+ Where("a.role_id IN ? and b.is_delete = ?", roleIds, pasturePb.IsShow_Ok).
|
|
|
Find(&systemMenuList).Error; err != nil {
|
|
|
return nil, xerr.WithStack(err)
|
|
|
}
|