作者 庄敏学

合并分支 'test' 到 'master'

Test



查看合并请求 !7
1 -#FROM golang:latest  
2 -FROM 192.168.0.243:5000/mmm/performance-back:20221121 1 +FROM 192.168.0.243:5000/mmm/performance-back:20221121test
3 #FROM 192.168.0.243:5000/mmm/digital-platform:20220831 2 #FROM 192.168.0.243:5000/mmm/digital-platform:20220831
4 ENV APP_DIR $GOPATH/src/performance 3 ENV APP_DIR $GOPATH/src/performance
5 RUN mkdir -p $APP_DIR 4 RUN mkdir -p $APP_DIR
不能预览此文件类型
@@ -22,19 +22,3 @@ type AssessInfoResp struct { @@ -22,19 +22,3 @@ type AssessInfoResp struct {
22 DutyTime string `json:"dutyTime"` //入职时间 // 22 DutyTime string `json:"dutyTime"` //入职时间 //
23 AssessContent []*domain.StaffAssessContent `json:"assessContent"` //评估内容 23 AssessContent []*domain.StaffAssessContent `json:"assessContent"` //评估内容
24 } 24 }
25 -  
26 -type AssessContent struct {  
27 - Category string `json:"category"` //comment:"类别"  
28 - Name string `json:"name"` // comment:"名称"  
29 - PromptTitle string `json:"promptTitle"` //comment:"提示项标题"  
30 - PromptText string `json:"promptText"` // comment:"提示项正文"  
31 - Rule AssessContentRule `json:"rules"` //评定规则  
32 - Value string `json:"value"` // 实际填写评定值  
33 - Remark []domain.AssessContemtRemark `json:"entryItems"` // comment:"填写反馈"  
34 -}  
35 -  
36 -type AssessContentRule struct {  
37 - Types int `json:"types"` //评估方式(0评级、1评分)  
38 - Rating domain.Rating `json:"rating"` //评级  
39 - Score domain.Score `json:"score"` //评分  
40 -}  
@@ -12,6 +12,7 @@ type AssessTaskDescResp struct { @@ -12,6 +12,7 @@ type AssessTaskDescResp struct {
12 12
13 type AssessTaskStep struct { 13 type AssessTaskStep struct {
14 SortBy int `json:"sortBy"` //排序 14 SortBy int `json:"sortBy"` //排序
  15 + LinkNodeId int `json:"linkNodeId"` //流程id
15 LinkNodeName string `json:"linkNodeName"` //流程名称 16 LinkNodeName string `json:"linkNodeName"` //流程名称
16 BeginTime string `json:"beginTime"` //开始时间时间 17 BeginTime string `json:"beginTime"` //开始时间时间
17 EndTime string `json:"endTime"` //结束时间 18 EndTime string `json:"endTime"` //结束时间
@@ -2,6 +2,7 @@ package service @@ -2,6 +2,7 @@ package service
2 2
3 import ( 3 import (
4 "fmt" 4 "fmt"
  5 + "sort"
5 "strconv" 6 "strconv"
6 "time" 7 "time"
7 8
@@ -37,9 +38,6 @@ func (srv StaffAssessServeice) SearchAssessTaskMe(param *query.SearchAssessMeQue @@ -37,9 +38,6 @@ func (srv StaffAssessServeice) SearchAssessTaskMe(param *query.SearchAssessMeQue
37 defer func() { 38 defer func() {
38 _ = transactionContext.RollbackTransaction() 39 _ = transactionContext.RollbackTransaction()
39 }() 40 }()
40 - // staffAssessTaskRepo := factory.CreateStaffAssessTaskRepository(map[string]interface{}{  
41 - // "transactionContext": transactionContext,  
42 - // })  
43 41
44 staffAssessTaskRepo := dao.NewStaffAssessDao(map[string]interface{}{ 42 staffAssessTaskRepo := dao.NewStaffAssessDao(map[string]interface{}{
45 "transactionContext": transactionContext, 43 "transactionContext": transactionContext,
@@ -59,18 +57,7 @@ func (srv StaffAssessServeice) SearchAssessTaskMe(param *query.SearchAssessMeQue @@ -59,18 +57,7 @@ func (srv StaffAssessServeice) SearchAssessTaskMe(param *query.SearchAssessMeQue
59 if err != nil { 57 if err != nil {
60 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "查询评估任务"+err.Error()) 58 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "查询评估任务"+err.Error())
61 } 59 }
62 - // condition := map[string]interface{}{  
63 - // "executorId": param.UserId,  
64 - // "companyId": param.CompanyId,  
65 - // "limit": limit,  
66 - // }  
67 - // if offset > 0 {  
68 - // condition["offset"] = offset  
69 - // }  
70 - // cnt, assessTaskList, err := staffAssessTaskRepo.Find(condition)  
71 - // if err != nil {  
72 - // return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "查询周期"+err.Error())  
73 - // } 60 +
74 if err := transactionContext.CommitTransaction(); err != nil { 61 if err := transactionContext.CommitTransaction(); err != nil {
75 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 62 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
76 } 63 }
@@ -79,8 +66,8 @@ func (srv StaffAssessServeice) SearchAssessTaskMe(param *query.SearchAssessMeQue @@ -79,8 +66,8 @@ func (srv StaffAssessServeice) SearchAssessTaskMe(param *query.SearchAssessMeQue
79 for _, v := range assessTaskList { 66 for _, v := range assessTaskList {
80 temp = adapter.SearchAssessMeResp{ 67 temp = adapter.SearchAssessMeResp{
81 AssessTaskId: v.Id, 68 AssessTaskId: v.Id,
82 - BeginTime: v.BeginTime.Format("2006-01-02 15:04:05"),  
83 - EndTime: v.EndTime.Format("2006-01-02 15:04:05"), 69 + BeginTime: v.BeginTime.Local().Format("2006-01-02 15:04:05"),
  70 + EndTime: v.EndTime.Local().Format("2006-01-02 15:04:05"),
84 CycleId: v.CycleId, 71 CycleId: v.CycleId,
85 CycleName: v.CycleName, 72 CycleName: v.CycleName,
86 EvaluationProjectId: v.EvaluationProjectId, 73 EvaluationProjectId: v.EvaluationProjectId,
@@ -132,6 +119,7 @@ func (srv StaffAssessServeice) AssessTaskDesc(param *query.AssessTaskDescQuery) @@ -132,6 +119,7 @@ func (srv StaffAssessServeice) AssessTaskDesc(param *query.AssessTaskDescQuery)
132 stepItem := adapter.AssessTaskStep{ 119 stepItem := adapter.AssessTaskStep{
133 SortBy: v.SortBy, 120 SortBy: v.SortBy,
134 LinkNodeName: v.LinkNodeName, 121 LinkNodeName: v.LinkNodeName,
  122 + LinkNodeId: v.LinkNodeId,
135 BeginTime: v.BeginTime.Local().Format("2006-01-02 15:04:05"), 123 BeginTime: v.BeginTime.Local().Format("2006-01-02 15:04:05"),
136 EndTime: v.EndTime.Local().Format("2006-01-02 15:04:05"), 124 EndTime: v.EndTime.Local().Format("2006-01-02 15:04:05"),
137 LinkNodeType: v.LinkNodeType, 125 LinkNodeType: v.LinkNodeType,
@@ -220,8 +208,11 @@ func (srv StaffAssessServeice) AssessTaskDesc(param *query.AssessTaskDescQuery) @@ -220,8 +208,11 @@ func (srv StaffAssessServeice) AssessTaskDesc(param *query.AssessTaskDescQuery)
220 } 208 }
221 } 209 }
222 } 210 }
  211 + //未参与的,不算在个人的评估环节里
  212 + if stepItem.Status != "" {
223 result.StepList = append(result.StepList, stepItem) 213 result.StepList = append(result.StepList, stepItem)
224 } 214 }
  215 + }
225 if err := transactionContext.CommitTransaction(); err != nil { 216 if err := transactionContext.CommitTransaction(); err != nil {
226 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) 217 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())
227 } 218 }
@@ -244,7 +235,7 @@ func (srv StaffAssessServeice) AssessSelfList(param *query.AssessSelfListQuery) @@ -244,7 +235,7 @@ func (srv StaffAssessServeice) AssessSelfList(param *query.AssessSelfListQuery)
244 staffAssessRepo := factory.CreateStaffAssessRepository(map[string]interface{}{ 235 staffAssessRepo := factory.CreateStaffAssessRepository(map[string]interface{}{
245 "transactionContext": transactionContext, 236 "transactionContext": transactionContext,
246 }) 237 })
247 - var limit int = 20 238 + var limit int = 100
248 var offset int = 0 239 var offset int = 0
249 if param.PageSize > 0 { 240 if param.PageSize > 0 {
250 limit = param.PageSize 241 limit = param.PageSize
@@ -255,8 +246,9 @@ func (srv StaffAssessServeice) AssessSelfList(param *query.AssessSelfListQuery) @@ -255,8 +246,9 @@ func (srv StaffAssessServeice) AssessSelfList(param *query.AssessSelfListQuery)
255 "companyId": param.CompanyId, 246 "companyId": param.CompanyId,
256 "typesList": []string{string(domain.AssessSelf)}, 247 "typesList": []string{string(domain.AssessSelf)},
257 "limit": limit, 248 "limit": limit,
258 - "status": string(domain.StaffAssessCompleted), 249 + "endTime": time.Now(), //获取历史记录
259 } 250 }
  251 + // "status": string(domain.StaffAssessCompleted),
260 if offset > 0 { 252 if offset > 0 {
261 condition["offset"] = offset 253 condition["offset"] = offset
262 } 254 }
@@ -347,16 +339,6 @@ func (srv StaffAssessServeice) AssessSelfList(param *query.AssessSelfListQuery) @@ -347,16 +339,6 @@ func (srv StaffAssessServeice) AssessSelfList(param *query.AssessSelfListQuery)
347 339
348 // 根据项目评估的配置,创建员工的评估任务 340 // 根据项目评估的配置,创建员工的评估任务
349 func (srv StaffAssessServeice) CreateStaffAssessTask(transactionContext application.TransactionContext, param *command.CreateStaffAssessTask) (map[string]interface{}, error) { 341 func (srv StaffAssessServeice) CreateStaffAssessTask(transactionContext application.TransactionContext, param *command.CreateStaffAssessTask) (map[string]interface{}, error) {
350 - // transactionContext, err := factory.CreateTransactionContext(nil)  
351 - // if err != nil {  
352 - // return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())  
353 - // }  
354 - // if err := transactionContext.StartTransaction(); err != nil {  
355 - // return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())  
356 - // }  
357 - // defer func() {  
358 - // _ = transactionContext.RollbackTransaction()  
359 - // }()  
360 log.Logger.Debug("CreateStaffAssessTask 获取参数", map[string]interface{}{ 342 log.Logger.Debug("CreateStaffAssessTask 获取参数", map[string]interface{}{
361 "param": param, 343 "param": param,
362 }) 344 })
@@ -372,8 +354,22 @@ func (srv StaffAssessServeice) CreateStaffAssessTask(transactionContext applicat @@ -372,8 +354,22 @@ func (srv StaffAssessServeice) CreateStaffAssessTask(transactionContext applicat
372 return nil, application.ThrowError(application.ARG_ERROR, "任务结束时间填写错误,"+param.EndTime) 354 return nil, application.ThrowError(application.ARG_ERROR, "任务结束时间填写错误,"+param.EndTime)
373 } 355 }
374 nowTime := time.Now() 356 nowTime := time.Now()
375 - //建立评估任务  
376 - assessTaskData := &domain.StaffAssessTask{ 357 +
  358 + _, assassessTaskList, err := assessTaskRepo.Find(map[string]interface{}{
  359 + "evaluationProjectId": param.EvaluationProjectId,
  360 + "beginDay": taskBeginTime.Local().Format("2006-01-02"),
  361 + })
  362 + if err != nil {
  363 + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "查询同日期同项目已存在的评估任务"+err.Error())
  364 + }
  365 + var assessTaskData *domain.StaffAssessTask
  366 + //更新旧数据或者新建数据
  367 + if len(assassessTaskList) > 0 {
  368 + assessTaskData = assassessTaskList[0]
  369 + assessTaskData.UpdatedAt = nowTime
  370 + } else {
  371 + //建立新的评估任务
  372 + assessTaskData = &domain.StaffAssessTask{
377 Id: 0, 373 Id: 0,
378 CompanyId: param.CompanyId, 374 CompanyId: param.CompanyId,
379 EvaluationProjectId: param.EvaluationProjectId, 375 EvaluationProjectId: param.EvaluationProjectId,
@@ -383,19 +379,39 @@ func (srv StaffAssessServeice) CreateStaffAssessTask(transactionContext applicat @@ -383,19 +379,39 @@ func (srv StaffAssessServeice) CreateStaffAssessTask(transactionContext applicat
383 BeginTime: taskBeginTime, 379 BeginTime: taskBeginTime,
384 EndTime: taskEndTime, 380 EndTime: taskEndTime,
385 StepList: []domain.AssessTaskStep{}, 381 StepList: []domain.AssessTaskStep{},
386 - ExecutorId: nil, 382 + ExecutorId: []int{},
387 CreatedAt: nowTime, 383 CreatedAt: nowTime,
388 UpdatedAt: nowTime, 384 UpdatedAt: nowTime,
389 DeletedAt: nil, 385 DeletedAt: nil,
390 BeginDay: taskBeginTime.Local().Format("2006-01-02"), 386 BeginDay: taskBeginTime.Local().Format("2006-01-02"),
391 } 387 }
392 - // }  
393 -  
394 - //填充评估环节 388 + }
  389 + executorIds := []int{} //提取评估的参与人id
  390 + executorIdMap := map[int]struct{}{} //过滤重复的用户
  391 + //从入参中提取参与人
  392 + for _, v := range param.ExecutorId {
  393 + if _, ok := executorIdMap[v]; ok {
  394 + continue
  395 + }
  396 + executorIdMap[v] = struct{}{}
  397 + executorIds = append(executorIds, v)
  398 + }
  399 + //就数据中提取参与人
  400 + for _, v := range assessTaskData.ExecutorId {
  401 + if _, ok := executorIdMap[v]; ok {
  402 + continue
  403 + }
  404 + executorIdMap[v] = struct{}{}
  405 + executorIds = append(executorIds, v)
  406 + }
  407 + //填入新的参与人id
  408 + assessTaskData.ExecutorId = executorIds
  409 + //填充新的评估环节
  410 +loop:
395 for _, v := range param.StepList { 411 for _, v := range param.StepList {
396 for _, vv := range assessTaskData.StepList { 412 for _, vv := range assessTaskData.StepList {
397 - if vv.LinkNodeType == v.LinkNodeType {  
398 - continue 413 + if vv.LinkNodeId == v.LinkNodeId {
  414 + continue loop
399 } 415 }
400 } 416 }
401 stepBeginTime, err := time.ParseInLocation("2006-01-02 15:04:05", param.BeginTime, time.Local) 417 stepBeginTime, err := time.ParseInLocation("2006-01-02 15:04:05", param.BeginTime, time.Local)
@@ -416,44 +432,15 @@ func (srv StaffAssessServeice) CreateStaffAssessTask(transactionContext applicat @@ -416,44 +432,15 @@ func (srv StaffAssessServeice) CreateStaffAssessTask(transactionContext applicat
416 } 432 }
417 assessTaskData.StepList = append(assessTaskData.StepList, step) 433 assessTaskData.StepList = append(assessTaskData.StepList, step)
418 } 434 }
419 - //评估的参与人  
420 - executorIds := []int{}  
421 - executorIdMap := map[int]struct{}{} //过滤重复的用户  
422 - for _, v := range param.ExecutorId {  
423 - if _, ok := executorIdMap[v]; ok {  
424 - continue  
425 - }  
426 - executorIdMap[v] = struct{}{}  
427 - executorIds = append(executorIds, v)  
428 - }  
429 - assessTaskData.ExecutorId = executorIds 435 + //排序流程环节
  436 + stepList := domain.SortTaskStep(assessTaskData.StepList)
  437 + sort.Sort(stepList)
  438 + assessTaskData.StepList = stepList
  439 + //添加员工的节点任务
430 assessList, err := srv.createStaffAssess(transactionContext, assessTaskData) 440 assessList, err := srv.createStaffAssess(transactionContext, assessTaskData)
431 if err != nil { 441 if err != nil {
432 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "生成个人评估项"+err.Error()) 442 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "生成个人评估项"+err.Error())
433 } 443 }
434 - // var assessTaskData *domain.StaffAssessTask  
435 - _, assassessTaskList, err := assessTaskRepo.Find(map[string]interface{}{  
436 - "evaluationProjectId": param.EvaluationProjectId,  
437 - "beginDay": taskBeginTime.Local().Format("2006-01-02"),  
438 - })  
439 - if err != nil {  
440 - return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "查询同日期已存在评估任务"+err.Error())  
441 - }  
442 -  
443 - if len(assassessTaskList) > 0 {  
444 - //过滤就数据  
445 - assessTaskData.Id = assassessTaskList[0].Id  
446 - for _, v := range assassessTaskList[0].ExecutorId {  
447 - if _, ok := executorIdMap[v]; ok {  
448 - continue  
449 - }  
450 - executorIdMap[v] = struct{}{}  
451 - executorIds = append(executorIds, v)  
452 - }  
453 - assessTaskData.ExecutorId = executorIds  
454 - assessTaskData.StepList = append(assassessTaskList[0].StepList, assessTaskData.StepList...)  
455 -  
456 - }  
457 _, err = assessTaskRepo.Save(assessTaskData) 444 _, err = assessTaskRepo.Save(assessTaskData)
458 if err != nil { 445 if err != nil {
459 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "保存评估任务"+err.Error()) 446 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "保存评估任务"+err.Error())
@@ -469,10 +456,6 @@ func (srv StaffAssessServeice) CreateStaffAssessTask(transactionContext applicat @@ -469,10 +456,6 @@ func (srv StaffAssessServeice) CreateStaffAssessTask(transactionContext applicat
469 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "保存个人评估项"+err.Error()) 456 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "保存个人评估项"+err.Error())
470 } 457 }
471 } 458 }
472 -  
473 - // if err := transactionContext.CommitTransaction(); err != nil {  
474 - // return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error())  
475 - // }  
476 return map[string]interface{}{ 459 return map[string]interface{}{
477 "assessTaskId": assessTaskData.Id, 460 "assessTaskId": assessTaskData.Id,
478 }, nil 461 }, nil
@@ -480,8 +463,8 @@ func (srv StaffAssessServeice) CreateStaffAssessTask(transactionContext applicat @@ -480,8 +463,8 @@ func (srv StaffAssessServeice) CreateStaffAssessTask(transactionContext applicat
480 463
481 // 添加节点任务 464 // 添加节点任务
482 func (srv StaffAssessServeice) createStaffAssess(transactionContext application.TransactionContext, param *domain.StaffAssessTask) ([]domain.StaffAssess, error) { 465 func (srv StaffAssessServeice) createStaffAssess(transactionContext application.TransactionContext, param *domain.StaffAssessTask) ([]domain.StaffAssess, error) {
483 - //评估的参与人  
484 - selfUserId := []int{} 466 +
  467 + selfUserId := []int{} //评估的参与人
485 userIdMap := map[int]struct{}{} //过滤重复的用户 468 userIdMap := map[int]struct{}{} //过滤重复的用户
486 for _, v := range param.ExecutorId { 469 for _, v := range param.ExecutorId {
487 if _, ok := userIdMap[v]; ok { 470 if _, ok := userIdMap[v]; ok {
@@ -557,7 +540,7 @@ func (srv StaffAssessServeice) createStaffAssess(transactionContext application. @@ -557,7 +540,7 @@ func (srv StaffAssessServeice) createStaffAssess(transactionContext application.
557 assessList = append(assessList, assessListTemp...) 540 assessList = append(assessList, assessListTemp...)
558 } 541 }
559 if v.LinkNodeType == domain.LinkNodeSuperiorAssessment { 542 if v.LinkNodeType == domain.LinkNodeSuperiorAssessment {
560 - // TODO 543 + // 创建上级评估
561 stepSelfTemp.BeginTime = v.BeginTime 544 stepSelfTemp.BeginTime = v.BeginTime
562 stepSelfTemp.EndTime = v.EndTime 545 stepSelfTemp.EndTime = v.EndTime
563 stepSelfTemp.LinkNodeId = v.LinkNodeId 546 stepSelfTemp.LinkNodeId = v.LinkNodeId
@@ -578,7 +561,6 @@ func (srv StaffAssessServeice) createStaffAssessSelf(assessTemp domain.StaffAsse @@ -578,7 +561,6 @@ func (srv StaffAssessServeice) createStaffAssessSelf(assessTemp domain.StaffAsse
578 userList []*domain.User, userDepartmentMap map[int64][]*domain.Department) []domain.StaffAssess { 561 userList []*domain.User, userDepartmentMap map[int64][]*domain.Department) []domain.StaffAssess {
579 result := []domain.StaffAssess{} 562 result := []domain.StaffAssess{}
580 for _, usr := range userList { 563 for _, usr := range userList {
581 -  
582 assessTemp.TargetUser = domain.StaffDesc{ 564 assessTemp.TargetUser = domain.StaffDesc{
583 UserId: int(usr.Id), 565 UserId: int(usr.Id),
584 Account: usr.Account, 566 Account: usr.Account,
@@ -602,7 +584,7 @@ func (srv StaffAssessServeice) createStaffAssessSelf(assessTemp domain.StaffAsse @@ -602,7 +584,7 @@ func (srv StaffAssessServeice) createStaffAssessSelf(assessTemp domain.StaffAsse
602 return result 584 return result
603 } 585 }
604 586
605 -// 构建员工上级评估 587 +// 构建员工上级评估
606 func (srv StaffAssessServeice) createStaffAssessSupper( 588 func (srv StaffAssessServeice) createStaffAssessSupper(
607 transactionContext application.TransactionContext, 589 transactionContext application.TransactionContext,
608 assessTemp domain.StaffAssess, 590 assessTemp domain.StaffAssess,
@@ -622,6 +604,7 @@ func (srv StaffAssessServeice) createStaffAssessSupper( @@ -622,6 +604,7 @@ func (srv StaffAssessServeice) createStaffAssessSupper(
622 if len(vv2.ChargeUserIds) == 0 { 604 if len(vv2.ChargeUserIds) == 0 {
623 continue 605 continue
624 } 606 }
  607 + //获取部门的主管
625 _, chargeUserList, err := userRepo.Find(map[string]interface{}{ 608 _, chargeUserList, err := userRepo.Find(map[string]interface{}{
626 "ids": vv2.ChargeUserIds, 609 "ids": vv2.ChargeUserIds,
627 "limit": 40, 610 "limit": 40,
@@ -742,7 +725,6 @@ func (srv StaffAssessServeice) SaveAssessInviteUser(param *command.SaveAssessInv @@ -742,7 +725,6 @@ func (srv StaffAssessServeice) SaveAssessInviteUser(param *command.SaveAssessInv
742 defer func() { 725 defer func() {
743 _ = transactionContext.RollbackTransaction() 726 _ = transactionContext.RollbackTransaction()
744 }() 727 }()
745 -  
746 assessReps := factory.CreateStaffAssessRepository(map[string]interface{}{ 728 assessReps := factory.CreateStaffAssessRepository(map[string]interface{}{
747 "transactionContext": transactionContext, 729 "transactionContext": transactionContext,
748 }) 730 })
@@ -775,6 +757,12 @@ func (srv StaffAssessServeice) SaveAssessInviteUser(param *command.SaveAssessInv @@ -775,6 +757,12 @@ func (srv StaffAssessServeice) SaveAssessInviteUser(param *command.SaveAssessInv
775 if inviteNode == nil { 757 if inviteNode == nil {
776 return nil, application.ThrowError(application.ARG_ERROR, "评估任务没有邀请评估的环节") 758 return nil, application.ThrowError(application.ARG_ERROR, "评估任务没有邀请评估的环节")
777 } 759 }
  760 + //检查节点的结束时间
  761 + endTimeInt := inviteNode.EndTime.Unix()
  762 + if endTimeInt < time.Now().Unix() {
  763 + e := fmt.Sprintf("该环节已在%s截止", inviteNode.EndTime.Local().Format("2006-01-02 15:04:05"))
  764 + return nil, application.ThrowError(application.BUSINESS_ERROR, e)
  765 + }
778 766
779 targetUser, err := userRepo.FindOne(map[string]interface{}{ 767 targetUser, err := userRepo.FindOne(map[string]interface{}{
780 "id": param.TargetUserId, 768 "id": param.TargetUserId,
@@ -1635,7 +1623,7 @@ func (srv *StaffAssessServeice) getStaffDescrip(transactionContext application.T @@ -1635,7 +1623,7 @@ func (srv *StaffAssessServeice) getStaffDescrip(transactionContext application.T
1635 UserName: userData.Name, 1623 UserName: userData.Name,
1636 CompanyName: companyData.Name, 1624 CompanyName: companyData.Name,
1637 SupperUserName: "", 1625 SupperUserName: "",
1638 - DutyTime: userData.CreatedAt.Local().Format("2006-01-02 15:04:05"), 1626 + DutyTime: userData.EntryTime,
1639 } 1627 }
1640 for _, v := range supperUserList { 1628 for _, v := range supperUserList {
1641 userInfo.SupperUserName = userInfo.SupperUserName + v.Name + " " 1629 userInfo.SupperUserName = userInfo.SupperUserName + v.Name + " "
@@ -1665,6 +1653,13 @@ func (srv StaffAssessServeice) SaveAssessInfo(param *command.SaveAssessInfoComma @@ -1665,6 +1653,13 @@ func (srv StaffAssessServeice) SaveAssessInfo(param *command.SaveAssessInfoComma
1665 if err != nil { 1653 if err != nil {
1666 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取员工的评估"+err.Error()) 1654 return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取员工的评估"+err.Error())
1667 } 1655 }
  1656 +
  1657 + //检查截止时间
  1658 + endTimeInt := assessData.EndTime.Unix()
  1659 + if endTimeInt < time.Now().Unix() {
  1660 + return nil, application.ThrowError(application.BUSINESS_ERROR, "当前环节已过截止时间,提交后无法修改内容")
  1661 + }
  1662 +
1668 assessContentRepo := factory.CreateStaffAssessContentRepository(map[string]interface{}{ 1663 assessContentRepo := factory.CreateStaffAssessContentRepository(map[string]interface{}{
1669 "transactionContext": transactionContext, 1664 "transactionContext": transactionContext,
1670 }) 1665 })
@@ -1672,7 +1667,6 @@ func (srv StaffAssessServeice) SaveAssessInfo(param *command.SaveAssessInfoComma @@ -1672,7 +1667,6 @@ func (srv StaffAssessServeice) SaveAssessInfo(param *command.SaveAssessInfoComma
1672 assessContentList := []*domain.StaffAssessContent{} 1667 assessContentList := []*domain.StaffAssessContent{}
1673 if assessData.Status == domain.StaffAssessCompleted { 1668 if assessData.Status == domain.StaffAssessCompleted {
1674 //已完成 1669 //已完成
1675 -  
1676 _, assessContentList, err = assessContentRepo.Find(map[string]interface{}{ 1670 _, assessContentList, err = assessContentRepo.Find(map[string]interface{}{
1677 "staffAssessId": assessData.Id, 1671 "staffAssessId": assessData.Id,
1678 }) 1672 })
@@ -1700,6 +1694,12 @@ func (srv StaffAssessServeice) SaveAssessInfo(param *command.SaveAssessInfoComma @@ -1700,6 +1694,12 @@ func (srv StaffAssessServeice) SaveAssessInfo(param *command.SaveAssessInfoComma
1700 continue 1694 continue
1701 } 1695 }
1702 v.Value = item.Value 1696 v.Value = item.Value
  1697 + //填入评估值描述
  1698 + reteResult, err := v.Rule.ScoreOrRating(&v.Value)
  1699 + if err != nil {
  1700 + return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
  1701 + }
  1702 + v.ReteResult = reteResult
1703 for ii := range v.Remark { 1703 for ii := range v.Remark {
1704 for _, vvv := range item.Remark { 1704 for _, vvv := range item.Remark {
1705 if v.Remark[ii].Title == vvv.Title { 1705 if v.Remark[ii].Title == vvv.Title {
@@ -1708,6 +1708,7 @@ func (srv StaffAssessServeice) SaveAssessInfo(param *command.SaveAssessInfoComma @@ -1708,6 +1708,7 @@ func (srv StaffAssessServeice) SaveAssessInfo(param *command.SaveAssessInfoComma
1708 } 1708 }
1709 } 1709 }
1710 } 1710 }
  1711 +
1711 } 1712 }
1712 1713
1713 //保存信息 1714 //保存信息
@@ -6,6 +6,7 @@ import ( @@ -6,6 +6,7 @@ import (
6 "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/staff_assess/command" 6 "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/staff_assess/command"
7 ) 7 )
8 8
  9 +//调试用,手动调用CreateStaffAssessTask
9 func (srv StaffAssessServeice) InvokCreateStaffAssessTask(param *command.CreateStaffAssessTask) (map[string]interface{}, error) { 10 func (srv StaffAssessServeice) InvokCreateStaffAssessTask(param *command.CreateStaffAssessTask) (map[string]interface{}, error) {
10 transactionContext, err := factory.CreateTransactionContext(nil) 11 transactionContext, err := factory.CreateTransactionContext(nil)
11 if err != nil { 12 if err != nil {
1 package domain 1 package domain
2 2
3 import ( 3 import (
  4 + "errors"
  5 + "fmt"
  6 + "strconv"
4 "time" 7 "time"
5 ) 8 )
6 9
@@ -55,6 +58,55 @@ type EvaluationRule struct { @@ -55,6 +58,55 @@ type EvaluationRule struct {
55 DeletedAt *time.Time `json:"deletedAt" comment:"删除时间"` 58 DeletedAt *time.Time `json:"deletedAt" comment:"删除时间"`
56 } 59 }
57 60
  61 +// 根据评估填写的值,得出等级名称
  62 +// 如果 评估方式是评分,对评估填写的值的小数点后的位数进行处理,
  63 +// value 根据评估填写的值
  64 +func (rule *EvaluationRule) ScoreOrRating(value *string) (string, error) {
  65 + switch rule.Type {
  66 + case EvaluationTypeRating:
  67 + return rule.RatingValue(value)
  68 + case EvaluationTypeScore:
  69 + return rule.ScoreValue(value)
  70 + }
  71 + return "", errors.New("rule.Type 错误")
  72 +}
  73 +
  74 +//根据评估填写的值,得出等级名称,
  75 +func (rule *EvaluationRule) ScoreValue(value *string) (string, error) {
  76 + valueFloat, err := strconv.ParseFloat(*value, 64)
  77 + if err != nil {
  78 + return "", errors.New("评分填写的值错误")
  79 + }
  80 + if valueFloat < rule.Score.Min || valueFloat > rule.Score.Max {
  81 + return "", fmt.Errorf("评分填写的值超出限制,>=%f且<=%f", rule.Score.Min, rule.Score.Max)
  82 + }
  83 + //保留小数处理
  84 + fStr := fmt.Sprintf("%%.%df", rule.Score.DecimalPlaces)
  85 + valueStr := fmt.Sprintf(fStr, valueFloat)
  86 + *value = valueStr
  87 + if rule.Score.IntervalState == 0 {
  88 + // 未开启按分数子区间匹配等级
  89 + return "", nil
  90 + }
  91 + valueDescrip := ""
  92 + for _, v := range rule.Score.Levels {
  93 + if valueFloat >= v.Start && valueFloat <= v.End {
  94 + valueDescrip = v.Name
  95 + }
  96 + }
  97 + return valueDescrip, nil
  98 +}
  99 +
  100 +//根据评估填写的值,得出等级名称,
  101 +func (rule *EvaluationRule) RatingValue(value *string) (string, error) {
  102 + for _, v := range rule.Rating.Levels {
  103 + if v.Code == *value {
  104 + return v.Name, nil
  105 + }
  106 + }
  107 + return "", errors.New("评估填写的值错误")
  108 +}
  109 +
58 // GenerateSysRule 当前公司下的生成默认规则 110 // GenerateSysRule 当前公司下的生成默认规则
59 func GenerateSysRule(companyId int64) *EvaluationRule { 111 func GenerateSysRule(companyId int64) *EvaluationRule {
60 levels := make([]*RatingLevel, 0) 112 levels := make([]*RatingLevel, 0)
@@ -55,16 +55,22 @@ func LoadPerformanceDimensions(rows [][]string) ([]*PerformanceDimension, error) @@ -55,16 +55,22 @@ func LoadPerformanceDimensions(rows [][]string) ([]*PerformanceDimension, error)
55 //指标任务 55 //指标任务
56 if len(item) > 4 && item[4] != "" { 56 if len(item) > 4 && item[4] != "" {
57 taskName = item[4] 57 taskName = item[4]
  58 + } else {
  59 + taskName = ""
58 } 60 }
59 form.Task = taskName 61 form.Task = taskName
60 //权重 62 //权重
61 if len(item) > 6 && item[6] != "" { 63 if len(item) > 6 && item[6] != "" {
62 weightName = item[6] 64 weightName = item[6]
  65 + } else {
  66 + weightName = "/"
63 } 67 }
64 form.Weight = weightName 68 form.Weight = weightName
65 //标准 69 //标准
66 if len(item) > 7 && item[7] != "" { 70 if len(item) > 7 && item[7] != "" {
67 standardName = item[7] 71 standardName = item[7]
  72 + } else {
  73 + standardName = ""
68 } 74 }
69 form.Standard = standardName 75 form.Standard = standardName
70 formRows = append(formRows, form) 76 formRows = append(formRows, form)
@@ -10,7 +10,7 @@ type StaffAssessTask struct { @@ -10,7 +10,7 @@ type StaffAssessTask struct {
10 EvaluationProjectName string `json:"evaluationProjectName"` //项目名称 10 EvaluationProjectName string `json:"evaluationProjectName"` //项目名称
11 CycleId int64 `json:"cycleId"` //对应的周期id 11 CycleId int64 `json:"cycleId"` //对应的周期id
12 CycleName string `json:"cycleName"` //对应周期的名称 12 CycleName string `json:"cycleName"` //对应周期的名称
13 - BeginDay string `json:"beginDay"` //绩效考核日期 13 + BeginDay string `json:"beginDay"` //绩效考核日期 ,2006-01-02
14 BeginTime time.Time `json:"beginTime"` //绩效考核开始时间 14 BeginTime time.Time `json:"beginTime"` //绩效考核开始时间
15 EndTime time.Time `json:"endTime"` //绩效考核截止时间 15 EndTime time.Time `json:"endTime"` //绩效考核截止时间
16 StepList []AssessTaskStep `json:"stepList"` //考评的流程 16 StepList []AssessTaskStep `json:"stepList"` //考评的流程
@@ -30,6 +30,12 @@ type AssessTaskStep struct { @@ -30,6 +30,12 @@ type AssessTaskStep struct {
30 EndTime time.Time `json:"endTime"` //绩效考核截止时间 30 EndTime time.Time `json:"endTime"` //绩效考核截止时间
31 } 31 }
32 32
  33 +type SortTaskStep []AssessTaskStep
  34 +
  35 +func (a SortTaskStep) Len() int { return len(a) }
  36 +func (a SortTaskStep) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
  37 +func (a SortTaskStep) Less(i, j int) bool { return a[i].SortBy < a[j].SortBy }
  38 +
33 type StaffAssessTaskRepository interface { 39 type StaffAssessTaskRepository interface {
34 Save(param *StaffAssessTask) (*StaffAssessTask, error) 40 Save(param *StaffAssessTask) (*StaffAssessTask, error)
35 Remove(id int) error 41 Remove(id int) error
@@ -56,7 +56,7 @@ func (d *StaffAssessDao) CountInviteAssessByTargetUser(userIds []int, assessTask @@ -56,7 +56,7 @@ func (d *StaffAssessDao) CountInviteAssessByTargetUser(userIds []int, assessTask
56 return result, err 56 return result, err
57 } 57 }
58 58
59 -// 搜索 executorId 参与的评估任务 59 +// 根据评估的人执行人id,搜索 executorId参与的评估任务
60 func (d *StaffAssessDao) SearchAssessTaskMe(executorId int, companyId int, limit int, offset int) ([]*domain.StaffAssessTask, error) { 60 func (d *StaffAssessDao) SearchAssessTaskMe(executorId int, companyId int, limit int, offset int) ([]*domain.StaffAssessTask, error) {
61 61
62 if limit < 0 { 62 if limit < 0 {
@@ -70,6 +70,7 @@ func (d *StaffAssessDao) SearchAssessTaskMe(executorId int, companyId int, limit @@ -70,6 +70,7 @@ func (d *StaffAssessDao) SearchAssessTaskMe(executorId int, companyId int, limit
70 JOIN staff_assess ON staff_assess_task."id" = staff_assess."staff_assess_task_id" 70 JOIN staff_assess ON staff_assess_task."id" = staff_assess."staff_assess_task_id"
71 WHERE staff_assess.company_id=? 71 WHERE staff_assess.company_id=?
72 and staff_assess.executor->>'userId'='?' 72 and staff_assess.executor->>'userId'='?'
  73 + order by staff_assess_task.id desc
73 limit ? offset ? 74 limit ? offset ?
74 ` 75 `
75 tx := d.transactionContext.PgTx 76 tx := d.transactionContext.PgTx
@@ -147,12 +147,15 @@ func (repo *StaffAssessRepository) Find(queryOptions map[string]interface{}) (in @@ -147,12 +147,15 @@ func (repo *StaffAssessRepository) Find(queryOptions map[string]interface{}) (in
147 if v, ok := queryOptions["id"]; ok { 147 if v, ok := queryOptions["id"]; ok {
148 query.Where("id=?", v) 148 query.Where("id=?", v)
149 } 149 }
150 - if v, ok := queryOptions["typesList"].([]string); ok && len(v) > 0 { 150 + if v, ok := queryOptions["typesList"].([]string); ok {
151 query.Where("types in(?)", pg.In(v)) 151 query.Where("types in(?)", pg.In(v))
152 } 152 }
153 - if v, ok := queryOptions["status"].(string); ok && len(v) > 0 { 153 + if v, ok := queryOptions["status"].(string); ok {
154 query.Where("status=?", v) 154 query.Where("status=?", v)
155 } 155 }
  156 + if v, ok := queryOptions["endTime"]; ok {
  157 + query.Where("end_time<=?", v)
  158 + }
156 count, err := query.SelectAndCount() 159 count, err := query.SelectAndCount()
157 if err != nil { 160 if err != nil {
158 return 0, nil, err 161 return 0, nil, err