92 lines
2.5 KiB
Go
92 lines
2.5 KiB
Go
package model
|
|
|
|
import (
|
|
"errors"
|
|
"github.com/fonchain_enterprise/fonchain-approval-fork/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{}).
|
|
Where(&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{}).Where(&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,
|
|
Status: StatusDoing,
|
|
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
|
|
temp := time.Now()
|
|
m.OperatedAt = &temp
|
|
DB.Save(m)
|
|
return DB.Save(m).Error
|
|
}
|