正在显示
8 个修改的文件
包含
128 行增加
和
15 行删除
| @@ -12,7 +12,7 @@ type EvaluationInfoAdapter struct { | @@ -12,7 +12,7 @@ type EvaluationInfoAdapter struct { | ||
| 12 | BeginTime string `json:"beginTime"` //开始时间 2006-01-02 15:04:05 | 12 | BeginTime string `json:"beginTime"` //开始时间 2006-01-02 15:04:05 |
| 13 | EndTime string `json:"endTime"` //结束时间 2006-01-02 15:04:05 | 13 | EndTime string `json:"endTime"` //结束时间 2006-01-02 15:04:05 |
| 14 | Status string `json:"status"` //完成状态 | 14 | Status string `json:"status"` //完成状态 |
| 15 | - EvaluationItems []EvaluationItemAdapter `json:"assessContent"` | 15 | + EvaluationItems []EvaluationItemAdapter `json:"evaluationItems"` |
| 16 | } | 16 | } |
| 17 | 17 | ||
| 18 | type EvaluationItemAdapter struct { | 18 | type EvaluationItemAdapter struct { |
| @@ -28,6 +28,6 @@ type EvaluationItemAdapter struct { | @@ -28,6 +28,6 @@ type EvaluationItemAdapter struct { | ||
| 28 | Weight float64 `json:"weight"` //"权重" | 28 | Weight float64 `json:"weight"` //"权重" |
| 29 | Required int `json:"required"` // 必填项 | 29 | Required int `json:"required"` // 必填项 |
| 30 | Value string `json:"value"` //评估填写的评分 | 30 | Value string `json:"value"` //评估填写的评分 |
| 31 | - Score string `json:"score"` //评定得分 | 31 | + Score string `json:"score"` //计算的评定得分 |
| 32 | Remark string `json:"remark"` //填写的内容反馈 | 32 | Remark string `json:"remark"` //填写的内容反馈 |
| 33 | } | 33 | } |
| @@ -7,6 +7,6 @@ type EditEvaluationValue struct { | @@ -7,6 +7,6 @@ type EditEvaluationValue struct { | ||
| 7 | EvaluationItems []struct { | 7 | EvaluationItems []struct { |
| 8 | Value string `json:"value"` | 8 | Value string `json:"value"` |
| 9 | Remark string `json:"remark"` | 9 | Remark string `json:"remark"` |
| 10 | - EvaluationItemId string `json:"evaluationItemId"` | 10 | + EvaluationItemId int `json:"evaluationItemId,string"` |
| 11 | } `json:"evaluationItems"` | 11 | } `json:"evaluationItems"` |
| 12 | } | 12 | } |
| 1 | package service | 1 | package service |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | + "time" | ||
| 5 | + | ||
| 4 | "github.com/linmadan/egglib-go/core/application" | 6 | "github.com/linmadan/egglib-go/core/application" |
| 5 | "github.com/linmadan/egglib-go/utils/tool_funs" | 7 | "github.com/linmadan/egglib-go/utils/tool_funs" |
| 6 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory" | 8 | "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory" |
| @@ -313,7 +315,6 @@ func (srv *SummaryEvaluationServeice) GetEvaluationSelf(param *command.QueryEval | @@ -313,7 +315,6 @@ func (srv *SummaryEvaluationServeice) GetEvaluationSelf(param *command.QueryEval | ||
| 313 | _, itemList, err := evaluationItemRepo.Find(map[string]interface{}{ | 315 | _, itemList, err := evaluationItemRepo.Find(map[string]interface{}{ |
| 314 | "evaluationProjectId": evaluationData.EvaluationProjectId, | 316 | "evaluationProjectId": evaluationData.EvaluationProjectId, |
| 315 | "nodeType": int(domain.LinkNodeSelfAssessment), | 317 | "nodeType": int(domain.LinkNodeSelfAssessment), |
| 316 | - "limit": 300, | ||
| 317 | }) | 318 | }) |
| 318 | if err != nil { | 319 | if err != nil { |
| 319 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 320 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| @@ -375,19 +376,64 @@ func (srv *SummaryEvaluationServeice) EditEvaluationSelf(param *command.EditEval | @@ -375,19 +376,64 @@ func (srv *SummaryEvaluationServeice) EditEvaluationSelf(param *command.EditEval | ||
| 375 | if err != nil { | 376 | if err != nil { |
| 376 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 377 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 377 | } | 378 | } |
| 379 | + if evaluationData.Executor.UserId != param.ExecutorId { | ||
| 380 | + | ||
| 381 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "没有操作权限") | ||
| 382 | + } | ||
| 383 | + | ||
| 384 | + if evaluationData.CompanyId != param.CompanyId { | ||
| 385 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "没有操作权限") | ||
| 386 | + } | ||
| 378 | 387 | ||
| 379 | _, itemList, err := itemUsedRepo.Find(map[string]interface{}{ | 388 | _, itemList, err := itemUsedRepo.Find(map[string]interface{}{ |
| 380 | - "evaluationProjectId": int(domain.LinkNodeSelfAssessment), | ||
| 381 | - "limit": 300, | 389 | + "evaluationProjectId": evaluationData.EvaluationProjectId, |
| 390 | + }) | ||
| 391 | + if err != nil { | ||
| 392 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 393 | + } | ||
| 394 | + | ||
| 395 | + _, itemValueList, err := itemValueRepo.Find(map[string]interface{}{ | ||
| 396 | + "summaryEvaluationId": evaluationData.Id, | ||
| 382 | }) | 397 | }) |
| 398 | + | ||
| 383 | if err != nil { | 399 | if err != nil { |
| 384 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 400 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 385 | } | 401 | } |
| 386 | - _ = itemValueRepo | ||
| 387 | - _ = evaluationData | ||
| 388 | - _ = itemList | 402 | + |
| 403 | + evaluationValueMap := map[int]*domain.SummaryEvaluationValue{} | ||
| 404 | + for _, v := range itemList { | ||
| 405 | + newValue := &domain.SummaryEvaluationValue{} | ||
| 406 | + newValue.SetBlankValue(evaluationData, v) | ||
| 407 | + evaluationValueMap[v.Id] = newValue | ||
| 408 | + } | ||
| 409 | + for _, v := range itemValueList { | ||
| 410 | + if mValue, ok := evaluationValueMap[v.EvaluationItemId]; ok { | ||
| 411 | + mValue.Id = v.Id | ||
| 412 | + } | ||
| 413 | + } | ||
| 414 | + | ||
| 415 | + nowTime := time.Now() | ||
| 416 | + for _, v := range param.EvaluationItems { | ||
| 417 | + updatedData, ok := evaluationValueMap[v.EvaluationItemId] | ||
| 418 | + if !ok { | ||
| 419 | + updatedData.UpdatedAt = nowTime | ||
| 420 | + updatedData.Value = v.Value | ||
| 421 | + updatedData.Remark = v.Remark | ||
| 422 | + } | ||
| 423 | + } | ||
| 424 | + evaluationValueList := []*domain.SummaryEvaluationValue{} | ||
| 425 | + for _, v := range evaluationValueMap { | ||
| 426 | + err = itemValueRepo.Save(v) | ||
| 427 | + if err != nil { | ||
| 428 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 429 | + } | ||
| 430 | + evaluationValueList = append(evaluationValueList, v) | ||
| 431 | + } | ||
| 389 | if err := transactionContext.CommitTransaction(); err != nil { | 432 | if err := transactionContext.CommitTransaction(); err != nil { |
| 390 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 433 | return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 391 | } | 434 | } |
| 392 | - return nil, nil | 435 | + itemValueAdapter := srv.buildSummaryItemValue(itemList, evaluationValueList) |
| 436 | + return map[string][]adapter.EvaluationItemAdapter{ | ||
| 437 | + "EvaluationItems": itemValueAdapter, | ||
| 438 | + }, nil | ||
| 393 | } | 439 | } |
| 1 | package domain | 1 | package domain |
| 2 | 2 | ||
| 3 | -import "time" | 3 | +import ( |
| 4 | + "fmt" | ||
| 5 | + "time" | ||
| 6 | +) | ||
| 4 | 7 | ||
| 5 | // 周综合评估 | 8 | // 周综合评估 |
| 6 | type SummaryEvaluation struct { | 9 | type SummaryEvaluation struct { |
| @@ -56,3 +59,18 @@ type SummaryEvaluationRepository interface { | @@ -56,3 +59,18 @@ type SummaryEvaluationRepository interface { | ||
| 56 | FindOne(queryOptions map[string]interface{}) (*SummaryEvaluation, error) | 59 | FindOne(queryOptions map[string]interface{}) (*SummaryEvaluation, error) |
| 57 | Find(queryOptions map[string]interface{}) (int, []*SummaryEvaluation, error) | 60 | Find(queryOptions map[string]interface{}) (int, []*SummaryEvaluation, error) |
| 58 | } | 61 | } |
| 62 | + | ||
| 63 | +// 计算总分。TotalScore 保留1位小数 | ||
| 64 | +func (evaluation *SummaryEvaluation) EvaluationTotalScore(valueList []*SummaryEvaluationValue) error { | ||
| 65 | + var totalScore float64 | ||
| 66 | + for _, v := range valueList { | ||
| 67 | + score, err := v.SumScore(v.Weight, v.Value) | ||
| 68 | + if err != nil { | ||
| 69 | + return err | ||
| 70 | + } | ||
| 71 | + | ||
| 72 | + totalScore += score | ||
| 73 | + } | ||
| 74 | + evaluation.TotalScore = fmt.Sprintf("%.2f", totalScore) | ||
| 75 | + return nil | ||
| 76 | +} |
| 1 | package domain | 1 | package domain |
| 2 | 2 | ||
| 3 | -import "time" | 3 | +import ( |
| 4 | + "fmt" | ||
| 5 | + "strconv" | ||
| 6 | + "time" | ||
| 7 | +) | ||
| 4 | 8 | ||
| 5 | // 周期综合评估填写的内容 | 9 | // 周期综合评估填写的内容 |
| 6 | type SummaryEvaluationValue struct { | 10 | type SummaryEvaluationValue struct { |
| @@ -11,6 +15,7 @@ type SummaryEvaluationValue struct { | @@ -11,6 +15,7 @@ type SummaryEvaluationValue struct { | ||
| 11 | Score string `json:"score"` //评定得分 | 15 | Score string `json:"score"` //评定得分 |
| 12 | Types EvaluationType `json:"types"` //评估类型 | 16 | Types EvaluationType `json:"types"` //评估类型 |
| 13 | Remark string `json:"remark"` //填写的内容反馈 | 17 | Remark string `json:"remark"` //填写的内容反馈 |
| 18 | + Weight float64 `json:"weight"` //"权重" | ||
| 14 | CreatedAt time.Time `json:"createdAt"` //数据创建时间 | 19 | CreatedAt time.Time `json:"createdAt"` //数据创建时间 |
| 15 | UpdatedAt time.Time `json:"updatedAt"` //数据更新时间 | 20 | UpdatedAt time.Time `json:"updatedAt"` //数据更新时间 |
| 16 | DeletedAt *time.Time `json:"deletedAt"` //数据删除时间 | 21 | DeletedAt *time.Time `json:"deletedAt"` //数据删除时间 |
| @@ -22,3 +27,42 @@ type SummaryEvaluationValueRepository interface { | @@ -22,3 +27,42 @@ type SummaryEvaluationValueRepository interface { | ||
| 22 | FindOne(queryOptions map[string]interface{}) (*SummaryEvaluationValue, error) | 27 | FindOne(queryOptions map[string]interface{}) (*SummaryEvaluationValue, error) |
| 23 | Find(queryOptions map[string]interface{}) (int, []*SummaryEvaluationValue, error) | 28 | Find(queryOptions map[string]interface{}) (int, []*SummaryEvaluationValue, error) |
| 24 | } | 29 | } |
| 30 | + | ||
| 31 | +// 计算周期评估 | ||
| 32 | +// 当指标项没有权重的时候,还是进行评级操作,不计算分数 | ||
| 33 | +// 分数保留2位小数 | ||
| 34 | +func (itemValue *SummaryEvaluationValue) SummaryEvaluationScore() error { | ||
| 35 | + //计算方式 | ||
| 36 | + score, err := itemValue.SumScore(itemValue.Weight, itemValue.Value) | ||
| 37 | + if err != nil { | ||
| 38 | + return err | ||
| 39 | + } | ||
| 40 | + itemValue.Score = fmt.Sprintf("%.2f", score) | ||
| 41 | + return nil | ||
| 42 | +} | ||
| 43 | + | ||
| 44 | +func (item *SummaryEvaluationValue) SumScore(weight float64, value string) (float64, error) { | ||
| 45 | + if item.Weight == 0 { | ||
| 46 | + return 0, nil | ||
| 47 | + } | ||
| 48 | + valueFloat, err := strconv.ParseFloat(item.Value, 64) | ||
| 49 | + if err != nil { | ||
| 50 | + return 0, fmt.Errorf("条目%d系数值异常,%s", item.Id, item.Value) | ||
| 51 | + } | ||
| 52 | + //计算方式 | ||
| 53 | + score := item.Weight * valueFloat | ||
| 54 | + return score, nil | ||
| 55 | +} | ||
| 56 | + | ||
| 57 | +// 初始化一个空的value | ||
| 58 | +func (itemValue *SummaryEvaluationValue) SetBlankValue(evaluation *SummaryEvaluation, item *EvaluationItemUsed) { | ||
| 59 | + itemValue.EvaluationItemId = item.Id | ||
| 60 | + itemValue.SummaryEvaluationId = evaluation.Id | ||
| 61 | + itemValue.Value = "" | ||
| 62 | + itemValue.Score = "" | ||
| 63 | + itemValue.Remark = "" | ||
| 64 | + itemValue.Types = evaluation.Types | ||
| 65 | + itemValue.Weight = item.Weight | ||
| 66 | + itemValue.CreatedAt = time.Now() | ||
| 67 | + itemValue.UpdatedAt = time.Now() | ||
| 68 | +} |
| @@ -71,7 +71,7 @@ func (repo *EvaluationItemUsedRepository) Find(queryOptions map[string]interface | @@ -71,7 +71,7 @@ func (repo *EvaluationItemUsedRepository) Find(queryOptions map[string]interface | ||
| 71 | tx := repo.transactionContext.PgTx | 71 | tx := repo.transactionContext.PgTx |
| 72 | var m []*models.EvaluationItemUsed | 72 | var m []*models.EvaluationItemUsed |
| 73 | query := tx.Model(&m). | 73 | query := tx.Model(&m). |
| 74 | - Where("deleted_at isnull").Limit(20) | 74 | + Where("deleted_at isnull") |
| 75 | if v, ok := queryOptions["limit"].(int); ok { | 75 | if v, ok := queryOptions["limit"].(int); ok { |
| 76 | query.Limit(v) | 76 | query.Limit(v) |
| 77 | } | 77 | } |
| @@ -98,13 +98,16 @@ func (repo *SummaryEvaluationValueRepository) Find(queryOptions map[string]inter | @@ -98,13 +98,16 @@ func (repo *SummaryEvaluationValueRepository) Find(queryOptions map[string]inter | ||
| 98 | tx := repo.transactionContext.PgTx | 98 | tx := repo.transactionContext.PgTx |
| 99 | var m []*models.SummaryEvaluationValue | 99 | var m []*models.SummaryEvaluationValue |
| 100 | query := tx.Model(&m). | 100 | query := tx.Model(&m). |
| 101 | - Where("deleted_at isnull").Limit(20) | 101 | + Where("deleted_at isnull") |
| 102 | if v, ok := queryOptions["limit"].(int); ok { | 102 | if v, ok := queryOptions["limit"].(int); ok { |
| 103 | query.Limit(v) | 103 | query.Limit(v) |
| 104 | } | 104 | } |
| 105 | if v, ok := queryOptions["offset"].(int); ok { | 105 | if v, ok := queryOptions["offset"].(int); ok { |
| 106 | query.Offset(v) | 106 | query.Offset(v) |
| 107 | } | 107 | } |
| 108 | + if v, ok := queryOptions["summaryEvaluationId"]; ok { | ||
| 109 | + query.Where("summary_evaluation_id=?", v) | ||
| 110 | + } | ||
| 108 | count, err := query.SelectAndCount() | 111 | count, err := query.SelectAndCount() |
| 109 | if err != nil { | 112 | if err != nil { |
| 110 | return 0, nil, err | 113 | return 0, nil, err |
-
请 注册 或 登录 后发表评论