正在显示
39 个修改的文件
包含
1219 行增加
和
296 行删除
| @@ -8,7 +8,7 @@ prod 环境 http://performance-back-prd.fjmaimaimai.com/ | @@ -8,7 +8,7 @@ prod 环境 http://performance-back-prd.fjmaimaimai.com/ | ||
| 8 | 前端页面地址 | 8 | 前端页面地址 |
| 9 | test环境 https://enterprise-platform-dev.fjmaimaimai.com/#/login | 9 | test环境 https://enterprise-platform-dev.fjmaimaimai.com/#/login |
| 10 | 10 | ||
| 11 | -测试账号 17708397664 密码123456 | 11 | +测试账号 17708397664 密码 123456 |
| 12 | 12 | ||
| 13 | 13 | ||
| 14 | 短信模板ID:5475050 短信内容: 您好,#name#,百忙之中不要忘记填写今天的绩效自评反馈哦 | 14 | 短信模板ID:5475050 短信内容: 您好,#name#,百忙之中不要忘记填写今天的绩效自评反馈哦 |
pkg/application/auth/adapter/me_info.go
0 → 100644
| 1 | +package adapter | ||
| 2 | + | ||
| 3 | +type MeInfo struct { | ||
| 4 | + UserId int64 `json:"userId"` //用户名称 | ||
| 5 | + CompanyId int64 `json:"companyId"` //公司id | ||
| 6 | + CompanyName string `json:"companyName"` //公司名称 | ||
| 7 | + Phone string `json:"phone"` // 手机号 | ||
| 8 | + Name string `json:"name"` // 员工名称 | ||
| 9 | + IsHrbp bool `json:"isHrbp"` //是否 是hrbp | ||
| 10 | + IsParent bool `json:"isParent"` //是否 是上级 | ||
| 11 | +} |
pkg/application/auth/command/me_info.go
0 → 100644
| @@ -2,6 +2,7 @@ package service | @@ -2,6 +2,7 @@ package service | ||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "github.com/linmadan/egglib-go/core/application" | 4 | "github.com/linmadan/egglib-go/core/application" |
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/auth/adapter" | ||
| 5 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/auth/command" | 6 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/auth/command" |
| 6 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory" | 7 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory" |
| 7 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/constant" | 8 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/constant" |
| @@ -156,3 +157,78 @@ func (service *AuthService) MobileLogin(param *command.MobileLoginCommand) (map[ | @@ -156,3 +157,78 @@ func (service *AuthService) MobileLogin(param *command.MobileLoginCommand) (map[ | ||
| 156 | } | 157 | } |
| 157 | return result, nil | 158 | return result, nil |
| 158 | } | 159 | } |
| 160 | + | ||
| 161 | +// 获取我的 | ||
| 162 | +func (service *AuthService) MeInfo(param *command.GetMeInfo) (map[string]interface{}, error) { | ||
| 163 | + | ||
| 164 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
| 165 | + if err != nil { | ||
| 166 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 167 | + } | ||
| 168 | + if errStart := transactionContext.StartTransaction(); errStart != nil { | ||
| 169 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, errStart.Error()) | ||
| 170 | + } | ||
| 171 | + defer func() { | ||
| 172 | + _ = transactionContext.RollbackTransaction() | ||
| 173 | + }() | ||
| 174 | + userRepository := factory.CreateUserRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 175 | + companyRepository := factory.CreateCompanyRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 176 | + roleRepo := factory.CreateRoleRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 177 | + roleUserRepo := factory.CreateRoleUserRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 178 | + userData, err := userRepository.FindOne(map[string]interface{}{ | ||
| 179 | + "id": param.UserId, | ||
| 180 | + }) | ||
| 181 | + if err != nil { | ||
| 182 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取员工数据"+err.Error()) | ||
| 183 | + } | ||
| 184 | + _, parentUser, err := userRepository.Find(map[string]interface{}{ | ||
| 185 | + "parentId": userData.Id, | ||
| 186 | + "limit": 1, | ||
| 187 | + }) | ||
| 188 | + if err != nil { | ||
| 189 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取员工数据"+err.Error()) | ||
| 190 | + } | ||
| 191 | + companyData, err := companyRepository.FindOne(map[string]interface{}{ | ||
| 192 | + "id": param.CompanyId, | ||
| 193 | + }) | ||
| 194 | + if err != nil { | ||
| 195 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取公司数据"+err.Error()) | ||
| 196 | + } | ||
| 197 | + _, roleList, err := roleRepo.Find(map[string]interface{}{"type": domain.RoleTypeSystem, "companyId": param.CompanyId}) | ||
| 198 | + if err != nil { | ||
| 199 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取角色信息列表"+err.Error()) | ||
| 200 | + } | ||
| 201 | + _, userRoleList, err := roleUserRepo.Find(map[string]interface{}{"companyId": param.CompanyId, "userId": param.UserId}) | ||
| 202 | + if err != nil { | ||
| 203 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取用户的角色信息列表"+err.Error()) | ||
| 204 | + } | ||
| 205 | + // 拥有HRBP权限 | ||
| 206 | + isHrbp := false | ||
| 207 | +loop: | ||
| 208 | + for _, v := range userRoleList { | ||
| 209 | + for _, v2 := range roleList { | ||
| 210 | + if v.RoleId == v2.Id { | ||
| 211 | + isHrbp = true | ||
| 212 | + break loop | ||
| 213 | + } | ||
| 214 | + } | ||
| 215 | + } | ||
| 216 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
| 217 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 218 | + } | ||
| 219 | + info := adapter.MeInfo{ | ||
| 220 | + UserId: userData.Id, | ||
| 221 | + CompanyId: companyData.Id, | ||
| 222 | + CompanyName: companyData.Name, | ||
| 223 | + Phone: userData.Account, | ||
| 224 | + Name: userData.Name, | ||
| 225 | + IsHrbp: isHrbp, | ||
| 226 | + IsParent: false, | ||
| 227 | + } | ||
| 228 | + if len(parentUser) > 0 { | ||
| 229 | + info.IsParent = true | ||
| 230 | + } | ||
| 231 | + return map[string]interface{}{ | ||
| 232 | + "user": info, | ||
| 233 | + }, nil | ||
| 234 | +} |
| @@ -208,3 +208,11 @@ func CreateLogSmsRepository(options map[string]interface{}) domain.LogSmsReposit | @@ -208,3 +208,11 @@ func CreateLogSmsRepository(options map[string]interface{}) domain.LogSmsReposit | ||
| 208 | } | 208 | } |
| 209 | return repository.NewLogSmsRepository(transactionContext) | 209 | return repository.NewLogSmsRepository(transactionContext) |
| 210 | } | 210 | } |
| 211 | + | ||
| 212 | +func CreateMessagePersonalRepository(options map[string]interface{}) domain.MessagePersonalRepository { | ||
| 213 | + var transactionContext *pg.TransactionContext | ||
| 214 | + if value, ok := options["transactionContext"]; ok { | ||
| 215 | + transactionContext = value.(*pg.TransactionContext) | ||
| 216 | + } | ||
| 217 | + return repository.NewMessagePersonalRepository(transactionContext) | ||
| 218 | +} |
| @@ -33,143 +33,295 @@ func (rs *NodeTaskService) SendEvaluationNode() error { | @@ -33,143 +33,295 @@ func (rs *NodeTaskService) SendEvaluationNode() error { | ||
| 33 | transactionContext.RollbackTransaction() | 33 | transactionContext.RollbackTransaction() |
| 34 | 34 | ||
| 35 | if err := recover(); err != nil { | 35 | if err := recover(); err != nil { |
| 36 | - log.Logger.Error(application.ThrowError(application.BUSINESS_ERROR, fmt.Sprintf("定时发送评估任务异常:%s", err)).Error()) | 36 | + log.Logger.Error(application.ThrowError(application.BUSINESS_ERROR, fmt.Sprintf("定时发送评估任务[基础查询]异常:%s", err)).Error()) |
| 37 | } | 37 | } |
| 38 | }() | 38 | }() |
| 39 | taskRepository := factory.CreateNodeTaskRepository(map[string]interface{}{"transactionContext": transactionContext}) | 39 | taskRepository := factory.CreateNodeTaskRepository(map[string]interface{}{"transactionContext": transactionContext}) |
| 40 | - tasks, err := taskRepository.Find(map[string]interface{}{"now": time.Now().Local()}) | 40 | + tasks, err := taskRepository.Find(map[string]interface{}{"lessNextSentAt": time.Now().Local()}) |
| 41 | if err != nil { | 41 | if err != nil { |
| 42 | return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 42 | return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 43 | } | 43 | } |
| 44 | if len(tasks) == 0 { | 44 | if len(tasks) == 0 { |
| 45 | return nil | 45 | return nil |
| 46 | } | 46 | } |
| 47 | - projectRepository := factory.CreateEvaluationProjectRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 48 | - cycleRepository := factory.CreateEvaluationCycleRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 49 | 47 | ||
| 50 | - projectIdsMap := map[int64]*domain.EvaluationProject{} | ||
| 51 | - cycleIdsMap := map[int64]*domain.EvaluationCycle{} | 48 | + projectMap := map[int64]*domain.EvaluationProject{} |
| 49 | + cycleMap := map[int64]*domain.EvaluationCycle{} | ||
| 52 | for i := range tasks { | 50 | for i := range tasks { |
| 53 | - task := tasks[i] | ||
| 54 | - projectIdsMap[task.ProjectId] = nil | ||
| 55 | - cycleIdsMap[task.CycleId] = nil | 51 | + projectMap[tasks[i].ProjectId] = nil |
| 52 | + cycleMap[tasks[i].CycleId] = nil | ||
| 56 | } | 53 | } |
| 57 | projectIds := make([]int64, 0) | 54 | projectIds := make([]int64, 0) |
| 58 | cycleIds := make([]int64, 0) | 55 | cycleIds := make([]int64, 0) |
| 59 | - for k := range projectIdsMap { | 56 | + for k := range projectMap { |
| 60 | projectIds = append(projectIds, k) | 57 | projectIds = append(projectIds, k) |
| 61 | } | 58 | } |
| 62 | - for k := range cycleIdsMap { | 59 | + for k := range cycleMap { |
| 63 | cycleIds = append(cycleIds, k) | 60 | cycleIds = append(cycleIds, k) |
| 64 | } | 61 | } |
| 65 | 62 | ||
| 66 | - _, projects, err := projectRepository.Find(map[string]interface{}{"ids": projectIds}, "template") | ||
| 67 | - if err != nil { | ||
| 68 | - return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 63 | + if len(projectIds) > 0 { |
| 64 | + projectRepository := factory.CreateEvaluationProjectRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 65 | + _, projects, err := projectRepository.Find(map[string]interface{}{"ids": projectIds}, "template") | ||
| 66 | + if err != nil { | ||
| 67 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 68 | + } | ||
| 69 | + for i := range projects { | ||
| 70 | + projectMap[projects[i].Id] = projects[i] | ||
| 71 | + } | ||
| 69 | } | 72 | } |
| 70 | - _, cycles, err := cycleRepository.Find(map[string]interface{}{"ids": cycleIds}) | ||
| 71 | - if err != nil { | ||
| 72 | - return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 73 | + if len(cycleIds) > 0 { |
| 74 | + cycleRepository := factory.CreateEvaluationCycleRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 75 | + _, cycles, err := cycleRepository.Find(map[string]interface{}{"ids": cycleIds}) | ||
| 76 | + if err != nil { | ||
| 77 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 78 | + } | ||
| 79 | + for i := range cycles { | ||
| 80 | + cycleMap[cycles[i].Id] = cycles[i] | ||
| 81 | + } | ||
| 82 | + } | ||
| 83 | + if err = transactionContext.CommitTransaction(); err != nil { | ||
| 84 | + return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 73 | } | 85 | } |
| 74 | 86 | ||
| 75 | - for i := range projects { | ||
| 76 | - projectIdsMap[projects[i].Id] = projects[i] | 87 | + // 相同项目节点先聚合 |
| 88 | + taskMap := map[int64][]*domain.NodeTask{} | ||
| 89 | + for i := range tasks { | ||
| 90 | + task := tasks[i] | ||
| 91 | + array, ok := taskMap[task.ProjectId] | ||
| 92 | + if !ok { | ||
| 93 | + array = make([]*domain.NodeTask, 0) | ||
| 94 | + } | ||
| 95 | + taskMap[task.ProjectId] = append(array, task) | ||
| 77 | } | 96 | } |
| 78 | - for i := range cycles { | ||
| 79 | - cycleIdsMap[cycles[i].Id] = cycles[i] | 97 | + for k, v := range taskMap { |
| 98 | + project, ok := projectMap[k] | ||
| 99 | + if ok && project != nil { | ||
| 100 | + if err = rs.taskSend(project, v, cycleMap); err != nil { | ||
| 101 | + return err | ||
| 102 | + } | ||
| 103 | + } else { | ||
| 104 | + if err = rs.taskAbort(v); err != nil { | ||
| 105 | + return err | ||
| 106 | + } | ||
| 107 | + } | ||
| 80 | } | 108 | } |
| 81 | 109 | ||
| 82 | - staffAssessService := service.NewStaffAssessServeice() | 110 | + //staffAssessService := service.NewStaffAssessServeice() |
| 111 | + //now := time.Now().Local() | ||
| 112 | + //for i := range tasks { | ||
| 113 | + // task := tasks[i] | ||
| 114 | + // project, ok := projectMap[task.ProjectId] // 项目还存在 | ||
| 115 | + // if ok && project != nil { | ||
| 116 | + // // 环节截止时间 | ||
| 117 | + // maxTime := task.TimeEnd.Local() | ||
| 118 | + // | ||
| 119 | + // // 更新任务最后一次的发送时间(取当前时间) | ||
| 120 | + // task.LastSentAt = &now | ||
| 121 | + // | ||
| 122 | + // // 当前周起始时间和截止时间 | ||
| 123 | + // var cycleTimeStart = task.NextSentAt.Local() | ||
| 124 | + // var cycleTimeEnd time.Time | ||
| 125 | + // | ||
| 126 | + // // 下个周期起始时间 | ||
| 127 | + // nextTime := utils.NextTimeInc(cycleTimeStart, task.KpiCycle) | ||
| 128 | + // // 超过截止时间 | ||
| 129 | + // if nextTime.After(maxTime) { | ||
| 130 | + // task.NextSentAt = nil | ||
| 131 | + // } else { | ||
| 132 | + // task.NextSentAt = &nextTime | ||
| 133 | + // } | ||
| 134 | + // | ||
| 135 | + // // 周期的截至时间=下一个周期的开始时间-1秒(需求方要求提交数据时间延长到第二天8点30分截止) | ||
| 136 | + // if task.NextSentAt == nil { | ||
| 137 | + // //cycleTimeEnd = maxTime | ||
| 138 | + // maxYear, maxMonth, maxDay := maxTime.Date() | ||
| 139 | + // cycleTimeEnd = time.Date(maxYear, maxMonth, maxDay, 0, 0, 0, 0, time.Local) | ||
| 140 | + // cycleTimeEnd = cycleTimeEnd.Add(24*time.Hour + 8*time.Hour + 30*time.Minute) // 注.延长8.5小时 | ||
| 141 | + // } else { | ||
| 142 | + // //cycleTimeEnd = task.NextSentAt.Local().Add(-1 * time.Second) // 周期截至时间=下一个周期起始时间-1秒 | ||
| 143 | + // cycleTimeEnd = task.NextSentAt.Local().Add(8*time.Hour + 30*time.Minute) // 注.延长8.5小时 | ||
| 144 | + // } | ||
| 145 | + // | ||
| 146 | + // // 格式化周期的起始和截止时间 | ||
| 147 | + // fmCycleStartTime := cycleTimeStart.Format("2006-01-02 15:04:05") | ||
| 148 | + // fmCycleTimeEnd := cycleTimeEnd.Format("2006-01-02 15:04:05") | ||
| 149 | + // | ||
| 150 | + // csat := &command.CreateStaffAssessTask{ | ||
| 151 | + // CompanyId: int(project.CompanyId), | ||
| 152 | + // EvaluationProjectId: int(project.Id), | ||
| 153 | + // EvaluationProjectName: project.Name, | ||
| 154 | + // CycleId: project.CycleId, | ||
| 155 | + // StepList: make([]command.AssessTaskStep, 0), | ||
| 156 | + // } | ||
| 157 | + // | ||
| 158 | + // // 周期名称 | ||
| 159 | + // if cycle, ok := cycleMap[project.CycleId]; ok { | ||
| 160 | + // csat.CycleName = cycle.Name | ||
| 161 | + // } | ||
| 162 | + // | ||
| 163 | + // // 接收人 | ||
| 164 | + // csat.ExecutorId = make([]int, 0) | ||
| 165 | + // for rIndex := range project.Recipients { | ||
| 166 | + // vInt, _ := strconv.Atoi(project.Recipients[rIndex]) | ||
| 167 | + // csat.ExecutorId = append(csat.ExecutorId, vInt) | ||
| 168 | + // } | ||
| 169 | + // | ||
| 170 | + // csat.BeginTime = fmCycleStartTime | ||
| 171 | + // csat.EndTime = fmCycleTimeEnd | ||
| 172 | + // csat.StepList = append(csat.StepList, command.AssessTaskStep{ | ||
| 173 | + // SortBy: task.NodeSort, | ||
| 174 | + // LinkNodeId: int(task.NodeId), | ||
| 175 | + // LinkNodeName: task.NodeName, | ||
| 176 | + // LinkNodeType: task.NodeType, | ||
| 177 | + // BeginTime: fmCycleStartTime, | ||
| 178 | + // EndTime: fmCycleTimeEnd, | ||
| 179 | + // }) | ||
| 180 | + // | ||
| 181 | + // // 创建发送任务 | ||
| 182 | + // _, err := staffAssessService.CreateStaffAssessTask(transactionContext, csat) | ||
| 183 | + // if err != nil { | ||
| 184 | + // return application.ThrowError(application.INTERNAL_SERVER_ERROR, "创建发送任务"+err.Error()) | ||
| 185 | + // } | ||
| 186 | + // } else { | ||
| 187 | + // task.NextSentAt = nil // 项目不存在,取消周期任务发送 | ||
| 188 | + // } | ||
| 189 | + // | ||
| 190 | + // task, err := taskRepository.Insert(task) | ||
| 191 | + // if err != nil { | ||
| 192 | + // return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 193 | + // } | ||
| 194 | + //} | ||
| 195 | + | ||
| 196 | + return nil | ||
| 197 | + | ||
| 198 | +} | ||
| 199 | + | ||
| 200 | +func (rs *NodeTaskService) taskSend(project *domain.EvaluationProject, tasks []*domain.NodeTask, cycleMap map[int64]*domain.EvaluationCycle) error { | ||
| 201 | + transactionContext, err := factory.StartTransaction() | ||
| 202 | + if err != nil { | ||
| 203 | + return err | ||
| 204 | + } | ||
| 205 | + defer func() { | ||
| 206 | + _ = transactionContext.RollbackTransaction() | ||
| 207 | + if err := recover(); err != nil { | ||
| 208 | + log.Logger.Error(application.ThrowError(application.BUSINESS_ERROR, fmt.Sprintf("定时发送评估任务异常:%s", err)).Error()) | ||
| 209 | + } | ||
| 210 | + }() | ||
| 211 | + taskRepository := factory.CreateNodeTaskRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 83 | 212 | ||
| 84 | now := time.Now().Local() | 213 | now := time.Now().Local() |
| 214 | + csat := &command.CreateStaffAssessTask{ | ||
| 215 | + CompanyId: int(project.CompanyId), | ||
| 216 | + EvaluationProjectId: int(project.Id), | ||
| 217 | + EvaluationProjectName: project.Name, | ||
| 218 | + CycleId: project.CycleId, | ||
| 219 | + StepList: make([]command.AssessTaskStep, 0), | ||
| 220 | + } | ||
| 221 | + // 周期名称 | ||
| 222 | + if cycle, ok := cycleMap[project.CycleId]; ok { | ||
| 223 | + csat.CycleName = cycle.Name | ||
| 224 | + } | ||
| 225 | + | ||
| 226 | + // 接收人 | ||
| 227 | + csat.ExecutorId = make([]int, 0) | ||
| 228 | + for rIndex := range project.Recipients { | ||
| 229 | + vInt, _ := strconv.Atoi(project.Recipients[rIndex]) | ||
| 230 | + csat.ExecutorId = append(csat.ExecutorId, vInt) | ||
| 231 | + } | ||
| 232 | + | ||
| 85 | for i := range tasks { | 233 | for i := range tasks { |
| 86 | task := tasks[i] | 234 | task := tasks[i] |
| 87 | - project, ok := projectIdsMap[task.ProjectId] // 项目 | ||
| 88 | - if ok && project != nil { | ||
| 89 | - // 环节截止时间 | ||
| 90 | - maxTime := task.TimeEnd.Local() | ||
| 91 | - | ||
| 92 | - // 更新任务最后一次的发送时间(取当前时间) | ||
| 93 | - task.LastSentAt = &now | ||
| 94 | - | ||
| 95 | - // 当前周起始时间和截止时间 | ||
| 96 | - var cycleTimeStart = task.NextSentAt.Local() | ||
| 97 | - var cycleTimeEnd time.Time | ||
| 98 | - | ||
| 99 | - // 下个周期起始时间 | ||
| 100 | - nextTime := utils.NextTimeInc(cycleTimeStart, task.KpiCycle) | ||
| 101 | - // 超过截止时间 | ||
| 102 | - if nextTime.After(maxTime) { | ||
| 103 | - task.NextSentAt = nil | ||
| 104 | - } else { | ||
| 105 | - task.NextSentAt = &nextTime | ||
| 106 | - } | ||
| 107 | 235 | ||
| 108 | - // 周期的截至时间=下一个周期的开始时间-1秒(需求方要求提交数据时间延长到第二天8点30分截止) | ||
| 109 | - if task.NextSentAt == nil { | ||
| 110 | - //cycleTimeEnd = maxTime | ||
| 111 | - maxYear, maxMonth, maxDay := maxTime.Date() | ||
| 112 | - cycleTimeEnd = time.Date(maxYear, maxMonth, maxDay, 0, 0, 0, 0, time.Local) | ||
| 113 | - cycleTimeEnd = cycleTimeEnd.Add(24*time.Hour + 8*time.Hour + 30*time.Minute) // 注.延长8.5小时 | ||
| 114 | - } else { | ||
| 115 | - //cycleTimeEnd = task.NextSentAt.Local().Add(-1 * time.Second) // 周期截至时间=下一个周期起始时间-1秒 | ||
| 116 | - cycleTimeEnd = task.NextSentAt.Local().Add(8*time.Hour + 30*time.Minute) // 注.延长8.5小时 | ||
| 117 | - } | 236 | + // 环节截止时间 |
| 237 | + maxTime := task.TimeEnd.Local() | ||
| 118 | 238 | ||
| 119 | - // 格式化周期的起始和截止时间 | ||
| 120 | - fmCycleStartTime := cycleTimeStart.Format("2006-01-02 15:04:05") | ||
| 121 | - fmCycleTimeEnd := cycleTimeEnd.Format("2006-01-02 15:04:05") | 239 | + // 更新任务最后一次的发送时间(取当前时间) |
| 240 | + task.LastSentAt = &now | ||
| 122 | 241 | ||
| 123 | - csat := &command.CreateStaffAssessTask{ | ||
| 124 | - CompanyId: int(project.CompanyId), | ||
| 125 | - EvaluationProjectId: int(project.Id), | ||
| 126 | - EvaluationProjectName: project.Name, | ||
| 127 | - CycleId: project.CycleId, | ||
| 128 | - StepList: make([]command.AssessTaskStep, 0), | ||
| 129 | - } | 242 | + // 当前小周期范围[起始时间-截止时间] |
| 243 | + var cycleTimeStart = task.NextSentAt.Local() | ||
| 244 | + var cycleTimeEnd time.Time | ||
| 130 | 245 | ||
| 131 | - // 周期名称 | ||
| 132 | - if cycle, ok := cycleIdsMap[project.CycleId]; ok { | ||
| 133 | - csat.CycleName = cycle.Name | ||
| 134 | - } | 246 | + // 下个周期起始时间 |
| 247 | + nextTime := utils.NextTimeInc(cycleTimeStart, task.KpiCycle) | ||
| 248 | + // 超过截止时间 | ||
| 249 | + if nextTime.After(maxTime) { | ||
| 250 | + task.NextSentAt = nil | ||
| 251 | + } else { | ||
| 252 | + task.NextSentAt = &nextTime | ||
| 253 | + } | ||
| 254 | + // 更新下个周期 | ||
| 255 | + _, err = taskRepository.Insert(task) | ||
| 256 | + if err != nil { | ||
| 257 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 258 | + } | ||
| 135 | 259 | ||
| 136 | - // 接收人 | ||
| 137 | - csat.ExecutorId = make([]int, 0) | ||
| 138 | - for rIndex := range project.Recipients { | ||
| 139 | - vInt, _ := strconv.Atoi(project.Recipients[rIndex]) | ||
| 140 | - csat.ExecutorId = append(csat.ExecutorId, vInt) | ||
| 141 | - } | 260 | + // 周期的截至时间=下一个周期的开始时间-1秒(需求方要求:提交数据时间延长到第二天8点30分截止) |
| 261 | + if task.NextSentAt == nil { | ||
| 262 | + //cycleTimeEnd = maxTime | ||
| 263 | + maxYear, maxMonth, maxDay := maxTime.Date() | ||
| 264 | + cycleTimeEnd = time.Date(maxYear, maxMonth, maxDay, 0, 0, 0, 0, time.Local) | ||
| 265 | + cycleTimeEnd = cycleTimeEnd.Add(24*time.Hour + 8*time.Hour + 30*time.Minute) // 注.延长8.5小时 | ||
| 266 | + } else { | ||
| 267 | + //cycleTimeEnd = task.NextSentAt.Local().Add(-1 * time.Second) // 周期截至时间=下一个周期起始时间-1秒 | ||
| 268 | + cycleTimeEnd = task.NextSentAt.Local().Add(8*time.Hour + 30*time.Minute) // 注.延长8.5小时 | ||
| 269 | + } | ||
| 270 | + | ||
| 271 | + // 格式化周期的起始和截止时间 | ||
| 272 | + fmCycleStartTime := cycleTimeStart.Format("2006-01-02 15:04:05") | ||
| 273 | + fmCycleTimeEnd := cycleTimeEnd.Format("2006-01-02 15:04:05") | ||
| 142 | 274 | ||
| 275 | + // 格式化周期的起始和截止时间 | ||
| 276 | + if len(csat.BeginTime) == 0 { | ||
| 143 | csat.BeginTime = fmCycleStartTime | 277 | csat.BeginTime = fmCycleStartTime |
| 278 | + } | ||
| 279 | + if len(csat.EndTime) == 0 { | ||
| 144 | csat.EndTime = fmCycleTimeEnd | 280 | csat.EndTime = fmCycleTimeEnd |
| 145 | - csat.StepList = append(csat.StepList, command.AssessTaskStep{ | ||
| 146 | - SortBy: task.NodeSort, | ||
| 147 | - LinkNodeId: int(task.NodeId), | ||
| 148 | - LinkNodeName: task.NodeName, | ||
| 149 | - LinkNodeType: task.NodeType, | ||
| 150 | - BeginTime: fmCycleStartTime, | ||
| 151 | - EndTime: fmCycleTimeEnd, | ||
| 152 | - }) | ||
| 153 | - | ||
| 154 | - // 创建发送任务 | ||
| 155 | - _, err := staffAssessService.CreateStaffAssessTask(transactionContext, csat) | ||
| 156 | - if err != nil { | ||
| 157 | - return application.ThrowError(application.INTERNAL_SERVER_ERROR, "创建发送任务"+err.Error()) | ||
| 158 | - } | ||
| 159 | - } else { | ||
| 160 | - task.NextSentAt = nil // 项目不存在,取消周期任务发送 | ||
| 161 | } | 281 | } |
| 282 | + csat.StepList = append(csat.StepList, command.AssessTaskStep{ | ||
| 283 | + SortBy: task.NodeSort, | ||
| 284 | + LinkNodeId: int(task.NodeId), | ||
| 285 | + LinkNodeName: task.NodeName, | ||
| 286 | + LinkNodeType: task.NodeType, | ||
| 287 | + BeginTime: fmCycleStartTime, | ||
| 288 | + EndTime: fmCycleTimeEnd, | ||
| 289 | + }) | ||
| 290 | + } | ||
| 162 | 291 | ||
| 163 | - task, err := taskRepository.Insert(task) | ||
| 164 | - if err != nil { | ||
| 165 | - return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 166 | - } | 292 | + // 创建发送任务 |
| 293 | + _, err = service.NewStaffAssessServeice().CreateStaffAssessTask(transactionContext, csat) | ||
| 294 | + if err != nil { | ||
| 295 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, "创建发送任务"+err.Error()) | ||
| 167 | } | 296 | } |
| 168 | 297 | ||
| 169 | - if err := transactionContext.CommitTransaction(); err != nil { | 298 | + if err = transactionContext.CommitTransaction(); err != nil { |
| 170 | return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 299 | return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
| 171 | } | 300 | } |
| 172 | 301 | ||
| 173 | return nil | 302 | return nil |
| 303 | +} | ||
| 174 | 304 | ||
| 305 | +// 节点任务中止 | ||
| 306 | +func (rs *NodeTaskService) taskAbort(tasks []*domain.NodeTask) error { | ||
| 307 | + transactionContext, err := factory.StartTransaction() | ||
| 308 | + if err != nil { | ||
| 309 | + return err | ||
| 310 | + } | ||
| 311 | + defer func() { | ||
| 312 | + transactionContext.RollbackTransaction() | ||
| 313 | + }() | ||
| 314 | + taskRepository := factory.CreateNodeTaskRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 315 | + for i := range tasks { | ||
| 316 | + task := tasks[i] | ||
| 317 | + task.NextSentAt = nil // 项目不存在,取消周期任务发送 | ||
| 318 | + _, err = taskRepository.Insert(task) | ||
| 319 | + if err != nil { | ||
| 320 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 321 | + } | ||
| 322 | + } | ||
| 323 | + if err = transactionContext.CommitTransaction(); err != nil { | ||
| 324 | + return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 325 | + } | ||
| 326 | + return nil | ||
| 175 | } | 327 | } |
| @@ -2,6 +2,7 @@ package notify | @@ -2,6 +2,7 @@ package notify | ||
| 2 | 2 | ||
| 3 | import "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | 3 | import "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" |
| 4 | 4 | ||
| 5 | +// 执行定时任务检查是否发送短信通知 | ||
| 5 | var taskSmsNotify *notifySms | 6 | var taskSmsNotify *notifySms |
| 6 | 7 | ||
| 7 | // 检查并发送短信通知 | 8 | // 检查并发送短信通知 |
| @@ -11,7 +12,6 @@ func RunTaskSmsNotify() { | @@ -11,7 +12,6 @@ func RunTaskSmsNotify() { | ||
| 11 | taskSmsNotify.regist(notifyStaffAssess{}) | 12 | taskSmsNotify.regist(notifyStaffAssess{}) |
| 12 | taskSmsNotify.regist(notifySummaryEvaluation{}) | 13 | taskSmsNotify.regist(notifySummaryEvaluation{}) |
| 13 | taskSmsNotify.runTask() | 14 | taskSmsNotify.runTask() |
| 14 | - | ||
| 15 | } | 15 | } |
| 16 | 16 | ||
| 17 | // 每日自评短信通知 ,预创建待发送的短信消息 | 17 | // 每日自评短信通知 ,预创建待发送的短信消息 |
| 1 | +package service | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "encoding/json" | ||
| 5 | + "fmt" | ||
| 6 | + "strconv" | ||
| 7 | + "time" | ||
| 8 | + | ||
| 9 | + "github.com/linmadan/egglib-go/core/application" | ||
| 10 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory" | ||
| 11 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/notify/command" | ||
| 12 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | ||
| 13 | +) | ||
| 14 | + | ||
| 15 | +// 个人信息提示 | ||
| 16 | + | ||
| 17 | +type MessagePersonalService struct { | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +func NewMessagePersonalService() *MessagePersonalService { | ||
| 21 | + newService := &MessagePersonalService{} | ||
| 22 | + return newService | ||
| 23 | +} | ||
| 24 | + | ||
| 25 | +// 获取今天的周期综合自评消息提示 | ||
| 26 | +func (srv *MessagePersonalService) TodayMessageSummaryEvaluationSelf(param *command.GetUserMessageCommand) (map[string]interface{}, error) { | ||
| 27 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
| 28 | + if err != nil { | ||
| 29 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 30 | + } | ||
| 31 | + if err := transactionContext.StartTransaction(); err != nil { | ||
| 32 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 33 | + } | ||
| 34 | + defer func() { | ||
| 35 | + _ = transactionContext.RollbackTransaction() | ||
| 36 | + }() | ||
| 37 | + | ||
| 38 | + nowTime := time.Now() | ||
| 39 | + evaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{ | ||
| 40 | + "transactionContext": transactionContext, | ||
| 41 | + }) | ||
| 42 | + _, evaluationList, err := evaluationRepo.Find(map[string]interface{}{ | ||
| 43 | + "targetUserId": param.UserId, | ||
| 44 | + "types": domain.EvaluationSelf, | ||
| 45 | + "beginTime": nowTime, | ||
| 46 | + "endTime": nowTime, | ||
| 47 | + }) | ||
| 48 | + if err != nil { | ||
| 49 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "周期综合自评"+err.Error()) | ||
| 50 | + } | ||
| 51 | + resp := map[string]interface{}{ | ||
| 52 | + "needNotify": false, | ||
| 53 | + "content": "", | ||
| 54 | + } | ||
| 55 | + if len(evaluationList) == 0 { | ||
| 56 | + return resp, nil | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + messageRepo := factory.CreateMessagePersonalRepository(map[string]interface{}{ | ||
| 60 | + "transactionContext": transactionContext, | ||
| 61 | + }) | ||
| 62 | + newMessageList := []domain.MessagePersonal{} | ||
| 63 | + for _, val := range evaluationList { | ||
| 64 | + payload := map[string]string{ | ||
| 65 | + "id": strconv.Itoa(val.Id), | ||
| 66 | + } | ||
| 67 | + payloadStr, _ := json.Marshal(payload) | ||
| 68 | + cnt, _, err := messageRepo.Find(map[string]interface{}{ | ||
| 69 | + "types": domain.MessageTypesOther, | ||
| 70 | + "targetUserId": param.UserId, | ||
| 71 | + "payload": string(payloadStr), | ||
| 72 | + "limit": 1, | ||
| 73 | + }) | ||
| 74 | + if err != nil { | ||
| 75 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "检查自评消息记录"+err.Error()) | ||
| 76 | + } | ||
| 77 | + if cnt == 0 { | ||
| 78 | + newMessageList = append(newMessageList, domain.MessagePersonal{ | ||
| 79 | + Id: 0, | ||
| 80 | + Types: domain.MessageTypesOther, | ||
| 81 | + TargetUserId: val.TargetUser.UserId, | ||
| 82 | + ReadFlag: domain.MessageIsRead, | ||
| 83 | + Title: fmt.Sprintf("%s综合自评已开启,请前往进行评估.", val.CycleName), | ||
| 84 | + Content: fmt.Sprintf("%s综合自评已开启,请前往进行评估.", val.CycleName), | ||
| 85 | + CreatedAt: time.Time{}, | ||
| 86 | + UpdatedAt: time.Time{}, | ||
| 87 | + Payload: string(payloadStr), | ||
| 88 | + }) | ||
| 89 | + resp["needNotify"] = true | ||
| 90 | + resp["content"] = fmt.Sprintf("%s综合自评已开启,请前往进行评估.", val.CycleName) | ||
| 91 | + break | ||
| 92 | + } | ||
| 93 | + } | ||
| 94 | + for i := range newMessageList { | ||
| 95 | + err = messageRepo.Save(&newMessageList[i]) | ||
| 96 | + if err != nil { | ||
| 97 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "保存自评消息记录"+err.Error()) | ||
| 98 | + } | ||
| 99 | + } | ||
| 100 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
| 101 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 102 | + } | ||
| 103 | + return resp, nil | ||
| 104 | +} |
| @@ -43,6 +43,11 @@ func (notices notifyStaffAssess) makeNotify(param *domain.StaffAssess) *domain.L | @@ -43,6 +43,11 @@ func (notices notifyStaffAssess) makeNotify(param *domain.StaffAssess) *domain.L | ||
| 43 | 43 | ||
| 44 | // ifSend 确认是否发送通知 | 44 | // ifSend 确认是否发送通知 |
| 45 | func (notices notifyStaffAssess) ifSend(index int) (bool, error) { | 45 | func (notices notifyStaffAssess) ifSend(index int) (bool, error) { |
| 46 | + nowDay := time.Now().Weekday() | ||
| 47 | + if nowDay == time.Sunday || nowDay == time.Saturday { | ||
| 48 | + //周末不发 | ||
| 49 | + return false, nil | ||
| 50 | + } | ||
| 46 | transactionContext, err := factory.CreateTransactionContext(nil) | 51 | transactionContext, err := factory.CreateTransactionContext(nil) |
| 47 | if err != nil { | 52 | if err != nil { |
| 48 | return false, err | 53 | return false, err |
| @@ -44,6 +44,11 @@ func (notices notifySummaryEvaluation) makeNotify(param *domain.SummaryEvaluatio | @@ -44,6 +44,11 @@ func (notices notifySummaryEvaluation) makeNotify(param *domain.SummaryEvaluatio | ||
| 44 | 44 | ||
| 45 | // ifSend 确认是否发送通知 | 45 | // ifSend 确认是否发送通知 |
| 46 | func (notices notifySummaryEvaluation) ifSend(index int) (bool, error) { | 46 | func (notices notifySummaryEvaluation) ifSend(index int) (bool, error) { |
| 47 | + nowDay := time.Now().Weekday() | ||
| 48 | + if nowDay == time.Sunday || nowDay == time.Saturday { | ||
| 49 | + //周末不发 | ||
| 50 | + return false, nil | ||
| 51 | + } | ||
| 47 | transactionContext, err := factory.CreateTransactionContext(nil) | 52 | transactionContext, err := factory.CreateTransactionContext(nil) |
| 48 | if err != nil { | 53 | if err != nil { |
| 49 | return false, err | 54 | return false, err |
| @@ -13,8 +13,8 @@ type ListAssessContentCycleDay struct { | @@ -13,8 +13,8 @@ type ListAssessContentCycleDay struct { | ||
| 13 | } | 13 | } |
| 14 | 14 | ||
| 15 | type ExportAssessContentCycleDay struct { | 15 | type ExportAssessContentCycleDay struct { |
| 16 | - CompanyId int `json:"companyId"` | ||
| 17 | - OperaterId int `json:"operaterId"` | 16 | + CompanyId int `json:"-"` |
| 17 | + OperaterId int `json:"-"` | ||
| 18 | CycleId int `json:"cycleId,string"` //周期id | 18 | CycleId int `json:"cycleId,string"` //周期id |
| 19 | BeginDayList []string `json:"beginDayList"` //评估开始的时间 | 19 | BeginDayList []string `json:"beginDayList"` //评估开始的时间 |
| 20 | TargetUserName string `json:"targetUserName"` | 20 | TargetUserName string `json:"targetUserName"` |
| @@ -1090,13 +1090,13 @@ func (srv StaffAssessServeice) getStaffSuper(transactionContext application.Tran | @@ -1090,13 +1090,13 @@ func (srv StaffAssessServeice) getStaffSuper(transactionContext application.Tran | ||
| 1090 | "transactionContext": transactionContext, | 1090 | "transactionContext": transactionContext, |
| 1091 | }) | 1091 | }) |
| 1092 | 1092 | ||
| 1093 | - userData, err := userRepo.FindOne(map[string]interface{}{ | 1093 | + _, userData, err := userRepo.Find(map[string]interface{}{ |
| 1094 | "id": targetUser.ParentId, | 1094 | "id": targetUser.ParentId, |
| 1095 | }) | 1095 | }) |
| 1096 | if err != nil { | 1096 | if err != nil { |
| 1097 | return nil, err | 1097 | return nil, err |
| 1098 | } | 1098 | } |
| 1099 | - return []*domain.User{userData}, nil | 1099 | + return userData, nil |
| 1100 | } | 1100 | } |
| 1101 | 1101 | ||
| 1102 | func (srv StaffAssessServeice) recoverAssessCache(context application.TransactionContext, assessId int, dataArray []*domain.StaffAssessContent) { | 1102 | func (srv StaffAssessServeice) recoverAssessCache(context application.TransactionContext, assessId int, dataArray []*domain.StaffAssessContent) { |
| @@ -14,7 +14,7 @@ import ( | @@ -14,7 +14,7 @@ import ( | ||
| 14 | 14 | ||
| 15 | // 导出数据 | 15 | // 导出数据 |
| 16 | // 综合管理-周期评估 | 16 | // 综合管理-周期评估 |
| 17 | -func (srv *SummaryEvaluationService) ExportAllEvaluationSuper(param *command.QueryEvaluationList) (*excelize.File, error) { | 17 | +func (srv *SummaryEvaluationService) ExportAllEvaluationFinish(param *command.QueryEvaluationList) (*excelize.File, error) { |
| 18 | transactionContext, err := factory.CreateTransactionContext(nil) | 18 | transactionContext, err := factory.CreateTransactionContext(nil) |
| 19 | if err != nil { | 19 | if err != nil { |
| 20 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 20 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
| @@ -41,7 +41,7 @@ func (srv *SummaryEvaluationService) ExportAllEvaluationSuper(param *command.Que | @@ -41,7 +41,7 @@ func (srv *SummaryEvaluationService) ExportAllEvaluationSuper(param *command.Que | ||
| 41 | "parentId": param.UserId, | 41 | "parentId": param.UserId, |
| 42 | "limit": 1, | 42 | "limit": 1, |
| 43 | }) | 43 | }) |
| 44 | - if len(parentUser) == 0 { | 44 | + if len(parentUser) == 0 && flagHrbp != 1 { |
| 45 | return nil, application.ThrowError(application.BUSINESS_ERROR, "暂无数据") | 45 | return nil, application.ThrowError(application.BUSINESS_ERROR, "暂无数据") |
| 46 | } | 46 | } |
| 47 | evaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{ | 47 | evaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{ |
| @@ -56,7 +56,7 @@ func (srv *SummaryEvaluationService) ExportAllEvaluationSuper(param *command.Que | @@ -56,7 +56,7 @@ func (srv *SummaryEvaluationService) ExportAllEvaluationSuper(param *command.Que | ||
| 56 | //获取评估列表信息 | 56 | //获取评估列表信息 |
| 57 | condition1 := map[string]interface{}{ | 57 | condition1 := map[string]interface{}{ |
| 58 | "cycleId": param.CycleId, | 58 | "cycleId": param.CycleId, |
| 59 | - "types": int(domain.EvaluationSuper), | 59 | + "types": int(domain.EvaluationFinish), |
| 60 | "limit": limit, | 60 | "limit": limit, |
| 61 | } | 61 | } |
| 62 | if offset > 0 { | 62 | if offset > 0 { |
| @@ -147,7 +147,15 @@ func (srv *SummaryEvaluationService) ExportAllEvaluationSuper(param *command.Que | @@ -147,7 +147,15 @@ func (srv *SummaryEvaluationService) ExportAllEvaluationSuper(param *command.Que | ||
| 147 | firstSheetName := xlsxFile.GetSheetName(sheetIndex) | 147 | firstSheetName := xlsxFile.GetSheetName(sheetIndex) |
| 148 | tableHead := []string{"姓名", "部门", "职位", "最终绩效得分"} | 148 | tableHead := []string{"姓名", "部门", "职位", "最终绩效得分"} |
| 149 | tableHead = append(tableHead, ratingHeader...) | 149 | tableHead = append(tableHead, ratingHeader...) |
| 150 | - xlsxFile.SetSheetRow(firstSheetName, "A1", &tableHead) | 150 | + if len(evaluationList) > 0 { |
| 151 | + xlsxFile.SetSheetRow(firstSheetName, "A1", &[]string{evaluationList[0].CycleName + "最终成绩"}) | ||
| 152 | + // if len(tableHead) > 1 { | ||
| 153 | + // cellCode, _ := excelize.ColumnNumberToName(len(tableHead)) | ||
| 154 | + // xlsxFile.MergeCell(firstSheetName, "A1", cellCode+"1") | ||
| 155 | + // } | ||
| 156 | + } | ||
| 157 | + xlsxFile.SetSheetRow(firstSheetName, "A2", &tableHead) | ||
| 158 | + firstDataRow := 3 | ||
| 151 | for i, v := range evaluationList { | 159 | for i, v := range evaluationList { |
| 152 | departmentName := "" | 160 | departmentName := "" |
| 153 | for _, dep := range v.TargetDepartment { | 161 | for _, dep := range v.TargetDepartment { |
| @@ -176,7 +184,7 @@ func (srv *SummaryEvaluationService) ExportAllEvaluationSuper(param *command.Que | @@ -176,7 +184,7 @@ func (srv *SummaryEvaluationService) ExportAllEvaluationSuper(param *command.Que | ||
| 176 | dataRaw = append(dataRaw, "0") | 184 | dataRaw = append(dataRaw, "0") |
| 177 | } | 185 | } |
| 178 | } | 186 | } |
| 179 | - xlsxFile.SetSheetRow(firstSheetName, fmt.Sprintf("A%d", i+2), &dataRaw) | 187 | + xlsxFile.SetSheetRow(firstSheetName, fmt.Sprintf("A%d", i+firstDataRow), &dataRaw) |
| 180 | } | 188 | } |
| 181 | return xlsxFile, nil | 189 | return xlsxFile, nil |
| 182 | } | 190 | } |
| @@ -73,8 +73,12 @@ func sendSummaryEvaluation(project *domain.EvaluationProject, | @@ -73,8 +73,12 @@ func sendSummaryEvaluation(project *domain.EvaluationProject, | ||
| 73 | } | 73 | } |
| 74 | nodeId := 0 | 74 | nodeId := 0 |
| 75 | executor360Map := map[int64]*domain.User{} | 75 | executor360Map := map[int64]*domain.User{} |
| 76 | + hrbpExist := false | ||
| 76 | for _, v := range itemList { | 77 | for _, v := range itemList { |
| 77 | nodeId = v.NodeId | 78 | nodeId = v.NodeId |
| 79 | + if v.EvaluatorId < 0 { | ||
| 80 | + hrbpExist = true | ||
| 81 | + } | ||
| 78 | if v.EvaluatorId <= 0 { | 82 | if v.EvaluatorId <= 0 { |
| 79 | continue | 83 | continue |
| 80 | } | 84 | } |
| @@ -106,8 +110,8 @@ func sendSummaryEvaluation(project *domain.EvaluationProject, | @@ -106,8 +110,8 @@ func sendSummaryEvaluation(project *domain.EvaluationProject, | ||
| 106 | DeletedAt: nil, | 110 | DeletedAt: nil, |
| 107 | } | 111 | } |
| 108 | 112 | ||
| 109 | - //确定自评 | ||
| 110 | - //确定 被评估人的 上级评估 | 113 | + //确定周期评估 |
| 114 | + | ||
| 111 | for _, v := range targetUserMap { | 115 | for _, v := range targetUserMap { |
| 112 | //处理自评 | 116 | //处理自评 |
| 113 | evaluationTemp.TargetUser = domain.StaffDesc{ | 117 | evaluationTemp.TargetUser = domain.StaffDesc{ |
| @@ -136,13 +140,15 @@ func sendSummaryEvaluation(project *domain.EvaluationProject, | @@ -136,13 +140,15 @@ func sendSummaryEvaluation(project *domain.EvaluationProject, | ||
| 136 | } | 140 | } |
| 137 | //确定自评 | 141 | //确定自评 |
| 138 | newEvaluationList = append(newEvaluationList, evaluationTemp) | 142 | newEvaluationList = append(newEvaluationList, evaluationTemp) |
| 139 | - //处理人资评估 | ||
| 140 | - evaluationTemp.BeginTime = beginTime360 | ||
| 141 | - evaluationTemp.EndTime = endTime360 | ||
| 142 | - evaluationTemp.Executor = domain.StaffDesc{} | ||
| 143 | - evaluationTemp.Types = domain.EvaluationHrbp | ||
| 144 | - //确定人资评估 | ||
| 145 | - newEvaluationList = append(newEvaluationList, evaluationTemp) | 143 | + if hrbpExist { |
| 144 | + //处理人资评估 | ||
| 145 | + evaluationTemp.BeginTime = beginTime360 | ||
| 146 | + evaluationTemp.EndTime = endTime360 | ||
| 147 | + evaluationTemp.Executor = domain.StaffDesc{} | ||
| 148 | + evaluationTemp.Types = domain.EvaluationHrbp | ||
| 149 | + //确定人资评估 | ||
| 150 | + newEvaluationList = append(newEvaluationList, evaluationTemp) | ||
| 151 | + } | ||
| 146 | //处理360 评估 | 152 | //处理360 评估 |
| 147 | for _, v2 := range executor360Map { | 153 | for _, v2 := range executor360Map { |
| 148 | evaluationTemp.BeginTime = beginTime360 | 154 | evaluationTemp.BeginTime = beginTime360 |
| @@ -171,6 +177,12 @@ func sendSummaryEvaluation(project *domain.EvaluationProject, | @@ -171,6 +177,12 @@ func sendSummaryEvaluation(project *domain.EvaluationProject, | ||
| 171 | //确定上级评估 | 177 | //确定上级评估 |
| 172 | newEvaluationList = append(newEvaluationList, evaluationTemp) | 178 | newEvaluationList = append(newEvaluationList, evaluationTemp) |
| 173 | } | 179 | } |
| 180 | + // 确定 考核结果 的评估记录 | ||
| 181 | + evaluationTemp.Types = domain.EvaluationFinish | ||
| 182 | + evaluationTemp.Executor = domain.StaffDesc{} | ||
| 183 | + evaluationTemp.BeginTime = endTimeSuper | ||
| 184 | + evaluationTemp.EndTime = endTimeSuper.Add(2 * 24 * time.Hour) | ||
| 185 | + newEvaluationList = append(newEvaluationList, evaluationTemp) | ||
| 174 | } | 186 | } |
| 175 | summaryEvaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{"transactionContext": transactionContext}) | 187 | summaryEvaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{"transactionContext": transactionContext}) |
| 176 | for i := range newEvaluationList { | 188 | for i := range newEvaluationList { |
| @@ -199,6 +211,11 @@ func dayZeroTime(t time.Time) time.Time { | @@ -199,6 +211,11 @@ func dayZeroTime(t time.Time) time.Time { | ||
| 199 | 211 | ||
| 200 | // 下发周期评估 | 212 | // 下发周期评估 |
| 201 | func TaskSendSummaryEvaluation() error { | 213 | func TaskSendSummaryEvaluation() error { |
| 214 | + nowTime := time.Now() | ||
| 215 | + defer func() { | ||
| 216 | + str := fmt.Sprintf("下发周期评估耗时%.2f s", time.Since(nowTime).Seconds()) | ||
| 217 | + log.Logger.Info(str) | ||
| 218 | + }() | ||
| 202 | transactionContext, err := factory.CreateTransactionContext(nil) | 219 | transactionContext, err := factory.CreateTransactionContext(nil) |
| 203 | if err != nil { | 220 | if err != nil { |
| 204 | return err | 221 | return err |
| @@ -15,6 +15,7 @@ import ( | @@ -15,6 +15,7 @@ import ( | ||
| 15 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/summary_evaluation/command" | 15 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/summary_evaluation/command" |
| 16 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | 16 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" |
| 17 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/infrastructure/dao" | 17 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/infrastructure/dao" |
| 18 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/infrastructure/xredis" | ||
| 18 | ) | 19 | ) |
| 19 | 20 | ||
| 20 | type SummaryEvaluationService struct { | 21 | type SummaryEvaluationService struct { |
| @@ -59,12 +60,12 @@ func (srv *SummaryEvaluationService) GetExecutorCycleList(param *command.QueryCy | @@ -59,12 +60,12 @@ func (srv *SummaryEvaluationService) GetExecutorCycleList(param *command.QueryCy | ||
| 59 | offset = (param.PageNumber - 1) * param.PageSize | 60 | offset = (param.PageNumber - 1) * param.PageSize |
| 60 | } | 61 | } |
| 61 | 62 | ||
| 62 | - cycleData, err := evaluationDao.GetExecutorCycleList(param.UserId, offset, limit, isHrbp) | 63 | + cycleData, err := evaluationDao.GetExecutorCycleList(param.CompanyId, param.UserId, offset, limit, isHrbp) |
| 63 | if err != nil { | 64 | if err != nil { |
| 64 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取周期列表"+err.Error()) | 65 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取周期列表"+err.Error()) |
| 65 | } | 66 | } |
| 66 | 67 | ||
| 67 | - cnt, err := evaluationDao.CountExecutorCycleList(param.UserId, domain.EvaluationSelf) | 68 | + cnt, err := evaluationDao.CountExecutorCycleList(param.CompanyId, param.UserId, isHrbp) |
| 68 | if err != nil { | 69 | if err != nil { |
| 69 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 70 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 70 | } | 71 | } |
| @@ -199,11 +200,12 @@ func (srv *SummaryEvaluationService) GetMenu(param *command.QueryMenu) (map[stri | @@ -199,11 +200,12 @@ func (srv *SummaryEvaluationService) GetMenu(param *command.QueryMenu) (map[stri | ||
| 199 | } | 200 | } |
| 200 | 201 | ||
| 201 | //查找当前周期,我的考核结果 | 202 | //查找当前周期,我的考核结果 |
| 202 | - _, myEvaluationSuper, _ := evaluationRepo.Find(map[string]interface{}{ | ||
| 203 | - "types": int(domain.EvaluationSuper), | 203 | + _, myEvaluationFinish, _ := evaluationRepo.Find(map[string]interface{}{ |
| 204 | + "types": int(domain.EvaluationFinish), | ||
| 204 | "limit": 1, | 205 | "limit": 1, |
| 205 | "targetUserId": param.UserId, | 206 | "targetUserId": param.UserId, |
| 206 | "cycleId": param.CycleId, | 207 | "cycleId": param.CycleId, |
| 208 | + "beginTime": time.Now(), | ||
| 207 | }) | 209 | }) |
| 208 | 210 | ||
| 209 | if err := transactionContext.CommitTransaction(); err != nil { | 211 | if err := transactionContext.CommitTransaction(); err != nil { |
| @@ -242,15 +244,13 @@ func (srv *SummaryEvaluationService) GetMenu(param *command.QueryMenu) (map[stri | @@ -242,15 +244,13 @@ func (srv *SummaryEvaluationService) GetMenu(param *command.QueryMenu) (map[stri | ||
| 242 | } | 244 | } |
| 243 | menu1.Child = append(menu1.Child, menu1_1) | 245 | menu1.Child = append(menu1.Child, menu1_1) |
| 244 | } | 246 | } |
| 245 | - if len(myEvaluationSuper) > 0 { | ||
| 246 | - if myEvaluationSuper[0].CheckResult == domain.EvaluationCheckCompleted { | 247 | + if len(myEvaluationFinish) > 0 { |
| 248 | + if myEvaluationFinish[0].CheckResult == domain.EvaluationCheckCompleted { | ||
| 247 | menu1_2.StatusName = "已完成" | 249 | menu1_2.StatusName = "已完成" |
| 248 | } else { | 250 | } else { |
| 249 | menu1_2.StatusName = "未完成" | 251 | menu1_2.StatusName = "未完成" |
| 250 | } | 252 | } |
| 251 | - if myEvaluationSuper[0].Status == domain.EvaluationCompleted { | ||
| 252 | - menu1.Child = append(menu1.Child, menu1_2) | ||
| 253 | - } | 253 | + menu1.Child = append(menu1.Child, menu1_2) |
| 254 | } | 254 | } |
| 255 | 255 | ||
| 256 | if len(selfEvaluation) > 0 { | 256 | if len(selfEvaluation) > 0 { |
| @@ -367,6 +367,7 @@ func (srv *SummaryEvaluationService) buildSummaryItemValue(itemList []*domain.Ev | @@ -367,6 +367,7 @@ func (srv *SummaryEvaluationService) buildSummaryItemValue(itemList []*domain.Ev | ||
| 367 | item.Value = value.Value | 367 | item.Value = value.Value |
| 368 | item.Remark = value.Remark | 368 | item.Remark = value.Remark |
| 369 | item.Rating = value.Rating | 369 | item.Rating = value.Rating |
| 370 | + item.EvaluatorName = value.Executor.UserName | ||
| 370 | } | 371 | } |
| 371 | itemValues = append(itemValues, item) | 372 | itemValues = append(itemValues, item) |
| 372 | } | 373 | } |
| @@ -462,24 +463,14 @@ func (srv *SummaryEvaluationService) getSummaryEvaluation(transactionContext app | @@ -462,24 +463,14 @@ func (srv *SummaryEvaluationService) getSummaryEvaluation(transactionContext app | ||
| 462 | TotalScore: evaluationData.TotalScore, | 463 | TotalScore: evaluationData.TotalScore, |
| 463 | } | 464 | } |
| 464 | //获取用户信息 | 465 | //获取用户信息 |
| 465 | - companyRepo := factory.CreateCompanyRepository(map[string]interface{}{ | ||
| 466 | - "transactionContext": transactionContext, | ||
| 467 | - }) | ||
| 468 | - userRepo := factory.CreateUserRepository(map[string]interface{}{ | ||
| 469 | - "transactionContext": transactionContext, | ||
| 470 | - }) | ||
| 471 | - | ||
| 472 | - companyData, err := companyRepo.FindOne(map[string]interface{}{ | ||
| 473 | - "id": evaluationData.CompanyId, | ||
| 474 | - }) | 466 | + companyRepo := factory.CreateCompanyRepository(map[string]interface{}{"transactionContext": transactionContext}) |
| 467 | + userRepo := factory.CreateUserRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 475 | 468 | ||
| 469 | + companyData, err := companyRepo.FindOne(map[string]interface{}{"id": evaluationData.CompanyId}) | ||
| 476 | if err != nil { | 470 | if err != nil { |
| 477 | return result | 471 | return result |
| 478 | } | 472 | } |
| 479 | - | ||
| 480 | - userData, err := userRepo.FindOne(map[string]interface{}{ | ||
| 481 | - "id": evaluationData.TargetUser.UserId, | ||
| 482 | - }) | 473 | + userData, err := userRepo.FindOne(map[string]interface{}{"id": evaluationData.TargetUser.UserId}) |
| 483 | if err != nil { | 474 | if err != nil { |
| 484 | return result | 475 | return result |
| 485 | } | 476 | } |
| @@ -487,22 +478,18 @@ func (srv *SummaryEvaluationService) getSummaryEvaluation(transactionContext app | @@ -487,22 +478,18 @@ func (srv *SummaryEvaluationService) getSummaryEvaluation(transactionContext app | ||
| 487 | result.CompanyLogo = companyData.Logo | 478 | result.CompanyLogo = companyData.Logo |
| 488 | result.CompanyName = companyData.Name | 479 | result.CompanyName = companyData.Name |
| 489 | 480 | ||
| 490 | - if userData.ParentId <= 0 { | ||
| 491 | - return result | ||
| 492 | - } | ||
| 493 | - pUserData, err := userRepo.FindOne(map[string]interface{}{ | ||
| 494 | - "id": userData.ParentId, | ||
| 495 | - }) | ||
| 496 | - if err != nil { | ||
| 497 | - return result | 481 | + if userData.ParentId > 0 { |
| 482 | + pUserData, err := userRepo.FindOne(map[string]interface{}{"id": userData.ParentId}) | ||
| 483 | + if err != nil { | ||
| 484 | + return result | ||
| 485 | + } | ||
| 486 | + result.SupperUser = pUserData.Name | ||
| 498 | } | 487 | } |
| 499 | - result.SupperUser = pUserData.Name | ||
| 500 | return result | 488 | return result |
| 501 | } | 489 | } |
| 502 | 490 | ||
| 503 | // 编辑综合自评详情 | 491 | // 编辑综合自评详情 |
| 504 | func (srv *SummaryEvaluationService) EditEvaluationSelf(param *command.EditEvaluationValue) (map[string][]adapter.EvaluationItemAdapter, error) { | 492 | func (srv *SummaryEvaluationService) EditEvaluationSelf(param *command.EditEvaluationValue) (map[string][]adapter.EvaluationItemAdapter, error) { |
| 505 | - // xredis.NewLockSummaryEvaluation(param.SummaryEvaluationId) | ||
| 506 | 493 | ||
| 507 | transactionContext, err := factory.CreateTransactionContext(nil) | 494 | transactionContext, err := factory.CreateTransactionContext(nil) |
| 508 | if err != nil { | 495 | if err != nil { |
| @@ -596,7 +583,17 @@ func (srv *SummaryEvaluationService) EditEvaluationSelf(param *command.EditEvalu | @@ -596,7 +583,17 @@ func (srv *SummaryEvaluationService) EditEvaluationSelf(param *command.EditEvalu | ||
| 596 | // 员工提交自评内容后, | 583 | // 员工提交自评内容后, |
| 597 | // 员工作为被评估人, | 584 | // 员工作为被评估人, |
| 598 | // 变更360评估/人资评估/的开始时间 | 585 | // 变更360评估/人资评估/的开始时间 |
| 586 | +// 或者变更上级评估的开始时间 | ||
| 587 | +// 或者生成考核结果 | ||
| 599 | func (srv *SummaryEvaluationService) AfterCompletedEvaluationSelf(param *domain.SummaryEvaluation) error { | 588 | func (srv *SummaryEvaluationService) AfterCompletedEvaluationSelf(param *domain.SummaryEvaluation) error { |
| 589 | + lock := xredis.NewLockSummaryEvaluation(param.TargetUser.UserId) | ||
| 590 | + err := lock.Lock() | ||
| 591 | + if err != nil { | ||
| 592 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, "未能完全提交评估内容") | ||
| 593 | + } | ||
| 594 | + defer func() { | ||
| 595 | + lock.UnLock() | ||
| 596 | + }() | ||
| 600 | transactionContext, err := factory.CreateTransactionContext(nil) | 597 | transactionContext, err := factory.CreateTransactionContext(nil) |
| 601 | if err != nil { | 598 | if err != nil { |
| 602 | return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 599 | return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
| @@ -619,7 +616,18 @@ func (srv *SummaryEvaluationService) AfterCompletedEvaluationSelf(param *domain. | @@ -619,7 +616,18 @@ func (srv *SummaryEvaluationService) AfterCompletedEvaluationSelf(param *domain. | ||
| 619 | if err != nil { | 616 | if err != nil { |
| 620 | return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 617 | return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 621 | } | 618 | } |
| 622 | - | 619 | + if len(evaluationList) == 0 { |
| 620 | + //如果没有360评估和hrbp 评估,查找上级评估 | ||
| 621 | + _, evaluationList, err = evaluationRepo.Find(map[string]interface{}{ | ||
| 622 | + "targetUserId": param.TargetUser.UserId, | ||
| 623 | + "typesList": []int{int(domain.EvaluationSuper)}, | ||
| 624 | + "cycleId": param.CycleId, | ||
| 625 | + "limit": 10, | ||
| 626 | + }) | ||
| 627 | + if err != nil { | ||
| 628 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 629 | + } | ||
| 630 | + } | ||
| 623 | nowTime := time.Now() | 631 | nowTime := time.Now() |
| 624 | updatedId := []int{} | 632 | updatedId := []int{} |
| 625 | // 变更360评估/人资评估/上级评估的开始时间 | 633 | // 变更360评估/人资评估/上级评估的开始时间 |
| @@ -632,21 +640,52 @@ func (srv *SummaryEvaluationService) AfterCompletedEvaluationSelf(param *domain. | @@ -632,21 +640,52 @@ func (srv *SummaryEvaluationService) AfterCompletedEvaluationSelf(param *domain. | ||
| 632 | evaluationDao := dao.NewSummaryEvaluationDao(map[string]interface{}{ | 640 | evaluationDao := dao.NewSummaryEvaluationDao(map[string]interface{}{ |
| 633 | "transactionContext": transactionContext, | 641 | "transactionContext": transactionContext, |
| 634 | }) | 642 | }) |
| 635 | - | ||
| 636 | err = evaluationDao.UpdateBeginTime(updatedId, nowTime) | 643 | err = evaluationDao.UpdateBeginTime(updatedId, nowTime) |
| 637 | if err != nil { | 644 | if err != nil { |
| 638 | return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 645 | return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 639 | } | 646 | } |
| 640 | - | 647 | + if len(evaluationList) == 0 { |
| 648 | + //没有上级评估、360评估、hrbp 评估 | ||
| 649 | + //直接进入考核结果阶段 | ||
| 650 | + _, evaluationList, err = evaluationRepo.Find(map[string]interface{}{ | ||
| 651 | + "targetUserId": param.TargetUser.UserId, | ||
| 652 | + "typesList": []int{int(domain.EvaluationFinish)}, | ||
| 653 | + "cycleId": param.CycleId, | ||
| 654 | + "limit": 1, | ||
| 655 | + }) | ||
| 656 | + if err != nil { | ||
| 657 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 658 | + } | ||
| 659 | + if len(evaluationList) > 0 { | ||
| 660 | + // 进入考核结果阶段 | ||
| 661 | + if evaluationList[0].BeginTime.After(nowTime) { | ||
| 662 | + evaluationList[0].BeginTime = nowTime | ||
| 663 | + } | ||
| 664 | + evaluationList[0].Status = domain.EvaluationCompleted | ||
| 665 | + err = evaluationRepo.Save(evaluationList[0]) | ||
| 666 | + if err != nil { | ||
| 667 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, "保存考核结果,"+err.Error()) | ||
| 668 | + } | ||
| 669 | + } | ||
| 670 | + } | ||
| 641 | if err := transactionContext.CommitTransaction(); err != nil { | 671 | if err := transactionContext.CommitTransaction(); err != nil { |
| 642 | return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 672 | return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 643 | } | 673 | } |
| 644 | return nil | 674 | return nil |
| 645 | } | 675 | } |
| 646 | 676 | ||
| 647 | -// 被评估员工的人资评估 或者 360 评估, | 677 | +// 提交员工的人资评估 或者 360 评估 |
| 648 | // 变更上级评估的开始时间 | 678 | // 变更上级评估的开始时间 |
| 679 | +// 或者生成考核结果 | ||
| 649 | func (srv *SummaryEvaluationService) AfterCompletedEvaluation360Hrbp(param *domain.SummaryEvaluation) error { | 680 | func (srv *SummaryEvaluationService) AfterCompletedEvaluation360Hrbp(param *domain.SummaryEvaluation) error { |
| 681 | + lock := xredis.NewLockSummaryEvaluation(param.TargetUser.UserId) | ||
| 682 | + err := lock.Lock() | ||
| 683 | + if err != nil { | ||
| 684 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, "未能完全提交评估内容") | ||
| 685 | + } | ||
| 686 | + defer func() { | ||
| 687 | + lock.UnLock() | ||
| 688 | + }() | ||
| 650 | transactionContext, err := factory.CreateTransactionContext(nil) | 689 | transactionContext, err := factory.CreateTransactionContext(nil) |
| 651 | if err != nil { | 690 | if err != nil { |
| 652 | return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 691 | return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
| @@ -684,7 +723,7 @@ func (srv *SummaryEvaluationService) AfterCompletedEvaluation360Hrbp(param *doma | @@ -684,7 +723,7 @@ func (srv *SummaryEvaluationService) AfterCompletedEvaluation360Hrbp(param *doma | ||
| 684 | "targetUserId": param.TargetUser.UserId, | 723 | "targetUserId": param.TargetUser.UserId, |
| 685 | "typesList": []int{int(domain.EvaluationSuper)}, | 724 | "typesList": []int{int(domain.EvaluationSuper)}, |
| 686 | "cycleId": param.CycleId, | 725 | "cycleId": param.CycleId, |
| 687 | - "limit": 1000, | 726 | + "limit": 1, |
| 688 | }) | 727 | }) |
| 689 | if err != nil { | 728 | if err != nil { |
| 690 | return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 729 | return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| @@ -705,6 +744,82 @@ func (srv *SummaryEvaluationService) AfterCompletedEvaluation360Hrbp(param *doma | @@ -705,6 +744,82 @@ func (srv *SummaryEvaluationService) AfterCompletedEvaluation360Hrbp(param *doma | ||
| 705 | if err != nil { | 744 | if err != nil { |
| 706 | return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 745 | return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 707 | } | 746 | } |
| 747 | + if len(evaluationList) == 0 { | ||
| 748 | + //没有上级评估 | ||
| 749 | + //直接进入考核结果阶段 | ||
| 750 | + _, evaluationList, err = evaluationRepo.Find(map[string]interface{}{ | ||
| 751 | + "targetUserId": param.TargetUser.UserId, | ||
| 752 | + "typesList": []int{int(domain.EvaluationFinish)}, | ||
| 753 | + "cycleId": param.CycleId, | ||
| 754 | + "limit": 1, | ||
| 755 | + }) | ||
| 756 | + if err != nil { | ||
| 757 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 758 | + } | ||
| 759 | + if len(evaluationList) > 0 { | ||
| 760 | + if evaluationList[0].BeginTime.After(nowTime) { | ||
| 761 | + evaluationList[0].BeginTime = nowTime | ||
| 762 | + } | ||
| 763 | + evaluationList[0].Status = domain.EvaluationCompleted | ||
| 764 | + err = evaluationRepo.Save(evaluationList[0]) | ||
| 765 | + if err != nil { | ||
| 766 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, "保存考核结果,"+err.Error()) | ||
| 767 | + } | ||
| 768 | + } | ||
| 769 | + } | ||
| 770 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
| 771 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 772 | + } | ||
| 773 | + return nil | ||
| 774 | +} | ||
| 775 | + | ||
| 776 | +// 员工提交上级评估后 | ||
| 777 | +// 生成考核结果 | ||
| 778 | +func (srv *SummaryEvaluationService) AfterCompletedEvaluationSuper(param *domain.SummaryEvaluation) error { | ||
| 779 | + lock := xredis.NewLockSummaryEvaluation(param.TargetUser.UserId) | ||
| 780 | + err := lock.Lock() | ||
| 781 | + if err != nil { | ||
| 782 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, "未能完全提交评估内容") | ||
| 783 | + } | ||
| 784 | + defer func() { | ||
| 785 | + lock.UnLock() | ||
| 786 | + }() | ||
| 787 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
| 788 | + if err != nil { | ||
| 789 | + return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 790 | + } | ||
| 791 | + if err := transactionContext.StartTransaction(); err != nil { | ||
| 792 | + return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 793 | + } | ||
| 794 | + defer func() { | ||
| 795 | + _ = transactionContext.RollbackTransaction() | ||
| 796 | + }() | ||
| 797 | + | ||
| 798 | + evaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{ | ||
| 799 | + "transactionContext": transactionContext, | ||
| 800 | + }) | ||
| 801 | + //没有上级评估 | ||
| 802 | + //直接进入考核结果阶段 | ||
| 803 | + _, evaluationList, err := evaluationRepo.Find(map[string]interface{}{ | ||
| 804 | + "targetUserId": param.TargetUser.UserId, | ||
| 805 | + "typesList": []int{int(domain.EvaluationFinish)}, | ||
| 806 | + "cycleId": param.CycleId, | ||
| 807 | + "limit": 1, | ||
| 808 | + }) | ||
| 809 | + if err != nil { | ||
| 810 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 811 | + } | ||
| 812 | + nowTime := time.Now() | ||
| 813 | + if len(evaluationList) > 0 { | ||
| 814 | + if evaluationList[0].BeginTime.After(nowTime) { | ||
| 815 | + evaluationList[0].BeginTime = nowTime | ||
| 816 | + } | ||
| 817 | + evaluationList[0].Status = domain.EvaluationCompleted | ||
| 818 | + err = evaluationRepo.Save(evaluationList[0]) | ||
| 819 | + if err != nil { | ||
| 820 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, "保存考核结果,"+err.Error()) | ||
| 821 | + } | ||
| 822 | + } | ||
| 708 | if err := transactionContext.CommitTransaction(); err != nil { | 823 | if err := transactionContext.CommitTransaction(); err != nil { |
| 709 | return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 824 | return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 710 | } | 825 | } |
| @@ -1062,6 +1177,14 @@ func (srv *SummaryEvaluationService) EditEvaluationSuper(param *command.EditEval | @@ -1062,6 +1177,14 @@ func (srv *SummaryEvaluationService) EditEvaluationSuper(param *command.EditEval | ||
| 1062 | if err := transactionContext.CommitTransaction(); err != nil { | 1177 | if err := transactionContext.CommitTransaction(); err != nil { |
| 1063 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 1178 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 1064 | } | 1179 | } |
| 1180 | + | ||
| 1181 | + if !param.IsTemporary { | ||
| 1182 | + err = srv.AfterCompletedEvaluationSuper(evaluationData) | ||
| 1183 | + if err != nil { | ||
| 1184 | + return nil, err | ||
| 1185 | + } | ||
| 1186 | + } | ||
| 1187 | + | ||
| 1065 | itemValueAdapter := srv.buildSummaryItemValue(itemList, itemValueList) | 1188 | itemValueAdapter := srv.buildSummaryItemValue(itemList, itemValueList) |
| 1066 | return map[string][]adapter.EvaluationItemAdapter{ | 1189 | return map[string][]adapter.EvaluationItemAdapter{ |
| 1067 | "EvaluationItems": itemValueAdapter, | 1190 | "EvaluationItems": itemValueAdapter, |
| @@ -1295,40 +1418,117 @@ func (srv *SummaryEvaluationService) ListExecutorEvaluationSuper(param *command. | @@ -1295,40 +1418,117 @@ func (srv *SummaryEvaluationService) ListExecutorEvaluationSuper(param *command. | ||
| 1295 | return result, nil | 1418 | return result, nil |
| 1296 | } | 1419 | } |
| 1297 | 1420 | ||
| 1298 | -// 员工确认综评考核结果 | ||
| 1299 | -func (srv *SummaryEvaluationService) ConfirmScoreSuperEvaluation(param *command.ConfirmScore) error { | ||
| 1300 | - transactionContext, err := factory.CreateTransactionContext(nil) | 1421 | +// ConfirmScoreEvaluation 员工确认考核结果 |
| 1422 | +func (srv *SummaryEvaluationService) ConfirmScoreEvaluation(param *command.ConfirmScore) error { | ||
| 1423 | + transactionContext, err := factory.ValidateStartTransaction(param) | ||
| 1301 | if err != nil { | 1424 | if err != nil { |
| 1302 | - return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 1303 | - } | ||
| 1304 | - if err := transactionContext.StartTransaction(); err != nil { | ||
| 1305 | - return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 1425 | + return err |
| 1306 | } | 1426 | } |
| 1307 | defer func() { | 1427 | defer func() { |
| 1308 | _ = transactionContext.RollbackTransaction() | 1428 | _ = transactionContext.RollbackTransaction() |
| 1309 | }() | 1429 | }() |
| 1310 | - evaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{ | ||
| 1311 | - "transactionContext": transactionContext, | ||
| 1312 | - }) | ||
| 1313 | 1430 | ||
| 1314 | - evaluationData, err := evaluationRepo.FindOne(map[string]interface{}{ | ||
| 1315 | - "id": param.SummaryEvaluationId, | ||
| 1316 | - }) | 1431 | + evaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{"transactionContext": transactionContext}) |
| 1432 | + evaluationItemRepo := factory.CreateEvaluationItemUsedRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 1433 | + itemValueRepo := factory.CreateSummaryEvaluationValueRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 1434 | + | ||
| 1435 | + // 考核结果 | ||
| 1436 | + result, err := evaluationRepo.FindOne(map[string]interface{}{"id": param.SummaryEvaluationId}) | ||
| 1317 | if err != nil { | 1437 | if err != nil { |
| 1318 | return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 1438 | return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
| 1319 | } | 1439 | } |
| 1320 | - if evaluationData.Types != domain.EvaluationSuper { | 1440 | + if result.Types != domain.EvaluationFinish { |
| 1321 | return application.ThrowError(application.TRANSACTION_ERROR, "操作方式错误") | 1441 | return application.ThrowError(application.TRANSACTION_ERROR, "操作方式错误") |
| 1322 | } | 1442 | } |
| 1323 | - if evaluationData.TargetUser.UserId != param.UserId { | 1443 | + if result.TargetUser.UserId != param.UserId { |
| 1324 | return application.ThrowError(application.TRANSACTION_ERROR, "没有操作权限") | 1444 | return application.ThrowError(application.TRANSACTION_ERROR, "没有操作权限") |
| 1325 | } | 1445 | } |
| 1326 | - if evaluationData.Status == domain.EvaluationUncompleted { | ||
| 1327 | - return application.ThrowError(application.TRANSACTION_ERROR, "上级还未正式提交评估内容") | 1446 | + if result.CheckResult == domain.EvaluationCheckCompleted { |
| 1447 | + return application.ThrowError(application.TRANSACTION_ERROR, "考核结果已确认过了!") | ||
| 1328 | } | 1448 | } |
| 1329 | - evaluationData.CheckResult = domain.EvaluationCheckCompleted | ||
| 1330 | - err = evaluationRepo.Save(evaluationData) | 1449 | + if result.Status == domain.EvaluationUncompleted { |
| 1450 | + return application.ThrowError(application.TRANSACTION_ERROR, "前面流程暂未完成提交评估内容") | ||
| 1451 | + } | ||
| 1452 | + | ||
| 1453 | + _, evaluationList, err := evaluationRepo.Find(map[string]interface{}{ | ||
| 1454 | + "companyId": result.CompanyId, | ||
| 1455 | + "cycleId": result.CycleId, | ||
| 1456 | + "targetUserId": result.TargetUser.UserId, | ||
| 1457 | + }) | ||
| 1458 | + if err != nil { | ||
| 1459 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 1460 | + } | ||
| 1461 | + | ||
| 1462 | + var super *domain.SummaryEvaluation // 上级评估 | ||
| 1463 | + for i := range evaluationList { | ||
| 1464 | + it := evaluationList[i] | ||
| 1465 | + if it.Types == domain.EvaluationSuper { | ||
| 1466 | + super = it | ||
| 1467 | + break | ||
| 1468 | + } | ||
| 1469 | + } | ||
| 1470 | + | ||
| 1471 | + // 评估内容和值 | ||
| 1472 | + var itemList []*domain.EvaluationItemUsed | ||
| 1473 | + var itemValues []*domain.SummaryEvaluationValue | ||
| 1474 | + | ||
| 1475 | + // 获取自评模板内容 | ||
| 1476 | + _, itemList, err = evaluationItemRepo.Find(map[string]interface{}{"evaluationProjectId": result.EvaluationProjectId, "nodeType": domain.LinkNodeSelfAssessment}) | ||
| 1331 | if err != nil { | 1477 | if err != nil { |
| 1478 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 1479 | + } | ||
| 1480 | + | ||
| 1481 | + // 按评估项优先级顺序(已确认考核结果 ->上级评估 ->HR或360评估或自评) | ||
| 1482 | + if super != nil { | ||
| 1483 | + _, itemValues, err = itemValueRepo.Find(map[string]interface{}{"summaryEvaluationId": super.Id}) // 获取已填写的评估内容 | ||
| 1484 | + if err != nil { | ||
| 1485 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 1486 | + } | ||
| 1487 | + // 更新填写值 | ||
| 1488 | + itemValues, err = srv.updateItemValuePriority(result, itemList, itemValues, true) | ||
| 1489 | + if err != nil { | ||
| 1490 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 1491 | + } | ||
| 1492 | + } else { | ||
| 1493 | + // 评估项ID(除考核结果和上级) | ||
| 1494 | + var evaluationIds = make([]int, 0) | ||
| 1495 | + for i := range evaluationList { | ||
| 1496 | + it := evaluationList[i] | ||
| 1497 | + if it.Types == domain.EvaluationSelf || it.Types == domain.Evaluation360 || it.Types == domain.EvaluationHrbp { | ||
| 1498 | + evaluationIds = append(evaluationIds, it.Id) | ||
| 1499 | + } | ||
| 1500 | + } | ||
| 1501 | + if len(evaluationIds) > 0 { | ||
| 1502 | + // 获取已填写的评估内容 | ||
| 1503 | + _, itemValues, err = itemValueRepo.Find(map[string]interface{}{"summaryEvaluationIdList": evaluationIds}) | ||
| 1504 | + if err != nil { | ||
| 1505 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 1506 | + } | ||
| 1507 | + | ||
| 1508 | + // 更新填写值 | ||
| 1509 | + itemValues, err = srv.updateItemValuePriority(result, itemList, itemValues, false) | ||
| 1510 | + if err != nil { | ||
| 1511 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 1512 | + } | ||
| 1513 | + } | ||
| 1514 | + } | ||
| 1515 | + | ||
| 1516 | + for i := range itemValues { | ||
| 1517 | + if err := itemValueRepo.Save(itemValues[i]); err != nil { | ||
| 1518 | + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 1519 | + } | ||
| 1520 | + } | ||
| 1521 | + //重置评级汇总 | ||
| 1522 | + result.TotalRating = nil | ||
| 1523 | + for i := range itemList { | ||
| 1524 | + result.ResetTotalRating(itemList[i]) | ||
| 1525 | + } | ||
| 1526 | + if err := result.EvaluationTotalScore(itemValues); err != nil { | ||
| 1527 | + return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 1528 | + } | ||
| 1529 | + | ||
| 1530 | + result.CheckResult = domain.EvaluationCheckCompleted | ||
| 1531 | + if err := evaluationRepo.Save(result); err != nil { | ||
| 1332 | return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 1532 | return application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
| 1333 | } | 1533 | } |
| 1334 | if err := transactionContext.CommitTransaction(); err != nil { | 1534 | if err := transactionContext.CommitTransaction(); err != nil { |
| @@ -1337,107 +1537,184 @@ func (srv *SummaryEvaluationService) ConfirmScoreSuperEvaluation(param *command. | @@ -1337,107 +1537,184 @@ func (srv *SummaryEvaluationService) ConfirmScoreSuperEvaluation(param *command. | ||
| 1337 | return nil | 1537 | return nil |
| 1338 | } | 1538 | } |
| 1339 | 1539 | ||
| 1340 | -// 按照周期和被评估的人 获取上级评估详情 | ||
| 1341 | -func (srv *SummaryEvaluationService) GetTargetUserEvaluationSuper(param *command.QueryEvaluation) (*adapter.EvaluationInfoSuperAdapter, error) { | ||
| 1342 | - transactionContext, err := factory.CreateTransactionContext(nil) | ||
| 1343 | - if err != nil { | ||
| 1344 | - return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 1540 | +// 处理优先级 |
| 1541 | +func (srv *SummaryEvaluationService) updateItemValuePriority( | ||
| 1542 | + result *domain.SummaryEvaluation, | ||
| 1543 | + itemList []*domain.EvaluationItemUsed, | ||
| 1544 | + itemValues []*domain.SummaryEvaluationValue, | ||
| 1545 | + superior bool) ([]*domain.SummaryEvaluationValue, error) { | ||
| 1546 | + | ||
| 1547 | + tempSelf := map[int]*domain.SummaryEvaluationValue{} | ||
| 1548 | + temp360 := map[int]*domain.SummaryEvaluationValue{} | ||
| 1549 | + tempHRBP := map[int]*domain.SummaryEvaluationValue{} | ||
| 1550 | + tempSuperior := map[int]*domain.SummaryEvaluationValue{} | ||
| 1551 | + | ||
| 1552 | + for i := range itemValues { | ||
| 1553 | + it := itemValues[i] | ||
| 1554 | + if it.Types == domain.EvaluationSelf { | ||
| 1555 | + tempSelf[it.EvaluationItemId] = it | ||
| 1556 | + } else if it.Types == domain.Evaluation360 { | ||
| 1557 | + temp360[it.EvaluationItemId] = it | ||
| 1558 | + } else if it.Types == domain.EvaluationHrbp { | ||
| 1559 | + tempHRBP[it.EvaluationItemId] = it | ||
| 1560 | + } else if it.Types == domain.EvaluationSuper { | ||
| 1561 | + tempSuperior[it.EvaluationItemId] = it | ||
| 1562 | + } | ||
| 1345 | } | 1563 | } |
| 1346 | - if err := transactionContext.StartTransaction(); err != nil { | 1564 | + nowTime := time.Now() |
| 1565 | + var newItemValues = make([]*domain.SummaryEvaluationValue, 0) | ||
| 1566 | + for i := range itemList { | ||
| 1567 | + it := itemList[i] | ||
| 1568 | + | ||
| 1569 | + var tempValue domain.SummaryEvaluationValue | ||
| 1570 | + tempValue.SetBlankValue(result, it) | ||
| 1571 | + | ||
| 1572 | + if superior /* 上级数据 */ { | ||
| 1573 | + if v, ok := tempSuperior[it.Id]; ok { | ||
| 1574 | + tempValue = *v | ||
| 1575 | + } | ||
| 1576 | + tempValue.Types = domain.EvaluationSuper | ||
| 1577 | + } else /* 其它数据 */ { | ||
| 1578 | + if it.EvaluatorId == 0 { | ||
| 1579 | + if v, ok := tempSelf[it.Id]; ok { | ||
| 1580 | + tempValue = *v | ||
| 1581 | + } | ||
| 1582 | + tempValue.Types = domain.EvaluationSelf | ||
| 1583 | + } else if it.EvaluatorId == -1 { | ||
| 1584 | + if v, ok := tempHRBP[it.Id]; ok { | ||
| 1585 | + tempValue = *v | ||
| 1586 | + } | ||
| 1587 | + tempValue.Types = domain.EvaluationHrbp | ||
| 1588 | + } else if it.EvaluatorId > 0 { | ||
| 1589 | + if v, ok := temp360[it.Id]; ok { | ||
| 1590 | + tempValue = *v | ||
| 1591 | + } | ||
| 1592 | + tempValue.Types = domain.Evaluation360 | ||
| 1593 | + } | ||
| 1594 | + } | ||
| 1595 | + | ||
| 1596 | + // ID置空 | ||
| 1597 | + tempValue.Id = 0 | ||
| 1598 | + tempValue.CreatedAt = nowTime | ||
| 1599 | + tempValue.UpdatedAt = nowTime | ||
| 1600 | + newItemValues = append(newItemValues, &tempValue) | ||
| 1601 | + } | ||
| 1602 | + return newItemValues, nil | ||
| 1603 | +} | ||
| 1604 | + | ||
| 1605 | +// GetTargetEvaluationResult 按照周期和被评估的人 获取考核结果 | ||
| 1606 | +func (srv *SummaryEvaluationService) GetTargetEvaluationResult(param *command.QueryEvaluation) (*adapter.EvaluationInfoSuperAdapter, error) { | ||
| 1607 | + transactionContext, err := factory.ValidateStartTransaction(param) | ||
| 1608 | + if err != nil { | ||
| 1347 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 1609 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
| 1348 | } | 1610 | } |
| 1611 | + // if err := transactionContext.StartTransaction(); err != nil { | ||
| 1612 | + // return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 1613 | + // } | ||
| 1349 | defer func() { | 1614 | defer func() { |
| 1350 | _ = transactionContext.RollbackTransaction() | 1615 | _ = transactionContext.RollbackTransaction() |
| 1351 | }() | 1616 | }() |
| 1352 | - evaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{ | ||
| 1353 | - "transactionContext": transactionContext, | ||
| 1354 | - }) | ||
| 1355 | - evaluationItemRepo := factory.CreateEvaluationItemUsedRepository(map[string]interface{}{ | ||
| 1356 | - "transactionContext": transactionContext, | ||
| 1357 | - }) | ||
| 1358 | - itemValueRepo := factory.CreateSummaryEvaluationValueRepository(map[string]interface{}{ | ||
| 1359 | - "transactionContext": transactionContext, | ||
| 1360 | - }) | ||
| 1361 | - permissionRepository := factory.CreatePermissionRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 1362 | - // 获取权限配置 | ||
| 1363 | - _, permissionList, err := permissionRepository.Find(map[string]interface{}{"companyId": param.CompanyId}) | ||
| 1364 | - if err != nil { | ||
| 1365 | - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 1366 | - } | 1617 | + evaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{"transactionContext": transactionContext}) |
| 1618 | + evaluationItemRepo := factory.CreateEvaluationItemUsedRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 1619 | + itemValueRepo := factory.CreateSummaryEvaluationValueRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
| 1620 | + | ||
| 1367 | _, evaluationList, err := evaluationRepo.Find(map[string]interface{}{ | 1621 | _, evaluationList, err := evaluationRepo.Find(map[string]interface{}{ |
| 1368 | - "limit": 1, | 1622 | + "companyId": param.CompanyId, |
| 1369 | "cycleId": param.CycleId, | 1623 | "cycleId": param.CycleId, |
| 1370 | "targetUserId": param.TargetUserId, | 1624 | "targetUserId": param.TargetUserId, |
| 1371 | - "types": domain.EvaluationSuper, | ||
| 1372 | }) | 1625 | }) |
| 1373 | if err != nil { | 1626 | if err != nil { |
| 1374 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 1627 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 1375 | } | 1628 | } |
| 1376 | - if len(evaluationList) == 0 { | ||
| 1377 | - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "没有找到符合条件的数据") | ||
| 1378 | - } | ||
| 1379 | - evaluationData := evaluationList[0] | ||
| 1380 | - if evaluationData.CompanyId != param.CompanyId { | ||
| 1381 | - return nil, application.ThrowError(application.BUSINESS_ERROR, "没有操作权限") | 1629 | + |
| 1630 | + var result *domain.SummaryEvaluation // 绩效考核结果项 | ||
| 1631 | + var super *domain.SummaryEvaluation // 上级评估 | ||
| 1632 | + for i := range evaluationList { | ||
| 1633 | + it := evaluationList[i] | ||
| 1634 | + if it.Types == domain.EvaluationFinish { | ||
| 1635 | + result = it | ||
| 1636 | + continue | ||
| 1637 | + } | ||
| 1638 | + if it.Types == domain.EvaluationSuper { | ||
| 1639 | + super = it | ||
| 1640 | + continue | ||
| 1641 | + } | ||
| 1382 | } | 1642 | } |
| 1383 | - _, itemList, err := evaluationItemRepo.Find(map[string]interface{}{ | ||
| 1384 | - "evaluationProjectId": evaluationData.EvaluationProjectId, | ||
| 1385 | - "nodeType": int(domain.LinkNodeSelfAssessment), | ||
| 1386 | - }) | ||
| 1387 | - if err != nil { | ||
| 1388 | - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 1643 | + if result == nil { |
| 1644 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "没有找到符合条件的数据") | ||
| 1389 | } | 1645 | } |
| 1390 | - //获取已填写的评估内容 | ||
| 1391 | - _, itemValues, err := itemValueRepo.Find(map[string]interface{}{ | ||
| 1392 | - "summaryEvaluationId": evaluationData.Id, | ||
| 1393 | - }) | ||
| 1394 | 1646 | ||
| 1647 | + // 评估内容和值 | ||
| 1648 | + var itemList []*domain.EvaluationItemUsed | ||
| 1649 | + var itemValues []*domain.SummaryEvaluationValue | ||
| 1650 | + | ||
| 1651 | + // 获取自评模板内容 | ||
| 1652 | + _, itemList, err = evaluationItemRepo.Find(map[string]interface{}{"evaluationProjectId": result.EvaluationProjectId, "nodeType": domain.LinkNodeSelfAssessment}) | ||
| 1395 | if err != nil { | 1653 | if err != nil { |
| 1396 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 1654 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 1397 | } | 1655 | } |
| 1398 | - if len(itemValues) == 0 { | ||
| 1399 | - //上级还未填写评估,获取 360 ,人资评估 | ||
| 1400 | - _, evaluationListOther, err := evaluationRepo.Find(map[string]interface{}{ | ||
| 1401 | - "typesList": []int{int(domain.Evaluation360), int(domain.EvaluationHrbp)}, | ||
| 1402 | - "targetUserId": evaluationData.TargetUser.UserId, | ||
| 1403 | - "cycleId": evaluationData.CycleId, | ||
| 1404 | - }) | 1656 | + |
| 1657 | + // 按评估项优先级顺序(已确认考核结果 ->上级评估 ->HR或360评估或自评) | ||
| 1658 | + if result.CheckResult == domain.EvaluationCheckCompleted { /* 已完成考核*/ | ||
| 1659 | + _, itemValues, err = itemValueRepo.Find(map[string]interface{}{"summaryEvaluationId": result.Id}) // 获取已填写的评估内容 | ||
| 1405 | if err != nil { | 1660 | if err != nil { |
| 1406 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 1661 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 1407 | } | 1662 | } |
| 1408 | - evaluationIds := []int{} | ||
| 1409 | - for _, v := range evaluationListOther { | ||
| 1410 | - evaluationIds = append(evaluationIds, v.Id) | ||
| 1411 | - } | ||
| 1412 | - if len(evaluationIds) > 0 { | ||
| 1413 | - _, itemValues, err = itemValueRepo.Find(map[string]interface{}{ | ||
| 1414 | - "summaryEvaluationIdList": evaluationIds, | ||
| 1415 | - }) | 1663 | + } else { |
| 1664 | + if super != nil { | ||
| 1665 | + _, itemValues, err = itemValueRepo.Find(map[string]interface{}{"summaryEvaluationId": super.Id}) // 获取已填写的评估内容 | ||
| 1416 | if err != nil { | 1666 | if err != nil { |
| 1417 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 1667 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 1418 | } | 1668 | } |
| 1669 | + } else { | ||
| 1670 | + // 评估项ID(除考核结果和上级) | ||
| 1671 | + var evaluationIds = make([]int, 0) | ||
| 1672 | + for i := range evaluationList { | ||
| 1673 | + it := evaluationList[i] | ||
| 1674 | + if it.Types == domain.EvaluationSelf || it.Types == domain.Evaluation360 || it.Types == domain.EvaluationHrbp { | ||
| 1675 | + evaluationIds = append(evaluationIds, it.Id) | ||
| 1676 | + } | ||
| 1677 | + } | ||
| 1678 | + if len(evaluationIds) > 0 { | ||
| 1679 | + // 获取已填写的评估内容 | ||
| 1680 | + _, itemValues, err = itemValueRepo.Find(map[string]interface{}{"summaryEvaluationIdList": evaluationIds}) | ||
| 1681 | + if err != nil { | ||
| 1682 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 1683 | + } | ||
| 1684 | + | ||
| 1685 | + // 更新填写值 | ||
| 1686 | + itemValues, err = srv.updateItemValuePriority(result, itemList, itemValues, false) | ||
| 1687 | + if err != nil { | ||
| 1688 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 1689 | + } | ||
| 1690 | + } | ||
| 1419 | } | 1691 | } |
| 1420 | } | 1692 | } |
| 1421 | - evaluationBase := srv.getSummaryEvaluation(transactionContext, evaluationData) | 1693 | + // 未完成考核,需要重新计算分数 |
| 1694 | + if result.CheckResult == domain.EvaluationCheckUncompleted { | ||
| 1695 | + result.TotalRating = nil | ||
| 1696 | + for i := range itemList { | ||
| 1697 | + result.ResetTotalRating(itemList[i]) | ||
| 1698 | + } | ||
| 1699 | + if err = result.EvaluationTotalScore(itemValues); err != nil { | ||
| 1700 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 1701 | + } | ||
| 1702 | + } | ||
| 1703 | + | ||
| 1704 | + // 基础数据 | ||
| 1705 | + evaluationBase := srv.getSummaryEvaluation(transactionContext, result) | ||
| 1706 | + | ||
| 1422 | if err := transactionContext.CommitTransaction(); err != nil { | 1707 | if err := transactionContext.CommitTransaction(); err != nil { |
| 1423 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 1708 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 1424 | } | 1709 | } |
| 1425 | - //组合 评估填写的值和评估项 | 1710 | + |
| 1711 | + // 组合 评估填写的值和评估项 | ||
| 1426 | itemValuesAdapter := srv.buildSummaryItemValue(itemList, itemValues) | 1712 | itemValuesAdapter := srv.buildSummaryItemValue(itemList, itemValues) |
| 1427 | - codeList := []*adapter.LevalCodeCount{} | 1713 | + |
| 1428 | codeMap := map[string]*adapter.LevalCodeCount{} | 1714 | codeMap := map[string]*adapter.LevalCodeCount{} |
| 1429 | - for i, v := range itemValuesAdapter { | ||
| 1430 | - if len(permissionList) > 0 { | ||
| 1431 | - if permissionList[0].OptEvalScore == domain.PermissionOff && | ||
| 1432 | - v.EvaluatorId > 0 { | ||
| 1433 | - itemValuesAdapter[i].ForbidEdit = true | ||
| 1434 | - } | ||
| 1435 | - if permissionList[0].OptHrScore == domain.PermissionOff && | ||
| 1436 | - v.EvaluatorId < 0 { | ||
| 1437 | - itemValuesAdapter[i].ForbidEdit = true | ||
| 1438 | - } | ||
| 1439 | - } | ||
| 1440 | - if v.Weight == 0 { | 1715 | + for _, v := range itemValuesAdapter { |
| 1716 | + //处理加分项评级汇总 | ||
| 1717 | + if v.Weight == 0 && len(v.Value) > 0 { | ||
| 1441 | if _, ok := codeMap[v.Value]; !ok { | 1718 | if _, ok := codeMap[v.Value]; !ok { |
| 1442 | code := &adapter.LevalCodeCount{ | 1719 | code := &adapter.LevalCodeCount{ |
| 1443 | Code: v.Value, | 1720 | Code: v.Value, |
| @@ -1445,23 +1722,33 @@ func (srv *SummaryEvaluationService) GetTargetUserEvaluationSuper(param *command | @@ -1445,23 +1722,33 @@ func (srv *SummaryEvaluationService) GetTargetUserEvaluationSuper(param *command | ||
| 1445 | ItemList: []string{}, | 1722 | ItemList: []string{}, |
| 1446 | } | 1723 | } |
| 1447 | codeMap[v.Value] = code | 1724 | codeMap[v.Value] = code |
| 1448 | - codeList = append(codeList, code) | ||
| 1449 | } | 1725 | } |
| 1450 | codeMap[v.Value].ItemList = append(codeMap[v.Value].ItemList, v.Name) | 1726 | codeMap[v.Value].ItemList = append(codeMap[v.Value].ItemList, v.Name) |
| 1451 | codeMap[v.Value].Number += 1 | 1727 | codeMap[v.Value].Number += 1 |
| 1452 | } | 1728 | } |
| 1453 | } | 1729 | } |
| 1454 | - | ||
| 1455 | - result := adapter.EvaluationInfoSuperAdapter{ | 1730 | + codeList := make([]*adapter.LevalCodeCount, 0) |
| 1731 | + for _, val := range result.TotalRating { | ||
| 1732 | + if codeItem, ok := codeMap[val.Code]; ok { | ||
| 1733 | + codeList = append(codeList, codeItem) | ||
| 1734 | + } else { | ||
| 1735 | + codeList = append(codeList, &adapter.LevalCodeCount{ | ||
| 1736 | + Code: val.Code, | ||
| 1737 | + Number: 0, | ||
| 1738 | + ItemList: []string{}, | ||
| 1739 | + }) | ||
| 1740 | + } | ||
| 1741 | + } | ||
| 1742 | + eiAdapter := adapter.EvaluationInfoSuperAdapter{ | ||
| 1456 | EvaluationBaseAdapter: evaluationBase, | 1743 | EvaluationBaseAdapter: evaluationBase, |
| 1457 | LevelCount: codeList, | 1744 | LevelCount: codeList, |
| 1458 | EvaluationItems: itemValuesAdapter, | 1745 | EvaluationItems: itemValuesAdapter, |
| 1459 | } | 1746 | } |
| 1460 | - return &result, nil | 1747 | + return &eiAdapter, nil |
| 1461 | } | 1748 | } |
| 1462 | 1749 | ||
| 1463 | -// 获取周期综合评估下,周期评估列表 | ||
| 1464 | -func (srv *SummaryEvaluationService) ListAllEvaluationSuper(param *command.QueryEvaluationList) (map[string]interface{}, error) { | 1750 | +// 按周期获取所有员工的评估考核结果 |
| 1751 | +func (srv *SummaryEvaluationService) ListAllEvaluationFinish(param *command.QueryEvaluationList) (map[string]interface{}, error) { | ||
| 1465 | transactionContext, err := factory.CreateTransactionContext(nil) | 1752 | transactionContext, err := factory.CreateTransactionContext(nil) |
| 1466 | if err != nil { | 1753 | if err != nil { |
| 1467 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 1754 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
| @@ -1489,7 +1776,7 @@ func (srv *SummaryEvaluationService) ListAllEvaluationSuper(param *command.Query | @@ -1489,7 +1776,7 @@ func (srv *SummaryEvaluationService) ListAllEvaluationSuper(param *command.Query | ||
| 1489 | "parentId": param.UserId, | 1776 | "parentId": param.UserId, |
| 1490 | "limit": 1, | 1777 | "limit": 1, |
| 1491 | }) | 1778 | }) |
| 1492 | - if len(parentUser) == 0 { | 1779 | + if len(parentUser) == 0 && flagHrbp != 1 { |
| 1493 | return tool_funs.SimpleWrapGridMap(0, []string{}), nil | 1780 | return tool_funs.SimpleWrapGridMap(0, []string{}), nil |
| 1494 | } | 1781 | } |
| 1495 | evaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{ | 1782 | evaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{ |
| @@ -1505,7 +1792,7 @@ func (srv *SummaryEvaluationService) ListAllEvaluationSuper(param *command.Query | @@ -1505,7 +1792,7 @@ func (srv *SummaryEvaluationService) ListAllEvaluationSuper(param *command.Query | ||
| 1505 | //获取评估列表信息 | 1792 | //获取评估列表信息 |
| 1506 | condition1 := map[string]interface{}{ | 1793 | condition1 := map[string]interface{}{ |
| 1507 | "cycleId": param.CycleId, | 1794 | "cycleId": param.CycleId, |
| 1508 | - "types": int(domain.EvaluationSuper), | 1795 | + "types": int(domain.EvaluationFinish), |
| 1509 | "limit": limit, | 1796 | "limit": limit, |
| 1510 | "beginTime": time.Now(), | 1797 | "beginTime": time.Now(), |
| 1511 | } | 1798 | } |
| @@ -1606,12 +1893,14 @@ func (srv *SummaryEvaluationService) editEvaluationValue( | @@ -1606,12 +1893,14 @@ func (srv *SummaryEvaluationService) editEvaluationValue( | ||
| 1606 | } | 1893 | } |
| 1607 | evaluationItemMap := map[int]*domain.EvaluationItemUsed{} | 1894 | evaluationItemMap := map[int]*domain.EvaluationItemUsed{} |
| 1608 | evaluationValueMap := map[int]*domain.SummaryEvaluationValue{} | 1895 | evaluationValueMap := map[int]*domain.SummaryEvaluationValue{} |
| 1896 | + evaluationValueSlice := []*domain.SummaryEvaluationValue{} | ||
| 1609 | evaluationData.TotalRating = nil //清空评级数量统计 | 1897 | evaluationData.TotalRating = nil //清空评级数量统计 |
| 1610 | for _, v := range evaluationItems { | 1898 | for _, v := range evaluationItems { |
| 1611 | newValue := &domain.SummaryEvaluationValue{} | 1899 | newValue := &domain.SummaryEvaluationValue{} |
| 1612 | newValue.SetBlankValue(evaluationData, v) | 1900 | newValue.SetBlankValue(evaluationData, v) |
| 1613 | evaluationValueMap[v.Id] = newValue | 1901 | evaluationValueMap[v.Id] = newValue |
| 1614 | evaluationItemMap[v.Id] = v | 1902 | evaluationItemMap[v.Id] = v |
| 1903 | + evaluationValueSlice = append(evaluationValueSlice, newValue) | ||
| 1615 | //重置计数 | 1904 | //重置计数 |
| 1616 | evaluationData.ResetTotalRating(v) | 1905 | evaluationData.ResetTotalRating(v) |
| 1617 | } | 1906 | } |
| @@ -1669,10 +1958,14 @@ func (srv *SummaryEvaluationService) editEvaluationValue( | @@ -1669,10 +1958,14 @@ func (srv *SummaryEvaluationService) editEvaluationValue( | ||
| 1669 | } | 1958 | } |
| 1670 | } | 1959 | } |
| 1671 | //完全更新itemValueList | 1960 | //完全更新itemValueList |
| 1672 | - *itemValueList = (*itemValueList)[0:0] | ||
| 1673 | - for _, v := range evaluationValueMap { | ||
| 1674 | - *itemValueList = append(*itemValueList, v) | ||
| 1675 | - } | 1961 | + *itemValueList = evaluationValueSlice |
| 1962 | + // *itemValueList = (*itemValueList)[0:0] | ||
| 1963 | + // for _, v := range evaluationValueMap { | ||
| 1964 | + // *itemValueList = append(*itemValueList, v) | ||
| 1965 | + // } | ||
| 1966 | + // sort.Slice(*itemValueList, func(i, j int) bool { | ||
| 1967 | + // return (*itemValueList)[i].EvaluationItemId < (*itemValueList)[j].EvaluationItemId | ||
| 1968 | + // }) | ||
| 1676 | // 计算总得分 | 1969 | // 计算总得分 |
| 1677 | err := evaluationData.EvaluationTotalScore(*itemValueList) | 1970 | err := evaluationData.EvaluationTotalScore(*itemValueList) |
| 1678 | if err != nil { | 1971 | if err != nil { |
| @@ -1685,7 +1978,7 @@ func (srv *SummaryEvaluationService) editEvaluationValue( | @@ -1685,7 +1978,7 @@ func (srv *SummaryEvaluationService) editEvaluationValue( | ||
| 1685 | func (srv *SummaryEvaluationService) ListExecutorNowEvaluationSelf(param *command.QueryExecutorEvaluationList) (map[string]interface{}, error) { | 1978 | func (srv *SummaryEvaluationService) ListExecutorNowEvaluationSelf(param *command.QueryExecutorEvaluationList) (map[string]interface{}, error) { |
| 1686 | transactionContext, err := factory.CreateTransactionContext(nil) | 1979 | transactionContext, err := factory.CreateTransactionContext(nil) |
| 1687 | if err != nil { | 1980 | if err != nil { |
| 1688 | - return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 1981 | + return nil, err |
| 1689 | } | 1982 | } |
| 1690 | if err := transactionContext.StartTransaction(); err != nil { | 1983 | if err := transactionContext.StartTransaction(); err != nil { |
| 1691 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 1984 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
| @@ -21,7 +21,7 @@ type EvaluationItemUsed struct { | @@ -21,7 +21,7 @@ type EvaluationItemUsed struct { | ||
| 21 | Rule EvaluationRule //评估的选项规则 | 21 | Rule EvaluationRule //评估的选项规则 |
| 22 | Weight float64 //"权重" | 22 | Weight float64 //"权重" |
| 23 | Required int //必填项 同 NodeContent.Required | 23 | Required int //必填项 同 NodeContent.Required |
| 24 | - EvaluatorId int //项目评估人ID ( 0=无评估人、-1=HRBP、 >0 =员工的id ) | 24 | + EvaluatorId int //项目评估人ID ( 0=无评估人、-1=HRBP、 >0 员工的id ) |
| 25 | CreatedAt time.Time //数据创建时间 | 25 | CreatedAt time.Time //数据创建时间 |
| 26 | UpdatedAt time.Time //数据更新时间 | 26 | UpdatedAt time.Time //数据更新时间 |
| 27 | } | 27 | } |
pkg/domain/message_personal.go
0 → 100644
| 1 | +package domain | ||
| 2 | + | ||
| 3 | +import "time" | ||
| 4 | + | ||
| 5 | +// MessagePersonal 个人的消息提示 | ||
| 6 | +type MessagePersonal struct { | ||
| 7 | + Id int `json:"id"` // | ||
| 8 | + Types MessageTypes `json:"types"` //消息类型 | ||
| 9 | + TargetUserId int `json:"targetUserId"` //消息指向的用户 | ||
| 10 | + ReadFlag MessageReadFlag `json:"readFlag"` //1:已读、2:未读 | ||
| 11 | + Title string `json:"title"` //消息的标题 | ||
| 12 | + Content string `json:"content"` //消息的内容 | ||
| 13 | + CreatedAt time.Time `json:"createdAt"` | ||
| 14 | + UpdatedAt time.Time `json:"updatedAt"` | ||
| 15 | + Payload string `json:"payload"` //消息的额外承载的数据 | ||
| 16 | +} | ||
| 17 | + | ||
| 18 | +type MessageTypes string | ||
| 19 | + | ||
| 20 | +const ( | ||
| 21 | + MessageTypesOther MessageTypes = "other" | ||
| 22 | +) | ||
| 23 | + | ||
| 24 | +type MessageReadFlag string | ||
| 25 | + | ||
| 26 | +const ( | ||
| 27 | + MessageIsRead MessageReadFlag = "read" | ||
| 28 | + MessageUnread MessageReadFlag = "unread" | ||
| 29 | +) | ||
| 30 | + | ||
| 31 | +type MessagePersonalRepository interface { | ||
| 32 | + Save(param *MessagePersonal) error | ||
| 33 | + Find(queryOptions map[string]interface{}) (int, []*MessagePersonal, error) | ||
| 34 | +} |
| @@ -263,6 +263,9 @@ func getEvaluator(items []*PerformanceApplicationForm) (string, error) { | @@ -263,6 +263,9 @@ func getEvaluator(items []*PerformanceApplicationForm) (string, error) { | ||
| 263 | return "", errors.New(item.ModuleName + " 对应的项目评估人填不一致") | 263 | return "", errors.New(item.ModuleName + " 对应的项目评估人填不一致") |
| 264 | } | 264 | } |
| 265 | } | 265 | } |
| 266 | + if prevName == "/" { | ||
| 267 | + prevName = "" | ||
| 268 | + } | ||
| 266 | return prevName, nil | 269 | return prevName, nil |
| 267 | } | 270 | } |
| 268 | 271 |
| @@ -39,11 +39,11 @@ type RatingCodeNumber struct { | @@ -39,11 +39,11 @@ type RatingCodeNumber struct { | ||
| 39 | type EvaluationType int //综合评估类型 | 39 | type EvaluationType int //综合评估类型 |
| 40 | 40 | ||
| 41 | const ( | 41 | const ( |
| 42 | - EvaluationSelf EvaluationType = 1 //自评 | ||
| 43 | - Evaluation360 EvaluationType = 2 //360评估 | ||
| 44 | - EvaluationSuper EvaluationType = 3 //上级评估 | ||
| 45 | - EvaluationHrbp EvaluationType = 4 //人资评估 | ||
| 46 | - | 42 | + EvaluationSelf EvaluationType = 1 //自评 |
| 43 | + Evaluation360 EvaluationType = 2 //360评估 | ||
| 44 | + EvaluationSuper EvaluationType = 3 //上级评估 | ||
| 45 | + EvaluationHrbp EvaluationType = 4 //人资评估 | ||
| 46 | + EvaluationFinish EvaluationType = 5 //考核结果 | ||
| 47 | ) | 47 | ) |
| 48 | 48 | ||
| 49 | // 评估的填写状态 | 49 | // 评估的填写状态 |
| @@ -72,6 +72,9 @@ type SummaryEvaluationRepository interface { | @@ -72,6 +72,9 @@ type SummaryEvaluationRepository interface { | ||
| 72 | 72 | ||
| 73 | // 计算总分。TotalScore 保留1位小数 | 73 | // 计算总分。TotalScore 保留1位小数 |
| 74 | func (evaluation *SummaryEvaluation) EvaluationTotalScore(valueList []*SummaryEvaluationValue) error { | 74 | func (evaluation *SummaryEvaluation) EvaluationTotalScore(valueList []*SummaryEvaluationValue) error { |
| 75 | + //重置计数 | ||
| 76 | + evaluation.TotalScore = "0" | ||
| 77 | + //汇总评估填写值 | ||
| 75 | var totalScore float64 | 78 | var totalScore float64 |
| 76 | for _, v := range valueList { | 79 | for _, v := range valueList { |
| 77 | if v.Weight == 0 { | 80 | if v.Weight == 0 { |
| @@ -17,6 +17,7 @@ type SummaryEvaluationValue struct { | @@ -17,6 +17,7 @@ type SummaryEvaluationValue struct { | ||
| 17 | Score string `json:"score"` //评定得分 | 17 | Score string `json:"score"` //评定得分 |
| 18 | Types EvaluationType `json:"types"` //评估类型 | 18 | Types EvaluationType `json:"types"` //评估类型 |
| 19 | Remark string `json:"remark"` //填写的内容反馈 | 19 | Remark string `json:"remark"` //填写的内容反馈 |
| 20 | + Executor StaffDesc `json:"executor"` //填写评估的用户,执行人 | ||
| 20 | Weight float64 `json:"weight"` //"权重" | 21 | Weight float64 `json:"weight"` //"权重" |
| 21 | Rating RatingLevel `json:"rating"` //评级时的填写值 | 22 | Rating RatingLevel `json:"rating"` //评级时的填写值 |
| 22 | CreatedAt time.Time `json:"createdAt"` //数据创建时间 | 23 | CreatedAt time.Time `json:"createdAt"` //数据创建时间 |
| @@ -36,11 +37,12 @@ func (itemValue *SummaryEvaluationValue) SetBlankValue(evaluation *SummaryEvalua | @@ -36,11 +37,12 @@ func (itemValue *SummaryEvaluationValue) SetBlankValue(evaluation *SummaryEvalua | ||
| 36 | itemValue.EvaluationItemId = item.Id | 37 | itemValue.EvaluationItemId = item.Id |
| 37 | itemValue.SummaryEvaluationId = evaluation.Id | 38 | itemValue.SummaryEvaluationId = evaluation.Id |
| 38 | itemValue.Value = "" | 39 | itemValue.Value = "" |
| 39 | - itemValue.Score = "" | 40 | + itemValue.Score = "0" |
| 40 | itemValue.Remark = "" | 41 | itemValue.Remark = "" |
| 41 | itemValue.Weight = item.Weight | 42 | itemValue.Weight = item.Weight |
| 42 | itemValue.CreatedAt = time.Now() | 43 | itemValue.CreatedAt = time.Now() |
| 43 | itemValue.UpdatedAt = time.Now() | 44 | itemValue.UpdatedAt = time.Now() |
| 45 | + itemValue.Executor = evaluation.Executor | ||
| 44 | } | 46 | } |
| 45 | 47 | ||
| 46 | // 填充评估的内容 | 48 | // 填充评估的内容 |
| @@ -50,6 +50,7 @@ func (userAuth *UserAuth) ParseAccessToken(token string) (*UserAuth, error) { | @@ -50,6 +50,7 @@ func (userAuth *UserAuth) ParseAccessToken(token string) (*UserAuth, error) { | ||
| 50 | user.PlatformId = claim.PlatformId | 50 | user.PlatformId = claim.PlatformId |
| 51 | user.Name = claim.Name | 51 | user.Name = claim.Name |
| 52 | user.AdminType = claim.AdminType | 52 | user.AdminType = claim.AdminType |
| 53 | + user.CompanyName = claim.CompanyName | ||
| 53 | return user, nil | 54 | return user, nil |
| 54 | } | 55 | } |
| 55 | return user, errors.New("解析token失败") | 56 | return user, errors.New("解析token失败") |
| 1 | package domain | 1 | package domain |
| 2 | 2 | ||
| 3 | -import "testing" | 3 | +import ( |
| 4 | + "testing" | ||
| 5 | + | ||
| 6 | + "github.com/dgrijalva/jwt-go" | ||
| 7 | +) | ||
| 4 | 8 | ||
| 5 | func TestGenerateToken(t *testing.T) { | 9 | func TestGenerateToken(t *testing.T) { |
| 6 | ut := UserAuth{ | 10 | ut := UserAuth{ |
| 7 | CompanyId: 8, | 11 | CompanyId: 8, |
| 8 | - UserId: 3422174102828544, | ||
| 9 | - Phone: "17708397664", | 12 | + UserId: 3422052605249024, |
| 13 | + Phone: "13677777777", | ||
| 10 | PlatformId: 29, | 14 | PlatformId: 29, |
| 11 | AdminType: 1, | 15 | AdminType: 1, |
| 12 | } | 16 | } |
| 13 | tk, _ := ut.CreateAccessToken() | 17 | tk, _ := ut.CreateAccessToken() |
| 14 | t.Log(tk) | 18 | t.Log(tk) |
| 15 | } | 19 | } |
| 20 | + | ||
| 21 | +func TestParsetToken1(t *testing.T) { | ||
| 22 | + ut := UserAuth{} | ||
| 23 | + str := `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjM0MjE4NDc3MjcyOTYwMDAsImNvbXBhbnlJZCI6MTAsImNvbXBhbnlOYW1lIjoi5aSp6IGU5L-h5oGv56eR5oqA5pyJ6ZmQ5YWs5Y-4IiwicGhvbmUiOiIxNTY1OTM3NTk0MCIsInBsYXRmb3JtSWQiOjI5LCJuYW1lIjoi5bq35Lyf5Y2OIiwiYWRtaW5UeXBlIjoxfQ.v4qNLvYST03XpBdGnhYTK78A9v_k5IOdZ4r-WmDwfYg` | ||
| 24 | + tk, _ := ut.ParseAccessToken(str) | ||
| 25 | + t.Logf("%+v", tk) | ||
| 26 | +} | ||
| 27 | +func TestParsetToken2(t *testing.T) { | ||
| 28 | + ut := UserAuth{} | ||
| 29 | + str := `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjM0MjYxMDAxMTcwOTM4ODgsImNvbXBhbnlJZCI6MSwiY29tcGFueU5hbWUiOiLnpo_lt57ntKDlpKnkuIvpo5_lk4HmnInpmZDlhazlj7giLCJwaG9uZSI6IjE1NjU5Mzc1OTQwIiwicGxhdGZvcm1JZCI6MjksIm5hbWUiOiLlurfkvJ_ljY4iLCJhZG1pblR5cGUiOjF9.BwJ2mLdTlFKF322y4GeqPOW6wKroIrPSI8eNyuQEMkQ` | ||
| 30 | + tk, _ := ut.ParseAccessToken(str) | ||
| 31 | + t.Logf("===》%+v", tk) | ||
| 32 | + tk.StandardClaims = jwt.StandardClaims{} | ||
| 33 | + tk.PlatformId = 29 | ||
| 34 | + tkStr, _ := tk.CreateAccessToken() | ||
| 35 | + t.Logf(" ===》%v", tkStr) | ||
| 36 | +} |
| @@ -5,7 +5,6 @@ import ( | @@ -5,7 +5,6 @@ import ( | ||
| 5 | 5 | ||
| 6 | "github.com/go-pg/pg/v10" | 6 | "github.com/go-pg/pg/v10" |
| 7 | pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | 7 | pgTransaction "github.com/linmadan/egglib-go/transaction/pg" |
| 8 | - "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | ||
| 9 | ) | 8 | ) |
| 10 | 9 | ||
| 11 | type SummaryEvaluationDao struct { | 10 | type SummaryEvaluationDao struct { |
| @@ -31,7 +30,7 @@ type ExecutorCycle struct { | @@ -31,7 +30,7 @@ type ExecutorCycle struct { | ||
| 31 | // GetExecutorCycleList 获取执行人拥有的周期列表 | 30 | // GetExecutorCycleList 获取执行人拥有的周期列表 |
| 32 | // executorId 执行人id | 31 | // executorId 执行人id |
| 33 | // offset,limit 分页 | 32 | // offset,limit 分页 |
| 34 | -func (d *SummaryEvaluationDao) GetExecutorCycleList(executorId int, offset int, limit int, isHrbp bool) ([]ExecutorCycle, error) { | 33 | +func (d *SummaryEvaluationDao) GetExecutorCycleList(companyId int, executorId int, offset int, limit int, isHrbp bool) ([]ExecutorCycle, error) { |
| 35 | sqlStr := `select | 34 | sqlStr := `select |
| 36 | distinct on( | 35 | distinct on( |
| 37 | summary_evaluation.cycle_id , | 36 | summary_evaluation.cycle_id , |
| @@ -40,14 +39,16 @@ func (d *SummaryEvaluationDao) GetExecutorCycleList(executorId int, offset int, | @@ -40,14 +39,16 @@ func (d *SummaryEvaluationDao) GetExecutorCycleList(executorId int, offset int, | ||
| 40 | summary_evaluation.cycle_id , | 39 | summary_evaluation.cycle_id , |
| 41 | summary_evaluation.cycle_name | 40 | summary_evaluation.cycle_name |
| 42 | from summary_evaluation | 41 | from summary_evaluation |
| 43 | - where summary_evaluation.executor ->>'userId'='?' | 42 | + where summary_evaluation.company_id=? |
| 44 | ` | 43 | ` |
| 45 | tx := d.transactionContext.PgTx | 44 | tx := d.transactionContext.PgTx |
| 46 | condition := []interface{}{ | 45 | condition := []interface{}{ |
| 47 | - executorId, | 46 | + companyId, executorId, |
| 48 | } | 47 | } |
| 49 | if isHrbp { | 48 | if isHrbp { |
| 50 | - sqlStr += ` or summary_evaluation."types"=4 ` | 49 | + sqlStr += ` and (summary_evaluation.executor ->>'userId'='?' or summary_evaluation."types"=4 ) ` |
| 50 | + } else { | ||
| 51 | + sqlStr += ` and (summary_evaluation.executor ->>'userId'='?') ` | ||
| 51 | } | 52 | } |
| 52 | condition = append(condition, offset, limit) | 53 | condition = append(condition, offset, limit) |
| 53 | 54 | ||
| @@ -58,22 +59,22 @@ func (d *SummaryEvaluationDao) GetExecutorCycleList(executorId int, offset int, | @@ -58,22 +59,22 @@ func (d *SummaryEvaluationDao) GetExecutorCycleList(executorId int, offset int, | ||
| 58 | } | 59 | } |
| 59 | 60 | ||
| 60 | // CountExecutorCycleList 统计执行人拥有的周期列表 | 61 | // CountExecutorCycleList 统计执行人拥有的周期列表 |
| 61 | -func (d *SummaryEvaluationDao) CountExecutorCycleList(executorId int, evaluationType domain.EvaluationType) (int, error) { | 62 | +func (d *SummaryEvaluationDao) CountExecutorCycleList(companyId int, executorId int, isHrbp bool) (int, error) { |
| 62 | sqlStr := `select count( | 63 | sqlStr := `select count( |
| 63 | distinct summary_evaluation.cycle_id | 64 | distinct summary_evaluation.cycle_id |
| 64 | ) as cnt | 65 | ) as cnt |
| 65 | from summary_evaluation | 66 | from summary_evaluation |
| 66 | - where summary_evaluation.executor ->>'userId'='?' ` | 67 | + where summary_evaluation.company_id=? ` |
| 67 | 68 | ||
| 68 | tx := d.transactionContext.PgTx | 69 | tx := d.transactionContext.PgTx |
| 69 | condition := []interface{}{ | 70 | condition := []interface{}{ |
| 70 | - executorId, | 71 | + companyId, executorId, |
| 71 | } | 72 | } |
| 72 | - if evaluationType > 0 { | ||
| 73 | - sqlStr += ` and summary_evaluation."types"=? ` | ||
| 74 | - condition = append(condition, int(evaluationType)) | 73 | + if isHrbp { |
| 74 | + sqlStr += ` and (summary_evaluation.executor ->>'userId'='?' or summary_evaluation."types"=4 ) ` | ||
| 75 | + } else { | ||
| 76 | + sqlStr += ` and (summary_evaluation.executor ->>'userId'='?') ` | ||
| 75 | } | 77 | } |
| 76 | - | ||
| 77 | var cnt int | 78 | var cnt int |
| 78 | _, err := tx.QueryOne(pg.Scan(&cnt), sqlStr, condition...) | 79 | _, err := tx.QueryOne(pg.Scan(&cnt), sqlStr, condition...) |
| 79 | return cnt, err | 80 | return cnt, err |
| @@ -51,6 +51,7 @@ func init() { | @@ -51,6 +51,7 @@ func init() { | ||
| 51 | &models.SummaryEvaluationValue{}, | 51 | &models.SummaryEvaluationValue{}, |
| 52 | &models.Permission{}, | 52 | &models.Permission{}, |
| 53 | &models.LogSms{}, | 53 | &models.LogSms{}, |
| 54 | + &models.MessagePersonal{}, | ||
| 54 | } | 55 | } |
| 55 | for _, model := range tables { | 56 | for _, model := range tables { |
| 56 | err := DB.Model(model).CreateTable(&orm.CreateTableOptions{ | 57 | err := DB.Model(model).CreateTable(&orm.CreateTableOptions{ |
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import "time" | ||
| 4 | + | ||
| 5 | +// MessagePersonal 记录个人的提示消息 | ||
| 6 | +type MessagePersonal struct { | ||
| 7 | + tableName struct{} `comment:"记录个人的提示消息" pg:"message_personal"` | ||
| 8 | + Id int `pg:"id,pk"` // | ||
| 9 | + Types string `pg:"types"` //消息类型 | ||
| 10 | + TargetUserId int `pg:"target_user_id"` //消息指向的用户 | ||
| 11 | + ReadFlag string `pg:"read_flag"` //1:已读、2:未读 | ||
| 12 | + Title string `pg:"title"` //消息的标题 | ||
| 13 | + Content string `pg:"content"` //消息的内容 | ||
| 14 | + CreatedAt time.Time `pg:"created_at"` | ||
| 15 | + UpdatedAt time.Time `pg:"updated_at"` | ||
| 16 | + Payload string `pg:"payload,type:jsonb"` //消息的额外承载的数据 | ||
| 17 | +} |
| @@ -15,6 +15,7 @@ type SummaryEvaluationValue struct { | @@ -15,6 +15,7 @@ type SummaryEvaluationValue struct { | ||
| 15 | Value string //评估填写的评分 | 15 | Value string //评估填写的评分 |
| 16 | Score string //评定得分 | 16 | Score string //评定得分 |
| 17 | Types int //评估类型 | 17 | Types int //评估类型 |
| 18 | + Executor domain.StaffDesc //填写评估的用户,执行人 | ||
| 18 | Weight float64 //权重 | 19 | Weight float64 //权重 |
| 19 | Rating domain.RatingLevel //评级填写值 | 20 | Rating domain.RatingLevel //评级填写值 |
| 20 | Remark string //填写的内容反馈 | 21 | Remark string //填写的内容反馈 |
| @@ -36,6 +36,7 @@ func (repo *LogSmsRepository) Save(param *domain.LogSms) error { | @@ -36,6 +36,7 @@ func (repo *LogSmsRepository) Save(param *domain.LogSms) error { | ||
| 36 | if err != nil { | 36 | if err != nil { |
| 37 | return err | 37 | return err |
| 38 | } | 38 | } |
| 39 | + return nil | ||
| 39 | } | 40 | } |
| 40 | _, err := tx.Model(&m).WherePK().Update() | 41 | _, err := tx.Model(&m).WherePK().Update() |
| 41 | if err != nil { | 42 | if err != nil { |
| 1 | +package repository | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "time" | ||
| 5 | + | ||
| 6 | + pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | ||
| 8 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/infrastructure/pg/models" | ||
| 9 | +) | ||
| 10 | + | ||
| 11 | +type MessagePersonalRepository struct { | ||
| 12 | + transactionContext *pgTransaction.TransactionContext | ||
| 13 | +} | ||
| 14 | + | ||
| 15 | +var _ domain.MessagePersonalRepository = (*MessagePersonalRepository)(nil) | ||
| 16 | + | ||
| 17 | +func NewMessagePersonalRepository(tx *pgTransaction.TransactionContext) *MessagePersonalRepository { | ||
| 18 | + return &MessagePersonalRepository{ | ||
| 19 | + transactionContext: tx, | ||
| 20 | + } | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +func (repo *MessagePersonalRepository) TransformToDomain(param *models.MessagePersonal) *domain.MessagePersonal { | ||
| 24 | + return &domain.MessagePersonal{ | ||
| 25 | + Id: param.Id, | ||
| 26 | + Types: domain.MessageTypes(param.Types), | ||
| 27 | + TargetUserId: param.TargetUserId, | ||
| 28 | + ReadFlag: domain.MessageReadFlag(param.ReadFlag), | ||
| 29 | + Title: param.Title, | ||
| 30 | + Content: param.Content, | ||
| 31 | + Payload: param.Payload, | ||
| 32 | + UpdatedAt: param.UpdatedAt, | ||
| 33 | + CreatedAt: param.CreatedAt, | ||
| 34 | + } | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +func (repo *MessagePersonalRepository) Save(param *domain.MessagePersonal) error { | ||
| 38 | + message := &models.MessagePersonal{ | ||
| 39 | + Id: param.Id, | ||
| 40 | + Types: string(param.Types), | ||
| 41 | + TargetUserId: param.TargetUserId, | ||
| 42 | + ReadFlag: string(param.ReadFlag), | ||
| 43 | + Title: param.Title, | ||
| 44 | + Content: param.Content, | ||
| 45 | + Payload: param.Payload, | ||
| 46 | + UpdatedAt: time.Now(), | ||
| 47 | + CreatedAt: param.CreatedAt, | ||
| 48 | + } | ||
| 49 | + tx := repo.transactionContext.PgTx | ||
| 50 | + if message.Id == 0 { | ||
| 51 | + message.CreatedAt = time.Now() | ||
| 52 | + _, err := tx.Model(message).Insert() | ||
| 53 | + | ||
| 54 | + return err | ||
| 55 | + } | ||
| 56 | + _, err := tx.Model(message).WherePK().Update() | ||
| 57 | + return err | ||
| 58 | +} | ||
| 59 | + | ||
| 60 | +func (repo *MessagePersonalRepository) Find(param map[string]interface{}) (int, []*domain.MessagePersonal, error) { | ||
| 61 | + tx := repo.transactionContext.PgTx | ||
| 62 | + var m []*models.MessagePersonal | ||
| 63 | + query := tx.Model(&m).Limit(20) | ||
| 64 | + if v, ok := param["targetUserId"]; ok { | ||
| 65 | + query.Where("target_user_id=?", v) | ||
| 66 | + } | ||
| 67 | + if v, ok := param["types"]; ok { | ||
| 68 | + query.Where("types=?", v) | ||
| 69 | + } | ||
| 70 | + if v, ok := param["payload"]; ok { | ||
| 71 | + query.Where("payload @>?", v) | ||
| 72 | + } | ||
| 73 | + query.Order("id desc") | ||
| 74 | + count, err := query.SelectAndCount() | ||
| 75 | + if err != nil { | ||
| 76 | + return 0, nil, err | ||
| 77 | + } | ||
| 78 | + var datas []*domain.MessagePersonal | ||
| 79 | + for _, v := range m { | ||
| 80 | + d := repo.TransformToDomain(v) | ||
| 81 | + datas = append(datas, d) | ||
| 82 | + } | ||
| 83 | + return count, datas, nil | ||
| 84 | + | ||
| 85 | +} |
| @@ -131,7 +131,7 @@ func (repo *NodeTaskRepository) Find(queryOptions map[string]interface{}) ([]*do | @@ -131,7 +131,7 @@ func (repo *NodeTaskRepository) Find(queryOptions map[string]interface{}) ([]*do | ||
| 131 | var m []*models.NodeTask | 131 | var m []*models.NodeTask |
| 132 | query := tx.Model(&m).Where("deleted_at isnull") | 132 | query := tx.Model(&m).Where("deleted_at isnull") |
| 133 | 133 | ||
| 134 | - if v, ok := queryOptions["now"].(time.Time); ok { | 134 | + if v, ok := queryOptions["lessNextSentAt"].(time.Time); ok { |
| 135 | query.Where("next_sent_at <= ?", v) | 135 | query.Where("next_sent_at <= ?", v) |
| 136 | } | 136 | } |
| 137 | 137 |
| @@ -30,6 +30,7 @@ func (repo *SummaryEvaluationValueRepository) TransformToDomain(d *models.Summar | @@ -30,6 +30,7 @@ func (repo *SummaryEvaluationValueRepository) TransformToDomain(d *models.Summar | ||
| 30 | Score: d.Score, | 30 | Score: d.Score, |
| 31 | Types: domain.EvaluationType(d.Types), | 31 | Types: domain.EvaluationType(d.Types), |
| 32 | Remark: d.Remark, | 32 | Remark: d.Remark, |
| 33 | + Executor: d.Executor, | ||
| 33 | Weight: d.Weight, | 34 | Weight: d.Weight, |
| 34 | Rating: d.Rating, | 35 | Rating: d.Rating, |
| 35 | CreatedAt: d.CreatedAt, | 36 | CreatedAt: d.CreatedAt, |
| @@ -45,6 +46,7 @@ func (repo *SummaryEvaluationValueRepository) Save(param *domain.SummaryEvaluati | @@ -45,6 +46,7 @@ func (repo *SummaryEvaluationValueRepository) Save(param *domain.SummaryEvaluati | ||
| 45 | Value: param.Value, | 46 | Value: param.Value, |
| 46 | Score: param.Score, | 47 | Score: param.Score, |
| 47 | Types: int(param.Types), | 48 | Types: int(param.Types), |
| 49 | + Executor: param.Executor, | ||
| 48 | Weight: param.Weight, | 50 | Weight: param.Weight, |
| 49 | Rating: param.Rating, | 51 | Rating: param.Rating, |
| 50 | Remark: param.Remark, | 52 | Remark: param.Remark, |
| @@ -118,7 +120,7 @@ func (repo *SummaryEvaluationValueRepository) Find(queryOptions map[string]inter | @@ -118,7 +120,7 @@ func (repo *SummaryEvaluationValueRepository) Find(queryOptions map[string]inter | ||
| 118 | if v, ok := queryOptions["types"]; ok { | 120 | if v, ok := queryOptions["types"]; ok { |
| 119 | query.Where("types=?", v) | 121 | query.Where("types=?", v) |
| 120 | } | 122 | } |
| 121 | - | 123 | + query.Order("evaluation_item_id") |
| 122 | count, err := query.SelectAndCount() | 124 | count, err := query.SelectAndCount() |
| 123 | if err != nil { | 125 | if err != nil { |
| 124 | return 0, nil, err | 126 | return 0, nil, err |
| @@ -10,8 +10,8 @@ type LockSummaryEvaluation struct { | @@ -10,8 +10,8 @@ type LockSummaryEvaluation struct { | ||
| 10 | m *redsync.Mutex | 10 | m *redsync.Mutex |
| 11 | } | 11 | } |
| 12 | 12 | ||
| 13 | -func NewLockSummaryEvaluation(id int) *LockSummaryEvaluation { | ||
| 14 | - key := fmt.Sprintf("performance:summary_evaluation:%d", id) | 13 | +func NewLockSummaryEvaluation(targetUserId int) *LockSummaryEvaluation { |
| 14 | + key := fmt.Sprintf("performance:summary_evaluation:%d", targetUserId) | ||
| 15 | 15 | ||
| 16 | return &LockSummaryEvaluation{ | 16 | return &LockSummaryEvaluation{ |
| 17 | m: rsync.NewMutex(key), | 17 | m: rsync.NewMutex(key), |
| @@ -20,14 +20,19 @@ func (controller *AuthController) Login() { | @@ -20,14 +20,19 @@ func (controller *AuthController) Login() { | ||
| 20 | controller.Response(resp, err) | 20 | controller.Response(resp, err) |
| 21 | } | 21 | } |
| 22 | 22 | ||
| 23 | +// 获取个人信息 | ||
| 23 | func (controller *AuthController) User() { | 24 | func (controller *AuthController) User() { |
| 24 | userAuth := controller.Ctx.Input.GetData(domain.UserAuth{}).(*domain.UserAuth) | 25 | userAuth := controller.Ctx.Input.GetData(domain.UserAuth{}).(*domain.UserAuth) |
| 25 | - controller.Response(map[string]interface{}{ | ||
| 26 | - "user": userAuth, | ||
| 27 | - }, nil) | 26 | + authService := &service.AuthService{} |
| 27 | + param := &command.GetMeInfo{ | ||
| 28 | + UserId: userAuth.UserId, | ||
| 29 | + CompanyId: userAuth.CompanyId, | ||
| 30 | + } | ||
| 31 | + resp, err := authService.MeInfo(param) | ||
| 32 | + controller.Response(resp, err) | ||
| 28 | } | 33 | } |
| 29 | 34 | ||
| 30 | -// Login PC端登录 | 35 | +// Login 手机端登录 |
| 31 | func (controller *AuthController) MobileLogin() { | 36 | func (controller *AuthController) MobileLogin() { |
| 32 | authService := &service.AuthService{} | 37 | authService := &service.AuthService{} |
| 33 | loginCommand := &command.MobileLoginCommand{} | 38 | loginCommand := &command.MobileLoginCommand{} |
| 1 | +package controllers | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/linmadan/egglib-go/web/beego" | ||
| 5 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/notify/command" | ||
| 6 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/notify/service" | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/port/beego/middlewares" | ||
| 8 | +) | ||
| 9 | + | ||
| 10 | +// 获取个人的消息提示 | ||
| 11 | +type MessagePersonalController struct { | ||
| 12 | + beego.BaseController | ||
| 13 | +} | ||
| 14 | + | ||
| 15 | +// 周期综合自评是否开启,是否提示 | ||
| 16 | +func (c *MessagePersonalController) TodayMessageSummaryEvaluation() { | ||
| 17 | + srv := service.NewMessagePersonalService() | ||
| 18 | + userReq := middlewares.GetUser(c.Ctx) | ||
| 19 | + param := command.GetUserMessageCommand{} | ||
| 20 | + param.UserId = int(userReq.UserId) | ||
| 21 | + data, err := srv.TodayMessageSummaryEvaluationSelf(¶m) | ||
| 22 | + c.Response(data, err) | ||
| 23 | +} |
| @@ -288,8 +288,8 @@ func (c *SummaryEvaluationController) ListExecutorEvaluationSuper() { | @@ -288,8 +288,8 @@ func (c *SummaryEvaluationController) ListExecutorEvaluationSuper() { | ||
| 288 | c.Response(data, err) | 288 | c.Response(data, err) |
| 289 | } | 289 | } |
| 290 | 290 | ||
| 291 | -// 员工确认评估分数 | ||
| 292 | -func (c *SummaryEvaluationController) ConfirmScoreSuperEvaluation() { | 291 | +// ConfirmScoreEvaluation 员工确认评估分数 |
| 292 | +func (c *SummaryEvaluationController) ConfirmScoreEvaluation() { | ||
| 293 | srv := service.NewSummaryEvaluationService() | 293 | srv := service.NewSummaryEvaluationService() |
| 294 | param := &command.ConfirmScore{} | 294 | param := &command.ConfirmScore{} |
| 295 | err := c.BindJSON(param) | 295 | err := c.BindJSON(param) |
| @@ -300,12 +300,12 @@ func (c *SummaryEvaluationController) ConfirmScoreSuperEvaluation() { | @@ -300,12 +300,12 @@ func (c *SummaryEvaluationController) ConfirmScoreSuperEvaluation() { | ||
| 300 | } | 300 | } |
| 301 | userReq := middlewares.GetUser(c.Ctx) | 301 | userReq := middlewares.GetUser(c.Ctx) |
| 302 | param.UserId = int(userReq.UserId) | 302 | param.UserId = int(userReq.UserId) |
| 303 | - err = srv.ConfirmScoreSuperEvaluation(param) | 303 | + err = srv.ConfirmScoreEvaluation(param) |
| 304 | c.Response(nil, err) | 304 | c.Response(nil, err) |
| 305 | } | 305 | } |
| 306 | 306 | ||
| 307 | -// GetTargetUserEvaluationSuper 根据被评估人和周期获取 上级评估 | ||
| 308 | -func (c *SummaryEvaluationController) GetTargetUserEvaluationSuper() { | 307 | +// GetTargetEvaluationResult 按照周期和被评估的人 获取考核结果 |
| 308 | +func (c *SummaryEvaluationController) GetTargetEvaluationResult() { | ||
| 309 | srv := service.NewSummaryEvaluationService() | 309 | srv := service.NewSummaryEvaluationService() |
| 310 | paramReq := &command.QueryEvaluation{} | 310 | paramReq := &command.QueryEvaluation{} |
| 311 | err := c.BindJSON(paramReq) | 311 | err := c.BindJSON(paramReq) |
| @@ -316,12 +316,12 @@ func (c *SummaryEvaluationController) GetTargetUserEvaluationSuper() { | @@ -316,12 +316,12 @@ func (c *SummaryEvaluationController) GetTargetUserEvaluationSuper() { | ||
| 316 | } | 316 | } |
| 317 | userReq := middlewares.GetUser(c.Ctx) | 317 | userReq := middlewares.GetUser(c.Ctx) |
| 318 | paramReq.CompanyId = int(userReq.CompanyId) | 318 | paramReq.CompanyId = int(userReq.CompanyId) |
| 319 | - data, err := srv.GetTargetUserEvaluationSuper(paramReq) | 319 | + data, err := srv.GetTargetEvaluationResult(paramReq) |
| 320 | c.Response(data, err) | 320 | c.Response(data, err) |
| 321 | } | 321 | } |
| 322 | 322 | ||
| 323 | // 按周期获取上级评估列表 | 323 | // 按周期获取上级评估列表 |
| 324 | -func (c *SummaryEvaluationController) ListAllEvaluationSuper() { | 324 | +func (c *SummaryEvaluationController) ListAllEvaluationFinish() { |
| 325 | srv := service.NewSummaryEvaluationService() | 325 | srv := service.NewSummaryEvaluationService() |
| 326 | param := &command.QueryEvaluationList{} | 326 | param := &command.QueryEvaluationList{} |
| 327 | err := c.BindJSON(param) | 327 | err := c.BindJSON(param) |
| @@ -333,12 +333,12 @@ func (c *SummaryEvaluationController) ListAllEvaluationSuper() { | @@ -333,12 +333,12 @@ func (c *SummaryEvaluationController) ListAllEvaluationSuper() { | ||
| 333 | userReq := middlewares.GetUser(c.Ctx) | 333 | userReq := middlewares.GetUser(c.Ctx) |
| 334 | param.CompanyId = int(userReq.CompanyId) | 334 | param.CompanyId = int(userReq.CompanyId) |
| 335 | param.UserId = int(userReq.UserId) | 335 | param.UserId = int(userReq.UserId) |
| 336 | - data, err := srv.ListAllEvaluationSuper(param) | 336 | + data, err := srv.ListAllEvaluationFinish(param) |
| 337 | c.Response(data, err) | 337 | c.Response(data, err) |
| 338 | } | 338 | } |
| 339 | 339 | ||
| 340 | // 按周期 导出上级评估列表 | 340 | // 按周期 导出上级评估列表 |
| 341 | -func (c *SummaryEvaluationController) ExportAllEvaluationSuper() { | 341 | +func (c *SummaryEvaluationController) ExportAllEvaluationFinish() { |
| 342 | srv := service.NewSummaryEvaluationService() | 342 | srv := service.NewSummaryEvaluationService() |
| 343 | param := &command.QueryEvaluationList{} | 343 | param := &command.QueryEvaluationList{} |
| 344 | err := c.BindJSON(param) | 344 | err := c.BindJSON(param) |
| @@ -350,7 +350,7 @@ func (c *SummaryEvaluationController) ExportAllEvaluationSuper() { | @@ -350,7 +350,7 @@ func (c *SummaryEvaluationController) ExportAllEvaluationSuper() { | ||
| 350 | userReq := middlewares.GetUser(c.Ctx) | 350 | userReq := middlewares.GetUser(c.Ctx) |
| 351 | param.UserId = int(userReq.UserId) | 351 | param.UserId = int(userReq.UserId) |
| 352 | param.CompanyId = int(userReq.CompanyId) | 352 | param.CompanyId = int(userReq.CompanyId) |
| 353 | - data, err := srv.ExportAllEvaluationSuper(param) | 353 | + data, err := srv.ExportAllEvaluationFinish(param) |
| 354 | if err != nil { | 354 | if err != nil { |
| 355 | c.Response(nil, err) | 355 | c.Response(nil, err) |
| 356 | return | 356 | return |
| 1 | +package routers | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/beego/beego/v2/server/web" | ||
| 5 | + "github.com/linmadan/egglib-go/web/beego/filters" | ||
| 6 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/port/beego/controllers" | ||
| 7 | + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/port/beego/middlewares" | ||
| 8 | +) | ||
| 9 | + | ||
| 10 | +func init() { | ||
| 11 | + ns := web.NewNamespace("/v1/message-personal", | ||
| 12 | + web.NSBefore(filters.AllowCors(), middlewares.CheckFontToken()), | ||
| 13 | + web.NSCtrlGet("/summary-evaluation/self/today", (*controllers.MessagePersonalController).TodayMessageSummaryEvaluation), | ||
| 14 | + ) | ||
| 15 | + web.AddNamespace(ns) | ||
| 16 | +} |
| @@ -27,10 +27,13 @@ func init() { | @@ -27,10 +27,13 @@ func init() { | ||
| 27 | web.NSCtrlPost("/evaluation-super", (*controllers.SummaryEvaluationController).GetEvaluationSuper), | 27 | web.NSCtrlPost("/evaluation-super", (*controllers.SummaryEvaluationController).GetEvaluationSuper), |
| 28 | web.NSCtrlPost("/evaluation-super/edit", (*controllers.SummaryEvaluationController).EditEvaluationSuper), | 28 | web.NSCtrlPost("/evaluation-super/edit", (*controllers.SummaryEvaluationController).EditEvaluationSuper), |
| 29 | web.NSCtrlPost("/evaluation-super/list", (*controllers.SummaryEvaluationController).ListExecutorEvaluationSuper), | 29 | web.NSCtrlPost("/evaluation-super/list", (*controllers.SummaryEvaluationController).ListExecutorEvaluationSuper), |
| 30 | - web.NSCtrlPost("/evaluation-super/confirm", (*controllers.SummaryEvaluationController).ConfirmScoreSuperEvaluation), | ||
| 31 | - web.NSCtrlPost("/target_user/evaluation-super", (*controllers.SummaryEvaluationController).GetTargetUserEvaluationSuper), | ||
| 32 | - web.NSCtrlPost("/evaluation-super/all", (*controllers.SummaryEvaluationController).ListAllEvaluationSuper), | ||
| 33 | - web.NSCtrlPost("/evaluation-super/all/export", (*controllers.SummaryEvaluationController).ExportAllEvaluationSuper), | 30 | + web.NSCtrlPost("/evaluation-super/confirm", (*controllers.SummaryEvaluationController).ConfirmScoreEvaluation), |
| 31 | + web.NSCtrlPost("/evaluation-result", (*controllers.SummaryEvaluationController).GetTargetEvaluationResult), | ||
| 32 | + //web.NSCtrlPost("/target_user/evaluation-super", (*controllers.SummaryEvaluationController).GetTargetEvaluationResult), | ||
| 33 | + // web.NSCtrlPost("/evaluation-super/all", (*controllers.SummaryEvaluationController).ListAllEvaluationSuper), | ||
| 34 | + web.NSCtrlPost("/evaluation-finish/all", (*controllers.SummaryEvaluationController).ListAllEvaluationFinish), | ||
| 35 | + // web.NSCtrlPost("/evaluation-super/all/export", (*controllers.SummaryEvaluationController).ExportAllEvaluationSuper), | ||
| 36 | + web.NSCtrlPost("/evaluation-finish/all/export", (*controllers.SummaryEvaluationController).ExportAllEvaluationFinish), | ||
| 34 | web.NSCtrlGet("/evaluation-self/now", (*controllers.SummaryEvaluationController).ListExecutorEvaluationSelf), | 37 | web.NSCtrlGet("/evaluation-self/now", (*controllers.SummaryEvaluationController).ListExecutorEvaluationSelf), |
| 35 | // | 38 | // |
| 36 | ) | 39 | ) |
sql/2023-03-24.sql
0 → 100644
| 1 | +-- summary_evaluation_value表添加字段 | ||
| 2 | +ALTER TABLE public.summary_evaluation_value | ||
| 3 | + ADD executor jsonb NULL; | ||
| 4 | + | ||
| 5 | +-- 初始化旧数据的summary_evaluation_value.executor | ||
| 6 | +UPDATE | ||
| 7 | + public.summary_evaluation_value | ||
| 8 | +SET | ||
| 9 | + executor = public.summary_evaluation.executor | ||
| 10 | +FROM | ||
| 11 | + public.summary_evaluation | ||
| 12 | +WHERE | ||
| 13 | + public.summary_evaluation_value.summary_evaluation_id = public.summary_evaluation.id; | ||
| 14 | + |
不能预览此文件类型
-
请 注册 或 登录 后发表评论