作者 tangxvhui

调整逻辑,编辑上级综评后同步考核结果

  1 +package service
  2 +
  3 +import (
  4 + "time"
  5 +
  6 + "github.com/linmadan/egglib-go/core/application"
  7 + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory"
  8 + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/notify"
  9 + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/summary_evaluation/adapter"
  10 + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/summary_evaluation/command"
  11 + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain"
  12 + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/infrastructure/xredis"
  13 + "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/log"
  14 +)
  15 +
  16 +//编辑上级周期评估
  17 +
  18 +// EditEvaluationSuper 更新上级评估内容
  19 +func (srv *SummaryEvaluationService) EditEvaluationSuper(param *command.EditEvaluationValue) (interface{}, error) {
  20 + // lock := xredis.NewLockSummaryEvaluationId(param.SummaryEvaluationId)
  21 + // err := lock.Lock()
  22 + // if err != nil {
  23 + // return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "未能完全提交评估内容")
  24 + // }
  25 + // defer func() {
  26 + // lock.UnLock()
  27 + // }()
  28 + transactionContext, err := factory.CreateTransactionContext(nil)
  29 + if err != nil {
  30 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  31 + }
  32 + if err := transactionContext.StartTransaction(); err != nil {
  33 + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  34 + }
  35 + defer func() {
  36 + _ = transactionContext.RollbackTransaction()
  37 + }()
  38 + evaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{
  39 + "transactionContext": transactionContext,
  40 + })
  41 + itemUsedRepo := factory.CreateEvaluationItemUsedRepository(map[string]interface{}{
  42 + "transactionContext": transactionContext,
  43 + })
  44 +
  45 + itemValueRepo := factory.CreateSummaryEvaluationValueRepository(map[string]interface{}{
  46 + "transactionContext": transactionContext,
  47 + })
  48 + evaluationData, err := evaluationRepo.FindOne(map[string]interface{}{
  49 + "id": param.SummaryEvaluationId,
  50 + })
  51 + if err != nil {
  52 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  53 + }
  54 + if evaluationData.Types != domain.EvaluationSuper {
  55 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "没有操作权限")
  56 + }
  57 +
  58 + if evaluationData.Executor.UserId != param.ExecutorId {
  59 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "没有操作权限")
  60 + }
  61 +
  62 + if evaluationData.CompanyId != param.CompanyId {
  63 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "没有操作权限")
  64 + }
  65 + //按照被评估人id ,加锁
  66 + lock := xredis.NewLockSummaryEvaluation(evaluationData.TargetUser.UserId)
  67 + err = lock.Lock()
  68 + if err != nil {
  69 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "未能完全提交评估内容")
  70 + }
  71 + defer func() {
  72 + lock.UnLock()
  73 + }()
  74 + _, evaluationList, err := evaluationRepo.Find(map[string]interface{}{
  75 + "targetUserId": evaluationData.TargetUser.UserId,
  76 + "typesList": []int{int(domain.EvaluationFinish)},
  77 + "cycleId": evaluationData.CycleId,
  78 + "limit": 1,
  79 + })
  80 + if err != nil {
  81 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  82 + }
  83 + // 如果目标员工已经确认考核结果,就不能在进行评估编辑
  84 + if len(evaluationList) > 0 && evaluationList[0].CheckResult == domain.EvaluationCheckCompleted {
  85 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "用户已经确认该周期的考核结果,不能再编辑!")
  86 + }
  87 +
  88 + _, itemList, err := itemUsedRepo.Find(map[string]interface{}{
  89 + "evaluationProjectId": evaluationData.EvaluationProjectId,
  90 + "nodeType": domain.LinkNodeSelfAssessment,
  91 + })
  92 + if err != nil {
  93 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  94 + }
  95 + //获取已填写的评估内容
  96 + _, itemValueList, err := itemValueRepo.Find(map[string]interface{}{
  97 + "summaryEvaluationId": evaluationData.Id,
  98 + })
  99 + if err != nil {
  100 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  101 + }
  102 + //记录人资评估或者360评估的 填写项id
  103 + hrbpOr360ItemValue, err := srv.getEvaluationSuperDefaultValue(transactionContext, evaluationData)
  104 + if err != nil {
  105 + return nil, err
  106 + }
  107 +
  108 + err = srv.editEvaluationValue(evaluationData, &itemValueList, itemList, param.EvaluationItems, hrbpOr360ItemValue, param.IsTemporary)
  109 + if err != nil {
  110 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  111 + }
  112 + if !param.IsTemporary {
  113 + //变更评估状态为已填写
  114 + evaluationData.Status = domain.EvaluationCompleted
  115 + }
  116 + for _, v := range itemValueList {
  117 + //保存填写值
  118 + err = itemValueRepo.Save(v)
  119 + if err != nil {
  120 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  121 + }
  122 + }
  123 + //保存填写值
  124 + err = evaluationRepo.Save(evaluationData)
  125 + if err != nil {
  126 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  127 + }
  128 + if err := transactionContext.CommitTransaction(); err != nil {
  129 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  130 + }
  131 +
  132 + if !param.IsTemporary {
  133 + err = srv.AfterCompletedEvaluationSuper(transactionContext, evaluationData, itemValueList)
  134 + if err != nil {
  135 + return nil, err
  136 + }
  137 + }
  138 +
  139 + itemValueAdapter := srv.buildSummaryItemValue(itemList, itemValueList)
  140 + return map[string][]adapter.EvaluationItemAdapter{
  141 + "EvaluationItems": itemValueAdapter,
  142 + }, nil
  143 +}
  144 +
  145 +// 员工提交上级评估后
  146 +// 生成考核结果
  147 +func (srv *SummaryEvaluationService) AfterCompletedEvaluationSuper(
  148 + transactionContext application.TransactionContext,
  149 + evaluationData *domain.SummaryEvaluation,
  150 + evaluationValue []*domain.SummaryEvaluationValue,
  151 +) error {
  152 + evaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{
  153 + "transactionContext": transactionContext,
  154 + })
  155 + //没有上级评估
  156 + //直接进入考核结果阶段
  157 + _, evaluationList, err := evaluationRepo.Find(map[string]interface{}{
  158 + "targetUserId": evaluationData.TargetUser.UserId,
  159 + "typesList": []int{int(domain.EvaluationFinish)},
  160 + "cycleId": evaluationData.CycleId,
  161 + "limit": 1,
  162 + })
  163 + if err != nil {
  164 + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  165 + }
  166 +
  167 + if len(evaluationList) > 0 {
  168 + //调整考核结果的开始时间
  169 + nowTime := time.Now()
  170 + if evaluationList[0].BeginTime.After(nowTime) {
  171 + evaluationList[0].BeginTime = nowTime
  172 + }
  173 + evaluationList[0].Status = domain.EvaluationCompleted
  174 + err = srv.syncEvaluationFinishValue(transactionContext, evaluationList[0], evaluationValue)
  175 + if err != nil {
  176 + return err
  177 + }
  178 + //添加确认绩效成绩提醒短信提醒
  179 + err = notify.AddNotifyConfirmEvaluationScore(evaluationList[0])
  180 + if err != nil {
  181 + log.Logger.Error("添加确认绩效成绩提醒短信提醒失败:" + err.Error())
  182 + }
  183 + }
  184 + return nil
  185 +}
  186 +
  187 +// 从其他评估那边同步考核结果的评估内容
  188 +// evaluationData 考核结果评估
  189 +// updateValue 更新评估项需要的值
  190 +func (srv *SummaryEvaluationService) syncEvaluationFinishValue(
  191 + transactionContext application.TransactionContext,
  192 + evaluationData *domain.SummaryEvaluation,
  193 + updateValue []*domain.SummaryEvaluationValue,
  194 +) error {
  195 + if len(updateValue) == 0 {
  196 + return nil
  197 + }
  198 + evaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{
  199 + "transactionContext": transactionContext,
  200 + })
  201 + evaluationValueRepo := factory.CreateSummaryEvaluationValueRepository(map[string]interface{}{
  202 + "transactionContext": transactionContext,
  203 + })
  204 + itemUsedRepo := factory.CreateEvaluationItemUsedRepository(map[string]interface{}{
  205 + "transactionContext": transactionContext,
  206 + })
  207 + _, itemList, err := itemUsedRepo.Find(map[string]interface{}{
  208 + "evaluationProjectId": evaluationData.EvaluationProjectId,
  209 + "nodeType": domain.LinkNodeSelfAssessment,
  210 + })
  211 + if err != nil {
  212 + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  213 + }
  214 +
  215 + //填写项的map EvaluationItemId =>SummaryEvaluationValue
  216 + oldEvaluationValue := map[int]*domain.SummaryEvaluationValue{}
  217 + //查询已有的考核结果评估内容
  218 + _, evaluationValueList, err := evaluationValueRepo.Find(map[string]interface{}{"summaryEvaluationId": evaluationData.Id})
  219 + if err != nil {
  220 + return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  221 + }
  222 + for i, val := range evaluationValueList {
  223 + oldEvaluationValue[val.EvaluationItemId] = evaluationValueList[i]
  224 + }
  225 + // 待更新的评估填写项map EvaluationItemId =>SummaryEvaluationValue
  226 + updateValueMap := map[int]*domain.SummaryEvaluationValue{}
  227 + for i, val := range updateValue {
  228 + updateValueMap[val.EvaluationItemId] = updateValue[i]
  229 + }
  230 +
  231 + //更新考核结果
  232 + for _, val := range itemList {
  233 + oldValue, ok := oldEvaluationValue[val.Id]
  234 + if !ok {
  235 + //补全考核结果中可能缺失的评估项
  236 + newValue := &domain.SummaryEvaluationValue{}
  237 + newValue.SetBlankValue(evaluationData, val)
  238 + oldEvaluationValue[val.Id] = newValue
  239 + oldValue = oldEvaluationValue[val.Id]
  240 + }
  241 + if item, ok := updateValueMap[val.Id]; ok {
  242 + oldValue.Executor = item.Executor
  243 + oldValue.Types = item.Types
  244 + oldValue.Rating = item.Rating
  245 + oldValue.Value = item.Value
  246 + oldValue.Score = item.Score
  247 + oldValue.Remark = item.Remark
  248 + }
  249 + }
  250 + evaluationData.TotalRating = nil
  251 + for i := range itemList {
  252 + evaluationData.ResetTotalRating(itemList[i])
  253 + }
  254 +
  255 + newEvaluationValue := []*domain.SummaryEvaluationValue{}
  256 + for _, val := range oldEvaluationValue {
  257 + newEvaluationValue = append(newEvaluationValue, val)
  258 + }
  259 +
  260 + evaluationData.EvaluationTotalScore(newEvaluationValue)
  261 +
  262 + err = evaluationRepo.Save(evaluationData)
  263 + if err != nil {
  264 + return application.ThrowError(application.INTERNAL_SERVER_ERROR, "同步考核结果"+err.Error())
  265 + }
  266 + err = evaluationValueRepo.RemoveBySummaryEvaluationId(evaluationData.Id)
  267 + if err != nil {
  268 + return application.ThrowError(application.INTERNAL_SERVER_ERROR, "同步考核结果"+err.Error())
  269 + }
  270 + for _, val := range newEvaluationValue {
  271 + val.Id = 0
  272 + err = evaluationValueRepo.Save(val)
  273 + if err != nil {
  274 + return application.ThrowError(application.INTERNAL_SERVER_ERROR, "同步考核结果"+err.Error())
  275 + }
  276 + }
  277 + return nil
  278 +
  279 +}
1 -package service  
2 -  
3 -// sendSummaryEvaluafionTask 根据评估项目设置,确认是否下发评估任务  
4 -// project 需要处理的项目  
5 -// userList 全体的员工数据 map[id]=>domain.User  
6 -// departmetList 全部的部门数据 map[id]=>domain.Department  
7 -// func sendSummaryEvaluation(project *domain.EvaluationProject,  
8 -// userMap map[int64]*domain.User, departmentMap map[int64]*domain.Department) ([]domain.SummaryEvaluation, error) {  
9 -// //自评的时间范围  
10 -// beginTimeSelf := project.EndTime  
11 -// endTimeSelf := dayZeroTime(project.EndTime).Add(4*24*time.Hour - time.Second)  
12 -// //人资、360评估的时间范围  
13 -// beginTime360 := endTimeSelf  
14 -// endTime360 := endTimeSelf.Add(2 * 24 * time.Hour)  
15 -// //上级评估的是时间范围  
16 -// beginTimeSuper := endTime360  
17 -// endTimeSuper := endTime360.Add(2 * 24 * time.Hour)  
18 -// //  
19 -// transactionContext, err := factory.CreateTransactionContext(nil)  
20 -// if err != nil {  
21 -// return nil, err  
22 -// }  
23 -// if err := transactionContext.StartTransaction(); err != nil {  
24 -// return nil, err  
25 -// }  
26 -// defer func() {  
27 -// _ = transactionContext.RollbackTransaction()  
28 -// }()  
29 -// cycleRepo := factory.CreateEvaluationCycleRepository(map[string]interface{}{"transactionContext": transactionContext})  
30 -  
31 -// evaluationItemRepo := factory.CreateEvaluationItemUsedRepository(map[string]interface{}{"transactionContext": transactionContext})  
32 -  
33 -// cycleData, err := cycleRepo.FindOne(map[string]interface{}{"id": project.CycleId})  
34 -// if err != nil {  
35 -// return nil, err  
36 -// }  
37 -// //确定 被评估的人  
38 -// targetUserId := []int64{}  
39 -// for _, v := range project.Recipients {  
40 -// id, err := strconv.ParseInt(v, 10, 64)  
41 -// if err == nil {  
42 -// targetUserId = append(targetUserId, id)  
43 -// }  
44 -// }  
45 -// if len(targetUserId) == 0 {  
46 -// return nil, nil  
47 -// }  
48 -// //被评估的员工  
49 -// targetUserMap := map[int64]*domain.User{}  
50 -  
51 -// for _, v := range targetUserId {  
52 -// u, ok := userMap[v]  
53 -// if ok {  
54 -// targetUserMap[v] = u  
55 -// }  
56 -// }  
57 -// //确定360评估的执行人  
58 -// _, itemList, err := evaluationItemRepo.Find(map[string]interface{}{"evaluationProjectId": project.Id, "nodeType": int(domain.LinkNodeSelfAssessment)})  
59 -// if err != nil {  
60 -// return nil, err  
61 -// }  
62 -// nodeId := 0  
63 -// executor360Map := map[int64]*domain.User{}  
64 -// hrbpExist := false  
65 -// for _, v := range itemList {  
66 -// nodeId = v.NodeId  
67 -// if v.EvaluatorId < 0 {  
68 -// hrbpExist = true  
69 -// }  
70 -// if v.EvaluatorId <= 0 {  
71 -// continue  
72 -// }  
73 -// if u, ok := userMap[int64(v.EvaluatorId)]; ok {  
74 -// executor360Map[u.Id] = u  
75 -// }  
76 -// }  
77 -// //创建周期评估任务  
78 -// var newEvaluationList []domain.SummaryEvaluation  
79 -// evaluationTemp := domain.SummaryEvaluation{  
80 -// Id: 0,  
81 -// CompanyId: int(project.CompanyId),  
82 -// EvaluationProjectId: int(project.Id),  
83 -// EvaluationProjectName: project.Name,  
84 -// CycleId: cycleData.Id,  
85 -// CycleName: cycleData.Name,  
86 -// NodeId: nodeId,  
87 -// TargetUser: domain.StaffDesc{},  
88 -// TargetDepartment: []domain.StaffDepartment{},  
89 -// Executor: domain.StaffDesc{},  
90 -// Types: 0,  
91 -// Status: domain.EvaluationUncompleted,  
92 -// CheckResult: domain.EvaluationCheckUncompleted,  
93 -// BeginTime: time.Time{},  
94 -// EndTime: time.Time{},  
95 -// TotalScore: "",  
96 -// CreatedAt: time.Now(),  
97 -// UpdatedAt: time.Now(),  
98 -// DeletedAt: nil,  
99 -// }  
100 -  
101 -// //确定周期评估  
102 -  
103 -// for _, v := range targetUserMap {  
104 -// //处理自评  
105 -// evaluationTemp.TargetUser = domain.StaffDesc{  
106 -// UserId: int(v.Id),  
107 -// Account: v.Account,  
108 -// UserName: v.Name,  
109 -// }  
110 -// evaluationTemp.Executor = domain.StaffDesc{  
111 -// UserId: int(v.Id),  
112 -// Account: v.Account,  
113 -// UserName: v.Name,  
114 -// }  
115 -// evaluationTemp.BeginTime = beginTimeSelf  
116 -// evaluationTemp.EndTime = endTimeSelf  
117 -// evaluationTemp.TargetDepartment = []domain.StaffDepartment{}  
118 -// evaluationTemp.Types = domain.EvaluationSelf  
119 -// for _, departId := range v.DepartmentId {  
120 -// depart, ok := departmentMap[int64(departId)]  
121 -// if !ok {  
122 -// continue  
123 -// }  
124 -// evaluationTemp.TargetDepartment = append(evaluationTemp.TargetDepartment, domain.StaffDepartment{  
125 -// DepartmentId: int(depart.Id),  
126 -// DepartmentName: depart.Name,  
127 -// })  
128 -// }  
129 -// newEvaluationList = append(newEvaluationList, evaluationTemp)  
130 -// if hrbpExist {  
131 -// //处理人资评估  
132 -// evaluationTemp.BeginTime = beginTime360  
133 -// evaluationTemp.EndTime = endTime360  
134 -// evaluationTemp.Executor = domain.StaffDesc{}  
135 -// evaluationTemp.Types = domain.EvaluationHrbp  
136 -// newEvaluationList = append(newEvaluationList, evaluationTemp)  
137 -// }  
138 -// //处理360 评估  
139 -// for _, v2 := range executor360Map {  
140 -// evaluationTemp.BeginTime = beginTime360  
141 -// evaluationTemp.EndTime = endTime360  
142 -// evaluationTemp.Executor = domain.StaffDesc{  
143 -// UserId: int(v2.Id),  
144 -// Account: v2.Account,  
145 -// UserName: v2.Name,  
146 -// }  
147 -// evaluationTemp.Types = domain.Evaluation360  
148 -// newEvaluationList = append(newEvaluationList, evaluationTemp)  
149 -// }  
150 -  
151 -// //处理上级评估  
152 -// superUser, ok := userMap[v.ParentId]  
153 -// if ok {  
154 -// evaluationTemp.Types = domain.EvaluationSuper  
155 -// evaluationTemp.Executor = domain.StaffDesc{  
156 -// UserId: int(superUser.Id),  
157 -// Account: superUser.Account,  
158 -// UserName: superUser.Name,  
159 -// }  
160 -// evaluationTemp.BeginTime = beginTimeSuper  
161 -// evaluationTemp.EndTime = endTimeSuper  
162 -// //确定上级评估  
163 -// newEvaluationList = append(newEvaluationList, evaluationTemp)  
164 -// }  
165 -// // 确定 考核结果 的评估记录  
166 -// evaluationTemp.Types = domain.EvaluationFinish  
167 -// evaluationTemp.Executor = domain.StaffDesc{}  
168 -// evaluationTemp.BeginTime = endTimeSuper  
169 -// evaluationTemp.EndTime = endTimeSuper.Add(2 * 24 * time.Hour)  
170 -// newEvaluationList = append(newEvaluationList, evaluationTemp)  
171 -// }  
172 -// summaryEvaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{"transactionContext": transactionContext})  
173 -// for i := range newEvaluationList {  
174 -// err = summaryEvaluationRepo.Save(&newEvaluationList[i])  
175 -// if err != nil {  
176 -// return nil, err  
177 -// }  
178 -// }  
179 -// //回填 项目的状态  
180 -// projectDao := dao.NewEvaluationProjectDao(map[string]interface{}{"transactionContext": transactionContext})  
181 -// err = projectDao.UpdateSummaryState(project.Id, domain.ProjectSummaryStateYes)  
182 -// if err != nil {  
183 -// return nil, err  
184 -// }  
185 -// if err := transactionContext.CommitTransaction(); err != nil {  
186 -// return nil, err  
187 -// }  
188 -// return newEvaluationList, nil  
189 -// }  
190 -  
191 -// func dayZeroTime(t time.Time) time.Time {  
192 -// y, m, d := t.Local().Date()  
193 -// t2 := time.Date(y, m, d, 0, 0, 0, 0, time.Local)  
194 -// return t2  
195 -// }  
196 -  
197 -// // 下发周期评估  
198 -// func TaskSendSummaryEvaluation() error {  
199 -// nowTime := time.Now()  
200 -// defer func() {  
201 -// str := fmt.Sprintf("下发周期评估耗时%.2f s", time.Since(nowTime).Seconds())  
202 -// log.Logger.Info(str)  
203 -// }()  
204 -// transactionContext, err := factory.CreateTransactionContext(nil)  
205 -// if err != nil {  
206 -// return err  
207 -// }  
208 -// if err := transactionContext.StartTransaction(); err != nil {  
209 -// return err  
210 -// }  
211 -// defer func() {  
212 -// _ = transactionContext.RollbackTransaction()  
213 -// }()  
214 -  
215 -// projectRepo := factory.CreateEvaluationProjectRepository(map[string]interface{}{  
216 -// "transactionContext": transactionContext,  
217 -// })  
218 -  
219 -// userRepo := factory.CreateUserRepository(map[string]interface{}{"transactionContext": transactionContext})  
220 -  
221 -// departmentRepo := factory.CreateDepartmentRepository(map[string]interface{}{"transactionContext": transactionContext})  
222 -  
223 -// _, projectList, err := projectRepo.Find(map[string]interface{}{  
224 -// "endTime": time.Now(),  
225 -// "summaryState": domain.ProjectSummaryStateNo,  
226 -// "state": domain.ProjectStateEnable,  
227 -// }, "template")  
228 -// if err != nil {  
229 -// return fmt.Errorf("获取可用的项目数据,%s", err)  
230 -// }  
231 -// companyIdMap := map[int64]struct{}{}  
232 -// for _, v := range projectList {  
233 -// companyIdMap[v.CompanyId] = struct{}{}  
234 -// }  
235 -  
236 -// var createdEvalationList []domain.SummaryEvaluation  
237 -  
238 -// //获取可执行的项目  
239 -// for companyId := range companyIdMap {  
240 -// //获取员工数据,部门数据  
241 -// _, userList, err := userRepo.Find(map[string]interface{}{"companyId": companyId})  
242 -// if err != nil {  
243 -// log.Logger.Error("TaskSendSummaryEvaluation 获取员工数据:" + err.Error())  
244 -// continue  
245 -// }  
246 -// _, departmentList, err := departmentRepo.Find(map[string]interface{}{"companyId": companyId})  
247 -// if err != nil {  
248 -// log.Logger.Error("TaskSendSummaryEvaluation 获取部门数据:" + err.Error())  
249 -// continue  
250 -// }  
251 -// //转map  
252 -// userMap := map[int64]*domain.User{}  
253 -// for _, v := range userList {  
254 -// userMap[v.Id] = v  
255 -// }  
256 -// departmentMap := map[int64]*domain.Department{}  
257 -// for _, v := range departmentList {  
258 -// departmentMap[v.Id] = v  
259 -// }  
260 -// for _, v := range projectList {  
261 -// if v.CompanyId != companyId {  
262 -// continue  
263 -// }  
264 -// evalationList, err := sendSummaryEvaluation(v, userMap, departmentMap)  
265 -// if err != nil {  
266 -// log.Logger.Error("TaskSendSummaryEvaluation 下发评估任务:" + err.Error())  
267 -// continue  
268 -// }  
269 -// createdEvalationList = append(createdEvalationList, evalationList...)  
270 -// }  
271 -// }  
272 -// if err := transactionContext.CommitTransaction(); err != nil {  
273 -// return err  
274 -// }  
275 -// //添加待发送的短信通知  
276 -// err = sendSmsEvalation(createdEvalationList)  
277 -// return err  
278 -// }  
@@ -786,68 +786,70 @@ func (srv *SummaryEvaluationService) AfterCompletedEvaluation360Hrbp(param *doma @@ -786,68 +786,70 @@ func (srv *SummaryEvaluationService) AfterCompletedEvaluation360Hrbp(param *doma
786 return nil 786 return nil
787 } 787 }
788 788
789 -// 员工提交上级评估后  
790 -// 生成考核结果  
791 -func (srv *SummaryEvaluationService) AfterCompletedEvaluationSuper(param *domain.SummaryEvaluation) error {  
792 - lock := xredis.NewLockSummaryEvaluation(param.TargetUser.UserId)  
793 - err := lock.Lock()  
794 - if err != nil {  
795 - return application.ThrowError(application.INTERNAL_SERVER_ERROR, "未能完全提交评估内容")  
796 - }  
797 - defer func() {  
798 - lock.UnLock()  
799 - }()  
800 - transactionContext, err := factory.CreateTransactionContext(nil)  
801 - if err != nil {  
802 - return application.ThrowError(application.TRANSACTION_ERROR, err.Error())  
803 - }  
804 - if err := transactionContext.StartTransaction(); err != nil {  
805 - return application.ThrowError(application.TRANSACTION_ERROR, err.Error())  
806 - }  
807 - defer func() {  
808 - _ = transactionContext.RollbackTransaction()  
809 - }()  
810 -  
811 - evaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{  
812 - "transactionContext": transactionContext,  
813 - })  
814 - //没有上级评估  
815 - //直接进入考核结果阶段  
816 - _, evaluationList, err := evaluationRepo.Find(map[string]interface{}{  
817 - "targetUserId": param.TargetUser.UserId,  
818 - "typesList": []int{int(domain.EvaluationFinish)},  
819 - "cycleId": param.CycleId,  
820 - "limit": 1,  
821 - })  
822 - if err != nil {  
823 - return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())  
824 - }  
825 -  
826 - if len(evaluationList) > 0 {  
827 - //上级评估的结束时间  
828 - // evaluationList[0].BeginTime = param.EndTime  
829 - nowTime := time.Now()  
830 - if evaluationList[0].BeginTime.After(nowTime) {  
831 - evaluationList[0].BeginTime = nowTime  
832 - }  
833 - evaluationList[0].Status = domain.EvaluationCompleted  
834 - err = evaluationRepo.Save(evaluationList[0])  
835 - if err != nil {  
836 - return application.ThrowError(application.INTERNAL_SERVER_ERROR, "保存考核结果,"+err.Error())  
837 - }  
838 - //添加确认绩效成绩提醒短信提醒  
839 - err = notify.AddNotifyConfirmEvaluationScore(evaluationList[0])  
840 - if err != nil {  
841 - return application.ThrowError(application.TRANSACTION_ERROR, "创建短信提醒失败"+err.Error())  
842 - }  
843 - }  
844 -  
845 - if err := transactionContext.CommitTransaction(); err != nil {  
846 - return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())  
847 - }  
848 -  
849 - return nil  
850 -} 789 +// // 员工提交上级评估后
  790 +// // 生成考核结果
  791 +// func (srv *SummaryEvaluationService) AfterCompletedEvaluationSuper(param *domain.SummaryEvaluation) error {
  792 +// lock := xredis.NewLockSummaryEvaluation(param.TargetUser.UserId)
  793 +// err := lock.Lock()
  794 +// if err != nil {
  795 +// return application.ThrowError(application.INTERNAL_SERVER_ERROR, "未能完全提交评估内容")
  796 +// }
  797 +// defer func() {
  798 +// lock.UnLock()
  799 +// }()
  800 +// transactionContext, err := factory.CreateTransactionContext(nil)
  801 +// if err != nil {
  802 +// return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  803 +// }
  804 +// if err := transactionContext.StartTransaction(); err != nil {
  805 +// return application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  806 +// }
  807 +// defer func() {
  808 +// _ = transactionContext.RollbackTransaction()
  809 +// }()
  810 +
  811 +// evaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{
  812 +// "transactionContext": transactionContext,
  813 +// })
  814 +// //没有上级评估
  815 +// //直接进入考核结果阶段
  816 +// _, evaluationList, err := evaluationRepo.Find(map[string]interface{}{
  817 +// "targetUserId": param.TargetUser.UserId,
  818 +// "typesList": []int{int(domain.EvaluationFinish)},
  819 +// "cycleId": param.CycleId,
  820 +// "limit": 1,
  821 +// })
  822 +// if err != nil {
  823 +// return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  824 +// }
  825 +
  826 +// if len(evaluationList) > 0 {
  827 +// //上级评估的结束时间
  828 +// // evaluationList[0].BeginTime = param.EndTime
  829 +// nowTime := time.Now()
  830 +// if evaluationList[0].BeginTime.After(nowTime) {
  831 +// evaluationList[0].BeginTime = nowTime
  832 +// }
  833 +// evaluationList[0].Status = domain.EvaluationCompleted
  834 +// err = evaluationRepo.Save(evaluationList[0])
  835 +// if err != nil {
  836 +// return application.ThrowError(application.INTERNAL_SERVER_ERROR, "保存考核结果,"+err.Error())
  837 +// }
  838 +// //TODO 更新考核成绩
  839 +
  840 +// //添加确认绩效成绩提醒短信提醒
  841 +// err = notify.AddNotifyConfirmEvaluationScore(evaluationList[0])
  842 +// if err != nil {
  843 +// return application.ThrowError(application.TRANSACTION_ERROR, "创建短信提醒失败"+err.Error())
  844 +// }
  845 +// }
  846 +
  847 +// if err := transactionContext.CommitTransaction(); err != nil {
  848 +// return application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  849 +// }
  850 +
  851 +// return nil
  852 +// }
851 853
852 // GetTargetUserCycleList 854 // GetTargetUserCycleList
853 // 获取周期列表,被评估的周期列表 855 // 获取周期列表,被评估的周期列表
@@ -1195,124 +1197,124 @@ func (srv *SummaryEvaluationService) GetEvaluationSuperForAdmin(param *command.Q @@ -1195,124 +1197,124 @@ func (srv *SummaryEvaluationService) GetEvaluationSuperForAdmin(param *command.Q
1195 return &result, nil 1197 return &result, nil
1196 } 1198 }
1197 1199
1198 -// EditEvaluationSuper 更新上级评估内容  
1199 -func (srv *SummaryEvaluationService) EditEvaluationSuper(param *command.EditEvaluationValue) (interface{}, error) {  
1200 - lock := xredis.NewLockSummaryEvaluationId(param.SummaryEvaluationId)  
1201 - err := lock.Lock()  
1202 - if err != nil {  
1203 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "未能完全提交评估内容")  
1204 - }  
1205 - defer func() {  
1206 - lock.UnLock()  
1207 - }()  
1208 - transactionContext, err := factory.CreateTransactionContext(nil)  
1209 - if err != nil {  
1210 - return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())  
1211 - }  
1212 - if err := transactionContext.StartTransaction(); err != nil {  
1213 - return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())  
1214 - }  
1215 - defer func() {  
1216 - _ = transactionContext.RollbackTransaction()  
1217 - }()  
1218 - evaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{  
1219 - "transactionContext": transactionContext,  
1220 - })  
1221 - itemUsedRepo := factory.CreateEvaluationItemUsedRepository(map[string]interface{}{  
1222 - "transactionContext": transactionContext,  
1223 - })  
1224 -  
1225 - itemValueRepo := factory.CreateSummaryEvaluationValueRepository(map[string]interface{}{  
1226 - "transactionContext": transactionContext,  
1227 - })  
1228 - evaluationData, err := evaluationRepo.FindOne(map[string]interface{}{  
1229 - "id": param.SummaryEvaluationId,  
1230 - })  
1231 - if err != nil {  
1232 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())  
1233 - }  
1234 - if evaluationData.Types != domain.EvaluationSuper {  
1235 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "没有操作权限")  
1236 - }  
1237 -  
1238 - if evaluationData.Executor.UserId != param.ExecutorId {  
1239 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "没有操作权限")  
1240 - }  
1241 -  
1242 - if evaluationData.CompanyId != param.CompanyId {  
1243 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "没有操作权限")  
1244 - }  
1245 -  
1246 - _, evaluationList, err := evaluationRepo.Find(map[string]interface{}{  
1247 - "targetUserId": evaluationData.TargetUser.UserId,  
1248 - "typesList": []int{int(domain.EvaluationFinish)},  
1249 - "cycleId": evaluationData.CycleId,  
1250 - "limit": 1,  
1251 - })  
1252 - if err != nil {  
1253 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())  
1254 - }  
1255 - // 如果目标员工已经确认考核结果,就不能在进行评估编辑  
1256 - if len(evaluationList) > 0 && evaluationList[0].CheckResult == domain.EvaluationCheckCompleted {  
1257 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "用户已经确认该周期的考核结果,不能再编辑!")  
1258 - }  
1259 -  
1260 - _, itemList, err := itemUsedRepo.Find(map[string]interface{}{  
1261 - "evaluationProjectId": evaluationData.EvaluationProjectId,  
1262 - "nodeType": domain.LinkNodeSelfAssessment,  
1263 - })  
1264 - if err != nil {  
1265 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())  
1266 - }  
1267 - //获取已填写的评估内容  
1268 - _, itemValueList, err := itemValueRepo.Find(map[string]interface{}{  
1269 - "summaryEvaluationId": evaluationData.Id,  
1270 - })  
1271 - if err != nil {  
1272 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())  
1273 - }  
1274 - //记录人资评估或者360评估的 填写项id  
1275 - hrbpOr360ItemValue, err := srv.getEvaluationSuperDefaultValue(transactionContext, evaluationData)  
1276 - if err != nil {  
1277 - return nil, err  
1278 - }  
1279 -  
1280 - err = srv.editEvaluationValue(evaluationData, &itemValueList, itemList, param.EvaluationItems, hrbpOr360ItemValue, param.IsTemporary)  
1281 - if err != nil {  
1282 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())  
1283 - }  
1284 - if !param.IsTemporary {  
1285 - //变更评估状态为已填写  
1286 - evaluationData.Status = domain.EvaluationCompleted  
1287 - }  
1288 - for _, v := range itemValueList {  
1289 - //保存填写值  
1290 - err = itemValueRepo.Save(v)  
1291 - if err != nil {  
1292 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())  
1293 - }  
1294 - }  
1295 - //保存填写值  
1296 - err = evaluationRepo.Save(evaluationData)  
1297 - if err != nil {  
1298 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())  
1299 - }  
1300 - if err := transactionContext.CommitTransaction(); err != nil {  
1301 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())  
1302 - }  
1303 -  
1304 - if !param.IsTemporary {  
1305 - err = srv.AfterCompletedEvaluationSuper(evaluationData)  
1306 - if err != nil {  
1307 - return nil, err  
1308 - }  
1309 - }  
1310 -  
1311 - itemValueAdapter := srv.buildSummaryItemValue(itemList, itemValueList)  
1312 - return map[string][]adapter.EvaluationItemAdapter{  
1313 - "EvaluationItems": itemValueAdapter,  
1314 - }, nil  
1315 -} 1200 +// // EditEvaluationSuper 更新上级评估内容
  1201 +// func (srv *SummaryEvaluationService) EditEvaluationSuper(param *command.EditEvaluationValue) (interface{}, error) {
  1202 +// lock := xredis.NewLockSummaryEvaluationId(param.SummaryEvaluationId)
  1203 +// err := lock.Lock()
  1204 +// if err != nil {
  1205 +// return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "未能完全提交评估内容")
  1206 +// }
  1207 +// defer func() {
  1208 +// lock.UnLock()
  1209 +// }()
  1210 +// transactionContext, err := factory.CreateTransactionContext(nil)
  1211 +// if err != nil {
  1212 +// return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  1213 +// }
  1214 +// if err := transactionContext.StartTransaction(); err != nil {
  1215 +// return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
  1216 +// }
  1217 +// defer func() {
  1218 +// _ = transactionContext.RollbackTransaction()
  1219 +// }()
  1220 +// evaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{
  1221 +// "transactionContext": transactionContext,
  1222 +// })
  1223 +// itemUsedRepo := factory.CreateEvaluationItemUsedRepository(map[string]interface{}{
  1224 +// "transactionContext": transactionContext,
  1225 +// })
  1226 +
  1227 +// itemValueRepo := factory.CreateSummaryEvaluationValueRepository(map[string]interface{}{
  1228 +// "transactionContext": transactionContext,
  1229 +// })
  1230 +// evaluationData, err := evaluationRepo.FindOne(map[string]interface{}{
  1231 +// "id": param.SummaryEvaluationId,
  1232 +// })
  1233 +// if err != nil {
  1234 +// return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  1235 +// }
  1236 +// if evaluationData.Types != domain.EvaluationSuper {
  1237 +// return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "没有操作权限")
  1238 +// }
  1239 +
  1240 +// if evaluationData.Executor.UserId != param.ExecutorId {
  1241 +// return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "没有操作权限")
  1242 +// }
  1243 +
  1244 +// if evaluationData.CompanyId != param.CompanyId {
  1245 +// return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "没有操作权限")
  1246 +// }
  1247 +
  1248 +// _, evaluationList, err := evaluationRepo.Find(map[string]interface{}{
  1249 +// "targetUserId": evaluationData.TargetUser.UserId,
  1250 +// "typesList": []int{int(domain.EvaluationFinish)},
  1251 +// "cycleId": evaluationData.CycleId,
  1252 +// "limit": 1,
  1253 +// })
  1254 +// if err != nil {
  1255 +// return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  1256 +// }
  1257 +// // 如果目标员工已经确认考核结果,就不能在进行评估编辑
  1258 +// if len(evaluationList) > 0 && evaluationList[0].CheckResult == domain.EvaluationCheckCompleted {
  1259 +// return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "用户已经确认该周期的考核结果,不能再编辑!")
  1260 +// }
  1261 +
  1262 +// _, itemList, err := itemUsedRepo.Find(map[string]interface{}{
  1263 +// "evaluationProjectId": evaluationData.EvaluationProjectId,
  1264 +// "nodeType": domain.LinkNodeSelfAssessment,
  1265 +// })
  1266 +// if err != nil {
  1267 +// return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  1268 +// }
  1269 +// //获取已填写的评估内容
  1270 +// _, itemValueList, err := itemValueRepo.Find(map[string]interface{}{
  1271 +// "summaryEvaluationId": evaluationData.Id,
  1272 +// })
  1273 +// if err != nil {
  1274 +// return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  1275 +// }
  1276 +// //记录人资评估或者360评估的 填写项id
  1277 +// hrbpOr360ItemValue, err := srv.getEvaluationSuperDefaultValue(transactionContext, evaluationData)
  1278 +// if err != nil {
  1279 +// return nil, err
  1280 +// }
  1281 +
  1282 +// err = srv.editEvaluationValue(evaluationData, &itemValueList, itemList, param.EvaluationItems, hrbpOr360ItemValue, param.IsTemporary)
  1283 +// if err != nil {
  1284 +// return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  1285 +// }
  1286 +// if !param.IsTemporary {
  1287 +// //变更评估状态为已填写
  1288 +// evaluationData.Status = domain.EvaluationCompleted
  1289 +// }
  1290 +// for _, v := range itemValueList {
  1291 +// //保存填写值
  1292 +// err = itemValueRepo.Save(v)
  1293 +// if err != nil {
  1294 +// return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  1295 +// }
  1296 +// }
  1297 +// //保存填写值
  1298 +// err = evaluationRepo.Save(evaluationData)
  1299 +// if err != nil {
  1300 +// return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  1301 +// }
  1302 +// if err := transactionContext.CommitTransaction(); err != nil {
  1303 +// return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
  1304 +// }
  1305 +
  1306 +// if !param.IsTemporary {
  1307 +// err = srv.AfterCompletedEvaluationSuper(evaluationData)
  1308 +// if err != nil {
  1309 +// return nil, err
  1310 +// }
  1311 +// }
  1312 +
  1313 +// itemValueAdapter := srv.buildSummaryItemValue(itemList, itemValueList)
  1314 +// return map[string][]adapter.EvaluationItemAdapter{
  1315 +// "EvaluationItems": itemValueAdapter,
  1316 +// }, nil
  1317 +// }
1316 1318
1317 // EditEvaluationSuperForAdmin 更新上级评估内容(超级管理员) 1319 // EditEvaluationSuperForAdmin 更新上级评估内容(超级管理员)
1318 func (srv *SummaryEvaluationService) EditEvaluationSuperForAdmin(param *command.EditEvaluationValue) (interface{}, error) { 1320 func (srv *SummaryEvaluationService) EditEvaluationSuperForAdmin(param *command.EditEvaluationValue) (interface{}, error) {
@@ -1400,10 +1402,10 @@ func (srv *SummaryEvaluationService) EditEvaluationSuperForAdmin(param *command. @@ -1400,10 +1402,10 @@ func (srv *SummaryEvaluationService) EditEvaluationSuperForAdmin(param *command.
1400 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 1402 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
1401 } 1403 }
1402 1404
1403 - err = srv.AfterCompletedEvaluationSuper(evaluationData)  
1404 - if err != nil {  
1405 - return nil, err  
1406 - } 1405 + // err = srv.AfterCompletedEvaluationSuper(evaluationData)
  1406 + // if err != nil {
  1407 + // return nil, err
  1408 + // }
1407 1409
1408 itemValueAdapter := srv.buildSummaryItemValue(itemList, itemValueList) 1410 itemValueAdapter := srv.buildSummaryItemValue(itemList, itemValueList)
1409 return map[string][]adapter.EvaluationItemAdapter{"EvaluationItems": itemValueAdapter}, nil 1411 return map[string][]adapter.EvaluationItemAdapter{"EvaluationItems": itemValueAdapter}, nil
@@ -115,39 +115,3 @@ func (itemValue *SummaryEvaluationValue) valueTypeScore(item *EvaluationItemUsed @@ -115,39 +115,3 @@ func (itemValue *SummaryEvaluationValue) valueTypeScore(item *EvaluationItemUsed
115 } 115 }
116 return nil 116 return nil
117 } 117 }
118 -  
119 -// 填写综合自评  
120 -// func (itemValue *SummaryEvaluationValue) EvaluationSelfFillValue(item *EvaluationItemUsed, value string, remark string) error {  
121 -// itemValue.Remark = remark  
122 -// if item.Weight == 0 {  
123 -// //使用评级的形式  
124 -// err := itemValue.valueTypeRating(item, value)  
125 -// return err  
126 -// }  
127 -// //综合自评 评分的形式,特殊处理  
128 -// err := itemValue.valueTypeScoreEvaluationSelf(item, value)  
129 -// return err  
130 -// }  
131 -  
132 -// func (itemValue *SummaryEvaluationValue) valueTypeScoreEvaluationSelf(item *EvaluationItemUsed, value string) error {  
133 -// if item.Weight <= 0 {  
134 -// return errors.New("评分方式错误")  
135 -// }  
136 -// value = strings.TrimSpace(value)  
137 -// itemValue.Value = value  
138 -// //处理空值  
139 -// if len(value) == 0 {  
140 -// itemValue.Score = "0"  
141 -// return nil  
142 -// }  
143 -// valueNumber, err := strconv.ParseFloat(value, 64)  
144 -// if err != nil {  
145 -// return fmt.Errorf("条目%d:%s-%s评分值异常", item.Id, item.Category, item.Name)  
146 -// }  
147 -  
148 -// // 分数保留2位小数  
149 -// score := valueNumber * item.Weight  
150 -// itemValue.Score = fmt.Sprintf("%.2f", score)  
151 -  
152 -// return nil  
153 -// }