|
|
package domain
|
|
|
|
|
|
import (
|
|
|
"errors"
|
|
|
"fmt"
|
|
|
"strconv"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
//填写的评估内容
|
|
|
type StaffAssessContent struct {
|
|
|
Id int `json:"id"` //id
|
|
|
StaffAssessId int `json:"staffAssessId"` //用户需要的评估项id
|
|
|
SortBy int `json:"sortBy"` //排序
|
|
|
Category string `json:"category"` //类别
|
|
|
Name string `json:"name"` //名称
|
|
|
PromptTitle string `json:"promptTitle"` //提示项标题
|
|
|
PromptText string `json:"promptText"` //提示项正文
|
|
|
Remark []AssessContemtRemark `json:"remark"` //填写的反馈
|
|
|
Value string `json:"value"` //评估填写的值
|
|
|
ScoreValue float64 `json:"scoreValue"` // 填写值按规则Rule转换为相应的量化值
|
|
|
LevelValue string `json:"levelValue"` // 填写值按规则Rule转换为相应的等级值
|
|
|
ReteResult string `json:"reteResult"` //评估的结果
|
|
|
Rule EvaluationRule `json:"rule"` //评估的选项规则
|
|
|
Weight float64 `json:"weight" ` //"权重"
|
|
|
CreatedAt time.Time `json:"createdAt"` //数据创建时间
|
|
|
UpdatedAt time.Time `json:"updatedAt"` //数据更新时间
|
|
|
DeletedAt *time.Time `json:"deletedAt"`
|
|
|
}
|
|
|
|
|
|
type AssessContemtRemark struct {
|
|
|
Title string `json:"title"` //comment:"填写标题"
|
|
|
HintText string `json:"hintText"` // comment:"文本内容提示"
|
|
|
Definition string `json:"definition"` //comment:"定义"
|
|
|
RemarkText string `json:"remarkText"` // comment:"填写文本内容"
|
|
|
}
|
|
|
|
|
|
//TransformValue
|
|
|
//根据规则 rule 转换评填写的值
|
|
|
func (content *StaffAssessContent) TransformValue() error {
|
|
|
switch content.Rule.Type {
|
|
|
case EvaluationTypeRating:
|
|
|
return content.ratingValue()
|
|
|
case EvaluationTypeScore:
|
|
|
return content.scoreValue()
|
|
|
}
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
// 规则是评级方式
|
|
|
func (content *StaffAssessContent) ratingValue() error {
|
|
|
levels := content.Rule.Rating.Levels
|
|
|
for _, v := range levels {
|
|
|
if v.Code != content.Value {
|
|
|
continue
|
|
|
}
|
|
|
content.LevelValue = v.Code
|
|
|
content.ScoreValue = v.QuantizedValue
|
|
|
content.ReteResult = v.Name
|
|
|
return nil
|
|
|
}
|
|
|
return errors.New("评级填写的值错误")
|
|
|
}
|
|
|
|
|
|
// 规则是评分方式
|
|
|
func (content *StaffAssessContent) scoreValue() error {
|
|
|
valueFloat, err := strconv.ParseFloat(content.Value, 64)
|
|
|
if err != nil {
|
|
|
return errors.New("评分填写的值错误")
|
|
|
}
|
|
|
rule := &content.Rule
|
|
|
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)
|
|
|
content.Value = valueStr
|
|
|
if rule.Score.IntervalState == 0 {
|
|
|
// 未开启按分数子区间匹配等级
|
|
|
return nil
|
|
|
}
|
|
|
for _, v := range rule.Score.Levels {
|
|
|
if valueFloat < v.Start || valueFloat > v.End {
|
|
|
continue
|
|
|
}
|
|
|
content.LevelValue = v.Code
|
|
|
content.ScoreValue = valueFloat
|
|
|
content.ReteResult = v.Name
|
|
|
return nil
|
|
|
}
|
|
|
return errors.New("评分填写的值错误")
|
|
|
}
|
|
|
|
|
|
type StaffAssessContentRepository interface {
|
|
|
Save(param *StaffAssessContent) (*StaffAssessContent, error)
|
|
|
Remove(id int) error
|
|
|
FindOne(queryOptions map[string]interface{}) (*StaffAssessContent, error)
|
|
|
Find(queryOptions map[string]interface{}) (int, []*StaffAssessContent, error)
|
|
|
} |
|
|
package domain
|
|
|
|
|
|
import (
|
|
|
"errors"
|
|
|
"fmt"
|
|
|
"strconv"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
//填写的评估内容
|
|
|
type StaffAssessContent struct {
|
|
|
Id int `json:"id"` //id
|
|
|
StaffAssessId int `json:"staffAssessId"` //用户需要的评估项id
|
|
|
SortBy int `json:"sortBy"` //排序
|
|
|
Category string `json:"category"` //类别
|
|
|
Name string `json:"name"` //名称
|
|
|
PromptTitle string `json:"promptTitle"` //提示项标题
|
|
|
PromptText string `json:"promptText"` //提示项正文
|
|
|
Remark []AssessContemtRemark `json:"remark"` //填写的反馈
|
|
|
Value string `json:"value"` //评估填写的值
|
|
|
ScoreValue float64 `json:"scoreValue"` // 填写值按规则Rule转换为相应的量化值
|
|
|
LevelValue string `json:"levelValue"` // 填写值按规则Rule转换为相应的等级值
|
|
|
ReteResult string `json:"reteResult"` //评估的结果
|
|
|
Rule EvaluationRule `json:"rule"` //评估的选项规则
|
|
|
Weight float64 `json:"weight" ` //"权重"
|
|
|
Required int `json:"required"` // 必填项
|
|
|
CreatedAt time.Time `json:"createdAt"` //数据创建时间
|
|
|
UpdatedAt time.Time `json:"updatedAt"` //数据更新时间
|
|
|
DeletedAt *time.Time `json:"deletedAt"`
|
|
|
}
|
|
|
|
|
|
type AssessContemtRemark struct {
|
|
|
Title string `json:"title"` //comment:"填写标题"
|
|
|
HintText string `json:"hintText"` // comment:"文本内容提示"
|
|
|
Definition string `json:"definition"` //comment:"定义"
|
|
|
RemarkText string `json:"remarkText"` // comment:"填写文本内容"
|
|
|
}
|
|
|
|
|
|
//TransformValue
|
|
|
//根据规则 rule 转换评填写的值
|
|
|
func (content *StaffAssessContent) TransformValue() error {
|
|
|
switch content.Rule.Type {
|
|
|
case EvaluationTypeRating:
|
|
|
return content.ratingValue()
|
|
|
case EvaluationTypeScore:
|
|
|
return content.scoreValue()
|
|
|
}
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
// 规则是评级方式
|
|
|
func (content *StaffAssessContent) ratingValue() error {
|
|
|
levels := content.Rule.Rating.Levels
|
|
|
for _, v := range levels {
|
|
|
if v.Code != content.Value {
|
|
|
continue
|
|
|
}
|
|
|
content.LevelValue = v.Code
|
|
|
content.ScoreValue = v.QuantizedValue
|
|
|
content.ReteResult = v.Name
|
|
|
return nil
|
|
|
}
|
|
|
return errors.New("评级填写的值错误")
|
|
|
}
|
|
|
|
|
|
// 规则是评分方式
|
|
|
func (content *StaffAssessContent) scoreValue() error {
|
|
|
valueFloat, err := strconv.ParseFloat(content.Value, 64)
|
|
|
if err != nil {
|
|
|
return errors.New("评分填写的值错误")
|
|
|
}
|
|
|
rule := &content.Rule
|
|
|
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)
|
|
|
content.Value = valueStr
|
|
|
if rule.Score.IntervalState == 0 {
|
|
|
// 未开启按分数子区间匹配等级
|
|
|
return nil
|
|
|
}
|
|
|
for _, v := range rule.Score.Levels {
|
|
|
if valueFloat < v.Start || valueFloat > v.End {
|
|
|
continue
|
|
|
}
|
|
|
content.LevelValue = v.Code
|
|
|
content.ScoreValue = valueFloat
|
|
|
content.ReteResult = v.Name
|
|
|
return nil
|
|
|
}
|
|
|
return errors.New("评分填写的值错误")
|
|
|
}
|
|
|
|
|
|
type StaffAssessContentRepository interface {
|
|
|
Save(param *StaffAssessContent) (*StaffAssessContent, error)
|
|
|
Remove(id int) error
|
|
|
FindOne(queryOptions map[string]interface{}) (*StaffAssessContent, error)
|
|
|
Find(queryOptions map[string]interface{}) (int, []*StaffAssessContent, error)
|
|
|
} |
...
|
...
|
|