reward_standard.go 5.3 KB
package domain

import (
	"errors"
	"fmt"
	"strconv"
	"time"
)

// RewardStandard 奖惩标准
type RewardStandard struct {
	Id             int               `json:"id"`             //奖惩标准id
	CompanyId      int               `json:"companyId"`      //企业id
	OrgId          int               `json:"orgId"`          //组织ID
	Workshop       SimpleWorkshop    `json:"workshop"`       //车间id
	ProductLine    SimpleProductLine `json:"productLine"`    //生产线
	ProductSection ProductSection    `json:"ProductSection"` //工段
	Remark         string            `json:"remark"`         //备注
	TargetType     int               `json:"targetType"`     //指标类别 1:产效 2:合格率 3:安全事故 4:质量事故 5:异物次数
	TargeVal1      string            `json:"targeVal1"`      //填写的指标值1
	TargeVal2      string            `json:"targeVal2"`      //填写的指标值2
	TargeVal3      string            `json:"targeVal3"`      //填写的指标值3
	TargeVal4      string            `json:"targeVal4"`      //填写的指标值4
	CreatedAt      time.Time         `json:"createdAt"`      //创建时间
	UpdatedAt      time.Time         `json:"updatedAt"`      //更新时间
	DeletedAt      *time.Time        `json:"-"`              //删除时间
}

/*
填写的指标值描述
产效=> 功: 大于等于 x kg/小时;过:小于 x kg/小时
合格率=> 功:大于等于 x% ;过:小于 x%
安全事故 => 功:小于等于 x 次 或者 损失小于等于 x 元;过:大于 x 次 或 损失大于 x 元
质量事故 => 功:小于等于 x 次 或者 损失 小于等于 x 元;过:大于 x 次 或者 损失大于 x 元
异物次数 => 功:发现金属小于等于 x 次 或者 发现非金属小于等于 x 次
		   过:发现金属大于 x 次 或 发现非金数大于 x 次

*/

type RewardStandardRepository interface {
	Save(param *RewardStandard) (*RewardStandard, error)
	Remove(param *RewardStandard) (*RewardStandard, error)
	FindOne(queryOptions map[string]interface{}) (*RewardStandard, error)
	Find(queryOptions map[string]interface{}) (int64, []*RewardStandard, error)
}

// 指标类别 1:产效 2:合格率 3:安全事故 4:质量事故 5:异物次数
const (
	TargetType1 int = 1
	TargetType2 int = 2
	TargetType3 int = 3
	TargetType4 int = 4
	TargetType5 int = 5
)

// UpdateTarge 更新指标内容
func (m *RewardStandard) UpdateTarge(targetType int, targeVal1 string, targeVal2 string, targeVal3 string, targeVal4 string) error {
	switch targetType {
	case TargetType1, TargetType2:
		if len(targeVal1) == 0 || len(targeVal2) == 0 {
			return errors.New("功过指标内容不能为空")
		}
		_, err := strconv.Atoi(targeVal1)
		if err != nil {
			return errors.New("功过指标内容需要为整数")
		}
		_, err = strconv.Atoi(targeVal2)
		if err != nil {
			return errors.New("功过指标内容需要为整数")
		}
		m.TargetType = targetType
		m.TargeVal1 = targeVal1
		m.TargeVal2 = targeVal2
		m.TargeVal3 = ""
		m.TargeVal4 = ""
	case TargetType3, TargetType4, TargetType5:
		if len(targeVal1) == 0 || len(targeVal2) == 0 || len(targeVal3) == 0 || len(targeVal4) == 0 {
			return errors.New("功过指标内容不能为空")
		}
		_, err := strconv.Atoi(targeVal1)
		if err != nil {
			return errors.New("功过指标内容需要为整数")
		}
		_, err = strconv.Atoi(targeVal2)
		if err != nil {
			return errors.New("功过指标内容需要为整数")
		}
		_, err = strconv.Atoi(targeVal3)
		if err != nil {
			return errors.New("功过指标内容需要为整数")
		}
		_, err = strconv.Atoi(targeVal4)
		if err != nil {
			return errors.New("功过指标内容需要为整数")
		}
		m.TargetType = targetType
		m.TargeVal1 = targeVal1
		m.TargeVal2 = targeVal2
		m.TargeVal3 = targeVal3
		m.TargeVal4 = targeVal4
	default:
		return errors.New("指标类型填写错误")

	}
	return nil
}

// TargetTypeName
func (m *RewardStandard) TargetTypeName() string {
	switch m.TargetType {
	case TargetType1:
		return "产效"
	case TargetType2:
		return "合格率"
	case TargetType3:
		return "安全事故"
	case TargetType4:
		return "质量事故"
	case TargetType5:
		return "异物次数"
	}
	return ""
}

// ShowTargeReward 功过指标描述,功劳
func (m *RewardStandard) ShowTargeReward() string {
	show := ""
	switch m.TargetType {
	case TargetType1:
		show = fmt.Sprintf(">=%skg/小时", m.TargeVal1)
	case TargetType2:
		show = fmt.Sprintf(">=%s%%", m.TargeVal1)
	case TargetType3:
		show = fmt.Sprintf("<=%s次或损失<=%s元", m.TargeVal1, m.TargeVal2)
	case TargetType4:
		show = fmt.Sprintf("<=%s次或损失<=%s元", m.TargeVal1, m.TargeVal2)
	case TargetType5:
		show = fmt.Sprintf("金属<=%s次或非金属<=%s", m.TargeVal1, m.TargeVal2)
	}
	return show
}

// ShowTargeFault 功过指标描述,过失
func (m *RewardStandard) ShowTargeFault() string {
	show := ""
	switch m.TargetType {
	case TargetType1:
		show = fmt.Sprintf("<%skg/小时", m.TargeVal1)
	case TargetType2:
		show = fmt.Sprintf("<%s%%", m.TargeVal1)
	case TargetType3:
		show = fmt.Sprintf(">%s次或损失>%s元", m.TargeVal1, m.TargeVal2)
	case TargetType4:
		show = fmt.Sprintf("<=%s次或损失>%s元", m.TargeVal1, m.TargeVal2)
	case TargetType5:
		show = fmt.Sprintf("金属>%s次或非金属>%s", m.TargeVal1, m.TargeVal2)
	}
	return show
}

func (m *RewardStandard) VerdictTarget(val1 int, val float64) int {
	return 0
}