summary_evaluation_value.go
4.7 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
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"` //填写的内容反馈
Executor StaffDesc `json:"executor"` //填写评估的用户,执行人
Weight float64 `json:"weight"` //"权重"
Rating RatingLevel `json:"rating"` //评级时的填写值
CreatedAt time.Time `json:"createdAt"` //数据创建时间
UpdatedAt time.Time `json:"updatedAt"` //数据更新时间
}
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)
}
// 初始化一个空的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 = "0"
itemValue.Remark = ""
itemValue.Weight = item.Weight
itemValue.CreatedAt = time.Now()
itemValue.UpdatedAt = time.Now()
itemValue.Executor = evaluation.Executor
}
// 填充评估的内容
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)
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
}
// 填写综合自评
func (itemValue *SummaryEvaluationValue) EvaluationSelfFillValue(item *EvaluationItemUsed, value string, remark string) error {
itemValue.Remark = remark
if item.Weight == 0 {
//使用评级的形式
err := itemValue.valueTypeRating(item, value)
return err
}
//综合自评 评分的形式,特殊处理
err := itemValue.valueTypeScoreEvaluationSelf(item, value)
return err
}
func (itemValue *SummaryEvaluationValue) valueTypeScoreEvaluationSelf(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)
}
// 分数保留2位小数
score := valueNumber * item.Weight
itemValue.Score = fmt.Sprintf("%.2f", score)
return nil
}