作者 tangxvhui

处理绩效评估的填写值

... ... @@ -1694,6 +1694,12 @@ func (srv StaffAssessServeice) SaveAssessInfo(param *command.SaveAssessInfoComma
continue
}
v.Value = item.Value
//填入评估值描述
reteResult, err := v.Rule.ScoreOrRating(&v.Value)
if err != nil {
return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error())
}
v.ReteResult = reteResult
for ii := range v.Remark {
for _, vvv := range item.Remark {
if v.Remark[ii].Title == vvv.Title {
... ... @@ -1702,6 +1708,7 @@ func (srv StaffAssessServeice) SaveAssessInfo(param *command.SaveAssessInfoComma
}
}
}
}
//保存信息
... ...
... ... @@ -2,6 +2,8 @@ package domain
import (
"errors"
"fmt"
"strconv"
"time"
)
... ... @@ -56,9 +58,9 @@ type EvaluationRule struct {
DeletedAt *time.Time `json:"deletedAt" comment:"删除时间"`
}
//根据评估填写的值,得出等级名称,
//如果 评估方式是评分,对评估填写的值 的小数点进行处理
//value 根据评估填写的值
// 根据评估填写的值,得出等级名称
// 如果 评估方式是评分,对评估填写的值的小数点后的位数进行处理,
// value 根据评估填写的值
func (rule *EvaluationRule) ScoreOrRating(value *string) (string, error) {
switch rule.Type {
case EvaluationTypeRating:
... ... @@ -71,20 +73,27 @@ func (rule *EvaluationRule) ScoreOrRating(value *string) (string, error) {
//根据评估填写的值,得出等级名称,
func (rule *EvaluationRule) ScoreValue(value *string) (string, error) {
// valueFloat, err := strconv.ParseFloat(*value, 64)
// if err != nil {
// return "", errors.New("评分填写的值错误")
// }
// if valueFloat < rule.Score.Min || valueFloat > rule.Score.Max {
// return "", errors.New("评分填写的值超出限制")
// }
valueFloat, err := strconv.ParseFloat(*value, 64)
if err != nil {
return "", errors.New("评分填写的值错误")
}
if valueFloat < rule.Score.Min || valueFloat > rule.Score.Max {
return "", fmt.Errorf("评分填写的值超出限制,>=%f且<=%f", rule.Score.Min, rule.Score.Max)
}
//保留小数处理
fStr := fmt.Sprintf("%%.%df", rule.Score.DecimalPlaces)
valueStr := fmt.Sprintf(fStr, valueFloat)
*value = valueStr
if rule.Score.IntervalState == 0 {
// 未开启按分数子区间匹配等级
return "", nil
}
valueDescrip := ""
// for _, v := range rule.Score.Levels {
// if valueFloat >= v.Start && valueFloat <= v.End {
// valueDescrip = v.Name
// }
// }
for _, v := range rule.Score.Levels {
if valueFloat >= v.Start && valueFloat <= v.End {
valueDescrip = v.Name
}
}
return valueDescrip, nil
}
... ...