summary_evaluation_value.go
3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package domain
import (
"fmt"
"strconv"
"time"
)
// 周期综合评估填写的内容
type SummaryEvaluationValue struct {
Id int `json:"id"` //
EvaluationItemId int `json:"evaluationItemId"` //评估条目的id
SummaryEvaluationId int `json:"summaryEvaluationId"` //综合评估任务(SummaryEvaluation)的id
Value string `json:"value"` //评估填写的评分
Score string `json:"score"` //评定得分
Types EvaluationType `json:"types"` //评估类型
Remark string `json:"remark"` //填写的内容反馈
Weight float64 `json:"weight"` //"权重"
Rating RatingLevel `json:"rating" ` //评级时的填写值
CreatedAt time.Time `json:"createdAt"` //数据创建时间
UpdatedAt time.Time `json:"updatedAt"` //数据更新时间
DeletedAt *time.Time `json:"deletedAt"` //数据删除时间
}
type SummaryEvaluationValueRepository interface {
Save(param *SummaryEvaluationValue) error
Remove(id int) error
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()
if err != nil {
return err
}
itemValue.Score = fmt.Sprintf("%.2f", score)
return nil
}
func (itemValue *SummaryEvaluationValue) SumScore() (float64, error) {
if len(itemValue.Value) == 0 {
return 0, nil
}
if itemValue.Weight == 0 {
//使用评级
return 0, nil
}
if itemValue.Types == EvaluationHrbp {
//hrbp 填写值就是得分
valueFloat, err := strconv.ParseFloat(itemValue.Value, 64)
if err != nil {
return 0, fmt.Errorf("条目%d系数值异常,%s", itemValue.Id, itemValue.Value)
}
return valueFloat, nil
}
valueFloat, err := strconv.ParseFloat(itemValue.Value, 64)
if err != nil {
return 0, fmt.Errorf("条目%d系数值异常,%s", itemValue.Id, itemValue.Value)
}
//得分计算方式
score := itemValue.Weight * valueFloat
return score, nil
}
// 初始化一个空的value
func (itemValue *SummaryEvaluationValue) SetBlankValue(evaluation *SummaryEvaluation, item *EvaluationItemUsed) {
itemValue.Types = evaluation.Types
itemValue.EvaluationItemId = item.Id
itemValue.SummaryEvaluationId = evaluation.Id
itemValue.Value = ""
itemValue.Score = ""
itemValue.Remark = ""
itemValue.Weight = item.Weight
itemValue.CreatedAt = time.Now()
itemValue.UpdatedAt = time.Now()
}
// 填充评估的内容
func (itemValue *SummaryEvaluationValue) FillValue(item *EvaluationItemUsed, value string, remark string) error {
itemValue.Remark = remark
itemValue.Value = value
if item.Weight == 0 {
//使用评级
if len(value) == 0 {
return nil
}
var ratingValue *RatingLevel
for _, v := range item.Rule.Rating.Levels {
if v.Code == value {
ratingValue = v
}
}
if (ratingValue == nil) && len(value) > 0 {
return fmt.Errorf("条目%d系评级值异常", itemValue.EvaluationItemId)
}
itemValue.Rating = *ratingValue
return nil
}
//使用评分的形式
err := itemValue.SummaryEvaluationScore()
return err
}