正在显示
9 个修改的文件
包含
350 行增加
和
1 行删除
| 1 | +package command | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/domain" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + | ||
| 9 | + "github.com/beego/beego/v2/core/validation" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +type BatchEnableCommand struct { | ||
| 13 | + OperateInfo *domain.OperateInfo `json:"-"` | ||
| 14 | + UserBaseIds []int64 `cname:"用户id列表" json:"userBaseIds" valid:"Required"` | ||
| 15 | + // 启用状态(启用:1 禁用:2 注销:3) | ||
| 16 | + EnableStatus int `cname:"启用状态(启用:1 禁用:2 注销:3)" json:"enableStatus" valid:"Required"` | ||
| 17 | +} | ||
| 18 | + | ||
| 19 | +func (batchEnableCommand *BatchEnableCommand) Valid(validation *validation.Validation) { | ||
| 20 | + //validation.SetError("CustomValid", "未实现的自定义认证") | ||
| 21 | + if !(batchEnableCommand.EnableStatus == int(domain.UserStatusEnable) || batchEnableCommand.EnableStatus == int(domain.UserStatusDisable)) { | ||
| 22 | + validation.SetError("CustomValid", "非法启用状态") | ||
| 23 | + } | ||
| 24 | +} | ||
| 25 | + | ||
| 26 | +func (batchEnableCommand *BatchEnableCommand) ValidateCommand() error { | ||
| 27 | + valid := validation.Validation{} | ||
| 28 | + b, err := valid.Valid(batchEnableCommand) | ||
| 29 | + if err != nil { | ||
| 30 | + return err | ||
| 31 | + } | ||
| 32 | + if !b { | ||
| 33 | + elem := reflect.TypeOf(batchEnableCommand).Elem() | ||
| 34 | + for _, validErr := range valid.Errors { | ||
| 35 | + field, isExist := elem.FieldByName(validErr.Field) | ||
| 36 | + if isExist { | ||
| 37 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
| 38 | + } else { | ||
| 39 | + return fmt.Errorf(validErr.Message) | ||
| 40 | + } | ||
| 41 | + } | ||
| 42 | + } | ||
| 43 | + return nil | ||
| 44 | +} |
| 1 | +package dto | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/domain" | ||
| 5 | + "time" | ||
| 6 | +) | ||
| 7 | + | ||
| 8 | +type UserBaseDto struct { | ||
| 9 | + // 用户基础数据id | ||
| 10 | + UserBaseId int64 `json:"userBaseId,omitempty"` | ||
| 11 | + // 手机号码 | ||
| 12 | + //Account string `json:"phone,omitempty"` | ||
| 13 | + // 最后登录时间 | ||
| 14 | + LastLogIn string `json:"lastLogIn"` | ||
| 15 | + // 用户信息 (冗余,数据存在userBase里面) | ||
| 16 | + UserInfo *domain.UserInfo `json:"userInfo,omitempty"` | ||
| 17 | + // 账号状态 1:正常 2.禁用 3:注销 | ||
| 18 | + Status int `json:"status,omitempty"` | ||
| 19 | + // 推荐人 | ||
| 20 | + Referer string `json:"referer"` | ||
| 21 | + // 关联的用户 (冗余) | ||
| 22 | + // RelatedUsers []int64 `json:"relatedUsers,omitempty"` | ||
| 23 | + // 用户关联的组织 | ||
| 24 | + UserOrg []interface{} `json:"userOrg"` | ||
| 25 | + // 创建时间 | ||
| 26 | + RegistrationDate string `json:"registrationDate,omitempty"` | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +func (dto *UserBaseDto) LoadDto(userBase *domain.UserBase, relateUsers []*domain.User) error { | ||
| 30 | + dto.UserBaseId = userBase.UserBaseId | ||
| 31 | + //dto.Account = userBase.Account | ||
| 32 | + dto.LastLogIn = "" | ||
| 33 | + dto.UserInfo = userBase.UserInfo | ||
| 34 | + if userBase.Favorite != nil { | ||
| 35 | + if userBase.Favorite.LastLogInAt > 0 { | ||
| 36 | + t := time.Unix(userBase.Favorite.LastLogInAt, 0) | ||
| 37 | + dto.LastLogIn = t.Format("2006-01-02 15:04:05") | ||
| 38 | + } | ||
| 39 | + dto.Referer = userBase.Favorite.Referer | ||
| 40 | + } | ||
| 41 | + dto.Status = userBase.Status | ||
| 42 | + for i := range relateUsers { | ||
| 43 | + dto.UserOrg = append(dto.UserOrg, map[string]interface{}{ | ||
| 44 | + "orgId": relateUsers[i].OrganizationId, | ||
| 45 | + "orgName": relateUsers[i].Ext.OrgName, | ||
| 46 | + }) | ||
| 47 | + } | ||
| 48 | + dto.RegistrationDate = userBase.CreatedAt.Format("2006-01-02") | ||
| 49 | + return nil | ||
| 50 | +} |
pkg/application/userbase/query/list_user.go
0 → 100644
| 1 | +package query | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/domain" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + | ||
| 9 | + "github.com/beego/beego/v2/core/validation" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +type ListUserQuery struct { | ||
| 13 | + OperateInfo *domain.OperateInfo `json:"-"` | ||
| 14 | + // 查询偏离量 | ||
| 15 | + Offset int `cname:"查询偏离量" json:"offset"` | ||
| 16 | + // 查询限制 | ||
| 17 | + Limit int `cname:"查询限制" json:"limit"` | ||
| 18 | + // 用户姓名 | ||
| 19 | + UserName string `cname:"用户姓名" json:"userName,omitempty"` | ||
| 20 | + // 在用户列表内 | ||
| 21 | + InUserBaseIds []int64 `cname:"用户姓名" json:"inUserBaseIds,omitempty"` | ||
| 22 | + // 所属组织 | ||
| 23 | + OrgName string `cname:"所属组织" json:"orgName,omitempty"` | ||
| 24 | + // 关闭查询限制 | ||
| 25 | + DisableLimit bool `cname:"关闭查询限制" json:"disableLimit,omitempty"` | ||
| 26 | + | ||
| 27 | + // 获取组织 | ||
| 28 | + FetchOrgBelong bool `cname:"获取组织" json:"fetchOrgBelong,omitempty"` | ||
| 29 | +} | ||
| 30 | + | ||
| 31 | +func (listUserQuery *ListUserQuery) Valid(validation *validation.Validation) { | ||
| 32 | + //validation.SetError("CustomValid", "未实现的自定义认证") | ||
| 33 | +} | ||
| 34 | + | ||
| 35 | +func (listUserQuery *ListUserQuery) ValidateQuery() error { | ||
| 36 | + valid := validation.Validation{} | ||
| 37 | + b, err := valid.Valid(listUserQuery) | ||
| 38 | + if err != nil { | ||
| 39 | + return err | ||
| 40 | + } | ||
| 41 | + if !b { | ||
| 42 | + elem := reflect.TypeOf(listUserQuery).Elem() | ||
| 43 | + for _, validErr := range valid.Errors { | ||
| 44 | + field, isExist := elem.FieldByName(validErr.Field) | ||
| 45 | + if isExist { | ||
| 46 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
| 47 | + } else { | ||
| 48 | + return fmt.Errorf(validErr.Message) | ||
| 49 | + } | ||
| 50 | + } | ||
| 51 | + } | ||
| 52 | + return nil | ||
| 53 | +} |
pkg/application/userbase/service/userbase.go
0 → 100644
| 1 | +package service | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/linmadan/egglib-go/core/application" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/application/factory" | ||
| 6 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/application/userbase/command" | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/application/userbase/dto" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/application/userbase/query" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/domain" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/infrastructure/utils" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type UserBaseService struct { | ||
| 14 | +} | ||
| 15 | + | ||
| 16 | +// 返回列表 | ||
| 17 | +func (userService *UserBaseService) SearchUser(listUserQuery *query.ListUserQuery) (interface{}, error) { | ||
| 18 | + if err := listUserQuery.ValidateQuery(); err != nil { | ||
| 19 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
| 20 | + } | ||
| 21 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
| 22 | + if err != nil { | ||
| 23 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 24 | + } | ||
| 25 | + if err := transactionContext.StartTransaction(); err != nil { | ||
| 26 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 27 | + } | ||
| 28 | + defer func() { | ||
| 29 | + transactionContext.RollbackTransaction() | ||
| 30 | + }() | ||
| 31 | + var count int64 | ||
| 32 | + var userBases []*domain.UserBase | ||
| 33 | + userBaseRepository, _, _ := factory.FastPgUserBase(transactionContext, 0) | ||
| 34 | + userRepository, _, _ := factory.FastPgUser(transactionContext, 0) | ||
| 35 | + _, users, err := userRepository.Find(map[string]interface{}{ | ||
| 36 | + "limit": listUserQuery.Limit, | ||
| 37 | + "offset": listUserQuery.Offset, | ||
| 38 | + "orgName": listUserQuery.OrgName, | ||
| 39 | + "userName": listUserQuery.UserName, | ||
| 40 | + "distinctOnUserBaseId": true, | ||
| 41 | + }) | ||
| 42 | + if err != nil { | ||
| 43 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 44 | + } | ||
| 45 | + var result = make([]*dto.UserBaseDto, 0) | ||
| 46 | + if len(users) > 0 { | ||
| 47 | + var userBaseIds []int64 | ||
| 48 | + for i := range users { | ||
| 49 | + userBaseIds = append(userBaseIds, users[i].UserBaseId) | ||
| 50 | + } | ||
| 51 | + listUserQuery.InUserBaseIds = userBaseIds | ||
| 52 | + queryOptions := utils.ObjectToMap(listUserQuery) | ||
| 53 | + count, userBases, err = userBaseRepository.Find(queryOptions) | ||
| 54 | + if err != nil { | ||
| 55 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + for i := range userBases { | ||
| 59 | + u := userBases[i] | ||
| 60 | + var relateUsers []*domain.User | ||
| 61 | + if listUserQuery.FetchOrgBelong && len(u.RelatedUsers) > 0 { | ||
| 62 | + for i := range u.RelatedUsers { | ||
| 63 | + relateUser, _ := userRepository.FindOne(map[string]interface{}{"userId": u.RelatedUsers[i]}) | ||
| 64 | + if relateUser != nil { | ||
| 65 | + relateUsers = append(relateUsers, relateUser) | ||
| 66 | + } | ||
| 67 | + } | ||
| 68 | + } | ||
| 69 | + userBaseDto := &dto.UserBaseDto{} | ||
| 70 | + userBaseDto.LoadDto(u, relateUsers) | ||
| 71 | + result = append(result, userBaseDto) | ||
| 72 | + } | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | + return map[string]interface{}{ | ||
| 76 | + "count": count, | ||
| 77 | + "users": result, | ||
| 78 | + }, nil | ||
| 79 | +} | ||
| 80 | + | ||
| 81 | +// 批量修改启用状态 | ||
| 82 | +func (userService *UserBaseService) BatchEnable(batchEnableCommand *command.BatchEnableCommand) (interface{}, error) { | ||
| 83 | + if err := batchEnableCommand.ValidateCommand(); err != nil { | ||
| 84 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
| 85 | + } | ||
| 86 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
| 87 | + if err != nil { | ||
| 88 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 89 | + } | ||
| 90 | + if err := transactionContext.StartTransaction(); err != nil { | ||
| 91 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 92 | + } | ||
| 93 | + defer func() { | ||
| 94 | + transactionContext.RollbackTransaction() | ||
| 95 | + }() | ||
| 96 | + userRepository, _, err := factory.FastPgUserBase(transactionContext, 0) | ||
| 97 | + if err != nil { | ||
| 98 | + return nil, err | ||
| 99 | + } | ||
| 100 | + | ||
| 101 | + for i := 0; i < len(batchEnableCommand.UserBaseIds); i++ { | ||
| 102 | + if user, err := userRepository.FindOne(map[string]interface{}{"userBaseId": batchEnableCommand.UserBaseIds[i]}); err != nil { | ||
| 103 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 104 | + } else { | ||
| 105 | + if err := user.SetEnableStatus(batchEnableCommand.EnableStatus); err != nil { | ||
| 106 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 107 | + } | ||
| 108 | + if _, err := userRepository.Save(user); err != nil { | ||
| 109 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 110 | + } | ||
| 111 | + } | ||
| 112 | + } | ||
| 113 | + | ||
| 114 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
| 115 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 116 | + } | ||
| 117 | + return struct{}{}, nil | ||
| 118 | +} | ||
| 119 | + | ||
| 120 | +func NewUserBaseService(options map[string]interface{}) *UserBaseService { | ||
| 121 | + newUserService := &UserBaseService{} | ||
| 122 | + return newUserService | ||
| 123 | +} |
| @@ -275,6 +275,21 @@ func (userBase *UserBase) LastLogIn(t time.Time) error { | @@ -275,6 +275,21 @@ func (userBase *UserBase) LastLogIn(t time.Time) error { | ||
| 275 | return nil | 275 | return nil |
| 276 | } | 276 | } |
| 277 | 277 | ||
| 278 | +func (user *UserBase) SetEnableStatus(status int) error { | ||
| 279 | + userStatus := UserStatus(user.Status) | ||
| 280 | + if userStatus == UserStatusDestroy { | ||
| 281 | + return fmt.Errorf("账号已注销") | ||
| 282 | + } | ||
| 283 | + if user.Status == status { | ||
| 284 | + return nil //fmt.Errorf("重复设置状态") | ||
| 285 | + } | ||
| 286 | + if !(status == int(UserStatusEnable) || status == int(UserStatusDisable)) { | ||
| 287 | + return fmt.Errorf("非法启用状态") | ||
| 288 | + } | ||
| 289 | + user.Status = status | ||
| 290 | + return nil | ||
| 291 | +} | ||
| 292 | + | ||
| 278 | /***** 2.缓存模块 *****/ | 293 | /***** 2.缓存模块 *****/ |
| 279 | 294 | ||
| 280 | func (m *UserBase) CacheKeyFunc() string { | 295 | func (m *UserBase) CacheKeyFunc() string { |
| @@ -172,7 +172,10 @@ func (repository *UserBaseRepository) Find(queryOptions map[string]interface{}) | @@ -172,7 +172,10 @@ func (repository *UserBaseRepository) Find(queryOptions map[string]interface{}) | ||
| 172 | var userBaseModels []*models.UserBase | 172 | var userBaseModels []*models.UserBase |
| 173 | userBases := make([]*domain.UserBase, 0) | 173 | userBases := make([]*domain.UserBase, 0) |
| 174 | query := sqlbuilder.BuildQuery(tx.Model(&userBaseModels), queryOptions) | 174 | query := sqlbuilder.BuildQuery(tx.Model(&userBaseModels), queryOptions) |
| 175 | - query.SetOffsetAndLimit(20) | 175 | + query.SetOffsetAndLimit(20) //InUserBaseIds |
| 176 | + if v, ok := queryOptions["inUserBaseIds"]; ok && len(v.([]int64)) > 0 { | ||
| 177 | + query.Where(`user_base_id in (?)`, pg.In(v)) | ||
| 178 | + } | ||
| 176 | query.SetOrderDirect("user_base_id", "DESC") | 179 | query.SetOrderDirect("user_base_id", "DESC") |
| 177 | if count, err := query.SelectAndCount(); err != nil { | 180 | if count, err := query.SelectAndCount(); err != nil { |
| 178 | return 0, userBases, err | 181 | return 0, userBases, err |
| @@ -196,6 +196,11 @@ func (repository *UserRepository) Find(queryOptions map[string]interface{}) (int | @@ -196,6 +196,11 @@ func (repository *UserRepository) Find(queryOptions map[string]interface{}) (int | ||
| 196 | var userModels []*models.User | 196 | var userModels []*models.User |
| 197 | users := make([]*domain.User, 0) | 197 | users := make([]*domain.User, 0) |
| 198 | query := sqlbuilder.BuildQuery(tx.Model(&userModels), queryOptions) | 198 | query := sqlbuilder.BuildQuery(tx.Model(&userModels), queryOptions) |
| 199 | + | ||
| 200 | + if v, ok := queryOptions["distinctOnUserBaseId"]; ok && (v.(bool)) { | ||
| 201 | + query.DistinctOn("user_base_id") | ||
| 202 | + query.Order("user_base_id desc") | ||
| 203 | + } | ||
| 199 | query.SetWhereByQueryOption("company_id=?", "companyId") | 204 | query.SetWhereByQueryOption("company_id=?", "companyId") |
| 200 | query.SetWhereByQueryOption("organization_id=?", "organizationId") | 205 | query.SetWhereByQueryOption("organization_id=?", "organizationId") |
| 201 | if v, ok := queryOptions["inOrgIds"]; ok && len(v.([]int64)) > 0 { | 206 | if v, ok := queryOptions["inOrgIds"]; ok && len(v.([]int64)) > 0 { |
| @@ -214,6 +219,9 @@ func (repository *UserRepository) Find(queryOptions map[string]interface{}) (int | @@ -214,6 +219,9 @@ func (repository *UserRepository) Find(queryOptions map[string]interface{}) (int | ||
| 214 | if v, ok := queryOptions["depName"]; ok && len(v.(string)) > 0 { | 219 | if v, ok := queryOptions["depName"]; ok && len(v.(string)) > 0 { |
| 215 | query.Where(fmt.Sprintf(`ext->>'depName' like '%%%v%%'`, v)) | 220 | query.Where(fmt.Sprintf(`ext->>'depName' like '%%%v%%'`, v)) |
| 216 | } | 221 | } |
| 222 | + if v, ok := queryOptions["orgName"]; ok && len(v.(string)) > 0 { | ||
| 223 | + query.Where(fmt.Sprintf(`ext->>'orgName' like '%%%v%%'`, v)) | ||
| 224 | + } | ||
| 217 | if v, ok := queryOptions["userName"]; ok && len(v.(string)) > 0 { | 225 | if v, ok := queryOptions["userName"]; ok && len(v.(string)) > 0 { |
| 218 | query.Where(fmt.Sprintf(`ext->>'userName' like '%%%v%%'`, v)) | 226 | query.Where(fmt.Sprintf(`ext->>'userName' like '%%%v%%'`, v)) |
| 219 | } | 227 | } |
| 1 | +package controllers | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/linmadan/egglib-go/web/beego" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/application/userbase/command" | ||
| 6 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/application/userbase/query" | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/application/userbase/service" | ||
| 8 | +) | ||
| 9 | + | ||
| 10 | +type UserBaseController struct { | ||
| 11 | + beego.BaseController | ||
| 12 | +} | ||
| 13 | + | ||
| 14 | +func (controller *UserBaseController) SearchUser() { | ||
| 15 | + userService := service.NewUserBaseService(nil) | ||
| 16 | + listUserQuery := &query.ListUserQuery{} | ||
| 17 | + Must(controller.Unmarshal(listUserQuery)) | ||
| 18 | + listUserQuery.OperateInfo = ParseOperateInfo(controller.BaseController) | ||
| 19 | + data, err := userService.SearchUser(listUserQuery) | ||
| 20 | + controller.Response(data, err) | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +func (controller *UserBaseController) BatchEnable() { | ||
| 24 | + userService := service.NewUserBaseService(nil) | ||
| 25 | + batchEnableCommand := &command.BatchEnableCommand{} | ||
| 26 | + controller.Unmarshal(batchEnableCommand) | ||
| 27 | + batchEnableCommand.OperateInfo = ParseOperateInfo(controller.BaseController) | ||
| 28 | + data, err := userService.BatchEnable(batchEnableCommand) | ||
| 29 | + controller.Response(data, err) | ||
| 30 | +} |
pkg/port/beego/routers/user_base_router.go
0 → 100644
| 1 | +package routers | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/beego/beego/v2/server/web" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/port/beego/controllers" | ||
| 6 | +) | ||
| 7 | + | ||
| 8 | +func init() { | ||
| 9 | + //web.Router("/user/", &controllers.UserController{}, "Post:CreateUser") | ||
| 10 | + //web.Router("/user/:userId", &controllers.UserController{}, "Put:UpdateUser") | ||
| 11 | + //web.Router("/user/:userId", &controllers.UserController{}, "Get:GetUser") | ||
| 12 | + //web.Router("/user/:userId", &controllers.UserController{}, "Delete:RemoveUser") | ||
| 13 | + web.Router("/user-base/search", &controllers.UserBaseController{}, "Post:SearchUser") | ||
| 14 | + //web.Router("/user/:userId/access-menus", &controllers.UserController{}, "Get:GetUserAccessMenus") | ||
| 15 | + //web.Router("/user/:userId/profile", &controllers.UserController{}, "Get:GetUserProfile") | ||
| 16 | + //web.Router("/user/batch-add", &controllers.UserController{}, "Post:BatchAdd") | ||
| 17 | + //web.Router("/user/batch-add2", &controllers.UserController{}, "Post:BatchAdd2") | ||
| 18 | + web.Router("/user-base/batch-enable", &controllers.UserBaseController{}, "Post:BatchEnable") | ||
| 19 | + //web.Router("/user/batch-reset-password", &controllers.UserController{}, "Post:BatchResetPassword") | ||
| 20 | + //web.Router("/user/:userId/base-info", &controllers.UserController{}, "Put:UpdateUsersBase") | ||
| 21 | + //web.Router("/user/cooperator", &controllers.UserController{}, "Post:CreateCooperator") | ||
| 22 | + //web.Router("/user/cooperator/:userId", &controllers.UserController{}, "Put:UpdateCooperator") | ||
| 23 | +} |
-
请 注册 或 登录 后发表评论