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"` //数据更新时间 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 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 }