diff --git a/pkg/application/summary_evaluation/adapter/evaluation_info.go b/pkg/application/summary_evaluation/adapter/evaluation_info.go index 89ad182..67cc416 100644 --- a/pkg/application/summary_evaluation/adapter/evaluation_info.go +++ b/pkg/application/summary_evaluation/adapter/evaluation_info.go @@ -12,7 +12,7 @@ type EvaluationInfoAdapter struct { BeginTime string `json:"beginTime"` //开始时间 2006-01-02 15:04:05 EndTime string `json:"endTime"` //结束时间 2006-01-02 15:04:05 Status string `json:"status"` //完成状态 - EvaluationItems []EvaluationItemAdapter `json:"assessContent"` + EvaluationItems []EvaluationItemAdapter `json:"evaluationItems"` } type EvaluationItemAdapter struct { @@ -28,6 +28,6 @@ type EvaluationItemAdapter struct { Weight float64 `json:"weight"` //"权重" Required int `json:"required"` // 必填项 Value string `json:"value"` //评估填写的评分 - Score string `json:"score"` //评定得分 + Score string `json:"score"` //计算的评定得分 Remark string `json:"remark"` //填写的内容反馈 } diff --git a/pkg/application/summary_evaluation/command/edit_evaluation_value.go b/pkg/application/summary_evaluation/command/edit_evaluation_value.go index c39785d..8edd21e 100644 --- a/pkg/application/summary_evaluation/command/edit_evaluation_value.go +++ b/pkg/application/summary_evaluation/command/edit_evaluation_value.go @@ -7,6 +7,6 @@ type EditEvaluationValue struct { EvaluationItems []struct { Value string `json:"value"` Remark string `json:"remark"` - EvaluationItemId string `json:"evaluationItemId"` + EvaluationItemId int `json:"evaluationItemId,string"` } `json:"evaluationItems"` } diff --git a/pkg/application/summary_evaluation/service/service.go b/pkg/application/summary_evaluation/service/service.go index 75027e2..7662d24 100644 --- a/pkg/application/summary_evaluation/service/service.go +++ b/pkg/application/summary_evaluation/service/service.go @@ -1,6 +1,8 @@ package service import ( + "time" + "github.com/linmadan/egglib-go/core/application" "github.com/linmadan/egglib-go/utils/tool_funs" "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory" @@ -313,7 +315,6 @@ func (srv *SummaryEvaluationServeice) GetEvaluationSelf(param *command.QueryEval _, itemList, err := evaluationItemRepo.Find(map[string]interface{}{ "evaluationProjectId": evaluationData.EvaluationProjectId, "nodeType": int(domain.LinkNodeSelfAssessment), - "limit": 300, }) if err != nil { return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) @@ -375,19 +376,64 @@ func (srv *SummaryEvaluationServeice) EditEvaluationSelf(param *command.EditEval if err != nil { return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) } + if evaluationData.Executor.UserId != param.ExecutorId { + + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "没有操作权限") + } + + if evaluationData.CompanyId != param.CompanyId { + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "没有操作权限") + } _, itemList, err := itemUsedRepo.Find(map[string]interface{}{ - "evaluationProjectId": int(domain.LinkNodeSelfAssessment), - "limit": 300, + "evaluationProjectId": evaluationData.EvaluationProjectId, + }) + if err != nil { + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) + } + + _, itemValueList, err := itemValueRepo.Find(map[string]interface{}{ + "summaryEvaluationId": evaluationData.Id, }) + if err != nil { return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) } - _ = itemValueRepo - _ = evaluationData - _ = itemList + + evaluationValueMap := map[int]*domain.SummaryEvaluationValue{} + for _, v := range itemList { + newValue := &domain.SummaryEvaluationValue{} + newValue.SetBlankValue(evaluationData, v) + evaluationValueMap[v.Id] = newValue + } + for _, v := range itemValueList { + if mValue, ok := evaluationValueMap[v.EvaluationItemId]; ok { + mValue.Id = v.Id + } + } + + nowTime := time.Now() + for _, v := range param.EvaluationItems { + updatedData, ok := evaluationValueMap[v.EvaluationItemId] + if !ok { + updatedData.UpdatedAt = nowTime + updatedData.Value = v.Value + updatedData.Remark = v.Remark + } + } + evaluationValueList := []*domain.SummaryEvaluationValue{} + for _, v := range evaluationValueMap { + err = itemValueRepo.Save(v) + if err != nil { + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) + } + evaluationValueList = append(evaluationValueList, v) + } if err := transactionContext.CommitTransaction(); err != nil { return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) } - return nil, nil + itemValueAdapter := srv.buildSummaryItemValue(itemList, evaluationValueList) + return map[string][]adapter.EvaluationItemAdapter{ + "EvaluationItems": itemValueAdapter, + }, nil } diff --git a/pkg/domain/evaluation_item_used.go b/pkg/domain/evaluation_item_used.go index 60573c6..6b88ae7 100644 --- a/pkg/domain/evaluation_item_used.go +++ b/pkg/domain/evaluation_item_used.go @@ -1,6 +1,8 @@ package domain -import "time" +import ( + "time" +) // 实际被应用的评估条目 type EvaluationItemUsed struct { diff --git a/pkg/domain/summary_evaluation.go b/pkg/domain/summary_evaluation.go index c86e740..6ad60cb 100644 --- a/pkg/domain/summary_evaluation.go +++ b/pkg/domain/summary_evaluation.go @@ -1,6 +1,9 @@ package domain -import "time" +import ( + "fmt" + "time" +) // 周综合评估 type SummaryEvaluation struct { @@ -56,3 +59,18 @@ type SummaryEvaluationRepository interface { FindOne(queryOptions map[string]interface{}) (*SummaryEvaluation, error) Find(queryOptions map[string]interface{}) (int, []*SummaryEvaluation, error) } + +// 计算总分。TotalScore 保留1位小数 +func (evaluation *SummaryEvaluation) EvaluationTotalScore(valueList []*SummaryEvaluationValue) error { + var totalScore float64 + for _, v := range valueList { + score, err := v.SumScore(v.Weight, v.Value) + if err != nil { + return err + } + + totalScore += score + } + evaluation.TotalScore = fmt.Sprintf("%.2f", totalScore) + return nil +} diff --git a/pkg/domain/summary_evaluation_value.go b/pkg/domain/summary_evaluation_value.go index 0e0af04..4aabcf4 100644 --- a/pkg/domain/summary_evaluation_value.go +++ b/pkg/domain/summary_evaluation_value.go @@ -1,6 +1,10 @@ package domain -import "time" +import ( + "fmt" + "strconv" + "time" +) // 周期综合评估填写的内容 type SummaryEvaluationValue struct { @@ -11,6 +15,7 @@ type SummaryEvaluationValue struct { Score string `json:"score"` //评定得分 Types EvaluationType `json:"types"` //评估类型 Remark string `json:"remark"` //填写的内容反馈 + Weight float64 `json:"weight"` //"权重" CreatedAt time.Time `json:"createdAt"` //数据创建时间 UpdatedAt time.Time `json:"updatedAt"` //数据更新时间 DeletedAt *time.Time `json:"deletedAt"` //数据删除时间 @@ -22,3 +27,42 @@ type SummaryEvaluationValueRepository interface { FindOne(queryOptions map[string]interface{}) (*SummaryEvaluationValue, error) Find(queryOptions map[string]interface{}) (int, []*SummaryEvaluationValue, error) } + +// 计算周期评估 +// 当指标项没有权重的时候,还是进行评级操作,不计算分数 +// 分数保留2位小数 +func (itemValue *SummaryEvaluationValue) SummaryEvaluationScore() error { + //计算方式 + score, err := itemValue.SumScore(itemValue.Weight, itemValue.Value) + if err != nil { + return err + } + itemValue.Score = fmt.Sprintf("%.2f", score) + return nil +} + +func (item *SummaryEvaluationValue) SumScore(weight float64, value string) (float64, error) { + if item.Weight == 0 { + return 0, nil + } + valueFloat, err := strconv.ParseFloat(item.Value, 64) + if err != nil { + return 0, fmt.Errorf("条目%d系数值异常,%s", item.Id, item.Value) + } + //计算方式 + score := item.Weight * valueFloat + return score, nil +} + +// 初始化一个空的value +func (itemValue *SummaryEvaluationValue) SetBlankValue(evaluation *SummaryEvaluation, item *EvaluationItemUsed) { + itemValue.EvaluationItemId = item.Id + itemValue.SummaryEvaluationId = evaluation.Id + itemValue.Value = "" + itemValue.Score = "" + itemValue.Remark = "" + itemValue.Types = evaluation.Types + itemValue.Weight = item.Weight + itemValue.CreatedAt = time.Now() + itemValue.UpdatedAt = time.Now() +} diff --git a/pkg/infrastructure/repository/pg_evaluation_item_used_repository.go b/pkg/infrastructure/repository/pg_evaluation_item_used_repository.go index 54234a5..21114c2 100644 --- a/pkg/infrastructure/repository/pg_evaluation_item_used_repository.go +++ b/pkg/infrastructure/repository/pg_evaluation_item_used_repository.go @@ -71,7 +71,7 @@ func (repo *EvaluationItemUsedRepository) Find(queryOptions map[string]interface tx := repo.transactionContext.PgTx var m []*models.EvaluationItemUsed query := tx.Model(&m). - Where("deleted_at isnull").Limit(20) + Where("deleted_at isnull") if v, ok := queryOptions["limit"].(int); ok { query.Limit(v) } diff --git a/pkg/infrastructure/repository/pg_summary_evaluation_value_repository.go b/pkg/infrastructure/repository/pg_summary_evaluation_value_repository.go index 749c0e4..55dc1ed 100644 --- a/pkg/infrastructure/repository/pg_summary_evaluation_value_repository.go +++ b/pkg/infrastructure/repository/pg_summary_evaluation_value_repository.go @@ -98,13 +98,16 @@ func (repo *SummaryEvaluationValueRepository) Find(queryOptions map[string]inter tx := repo.transactionContext.PgTx var m []*models.SummaryEvaluationValue query := tx.Model(&m). - Where("deleted_at isnull").Limit(20) + Where("deleted_at isnull") if v, ok := queryOptions["limit"].(int); ok { query.Limit(v) } if v, ok := queryOptions["offset"].(int); ok { query.Offset(v) } + if v, ok := queryOptions["summaryEvaluationId"]; ok { + query.Where("summary_evaluation_id=?", v) + } count, err := query.SelectAndCount() if err != nil { return 0, nil, err