summary_evaluation_value.go
4.8 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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
package domain
import (
"errors"
"fmt"
"strconv"
"strings"
"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"` //数据更新时间
IsTemporary int `json:"IsTemporary"` // 0-正式数据 1-临时提交的数据
}
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
if item.Weight == 0 {
err := itemValue.valueTypeRating(item, value)
return err
}
err := itemValue.valueTypeScore(item, value)
//使用评分的形式
// err := itemValue.SummaryEvaluationScore()
return err
}
// 填写的值是 评级
func (itemValue *SummaryEvaluationValue) valueTypeRating(item *EvaluationItemUsed, value string) error {
if item.Weight != 0 {
return errors.New("评级方式错误")
}
value = strings.TrimSpace(value)
itemValue.Value = value
itemValue.Score = "0"
// 使用评级
if len(value) == 0 {
itemValue.Rating = RatingLevel{}
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:%s-%s评级值异常", item.Id, item.Category, item.Name)
}
itemValue.Rating = *ratingValue
return nil
}
// 填写的值是 评分
func (itemValue *SummaryEvaluationValue) valueTypeScore(item *EvaluationItemUsed, value string) error {
if item.Weight <= 0 {
return errors.New("评分方式错误")
}
value = strings.TrimSpace(value)
itemValue.Value = value
//处理空值
if len(value) == 0 {
itemValue.Score = "0"
return nil
}
valueNumber, err := strconv.ParseFloat(value, 64)
if err != nil {
return fmt.Errorf("条目%d:%s-%s评分值异常", item.Id, item.Category, item.Name)
}
if item.EvaluatorId < 0 {
//hrbp 的评分方式
itemValue.Score = value
return nil
} else {
// 非hrbp的评分方式
// 分数保留2位小数
score := valueNumber * item.Weight
itemValue.Score = fmt.Sprintf("%.2f", score)
}
return nil
}