product_trouble.go 2.8 KB
package domain

import (
	"errors"
	"time"
)

// 事故管理数据结构
type ProductTrouble struct {
	Id            int                   `json:"id"`                      // id
	CompanyId     int                   `json:"companyId"`               //企业id
	OrgId         int                   `json:"orgId"`                   //组织ID
	WorkStation   WorkStation           `json:"workStation"`             // 工作位置
	ProductWorker User                  `json:"productWorker,omitempty"` // 生产工人
	AmountLoss    float64               `json:"amountLoss"`              // 损失的金额
	Types         TroubleType           `json:"types"`                   // 事故类型
	RecordData    time.Time             `json:"recordData"`              // 事故发生的日期
	Remark        string                `json:"remakr"`                  // 备注
	ApproveStatus ProductTroubleApprove `json:"approveStatus"`           // 审核状态  1:未审核  2:已审核 3.自动审核
	ApproveAt     *time.Time            `json:"approveAt"`               // 审核时间
	ApproveUser   *User                 `json:"approveUser"`             // 审核人
	CreatedAt     time.Time             `json:"createdAt,omitempty"`     // 创建时间
	UpdatedAt     time.Time             `json:"updatedAt,omitempty"`     // 更新时间
	DeletedAt     *time.Time            `json:"deletedAt,omitempty"`     // 删除时间
}

// 事故类型
type TroubleType int

// 事故类型 1 安全事故 ,2 质量事故, 3 金属事故 ,4 非金属事故
const (
	TroubleType1 TroubleType = 1
	TroubleType2 TroubleType = 2
	TroubleType3 TroubleType = 3
	TroubleType4 TroubleType = 4
)

// 事故管理 审核状态
type ProductTroubleApprove int

// 审核状态  1:未审核 2:已审核
const (
	TroubleWaitApprove ProductTroubleApprove = 1
	TroubleIsApprove   ProductTroubleApprove = 2
)

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

func (m *ProductTrouble) SetTypes(v int) error {
	troubleType := TroubleType(v)
	switch troubleType {
	case TroubleType1, TroubleType2, TroubleType3, TroubleType4:
		m.Types = troubleType
	default:
		return errors.New("ProductTrouble.Types 值错误")
	}
	return nil
}

// 审核事故数据
func (m *ProductTrouble) Approve(approveUser *User) error {
	nowTime := time.Now()
	switch m.ApproveStatus {
	case TroubleIsApprove:
		return errors.New("事故不需要重复审核")
	default:
		m.ApproveAt = &nowTime
		m.ApproveStatus = TroubleIsApprove
		m.ApproveUser = approveUser
	}
	return nil
}