You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
2.4 KiB
Go

package model
import (
"errors"
"github.com/fonchain_enterprise/fonchain-approval/pkg/m"
"gorm.io/plugin/soft_delete"
"time"
)
// ApprovalWorkFlow 审批流
type ApprovalWorkFlow struct {
ID uint64 `gorm:"primaryKey;column:id" json:"id"`
DeletedAt soft_delete.DeletedAt `gorm:"column:deleted_at" json:"deletedAt"`
CreatedAt time.Time `gorm:"column:created_at" json:"createdAt"`
UpdatedAt time.Time `gorm:"column:updated_at" json:"updatedAt"`
ApprovalID uint64 `gorm:"column:approval_id" json:"approvalId"`
UserId uint64 `gorm:"column:user_id" json:"userId"`
Name string `gorm:"column:name" json:"name"`
Level uint8 `gorm:"column:level" json:"Level"`
Status uint8 `gorm:"column:status" json:"Status"`
Reply string `gorm:"column:reply" json:"Reply"`
OperatedAt time.Time `gorm:"column:operated_at" json:"operatedAt"`
}
func GetNowWorkFlowByApprovalId(approvalId uint64) (*ApprovalWorkFlow, error) {
var workFlow *ApprovalWorkFlow
if err := DB.Model(&ApprovalWorkFlow{ApprovalID: approvalId, Status: StatusDoing}).Order("level asc").First(&workFlow).Error; err != nil {
return nil, err
}
return workFlow, nil
}
func GetWorkFlowByLevel(approvalId uint64, level uint8) (*ApprovalWorkFlow, error) {
var workFlow *ApprovalWorkFlow
if err := DB.Model(&ApprovalWorkFlow{ApprovalID: approvalId, Level: level}).First(&workFlow).Error; err != nil {
return nil, err
}
return workFlow, nil
}
func BatchSave(users ApprovalUsers, approvalId uint64) error {
var insertRaws []*ApprovalWorkFlow
if users == nil && len(users) == 0 {
return errors.New(m.ErrorNotFound)
}
for index, user := range users {
temp := &ApprovalWorkFlow{
UserId: user.ID,
Name: user.Name,
ApprovalID: approvalId,
Level: uint8(index + 1),
}
insertRaws = append(insertRaws, temp)
}
return DB.Create(&insertRaws).Error
}
func (m *ApprovalWorkFlow) TableName() string {
return "approval_workflow"
}
func (m *ApprovalWorkFlow) Pass(replay string) error {
return m.SetStatus(StatusOk, replay)
}
func (m *ApprovalWorkFlow) Refuse(replay string) error {
return m.SetStatus(StatusFail, replay)
}
func (m *ApprovalWorkFlow) SetStatus(status uint8, reply string) error {
m.Status = status
m.Reply = reply
DB.Save(m)
return DB.Save(m).Error
}