|
|
package domain
|
|
|
|
|
|
import (
|
|
|
"errors"
|
|
|
"fmt"
|
|
|
"strconv"
|
|
|
"strings"
|
|
|
"time"
|
|
|
)
|
|
|
|
...
|
...
|
@@ -32,40 +34,40 @@ type SummaryEvaluationValueRepository interface { |
|
|
// 计算周期评估
|
|
|
// 当指标项没有权重的时候,还是进行评级操作,不计算分数
|
|
|
// 分数保留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) 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
|
|
|
}
|
|
|
// 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) {
|
...
|
...
|
@@ -83,25 +85,69 @@ func (itemValue *SummaryEvaluationValue) SetBlankValue(evaluation *SummaryEvalua |
|
|
// 填充评估的内容
|
|
|
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.valueTypeRating(item, value)
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
err := itemValue.valueTypeScore(item, value)
|
|
|
//使用评分的形式
|
|
|
err := itemValue.SummaryEvaluationScore()
|
|
|
// err := itemValue.SummaryEvaluationScore()
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
// 填写的值是 评级
|
|
|
func (itemValue *SummaryEvaluationValue) valueTypeRating(item *EvaluationItemUsed, value string) error {
|
|
|
if item.Weight != 0 {
|
|
|
return errors.New("评级方式错误")
|
|
|
}
|
|
|
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)
|
|
|
|
|
|
valueNumber, err := strconv.ParseFloat(value, 64)
|
|
|
if err != nil {
|
|
|
return fmt.Errorf("条目%d:%s-%s系评分值异常", item.Id, item.Category, item.Name)
|
|
|
}
|
|
|
itemValue.Value = value
|
|
|
//处理空值
|
|
|
if len(value) == 0 {
|
|
|
itemValue.Score = "0"
|
|
|
return nil
|
|
|
}
|
|
|
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
|
|
|
} |
...
|
...
|
|