正在显示
4 个修改的文件
包含
251 行增加
和
8 行删除
1 | package service | 1 | package service |
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | + "fmt" | ||
5 | + "strconv" | ||
6 | + "time" | ||
7 | + | ||
4 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory" | 8 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory" |
5 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" | 9 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" |
6 | ) | 10 | ) |
7 | 11 | ||
8 | // sendSummaryEvaluafionTask 根据评估项目设置,确认是否下发评估任务 | 12 | // sendSummaryEvaluafionTask 根据评估项目设置,确认是否下发评估任务 |
9 | -func sendSummaryEvaluafionTask(param *domain.EvaluationProject) error { | 13 | +// project 需要处理的项目 |
14 | +// userList 全体的员工数据 map[id]=>domain.User | ||
15 | +// departmetList 全部的部门数据 map[id]=>domain.Department | ||
16 | +func sendSummaryEvaluation(project *domain.EvaluationProject, cycleData *domain.EvaluationCycle, | ||
17 | + userMap map[int64]*domain.User, departmentMap map[int64]*domain.Department) ([]domain.SummaryEvaluation, error) { | ||
18 | + //自评的时间范围 | ||
19 | + beginTimeSelf := project.EndTime | ||
20 | + endTimeSelf := dayZeroTime(project.EndTime).Add(4*24*time.Hour - time.Second) | ||
21 | + //人资、360评估的时间范围 | ||
22 | + beginTime360 := beginTimeSelf | ||
23 | + endTime360 := endTimeSelf.Add(2 * 24 * time.Hour) | ||
24 | + //上级评估的是时间范围 | ||
25 | + beginTimeSuper := endTime360 | ||
26 | + endTimeSuper := endTime360.Add(2 * 24 * time.Hour) | ||
27 | + // | ||
10 | transactionContext, err := factory.CreateTransactionContext(nil) | 28 | transactionContext, err := factory.CreateTransactionContext(nil) |
11 | if err != nil { | 29 | if err != nil { |
12 | - return err | 30 | + return nil, err |
13 | } | 31 | } |
14 | if err := transactionContext.StartTransaction(); err != nil { | 32 | if err := transactionContext.StartTransaction(); err != nil { |
15 | - return err | 33 | + return nil, err |
16 | } | 34 | } |
17 | defer func() { | 35 | defer func() { |
18 | _ = transactionContext.RollbackTransaction() | 36 | _ = transactionContext.RollbackTransaction() |
19 | }() | 37 | }() |
38 | + | ||
39 | + evaluationItemRepo := factory.CreateEvaluationItemUsedRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
40 | + | ||
20 | //确定 被评估的人 | 41 | //确定 被评估的人 |
42 | + targetUserId := []int64{} | ||
43 | + for _, v := range project.Recipients { | ||
44 | + id, err := strconv.ParseInt(v, 10, 64) | ||
45 | + if err == nil { | ||
46 | + targetUserId = append(targetUserId, id) | ||
47 | + } | ||
48 | + } | ||
49 | + if len(targetUserId) == 0 { | ||
50 | + return nil, nil | ||
51 | + } | ||
52 | + //被评估的员工 | ||
53 | + targetUserMap := map[int64]*domain.User{} | ||
21 | 54 | ||
55 | + for _, v := range targetUserId { | ||
56 | + u, ok := userMap[v] | ||
57 | + if ok { | ||
58 | + targetUserMap[v] = u | ||
59 | + } | ||
60 | + } | ||
61 | + //确定360评估的执行人 | ||
62 | + _, itemList, err := evaluationItemRepo.Find(map[string]interface{}{"evaluationProjectId": project.Id}) | ||
63 | + if err != nil { | ||
64 | + return nil, err | ||
65 | + } | ||
66 | + nodeId := 0 | ||
67 | + executor360Map := map[int64]*domain.User{} | ||
68 | + for _, v := range itemList { | ||
69 | + nodeId = v.NodeId | ||
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 | + //确定自评 | ||
22 | //确定 被评估人的 上级评估 | 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 | + //确定自评 | ||
130 | + newEvaluationList = append(newEvaluationList, evaluationTemp) | ||
131 | + //处理人资评估 | ||
132 | + evaluationTemp.BeginTime = beginTime360 | ||
133 | + evaluationTemp.EndTime = endTime360 | ||
134 | + evaluationTemp.Executor = domain.StaffDesc{} | ||
135 | + evaluationTemp.Types = domain.EvaluationHrbp | ||
136 | + //确定人资评估 | ||
137 | + newEvaluationList = append(newEvaluationList, evaluationTemp) | ||
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 | + //确定人资评估 | ||
149 | + newEvaluationList = append(newEvaluationList, evaluationTemp) | ||
150 | + } | ||
23 | 151 | ||
24 | - //确定 被评估人的 人资评估 | 152 | + //处理上级评估 |
153 | + superUser, ok := userMap[v.ParentId] | ||
154 | + if ok { | ||
155 | + evaluationTemp.Types = domain.EvaluationSuper | ||
156 | + evaluationTemp.Executor = domain.StaffDesc{ | ||
157 | + UserId: int(superUser.Id), | ||
158 | + Account: superUser.Account, | ||
159 | + UserName: superUser.Name, | ||
160 | + } | ||
161 | + evaluationTemp.BeginTime = beginTimeSuper | ||
162 | + evaluationTemp.EndTime = endTimeSuper | ||
163 | + //确定上级评估 | ||
164 | + newEvaluationList = append(newEvaluationList, evaluationTemp) | ||
165 | + } | ||
166 | + } | ||
167 | + summaryEvaluationRepo := factory.CreateSummaryEvaluationRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
168 | + for i := range newEvaluationList { | ||
169 | + err = summaryEvaluationRepo.Save(&newEvaluationList[i]) | ||
170 | + if err != nil { | ||
171 | + return nil, err | ||
172 | + } | ||
173 | + } | ||
174 | + //回填 项目的状态 | ||
175 | + evaluationProjectRepo := factory.CreateEvaluationProjectRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
176 | + project.SummaryState = domain.ProjectSummaryStateYes | ||
177 | + _, err = evaluationProjectRepo.Insert(project) | ||
178 | + if err != nil { | ||
179 | + return nil, err | ||
180 | + } | ||
181 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
182 | + return nil, err | ||
183 | + } | ||
184 | + return newEvaluationList, nil | ||
185 | +} | ||
25 | 186 | ||
26 | - //确定 被评估人的 360 评估 | 187 | +func dayZeroTime(t time.Time) time.Time { |
188 | + y, m, d := t.UTC().Date() | ||
189 | + t2 := time.Date(y, m, d, 0, 0, 0, 0, time.UTC) | ||
190 | + return t2 | ||
191 | +} | ||
27 | 192 | ||
28 | - //回填 项目的状态 | 193 | +// 下发周期评估 |
194 | +func TaskSendSummaryEvaluation() error { | ||
195 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
196 | + if err != nil { | ||
197 | + return err | ||
198 | + } | ||
199 | + if err := transactionContext.StartTransaction(); err != nil { | ||
200 | + return err | ||
201 | + } | ||
202 | + defer func() { | ||
203 | + _ = transactionContext.RollbackTransaction() | ||
204 | + }() | ||
205 | + | ||
206 | + projectRepo := factory.CreateEvaluationProjectRepository(map[string]interface{}{ | ||
207 | + "transactionContext": transactionContext, | ||
208 | + }) | ||
209 | + | ||
210 | + userRepo := factory.CreateUserRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
211 | + | ||
212 | + departmentRepo := factory.CreateUserRepository(map[string]interface{}{"transactionContext": transactionContext}) | ||
213 | + | ||
214 | + _, projectList, err := projectRepo.Find(map[string]interface{}{ | ||
215 | + "endTime": time.Now(), | ||
216 | + "summaryState": domain.ProjectSummaryStateNo, | ||
217 | + "state": domain.ProjectStateEnable, | ||
218 | + }, "template") | ||
219 | + if err != nil { | ||
220 | + return fmt.Errorf("获取可用的项目数据,%s", err) | ||
221 | + } | ||
222 | + companyIdMap := map[int64]struct{}{} | ||
223 | + for _, v := range projectList { | ||
224 | + companyIdMap[v.CompanyId] = struct{}{} | ||
225 | + } | ||
226 | + //获取可执行的项目 | ||
227 | + for companyId := range companyIdMap { | ||
228 | + //获取员工数据,部门数据 | ||
229 | + | ||
230 | + for _, v := range projectList { | ||
231 | + if v.CompanyId != companyId { | ||
232 | + continue | ||
233 | + } | ||
234 | + | ||
235 | + } | ||
236 | + } | ||
237 | + //获取员工数据 | ||
238 | + | ||
239 | + //获取部门数据 | ||
29 | 240 | ||
30 | if err := transactionContext.CommitTransaction(); err != nil { | 241 | if err := transactionContext.CommitTransaction(); err != nil { |
31 | return err | 242 | return err |
32 | } | 243 | } |
244 | + | ||
33 | return nil | 245 | return nil |
34 | } | 246 | } |
@@ -36,8 +36,8 @@ type EvaluationProject struct { | @@ -36,8 +36,8 @@ type EvaluationProject struct { | ||
36 | type ProjectSummaryState int | 36 | type ProjectSummaryState int |
37 | 37 | ||
38 | const ( | 38 | const ( |
39 | - ProjectSummaryStateNo int = 0 //未下发 | ||
40 | - ProjectSummaryStateYes int = 1 //已经下发 | 39 | + ProjectSummaryStateNo ProjectSummaryState = 0 //未下发 |
40 | + ProjectSummaryStateYes ProjectSummaryState = 1 //已经下发 | ||
41 | ) | 41 | ) |
42 | 42 | ||
43 | type EvaluationProjectRepository interface { | 43 | type EvaluationProjectRepository interface { |
pkg/infrastructure/dao/evaluation_project.go
0 → 100644
1 | +package dao | ||
2 | + | ||
3 | +import pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | ||
4 | + | ||
5 | +type EvaluationProjectDao struct { | ||
6 | + transactionContext *pgTransaction.TransactionContext | ||
7 | +} | ||
8 | + | ||
9 | +func NewEvaluationProjectDao(options map[string]interface{}) *EvaluationProjectDao { | ||
10 | + var transactionContext *pgTransaction.TransactionContext | ||
11 | + if value, ok := options["transactionContext"]; ok { | ||
12 | + transactionContext = value.(*pgTransaction.TransactionContext) | ||
13 | + } | ||
14 | + return &EvaluationProjectDao{ | ||
15 | + transactionContext: transactionContext, | ||
16 | + } | ||
17 | +} |
@@ -170,6 +170,20 @@ func (repo *EvaluationProjectRepository) Find(queryOptions map[string]interface{ | @@ -170,6 +170,20 @@ func (repo *EvaluationProjectRepository) Find(queryOptions map[string]interface{ | ||
170 | query.Where("state = ?", v) | 170 | query.Where("state = ?", v) |
171 | } | 171 | } |
172 | 172 | ||
173 | + if v, ok := queryOptions["summaryState"]; ok { | ||
174 | + query.Where("summary_state=?", v) | ||
175 | + } | ||
176 | + | ||
177 | + if v, ok := queryOptions["beginTime"]; ok { | ||
178 | + t := v.(time.Time) | ||
179 | + query.Where("begin_time>=?", t) | ||
180 | + } | ||
181 | + | ||
182 | + if v, ok := queryOptions["endTime"]; ok { | ||
183 | + t := v.(time.Time) | ||
184 | + query.Where("end_time<=?", t) | ||
185 | + } | ||
186 | + | ||
173 | if v, ok := queryOptions["pmpIds"].([]string); ok && len(v) > 0 { | 187 | if v, ok := queryOptions["pmpIds"].([]string); ok && len(v) > 0 { |
174 | query.WhereGroup(func(query *pg.Query) (*pg.Query, error) { | 188 | query.WhereGroup(func(query *pg.Query) (*pg.Query, error) { |
175 | for i := range v { | 189 | for i := range v { |
-
请 注册 或 登录 后发表评论