Merge branch 'dev-zhengzhou' into test
正在显示
12 个修改的文件
包含
358 行增加
和
1 行删除
| @@ -113,3 +113,31 @@ func (rs *RoleUserService) ListRole(in *command.UserRoleQueryCommand) (interface | @@ -113,3 +113,31 @@ func (rs *RoleUserService) ListRole(in *command.UserRoleQueryCommand) (interface | ||
| 113 | } | 113 | } |
| 114 | return tool_funs.SimpleWrapGridMap(total, tempList), nil | 114 | return tool_funs.SimpleWrapGridMap(total, tempList), nil |
| 115 | } | 115 | } |
| 116 | + | ||
| 117 | +// GetHRBP 当前操作人是否拥有HRBP权限 | ||
| 118 | +func GetHRBP(transactionContext application.TransactionContext, companyId int, operatorId int) (int, error) { | ||
| 119 | + roleRepo := factory.CreateRoleRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 120 | + roleUserRepo := factory.CreateRoleUserRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 121 | + _, roleList, err := roleRepo.Find(map[string]interface{}{"type": domain.RoleTypeSystem, "companyId": companyId}) | ||
| 122 | + if err != nil { | ||
| 123 | + return -1, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取角色信息列表"+err.Error()) | ||
| 124 | + } | ||
| 125 | + _, userRoleList, err := roleUserRepo.Find(map[string]interface{}{"companyId": companyId, "userId": operatorId}) | ||
| 126 | + if err != nil { | ||
| 127 | + return -1, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取用户的角色信息列表"+err.Error()) | ||
| 128 | + } | ||
| 129 | + // 拥有HRBP权限 | ||
| 130 | + hrbp := -1 | ||
| 131 | + for _, v := range userRoleList { | ||
| 132 | + for _, v2 := range roleList { | ||
| 133 | + if v.RoleId == v2.Id { | ||
| 134 | + hrbp = 1 | ||
| 135 | + break | ||
| 136 | + } | ||
| 137 | + } | ||
| 138 | + if hrbp == 1 { | ||
| 139 | + break | ||
| 140 | + } | ||
| 141 | + } | ||
| 142 | + return hrbp, nil | ||
| 143 | +} |
pkg/application/user/adapter/user_adapter.go
0 → 100644
pkg/application/user/command/edit_parent.go
0 → 100644
| 1 | +package command | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/beego/beego/v2/core/validation" | ||
| 5 | +) | ||
| 6 | + | ||
| 7 | +type EditParentCommand struct { | ||
| 8 | + Id int64 `cname:"用户ID" json:"id,string" valid:"Required"` | ||
| 9 | + ParentId int64 `cname:"上级ID" json:"parentId,string" valid:"Required"` | ||
| 10 | + CompanyId int `cname:"公司ID" json:"companyId"` | ||
| 11 | + OperatorId int `cname:"操作人ID" json:"operatorId"` | ||
| 12 | +} | ||
| 13 | + | ||
| 14 | +func (in *EditParentCommand) Valid(*validation.Validation) { | ||
| 15 | + | ||
| 16 | +} |
| 1 | package command | 1 | package command |
| 2 | 2 | ||
| 3 | +import ( | ||
| 4 | + "github.com/beego/beego/v2/core/validation" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/user/adapter" | ||
| 6 | +) | ||
| 7 | + | ||
| 3 | type ImportUserCommand struct { | 8 | type ImportUserCommand struct { |
| 4 | AddUsers []SaveUserCommand `json:"add"` | 9 | AddUsers []SaveUserCommand `json:"add"` |
| 5 | EditUsers []SaveUserCommand `json:"edit"` | 10 | EditUsers []SaveUserCommand `json:"edit"` |
| 6 | } | 11 | } |
| 12 | + | ||
| 13 | +// ImportParentUserCommand 导入直接上级 | ||
| 14 | +type ImportParentUserCommand struct { | ||
| 15 | + CompanyId int `cname:"公司ID" json:"companyId"` | ||
| 16 | + OperatorId int `cname:"操作人ID" json:"operatorId"` | ||
| 17 | + Data []adapter.ImportParentUser `cname:"数据" json:"-"` // 文件中读取到的数据 | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +func (in *ImportParentUserCommand) Valid(_ *validation.Validation) { | ||
| 21 | +} |
| @@ -4,6 +4,9 @@ import ( | @@ -4,6 +4,9 @@ import ( | ||
| 4 | "github.com/linmadan/egglib-go/core/application" | 4 | "github.com/linmadan/egglib-go/core/application" |
| 5 | "github.com/linmadan/egglib-go/utils/tool_funs" | 5 | "github.com/linmadan/egglib-go/utils/tool_funs" |
| 6 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory" | 6 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory" |
| 7 | + service "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/role" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/user/adapter" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/user/command" | ||
| 7 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/user/query" | 10 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/user/query" |
| 8 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | 11 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" |
| 9 | ) | 12 | ) |
| @@ -46,6 +49,8 @@ func (us *UserService) ListByDepartment(in *query.ListByDepartmentQuery) (interf | @@ -46,6 +49,8 @@ func (us *UserService) ListByDepartment(in *query.ListByDepartmentQuery) (interf | ||
| 46 | }() | 49 | }() |
| 47 | 50 | ||
| 48 | userRepo := factory.CreateUserRepository(map[string]interface{}{"transactionContext": transactionContext}) | 51 | userRepo := factory.CreateUserRepository(map[string]interface{}{"transactionContext": transactionContext}) |
| 52 | + positionRepo := factory.CreatePositionRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 53 | + | ||
| 49 | inMap := tool_funs.SimpleStructToMap(in) | 54 | inMap := tool_funs.SimpleStructToMap(in) |
| 50 | if in.DepartmentId == 0 { | 55 | if in.DepartmentId == 0 { |
| 51 | delete(inMap, "departmentId") // 删除部门ID字段 | 56 | delete(inMap, "departmentId") // 删除部门ID字段 |
| @@ -54,8 +59,169 @@ func (us *UserService) ListByDepartment(in *query.ListByDepartmentQuery) (interf | @@ -54,8 +59,169 @@ func (us *UserService) ListByDepartment(in *query.ListByDepartmentQuery) (interf | ||
| 54 | if err != nil { | 59 | if err != nil { |
| 55 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 60 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 56 | } | 61 | } |
| 62 | + | ||
| 63 | + parentIds := make([]int64, 0) // 上级ID | ||
| 64 | + positionIds := make([]int, 0) // 职位ID | ||
| 65 | + for i := range list { | ||
| 66 | + if list[i].ParentId > 0 { | ||
| 67 | + parentIds = append(parentIds, list[i].ParentId) | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + pList := list[i].PositionId | ||
| 71 | + for i2 := range pList { | ||
| 72 | + if pList[i2] > 0 { | ||
| 73 | + positionIds = append(positionIds, pList[i2]) | ||
| 74 | + } | ||
| 75 | + } | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + // 获取上级 | ||
| 79 | + parentMap := map[int64]*domain.User{} | ||
| 80 | + if len(parentIds) > 0 { | ||
| 81 | + _, parentList, err := userRepo.Find(map[string]interface{}{"ids": parentIds}) | ||
| 82 | + if err != nil { | ||
| 83 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 84 | + } | ||
| 85 | + for i := range parentList { | ||
| 86 | + parentMap[parentList[i].Id] = parentList[i] | ||
| 87 | + } | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + // 获取职位 | ||
| 91 | + positionMap := map[int64]*domain.Position{} | ||
| 92 | + if len(positionIds) > 0 { | ||
| 93 | + _, positionList, err := positionRepo.Find(map[string]interface{}{"ids": positionIds}) | ||
| 94 | + if err != nil { | ||
| 95 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 96 | + } | ||
| 97 | + for i := range positionList { | ||
| 98 | + positionMap[positionList[i].Id] = positionList[i] | ||
| 99 | + } | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + adapters := make([]*adapter.UserResp, 0) | ||
| 103 | + for i := range list { | ||
| 104 | + adp := &adapter.UserResp{ | ||
| 105 | + User: list[i], | ||
| 106 | + } | ||
| 107 | + // 上级名称 | ||
| 108 | + if v, ok := parentMap[list[i].ParentId]; ok { | ||
| 109 | + adp.ParentName = v.Name | ||
| 110 | + } | ||
| 111 | + // 职位名称数组 | ||
| 112 | + adp.PositionNames = make([]string, 0) | ||
| 113 | + pList := list[i].PositionId | ||
| 114 | + for i2 := range pList { | ||
| 115 | + if v2, ok := positionMap[int64(pList[i2])]; ok { | ||
| 116 | + adp.PositionNames = append(adp.PositionNames, v2.Name) | ||
| 117 | + } | ||
| 118 | + } | ||
| 119 | + adapters = append(adapters, adp) | ||
| 120 | + } | ||
| 121 | + | ||
| 57 | if err := transactionContext.CommitTransaction(); err != nil { | 122 | if err := transactionContext.CommitTransaction(); err != nil { |
| 58 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 123 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
| 59 | } | 124 | } |
| 60 | - return tool_funs.SimpleWrapGridMap(int64(count), list), nil | 125 | + return tool_funs.SimpleWrapGridMap(int64(count), adapters), nil |
| 126 | +} | ||
| 127 | + | ||
| 128 | +// EditParentUser 保存上级 | ||
| 129 | +func (us *UserService) EditParentUser(in *command.EditParentCommand) error { | ||
| 130 | + transactionContext, err := factory.ValidateStartTransaction(in) | ||
| 131 | + if err != nil { | ||
| 132 | + return err | ||
| 133 | + } | ||
| 134 | + defer func() { | ||
| 135 | + transactionContext.RollbackTransaction() | ||
| 136 | + }() | ||
| 137 | + | ||
| 138 | + hrbp, err := service.GetHRBP(transactionContext, in.CompanyId, in.OperatorId) | ||
| 139 | + if err != nil { | ||
| 140 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 141 | + } | ||
| 142 | + if hrbp != 1 { | ||
| 143 | + return application.ThrowError(application.BUSINESS_ERROR, "HRBP权限的员工才能操作") | ||
| 144 | + } | ||
| 145 | + | ||
| 146 | + userRepo := factory.CreateUserRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 147 | + user, err := userRepo.FindOne(map[string]interface{}{"id": in.Id}) | ||
| 148 | + if err != nil { | ||
| 149 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 150 | + } | ||
| 151 | + // 上级ID是否存在 | ||
| 152 | + _, err = userRepo.FindOne(map[string]interface{}{"id": in.ParentId}) | ||
| 153 | + if err != nil { | ||
| 154 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 155 | + } | ||
| 156 | + user.ParentId = in.ParentId | ||
| 157 | + | ||
| 158 | + if _, err = userRepo.Update(user); err != nil { | ||
| 159 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 160 | + } | ||
| 161 | + | ||
| 162 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
| 163 | + return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 164 | + } | ||
| 165 | + return nil | ||
| 166 | +} | ||
| 167 | + | ||
| 168 | +func (us *UserService) ImportParentUser(in *command.ImportParentUserCommand) (interface{}, error) { | ||
| 169 | + transactionContext, err := factory.ValidateStartTransaction(in) | ||
| 170 | + if err != nil { | ||
| 171 | + return nil, err | ||
| 172 | + } | ||
| 173 | + defer func() { | ||
| 174 | + transactionContext.RollbackTransaction() | ||
| 175 | + }() | ||
| 176 | + | ||
| 177 | + hrbp, err := service.GetHRBP(transactionContext, in.CompanyId, in.OperatorId) | ||
| 178 | + if err != nil { | ||
| 179 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 180 | + } | ||
| 181 | + if hrbp != 1 { | ||
| 182 | + return nil, application.ThrowError(application.BUSINESS_ERROR, "HRBP权限的员工才能操作") | ||
| 183 | + } | ||
| 184 | + userRepo := factory.CreateUserRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 185 | + | ||
| 186 | + userMap := map[string]*domain.User{} | ||
| 187 | + accounts := make([]string, 0) // 全部账号数组(查询一次) | ||
| 188 | + for i := range in.Data { | ||
| 189 | + v := in.Data[i] | ||
| 190 | + if len(v.Phone) == 0 || len(v.ParentPhone) == 0 { | ||
| 191 | + continue | ||
| 192 | + } | ||
| 193 | + accounts = append(accounts, v.Phone) | ||
| 194 | + accounts = append(accounts, v.ParentPhone) | ||
| 195 | + } | ||
| 196 | + if len(accounts) > 0 { | ||
| 197 | + if _, users, err := userRepo.Find(map[string]interface{}{"accounts": accounts, "companyId": in.CompanyId}); err != nil { | ||
| 198 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 199 | + } else { | ||
| 200 | + for i := range users { | ||
| 201 | + userMap[users[i].Account] = users[i] | ||
| 202 | + } | ||
| 203 | + } | ||
| 204 | + } | ||
| 205 | + | ||
| 206 | + for i := range in.Data { | ||
| 207 | + v := in.Data[i] | ||
| 208 | + if len(v.Phone) == 0 || len(v.ParentPhone) == 0 { | ||
| 209 | + continue | ||
| 210 | + } | ||
| 211 | + if vCurrentUser, ok := userMap[v.Phone]; ok { | ||
| 212 | + if vParentUser, ok := userMap[v.ParentPhone]; ok { | ||
| 213 | + vCurrentUser.ParentId = vParentUser.Id | ||
| 214 | + | ||
| 215 | + // 更新上级数据 | ||
| 216 | + if _, err := userRepo.Update(vCurrentUser); err != nil { | ||
| 217 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 218 | + } | ||
| 219 | + } | ||
| 220 | + } | ||
| 221 | + } | ||
| 222 | + | ||
| 223 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
| 224 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 225 | + } | ||
| 226 | + return nil, nil | ||
| 61 | } | 227 | } |
| @@ -121,6 +121,9 @@ func (repo *UserRepository) Find(queryOptions map[string]interface{}) (int, []*d | @@ -121,6 +121,9 @@ func (repo *UserRepository) Find(queryOptions map[string]interface{}) (int, []*d | ||
| 121 | if v, ok := queryOptions["account"]; ok { | 121 | if v, ok := queryOptions["account"]; ok { |
| 122 | query.Where("account like ?", v) | 122 | query.Where("account like ?", v) |
| 123 | } | 123 | } |
| 124 | + if v, ok := queryOptions["accounts"]; ok { | ||
| 125 | + query.Where("account in(?)", pg.In(v)) | ||
| 126 | + } | ||
| 124 | if v, ok := queryOptions["status"]; ok { | 127 | if v, ok := queryOptions["status"]; ok { |
| 125 | query.Where("status=?", v) | 128 | query.Where("status=?", v) |
| 126 | } | 129 | } |
| @@ -20,6 +20,15 @@ func (controller *TemplateImplController) TemplateQuestion() { | @@ -20,6 +20,15 @@ func (controller *TemplateImplController) TemplateQuestion() { | ||
| 20 | controller.WriteExcel(fileBytes, "评估导入模板.xlsx") | 20 | controller.WriteExcel(fileBytes, "评估导入模板.xlsx") |
| 21 | } | 21 | } |
| 22 | 22 | ||
| 23 | +func (controller *TemplateImplController) TemplateParentUser() { | ||
| 24 | + fileBytes, err := ioutil.ReadFile("./templates/tpl_template_user.xlsx") | ||
| 25 | + if err != nil { | ||
| 26 | + controller.Response(nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "未读取到模板文件")) | ||
| 27 | + return | ||
| 28 | + } | ||
| 29 | + controller.WriteExcel(fileBytes, "直接上级导入模板.xlsx") | ||
| 30 | +} | ||
| 31 | + | ||
| 23 | func (controller *TemplateImplController) WriteExcel(fileBytes []byte, fileName string) { | 32 | func (controller *TemplateImplController) WriteExcel(fileBytes []byte, fileName string) { |
| 24 | controller.Ctx.Output.Header("Content-Disposition", "attachment;filename="+fileName) | 33 | controller.Ctx.Output.Header("Content-Disposition", "attachment;filename="+fileName) |
| 25 | controller.Ctx.Output.Header("Content-Description", "FileTransfer") | 34 | controller.Ctx.Output.Header("Content-Description", "FileTransfer") |
| @@ -3,10 +3,14 @@ package controllers | @@ -3,10 +3,14 @@ package controllers | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/linmadan/egglib-go/core/application" | 4 | "github.com/linmadan/egglib-go/core/application" |
| 5 | "github.com/linmadan/egglib-go/web/beego" | 5 | "github.com/linmadan/egglib-go/web/beego" |
| 6 | + "github.com/xuri/excelize/v2" | ||
| 6 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/user" | 7 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/user" |
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/user/adapter" | ||
| 9 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/user/command" | ||
| 7 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/user/query" | 10 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/user/query" |
| 8 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | 11 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" |
| 9 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/port/beego/middlewares" | 12 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/port/beego/middlewares" |
| 13 | + "strings" | ||
| 10 | ) | 14 | ) |
| 11 | 15 | ||
| 12 | type UserController struct { | 16 | type UserController struct { |
| @@ -33,3 +37,97 @@ func (controller *UserController) ListByDepartment() { | @@ -33,3 +37,97 @@ func (controller *UserController) ListByDepartment() { | ||
| 33 | controller.Response((&user.UserService{}).ListByDepartment(in)) | 37 | controller.Response((&user.UserService{}).ListByDepartment(in)) |
| 34 | } | 38 | } |
| 35 | } | 39 | } |
| 40 | + | ||
| 41 | +func (controller *UserController) EditParentUser() { | ||
| 42 | + in := &command.EditParentCommand{} | ||
| 43 | + if err := controller.Unmarshal(in); err != nil { | ||
| 44 | + controller.Response(nil, application.ThrowError(application.ARG_ERROR, err.Error())) | ||
| 45 | + } else { | ||
| 46 | + ua := middlewares.GetUser(controller.Ctx) | ||
| 47 | + in.CompanyId = int(ua.CompanyId) | ||
| 48 | + in.OperatorId = int(ua.UserId) | ||
| 49 | + controller.Response(nil, (&user.UserService{}).EditParentUser(in)) | ||
| 50 | + } | ||
| 51 | +} | ||
| 52 | + | ||
| 53 | +// ImportParentUser 导入用户上级 | ||
| 54 | +func (controller *UserController) ImportParentUser() { | ||
| 55 | + in := &command.ImportParentUserCommand{} | ||
| 56 | + if err := controller.Unmarshal(in); err != nil { | ||
| 57 | + controller.Response(nil, application.ThrowError(application.ARG_ERROR, err.Error())) | ||
| 58 | + } else { | ||
| 59 | + if itcArray, err := controller.readExcelFormUserParent(); err != nil { | ||
| 60 | + controller.Response(nil, application.ThrowError(application.ARG_ERROR, err.Error())) | ||
| 61 | + } else { | ||
| 62 | + ua := middlewares.GetUser(controller.Ctx) | ||
| 63 | + in.CompanyId = int(ua.CompanyId) | ||
| 64 | + in.OperatorId = int(ua.UserId) | ||
| 65 | + in.Data = itcArray | ||
| 66 | + if data, err := (&user.UserService{}).ImportParentUser(in); nil != err { | ||
| 67 | + controller.Response(nil, err) | ||
| 68 | + } else { | ||
| 69 | + controller.Response(data, nil) | ||
| 70 | + } | ||
| 71 | + } | ||
| 72 | + } | ||
| 73 | +} | ||
| 74 | + | ||
| 75 | +func (controller *UserController) readExcelFormUserParent() ([]adapter.ImportParentUser, error) { | ||
| 76 | + // 读取文件 | ||
| 77 | + _, header, err := controller.GetFile("file") | ||
| 78 | + if err != nil { | ||
| 79 | + controller.Response(nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "上传错误:"+err.Error())) | ||
| 80 | + return nil, err | ||
| 81 | + } | ||
| 82 | + file, err := header.Open() | ||
| 83 | + if err != nil { | ||
| 84 | + controller.Response(nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "上传错误:"+err.Error())) | ||
| 85 | + return nil, err | ||
| 86 | + } | ||
| 87 | + defer func() { | ||
| 88 | + if err := file.Close(); err != nil { | ||
| 89 | + return | ||
| 90 | + } | ||
| 91 | + }() | ||
| 92 | + | ||
| 93 | + reader, err := excelize.OpenReader(file) | ||
| 94 | + if err != nil { | ||
| 95 | + controller.Response(nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "上传错误:"+err.Error())) | ||
| 96 | + return nil, err | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | + index := reader.GetActiveSheetIndex() | ||
| 100 | + rows, err := reader.GetRows(reader.GetSheetName(index)) | ||
| 101 | + if err != nil { | ||
| 102 | + controller.Response(nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "读取excel错误:"+err.Error())) | ||
| 103 | + return nil, err | ||
| 104 | + } | ||
| 105 | + if len(rows) <= 0 { | ||
| 106 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "文件内数据不能为空:"+err.Error()) | ||
| 107 | + } | ||
| 108 | + | ||
| 109 | + adapters := make([]adapter.ImportParentUser, 0) | ||
| 110 | + for rowIndex, row := range rows { | ||
| 111 | + if rowIndex < 2 { // 头2行不读取 | ||
| 112 | + continue | ||
| 113 | + } | ||
| 114 | + ipu := adapter.ImportParentUser{} | ||
| 115 | + for colIndex, colCell := range row { | ||
| 116 | + switch colIndex { | ||
| 117 | + case 0: | ||
| 118 | + ipu.Name = strings.TrimSpace(colCell) // 员工名称 | ||
| 119 | + case 1: | ||
| 120 | + ipu.Phone = strings.TrimSpace(colCell) // 员工手机号码 | ||
| 121 | + case 2: | ||
| 122 | + ipu.ParentName = strings.TrimSpace(colCell) // 直接上级名称 | ||
| 123 | + case 3: | ||
| 124 | + ipu.ParentPhone = strings.TrimSpace(colCell) // 直接上级手机号码 | ||
| 125 | + } | ||
| 126 | + } | ||
| 127 | + adapters = append(adapters, ipu) | ||
| 128 | + } | ||
| 129 | + if len(adapters) <= 0 { | ||
| 130 | + return adapters, application.ThrowError(application.INTERNAL_SERVER_ERROR, "文件内数据不能为空:"+err.Error()) | ||
| 131 | + } | ||
| 132 | + return adapters, err | ||
| 133 | +} |
| @@ -7,4 +7,6 @@ import ( | @@ -7,4 +7,6 @@ import ( | ||
| 7 | 7 | ||
| 8 | func init() { | 8 | func init() { |
| 9 | web.Router("/templates/tpl_template_question.xlsx", &controllers.TemplateImplController{}, "Get:TemplateQuestion") | 9 | web.Router("/templates/tpl_template_question.xlsx", &controllers.TemplateImplController{}, "Get:TemplateQuestion") |
| 10 | + web.Router("/templates/tpl_template_user.xlsx", &controllers.TemplateImplController{}, "Get:TemplateParentUser") | ||
| 11 | + | ||
| 10 | } | 12 | } |
| @@ -12,6 +12,9 @@ func init() { | @@ -12,6 +12,9 @@ func init() { | ||
| 12 | web.NSBefore(filters.AllowCors(), middlewares.CheckAdminToken()), | 12 | web.NSBefore(filters.AllowCors(), middlewares.CheckAdminToken()), |
| 13 | web.NSRouter("/search", &controllers.UserController{}, "Post:ListUsers"), | 13 | web.NSRouter("/search", &controllers.UserController{}, "Post:ListUsers"), |
| 14 | web.NSRouter("/list-dep", &controllers.UserController{}, "Post:ListByDepartment"), | 14 | web.NSRouter("/list-dep", &controllers.UserController{}, "Post:ListByDepartment"), |
| 15 | + web.NSRouter("/edit-parent", &controllers.UserController{}, "Put:EditParentUser"), | ||
| 16 | + web.NSRouter("/edit-parent", &controllers.UserController{}, "Put:EditParentUser"), | ||
| 17 | + web.NSRouter("/import-parent", &controllers.UserController{}, "Post:ImportParentUser"), // 直接上级导入 | ||
| 15 | ) | 18 | ) |
| 16 | web.AddNamespace(ns) | 19 | web.AddNamespace(ns) |
| 17 | } | 20 | } |
templates/tpl_template_user.xlsx
0 → 100644
不能预览此文件类型
-
请 注册 或 登录 后发表评论