diff --git a/pkg/application/staff_assess/service/service_3.go b/pkg/application/staff_assess/service/service_3.go index 95eca9b..13cb9bf 100644 --- a/pkg/application/staff_assess/service/service_3.go +++ b/pkg/application/staff_assess/service/service_3.go @@ -596,8 +596,3 @@ func (srv *StaffAssessServeice) ExportUserAssess(param *query.ExportAssessConten xlsxFile.MergeCell(sheetName, "A1", colName+"1") return xlsxFile, nil } - -// 自评小结统计 -func (srv *StaffAssessServeice) AssessSelfSummary() { - -} diff --git a/pkg/application/summary_evaluation/adapter/evaluation_info.go b/pkg/application/summary_evaluation/adapter/evaluation_info.go index d3d476e..8bd3b5f 100644 --- a/pkg/application/summary_evaluation/adapter/evaluation_info.go +++ b/pkg/application/summary_evaluation/adapter/evaluation_info.go @@ -14,6 +14,10 @@ type EvaluationInfoAdapter struct { EndTime string `json:"endTime"` //结束时间 2006-01-02 15:04:05 TargetUserId int `json:"targetUserId"` //被评估的目标用户,被执行的 TargetUserName string `json:"targetUserName"` // + CompanyLogo string `json:"companyLogo,string,"` //公司logo + CompanyName string `json:"companyName"` //公司名称 + SupperUser string `json:"superUser"` //目标用户的上级 + DutyTime string `json:"dutyTime"` //入职时间 Status string `json:"status"` //完成状态 EvaluationItems []EvaluationItemAdapter `json:"evaluationItems"` } diff --git a/pkg/application/summary_evaluation/command/get_evaluation.go b/pkg/application/summary_evaluation/command/get_evaluation.go index e7bfd64..7fc92d8 100644 --- a/pkg/application/summary_evaluation/command/get_evaluation.go +++ b/pkg/application/summary_evaluation/command/get_evaluation.go @@ -1,9 +1,15 @@ package command -type QueryEvaluationInfo struct { - CycleId int `json:"cycleId,string"` //周期id - ExecutorId int `json:"executorId,string"` //执行人id - CompanyId int `json:"-"` //公司id +// type QueryEvaluationInfo struct { +// CycleId int `json:"cycleId,string"` //周期id +// ExecutorId int `json:"executorId,string"` //执行人id +// CompanyId int `json:"-"` //公司id +// } + +type QueryEvaluation struct { + CycleId int `json:"cycleId,string"` //周期id + UserId int `json:"userId,string"` //员工id + CompanyId int `json:"-"` //公司id } type QueryEvaluation360 struct { diff --git a/pkg/application/summary_evaluation/service/service.go b/pkg/application/summary_evaluation/service/service.go index 7ae9d7d..bc12e52 100644 --- a/pkg/application/summary_evaluation/service/service.go +++ b/pkg/application/summary_evaluation/service/service.go @@ -1,6 +1,7 @@ package service import ( + "fmt" "time" "github.com/linmadan/egglib-go/core/application" @@ -265,19 +266,18 @@ func (srv *SummaryEvaluationService) buildSummaryItemValue(itemList []*domain.Ev Remark: "", } value, ok := valueMap[v.Id] - if !ok { - continue + if ok { + item.Score = value.Score + item.Value = value.Value + item.Remark = value.Remark } - item.Score = value.Score - item.Value = value.Value - item.Remark = value.Remark itemValues = append(itemValues, item) } return itemValues } // 获取综合自评详情 -func (srv *SummaryEvaluationService) GetEvaluationSelf(param *command.QueryEvaluationInfo) (*adapter.EvaluationInfoAdapter, error) { +func (srv *SummaryEvaluationService) GetEvaluationSelf(param *command.QueryEvaluation) (*adapter.EvaluationInfoAdapter, error) { transactionContext, err := factory.CreateTransactionContext(nil) if err != nil { return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) @@ -300,7 +300,7 @@ func (srv *SummaryEvaluationService) GetEvaluationSelf(param *command.QueryEvalu _, evaluationList, err := evaluationRepo.Find(map[string]interface{}{ "limit": 1, "cycleId": param.CompanyId, - "executorId": param.ExecutorId, + "executorId": param.UserId, "types": domain.EvaluationSelf, }) if err != nil { @@ -325,12 +325,17 @@ func (srv *SummaryEvaluationService) GetEvaluationSelf(param *command.QueryEvalu if err != nil { return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) } - + result := srv.getSummaryEvaluation(transactionContext, evaluationData) if err := transactionContext.CommitTransaction(); err != nil { return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) } itemValuesAdapter := srv.buildSummaryItemValue(itemList, itemValues) + result.EvaluationItems = itemValuesAdapter + return result, nil +} + +func (srv *SummaryEvaluationService) getSummaryEvaluation(transactionContext application.TransactionContext, evaluationData *domain.SummaryEvaluation) *adapter.EvaluationInfoAdapter { result := adapter.EvaluationInfoAdapter{ SummaryEvaluationId: evaluationData.Id, CycleId: int(evaluationData.CycleId), @@ -342,10 +347,50 @@ func (srv *SummaryEvaluationService) GetEvaluationSelf(param *command.QueryEvalu EndTime: evaluationData.EndTime.Format("2006-01-02 15:04:05"), TargetUserId: evaluationData.TargetUser.UserId, TargetUserName: evaluationData.TargetUser.UserName, + CompanyLogo: "", + CompanyName: "", + SupperUser: "", + DutyTime: "", Status: string(evaluationData.Status), - EvaluationItems: itemValuesAdapter, + EvaluationItems: []adapter.EvaluationItemAdapter{}, } - return &result, nil + //获取用户信息 + companyRepo := factory.CreateCompanyRepository(map[string]interface{}{ + "transactionContext": transactionContext, + }) + userRepo := factory.CreateUserRepository(map[string]interface{}{ + "transactionContext": transactionContext, + }) + + companyData, err := companyRepo.FindOne(map[string]interface{}{ + "id": evaluationData.CompanyId, + }) + + if err != nil { + return &result + } + + userData, err := userRepo.FindOne(map[string]interface{}{ + "id": evaluationData.TargetUser.UserId, + }) + if err != nil { + return &result + } + result.DutyTime = userData.EntryTime + result.CompanyLogo = companyData.Logo + result.CompanyName = companyData.Name + + if userData.ParentId <= 0 { + return &result + } + pUserData, err := userRepo.FindOne(map[string]interface{}{ + "id": userData.ParentId, + }) + if err != nil { + return &result + } + result.SupperUser = pUserData.Name + return &result } // 编辑综合自评详情 @@ -376,6 +421,10 @@ func (srv *SummaryEvaluationService) EditEvaluationSelf(param *command.EditEvalu if err != nil { return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) } + if evaluationData.Types != domain.EvaluationSelf { + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "没有操作权限") + } + if evaluationData.Executor.UserId != param.ExecutorId { return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "没有操作权限") @@ -387,6 +436,7 @@ func (srv *SummaryEvaluationService) EditEvaluationSelf(param *command.EditEvalu _, itemList, err := itemUsedRepo.Find(map[string]interface{}{ "evaluationProjectId": evaluationData.EvaluationProjectId, + "nodeType": domain.LinkNodeSelfAssessment, }) if err != nil { return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) @@ -442,6 +492,7 @@ func (srv *SummaryEvaluationService) EditEvaluationSelf(param *command.EditEvalu return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) } evaluationData.UpdatedAt = nowTime + evaluationData.Status = domain.EvaluationCompleted //保存填写值 err = evaluationRepo.Save(evaluationData) if err != nil { @@ -505,15 +556,23 @@ func (srv *SummaryEvaluationService) GetTargetUserCycleList(param *command.Query } // 自评小结详情 -func (srv *SummaryEvaluationService) CountEvaluationSelfLevel(param *command.QueryEvaluationInfo) (*adapter.EvaluationInfoAdapter, error) { - +func (srv *SummaryEvaluationService) CountEvaluationSelfLevel(param *command.QueryEvaluation) (*adapter.EvaluationInfoAdapter, error) { evaluationInfo, err := srv.GetEvaluationSelf(param) if err != nil { return nil, err } - - _ = evaluationInfo - //TODO 组装等级数量统计 + levelCodeMap := map[int][]adapter.LevalCodeCount{} + for _, v := range evaluationInfo.EvaluationItems { + codes := v.Rule.GetLevelCodes() + levelCode := []adapter.LevalCodeCount{} + for _, v2 := range codes { + levelCode = append(levelCode, adapter.LevalCodeCount{ + Code: v2, + Number: 0, + }) + } + levelCodeMap[v.EvaluationItemId] = levelCode + } transactionContext, err := factory.CreateTransactionContext(nil) if err != nil { return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) @@ -525,8 +584,42 @@ func (srv *SummaryEvaluationService) CountEvaluationSelfLevel(param *command.Que _ = transactionContext.RollbackTransaction() }() + //统计周期内,评估项等级的数量 + assessDao := dao.NewStaffAssessDao(map[string]interface{}{ + "transactionContext": transactionContext, + }) + levelCodeCountList, err := assessDao.CountAssessContentLevelCode(param.UserId, domain.AssessSelf, param.CycleId) + if err != nil { + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) + } + + levelCodeCountMap := map[string]int{} + for _, v := range levelCodeCountList { + key := fmt.Sprintf("%s-%s-%s", v.Category, v.Name, v.LevelValue) + levelCodeCountMap[key] = v.Cnt + } + + for i := range evaluationInfo.EvaluationItems { + itemId := evaluationInfo.EvaluationItems[i].EvaluationItemId + levelCodes, ok := levelCodeMap[itemId] + if !ok { + continue + } + evaluationInfo.EvaluationItems[i].LevelCount = levelCodes + for i2 := range levelCodes { + key := fmt.Sprintf("%s-%s-%s", + evaluationInfo.EvaluationItems[i].Category, + evaluationInfo.EvaluationItems[i].Name, + levelCodes[i2].Code, + ) + + if mVal, ok := levelCodeCountMap[key]; ok { + levelCodes[i2].Number = mVal + } + } + } if err := transactionContext.CommitTransaction(); err != nil { return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) } - return nil, nil + return evaluationInfo, nil } diff --git a/pkg/domain/evaluation_rule.go b/pkg/domain/evaluation_rule.go index 027d211..9cc9ee3 100644 --- a/pkg/domain/evaluation_rule.go +++ b/pkg/domain/evaluation_rule.go @@ -114,3 +114,18 @@ type EvaluationRuleRepository interface { Find(queryOptions map[string]interface{}) (int64, []*EvaluationRule, error) Count(queryOptions map[string]interface{}) (int64, error) } + +func (rule *EvaluationRule) GetLevelCodes() []string { + codes := []string{} + if rule.Type == EvaluationTypeRating { + for _, v := range rule.Rating.Levels { + codes = append(codes, v.Code) + } + } + if rule.Type == EvaluationTypeScore { + for _, v := range rule.Score.Levels { + codes = append(codes, v.Code) + } + } + return codes +} diff --git a/pkg/domain/summary_evaluation.go b/pkg/domain/summary_evaluation.go index 7fba9f6..be9fe2b 100644 --- a/pkg/domain/summary_evaluation.go +++ b/pkg/domain/summary_evaluation.go @@ -64,7 +64,7 @@ type SummaryEvaluationRepository interface { func (evaluation *SummaryEvaluation) EvaluationTotalScore(valueList []*SummaryEvaluationValue) error { var totalScore float64 for _, v := range valueList { - score, err := v.SumScore(v.Weight, v.Value) + score, err := v.SumScore() if err != nil { return err } diff --git a/pkg/domain/summary_evaluation_value.go b/pkg/domain/summary_evaluation_value.go index d4a7de1..b09270e 100644 --- a/pkg/domain/summary_evaluation_value.go +++ b/pkg/domain/summary_evaluation_value.go @@ -33,7 +33,7 @@ type SummaryEvaluationValueRepository interface { // 分数保留2位小数 func (itemValue *SummaryEvaluationValue) SummaryEvaluationScore() error { //计算方式 - score, err := itemValue.SumScore(itemValue.Weight, itemValue.Value) + score, err := itemValue.SumScore() if err != nil { return err } @@ -41,7 +41,7 @@ func (itemValue *SummaryEvaluationValue) SummaryEvaluationScore() error { return nil } -func (itemValue *SummaryEvaluationValue) SumScore(weight float64, value string) (float64, error) { +func (itemValue *SummaryEvaluationValue) SumScore() (float64, error) { if itemValue.Types == EvaluationHrbp { valueFloat, err := strconv.ParseFloat(itemValue.Value, 64) if err != nil { diff --git a/pkg/infrastructure/dao/staff_assess_dao.go b/pkg/infrastructure/dao/staff_assess_dao.go index 1dad56d..560cfa7 100644 --- a/pkg/infrastructure/dao/staff_assess_dao.go +++ b/pkg/infrastructure/dao/staff_assess_dao.go @@ -1191,3 +1191,35 @@ func (d *StaffAssessDao) SearchContentValueByAssessId(assessId []int) map[int][] return valueMap } + +type AssessContentLevelCode struct { + Cnt int `pg:"cnt"` //数量 + LevelValue string `pg:"levelValue"` //评估的等级值 + Category string `pg:"category"` //评估的分类 + Name string `pg:"name"` //名称 +} + +func (d *StaffAssessDao) CountAssessContentLevelCode(targetUserId int, assessType domain.StaffAssessType, cycleId int) ([]AssessContentLevelCode, error) { + sqlStr := ` +select +count(staff_assess_content.level_value) as cnt , +staff_assess_content.level_value , +staff_assess_content.category , +staff_assess_content."name" +from staff_assess_content +join staff_assess on staff_assess_content.staff_assess_id = staff_assess.id +where 1=1 and staff_assess.deleted_at isnull +and target_user ->>'userId'='?' +and staff_assess."types" = '?' +and staff_assess_content.level_value notnull +and staff_assess.cycle_id =? +group by level_value,category,"name" ` + + var result []AssessContentLevelCode + condition := []interface{}{ + targetUserId, string(assessType), cycleId, + } + tx := d.transactionContext.PgTx + _, err := tx.Query(&result, sqlStr, condition...) + return result, err +} diff --git a/pkg/port/beego/controllers/summary_evaluation_controller.go b/pkg/port/beego/controllers/summary_evaluation_controller.go index 80c78bd..f76ee4f 100644 --- a/pkg/port/beego/controllers/summary_evaluation_controller.go +++ b/pkg/port/beego/controllers/summary_evaluation_controller.go @@ -46,7 +46,7 @@ func (c *SummaryEvaluationController) GetMenu() { func (c *SummaryEvaluationController) GetEvaluationSelf() { srv := service.NewSummaryEvaluationService() - paramReq := &command.QueryEvaluationInfo{} + paramReq := &command.QueryEvaluation{} err := c.BindJSON(paramReq) if err != nil { e := application.ThrowError(application.ARG_ERROR, "json 解析错误"+err.Error()) @@ -55,12 +55,13 @@ func (c *SummaryEvaluationController) GetEvaluationSelf() { } userReq := middlewares.GetUser(c.Ctx) paramReq.CompanyId = int(userReq.CompanyId) - paramReq.ExecutorId = int(userReq.UserId) + paramReq.UserId = int(userReq.UserId) data, err := srv.GetEvaluationSelf(paramReq) c.Response(data, err) } +// EditEvaluationSelf 编辑综合自评 func (c *SummaryEvaluationController) EditEvaluationSelf() { srv := service.NewSummaryEvaluationService() paramReq := &command.EditEvaluationValue{} @@ -78,6 +79,7 @@ func (c *SummaryEvaluationController) EditEvaluationSelf() { } +// GetTargetUserCycleList 根据被评估人获取周期列表 func (c *SummaryEvaluationController) GetTargetUserCycleList() { srv := service.NewSummaryEvaluationService() paramReq := &command.QueryCycleList{} @@ -108,6 +110,24 @@ func (c *SummaryEvaluationController) GetEvaluation360() { c.Response(data, err) } +// CountEvaluationSelfLevel 获取自评小结 +func (c *SummaryEvaluationController) CountEvaluationSelfLevel() { + srv := service.NewSummaryEvaluationService() + paramReq := &command.QueryEvaluation{} + err := c.BindJSON(paramReq) + if err != nil { + e := application.ThrowError(application.ARG_ERROR, "json 解析错误"+err.Error()) + c.Response(nil, e) + return + } + userReq := middlewares.GetUser(c.Ctx) + paramReq.UserId = int(userReq.UserId) + paramReq.CompanyId = int(userReq.CompanyId) + data, err := srv.CountEvaluationSelfLevel(paramReq) + c.Response(data, err) + +} + func (c *SummaryEvaluationController) EditEvaluation360() { srv := service.NewSummaryEvaluationService() in := &command.EditEvaluationValue{} diff --git a/pkg/port/beego/routers/summary_evaluation_router.go b/pkg/port/beego/routers/summary_evaluation_router.go index 983d72f..d5e047a 100644 --- a/pkg/port/beego/routers/summary_evaluation_router.go +++ b/pkg/port/beego/routers/summary_evaluation_router.go @@ -19,6 +19,7 @@ func init() { web.NSCtrlPost("/evaluation-360/edit", (*controllers.SummaryEvaluationController).EditEvaluation360), web.NSCtrlPost("/evaluation-hr", (*controllers.SummaryEvaluationController).GetEvaluationHRBP), web.NSCtrlPost("/evaluation-hr/edit", (*controllers.SummaryEvaluationController).EditEvaluationHRBP), + web.NSCtrlPost("/self/summary", (*controllers.SummaryEvaluationController).CountEvaluationSelfLevel), ) web.AddNamespace(summaryNS) }