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"` //数据更新时间 HrCheck int `json:"hrCheck"` // 记录人员id,人资稽查谁填写评估 ;>0:代表是人资稽查填写的评估 } type SummaryEvaluationValueRepository interface { Save(param *SummaryEvaluationValue) error Remove(id int) error RemoveBySummaryEvaluationId(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 itemValue.HrCheck = 0 } // 自评 填充评估的内容的规则 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 } // 360评估,上级评估 ,人资评估 填写评估值的规则 func (itemValue *SummaryEvaluationValue) FillValueV2(item *EvaluationItemUsed, value string) error { 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.Weight <= 0 { //无权重的情况 itemValue.Score = value 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 }