summary_evaluation_value.go 2.7 KB
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"`              //"权重"
	CreatedAt           time.Time      `json:"createdAt"`           //数据创建时间
	UpdatedAt           time.Time      `json:"updatedAt"`           //数据更新时间
	DeletedAt           *time.Time     `json:"deletedAt"`           //数据删除时间
}

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.Types == EvaluationHrbp {
		valueFloat, err := strconv.ParseFloat(itemValue.Value, 64)
		if err != nil {
			return 0, fmt.Errorf("条目%d系数值异常,%s", itemValue.Id, itemValue.Value)
		}
		return valueFloat, nil
	}

	if itemValue.Weight == 0 {
		return 0, 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.EvaluationItemId = item.Id
	itemValue.SummaryEvaluationId = evaluation.Id
	itemValue.Value = ""
	itemValue.Score = ""
	itemValue.Remark = ""
	itemValue.Types = evaluation.Types
	itemValue.Weight = item.Weight
	itemValue.CreatedAt = time.Now()
	itemValue.UpdatedAt = time.Now()
}