作者 tangxuhui

Merge branch 'dev' into local-tangxvhui

@@ -86,3 +86,11 @@ func CreatePgImService(options map[string]interface{}) (service.PgImService, err @@ -86,3 +86,11 @@ func CreatePgImService(options map[string]interface{}) (service.PgImService, err
86 } 86 }
87 return domainService.NewPgImService(transactionContext) 87 return domainService.NewPgImService(transactionContext)
88 } 88 }
  89 +
  90 +func CreateBatchAddUserService(options map[string]interface{}) (service.PgBatchAddUserService, error) {
  91 + var transactionContext *pgTransaction.TransactionContext
  92 + if value, ok := options["transactionContext"]; ok {
  93 + transactionContext = value.(*pgTransaction.TransactionContext)
  94 + }
  95 + return domainService.NewPgBatchAddUserService(transactionContext)
  96 +}
@@ -12,9 +12,9 @@ import ( @@ -12,9 +12,9 @@ import (
12 type BatchAddCommand struct { 12 type BatchAddCommand struct {
13 OperateInfo *domain.OperateInfo `json:"-"` 13 OperateInfo *domain.OperateInfo `json:"-"`
14 // 用户类型 1:企业内部用户(内部添加) 2:共创用户 1024:企业注册用户(注册添加) 14 // 用户类型 1:企业内部用户(内部添加) 2:共创用户 1024:企业注册用户(注册添加)
15 - UserType int `cname:"用户类型 1:企业内部用户(内部添加) 2:共创用户 1024:企业注册用户(注册添加)" json:"userType" valid:"Required"` 15 + UserType int `cname:"用户类型" json:"userType" valid:"Required"`
16 // 用户列表 16 // 用户列表
17 - User []*domain.User `cname:"用户列表" json:"user,omitempty"` 17 + Users []*domain.User `cname:"用户列表" json:"users,omitempty"`
18 // 密码 18 // 密码
19 Password string `cname:"密码" json:"password" valid:"Required"` 19 Password string `cname:"密码" json:"password" valid:"Required"`
20 } 20 }
@@ -15,6 +15,8 @@ type UpdateFavoriteMenusCommand struct { @@ -15,6 +15,8 @@ type UpdateFavoriteMenusCommand struct {
15 FavoriteMenus []string `cname:"菜单编码列表" json:"favoriteMenus,omitempty"` 15 FavoriteMenus []string `cname:"菜单编码列表" json:"favoriteMenus,omitempty"`
16 // 用户Id 用户唯一标识 16 // 用户Id 用户唯一标识
17 UserId int64 `cname:"用户Id 用户唯一标识" json:"userId" valid:"Required"` 17 UserId int64 `cname:"用户Id 用户唯一标识" json:"userId" valid:"Required"`
  18 + // 用户Id 用户唯一标识
  19 + Action int64 `cname:"操作类型 1:添加菜单 2:移除菜单 3.全量更新" json:"action" valid:"Required"`
18 } 20 }
19 21
20 func (updateFavoriteMenusCommand *UpdateFavoriteMenusCommand) Valid(validation *validation.Validation) { 22 func (updateFavoriteMenusCommand *UpdateFavoriteMenusCommand) Valid(validation *validation.Validation) {
@@ -19,7 +19,7 @@ type UserDto struct { @@ -19,7 +19,7 @@ type UserDto struct {
19 // 用户关联的角色 19 // 用户关联的角色
20 UserRole []*domain.Role `json:"userRole"` 20 UserRole []*domain.Role `json:"userRole"`
21 // 收藏的菜单(工作台)(菜单编码列表) 21 // 收藏的菜单(工作台)(菜单编码列表)
22 - FavoriteMenus []string `json:"favoriteMenus,omitempty"` 22 + FavoriteMenus []string `json:"favoriteMenus"`
23 // 共创信息 (共创用户有效) 23 // 共创信息 (共创用户有效)
24 CooperationInfo *domain.CooperationInfo `json:"cooperationInfo,omitempty"` 24 CooperationInfo *domain.CooperationInfo `json:"cooperationInfo,omitempty"`
25 // 状态(1:启用 2:禁用 3:注销) 25 // 状态(1:启用 2:禁用 3:注销)
@@ -16,7 +16,7 @@ import ( @@ -16,7 +16,7 @@ import (
16 type UserService struct { 16 type UserService struct {
17 } 17 }
18 18
19 -// TODO:批量添加 19 +// 批量添加用户
20 func (userService *UserService) BatchAdd(batchAddCommand *command.BatchAddCommand) (interface{}, error) { 20 func (userService *UserService) BatchAdd(batchAddCommand *command.BatchAddCommand) (interface{}, error) {
21 if err := batchAddCommand.ValidateCommand(); err != nil { 21 if err := batchAddCommand.ValidateCommand(); err != nil {
22 return nil, application.ThrowError(application.ARG_ERROR, err.Error()) 22 return nil, application.ThrowError(application.ARG_ERROR, err.Error())
@@ -31,6 +31,14 @@ func (userService *UserService) BatchAdd(batchAddCommand *command.BatchAddComman @@ -31,6 +31,14 @@ func (userService *UserService) BatchAdd(batchAddCommand *command.BatchAddComman
31 defer func() { 31 defer func() {
32 transactionContext.RollbackTransaction() 32 transactionContext.RollbackTransaction()
33 }() 33 }()
  34 +
  35 + batchAddUserService, _ := factory.CreateBatchAddUserService(map[string]interface{}{
  36 + "transactionContext": transactionContext,
  37 + })
  38 + if err = batchAddUserService.BatchAddUser(batchAddCommand.OperateInfo, batchAddCommand.Users, batchAddCommand.Password); err != nil {
  39 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  40 + }
  41 +
34 if err := transactionContext.CommitTransaction(); err != nil { 42 if err := transactionContext.CommitTransaction(); err != nil {
35 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) 43 return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
36 } 44 }
@@ -598,7 +606,16 @@ func (userService *UserService) UpdateFavoriteMenus(updateFavoriteMenusCommand * @@ -598,7 +606,16 @@ func (userService *UserService) UpdateFavoriteMenus(updateFavoriteMenusCommand *
598 if err != nil { 606 if err != nil {
599 return nil, err 607 return nil, err
600 } 608 }
601 - user.FavoriteMenus = updateFavoriteMenusCommand.FavoriteMenus 609 + switch updateFavoriteMenusCommand.Action {
  610 + case 1:
  611 + user.AddFavoriteMenu(updateFavoriteMenusCommand.FavoriteMenus...)
  612 + case 2:
  613 + user.RemoveFavoriteMenu(updateFavoriteMenusCommand.FavoriteMenus...)
  614 + case 3:
  615 + user.FavoriteMenus = updateFavoriteMenusCommand.FavoriteMenus
  616 + default:
  617 + return nil, application.ThrowError(application.TRANSACTION_ERROR, fmt.Sprintf("action: %v not support", updateFavoriteMenusCommand.Action))
  618 + }
602 if _, err = userRepository.Save(user); err != nil { 619 if _, err = userRepository.Save(user); err != nil {
603 return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error()) 620 return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
604 } 621 }
  1 +package service
  2 +
  3 +import "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/domain"
  4 +
  5 +// PgBatchAddUserService 批量添加用户服务
  6 +type PgBatchAddUserService interface {
  7 + BatchAddUser(optUser *domain.OperateInfo, users []*domain.User, password string) error
  8 +}
@@ -229,6 +229,45 @@ func (user *User) RemoveUserRole(roleId int64) bool { @@ -229,6 +229,45 @@ func (user *User) RemoveUserRole(roleId int64) bool {
229 return res 229 return res
230 } 230 }
231 231
  232 +// AddFavoriteMenu 菜单收藏
  233 +//
  234 +// codes 菜单列表
  235 +func (user *User) AddFavoriteMenu(codes ...string) error {
  236 + for i := 0; i < len(codes); i++ {
  237 + var menuExisted = false
  238 + for j := 0; j < len(user.FavoriteMenus); j++ {
  239 + if user.FavoriteMenus[j] == codes[i] {
  240 + menuExisted = true
  241 + }
  242 + }
  243 + if !menuExisted {
  244 + user.FavoriteMenus = append(user.FavoriteMenus, codes[i])
  245 + }
  246 + }
  247 + return nil
  248 +}
  249 +
  250 +// AddFavoriteMenu 菜单收藏移除
  251 +//
  252 +// codes 菜单列表
  253 +func (user *User) RemoveFavoriteMenu(codes ...string) error {
  254 + for i := 0; i < len(codes); i++ {
  255 + var menuExisted = false
  256 + var newMenus = make([]string, 0)
  257 + for j := 0; j < len(user.FavoriteMenus); j++ {
  258 + if user.FavoriteMenus[j] == codes[i] {
  259 + menuExisted = true
  260 + } else {
  261 + newMenus = append(newMenus, user.FavoriteMenus[j])
  262 + }
  263 + }
  264 + if menuExisted {
  265 + user.FavoriteMenus = newMenus
  266 + }
  267 + }
  268 + return nil
  269 +}
  270 +
232 /***** 2.缓存模块 *****/ 271 /***** 2.缓存模块 *****/
233 272
234 func (user *User) CacheKeyFunc() string { 273 func (user *User) CacheKeyFunc() string {
  1 +package domainService
  2 +
  3 +import (
  4 + "fmt"
  5 + pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
  6 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/domain"
  7 + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/infrastructure/repository"
  8 + "time"
  9 +)
  10 +
  11 +// PgBatchAddUserService 批量创建用户服务
  12 +type PgBatchAddUserService struct {
  13 + transactionContext *pgTransaction.TransactionContext
  14 +}
  15 +
  16 +// CreateUser 批量添加用户服务
  17 +//
  18 +// optUser 操作用户
  19 +// users 待添加用户列表数据
  20 +// password 密码
  21 +func (ptr *PgBatchAddUserService) BatchAddUser(optUser *domain.OperateInfo, users []*domain.User, password string) error {
  22 + var (
  23 + err error
  24 + )
  25 + orgRepository, err := repository.NewOrgRepository(ptr.transactionContext)
  26 + if err != nil {
  27 + return err
  28 + }
  29 + _, orgs, err := orgRepository.Find(map[string]interface{}{"companyId": optUser.CompanyId})
  30 + if err != nil {
  31 + return err
  32 + }
  33 + var mapOrg = make(map[int64]*domain.Org)
  34 + for i := range orgs {
  35 + mapOrg[orgs[i].OrgId] = orgs[i]
  36 + }
  37 +
  38 + createUserService, _ := NewPgCreateUserService(ptr.transactionContext)
  39 + for i := range users {
  40 + user := users[i]
  41 + if err = ptr.preCheck(user); err != nil {
  42 + return err
  43 + }
  44 + newUser := &domain.User{
  45 + CompanyId: user.CompanyId,
  46 + UserType: user.UserType,
  47 + UserCode: user.UserCode,
  48 + OrganizationId: user.OrganizationId,
  49 + DepartmentId: user.DepartmentId,
  50 + UserOrg: []*domain.Org{},
  51 + UserRole: []*domain.Role{},
  52 + FavoriteMenus: []string{},
  53 + CooperationInfo: user.CooperationInfo,
  54 + UserInfo: user.UserInfo,
  55 + EnableStatus: int(domain.UserStatusEnable),
  56 + Ext: &domain.Ext{
  57 + Phone: user.UserInfo.Phone,
  58 + UserName: user.UserInfo.UserName,
  59 + },
  60 + CreatedAt: time.Now(),
  61 + UpdatedAt: time.Now(),
  62 + }
  63 + if user.OrganizationId > 0 {
  64 + if v, ok := mapOrg[user.OrganizationId]; ok && v.CompanyId == user.CompanyId {
  65 + newUser.Ext.OrgName = v.OrgName
  66 + } else {
  67 + return fmt.Errorf("导入的组织机构不存在")
  68 + }
  69 + }
  70 + if user.DepartmentId > 0 {
  71 + if v, ok := mapOrg[user.DepartmentId]; ok && v.CompanyId == user.CompanyId {
  72 + newUser.Ext.DepName = v.OrgName
  73 + } else {
  74 + return fmt.Errorf("导入的所属部门不存在")
  75 + }
  76 + }
  77 +
  78 + if newUser, err = createUserService.CreateUser(nil, newUser, password); err != nil {
  79 + return err
  80 + }
  81 + }
  82 + return nil
  83 +}
  84 +
  85 +func (ptr *PgBatchAddUserService) preCheck(user *domain.User) error {
  86 + if len(user.UserInfo.UserName) == 0 {
  87 + return fmt.Errorf("导入的用户姓名为空值")
  88 + }
  89 + if len(user.UserInfo.Phone) == 0 {
  90 + return fmt.Errorf("导入的手机号不是有效手机号")
  91 + }
  92 + if user.OrganizationId == 0 {
  93 + return fmt.Errorf("导入的组织机构不存在")
  94 + }
  95 + if user.DepartmentId == 0 && user.UserType == domain.UserTypeEmployee {
  96 + return fmt.Errorf("导入的所属部门不存在")
  97 + }
  98 + return nil
  99 +}
  100 +
  101 +func NewPgBatchAddUserService(transactionContext *pgTransaction.TransactionContext) (*PgBatchAddUserService, error) {
  102 + if transactionContext == nil {
  103 + return nil, fmt.Errorf("transactionContext参数不能为nil")
  104 + } else {
  105 + return &PgBatchAddUserService{
  106 + transactionContext: transactionContext,
  107 + }, nil
  108 + }
  109 +}
@@ -165,6 +165,7 @@ func (repository *UserRepository) FindOne(queryOptions map[string]interface{}) ( @@ -165,6 +165,7 @@ func (repository *UserRepository) FindOne(queryOptions map[string]interface{}) (
165 query.SetWhereByQueryOption("user_id = ?", "userId") 165 query.SetWhereByQueryOption("user_id = ?", "userId")
166 query.SetWhereByQueryOption("company_id=?", "companyId") 166 query.SetWhereByQueryOption("company_id=?", "companyId")
167 query.SetWhereByQueryOption("organization_id=?", "organizationId") 167 query.SetWhereByQueryOption("organization_id=?", "organizationId")
  168 + query.SetWhereByQueryOption("user_base_id=?", "userBaseId")
168 query.SetWhereByQueryOption("user_code = ?", "userCode") 169 query.SetWhereByQueryOption("user_code = ?", "userCode")
169 query.SetWhereByQueryOption("user_id != ?", "notEqualUserId") 170 query.SetWhereByQueryOption("user_id != ?", "notEqualUserId")
170 if err := query.First(); err != nil { 171 if err := query.First(); err != nil {