231 lines
6.4 KiB
Go
231 lines
6.4 KiB
Go
package model
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"github.com/fonchain_enterprise/fonchain-approval-fork/api/approval"
|
|
"github.com/fonchain_enterprise/fonchain-approval-fork/pkg/common/collection"
|
|
m2 "github.com/fonchain_enterprise/fonchain-approval-fork/pkg/m"
|
|
"gorm.io/plugin/soft_delete"
|
|
"time"
|
|
)
|
|
|
|
// Work 画作申请审批
|
|
type Work struct {
|
|
ID uint64 `gorm:"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"` // 更新时间
|
|
ReturnAt string `gorm:"column:return_at" json:"returnAt"` // 送还时间
|
|
ReceivedAt string `gorm:"column:received_at" json:"receivedAt"` // 领取时间
|
|
ApprovalID uint64 `gorm:"column:approval_id" json:"approvalId"` // 关联申请的ID
|
|
ApprovalWorks []*ApprovalWork `gorm:"foreignKey:WorkID" json:"ApprovalWorks"` //type:string comment:备注 version:2022-06-12 15:10
|
|
ArtistUID string `gorm:"type:varchar(50);column:artist_uid;default:'';comment:作家id" json:"artistUID"`
|
|
}
|
|
|
|
// TableName get sql table name.获取数据库表名
|
|
func (m *Work) TableName() string {
|
|
return "work"
|
|
}
|
|
|
|
func (m *Work) GetApproval(id uint64) (*Approval, error) {
|
|
|
|
var entity *Approval
|
|
if err := DB.
|
|
Preload("ApprovalWorkFlows").
|
|
Preload("ApprovalType").
|
|
Preload("Work.ApprovalWorks").
|
|
First(&entity, id).Error; err != nil {
|
|
return entity, err
|
|
}
|
|
|
|
return entity, nil
|
|
}
|
|
|
|
func (m *Work) SaveApprovalContent(in *approval.CreateRequest, a *Approval) error {
|
|
|
|
//主体保存
|
|
m.ApprovalID = a.ID
|
|
m.ReturnAt = in.Work.ReturnAt
|
|
m.ReceivedAt = in.Work.ReceivedAt
|
|
m.ArtistUID = in.Work.ArtistUID
|
|
|
|
err := DB.Create(m).Error
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
//绑定画作保存
|
|
var approvalWorks []ApprovalWork
|
|
for _, approvalWork := range in.Work.ApprovalWorks {
|
|
fmt.Println(approvalWork)
|
|
temp := ApprovalWork{
|
|
|
|
ApprovalID: a.ID,
|
|
WorkID: m.ID,
|
|
ArtworkID: approvalWork.ArtworkID,
|
|
ArtworkName: approvalWork.ArtworkName,
|
|
ArtistName: approvalWork.ArtistName,
|
|
ArtworkCover: approvalWork.ArtworkCover,
|
|
ArtworkNumber: approvalWork.ArtworkNumber,
|
|
ArtistUID: approvalWork.ArtistUID,
|
|
ShowSeq: approvalWork.ShowSeq,
|
|
}
|
|
|
|
approvalWorks = append(approvalWorks, temp)
|
|
}
|
|
|
|
if len(approvalWorks) > 0 {
|
|
err = DB.Create(&approvalWorks).Error
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
func (m *Work) UpdateApprovalContent(in *approval.CreateRequest, a *Approval) error {
|
|
|
|
var entity *Work
|
|
var err error
|
|
|
|
//主体保存
|
|
if err := DB.Where(&Work{ApprovalID: a.ID}).First(&entity).Error; err != nil {
|
|
return errors.New(m2.ErrorNotFound)
|
|
}
|
|
|
|
m.ID = entity.ID
|
|
//m.ApprovalID = a.ApproverID
|
|
m.ReturnAt = in.Work.ReturnAt
|
|
m.ReceivedAt = in.Work.ReceivedAt
|
|
|
|
if err = DB.Model(&m).Updates(m).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
return m.UpdateContent(in, a)
|
|
}
|
|
|
|
func (m *Work) UpdateContent(in *approval.CreateRequest, a *Approval) error {
|
|
var oldApprovalWorks []ApprovalWork
|
|
var oldArtWorkID []uint64
|
|
var inArtWorkID []uint64
|
|
var err error
|
|
inApprovalWorkMap := make(map[uint64]*approval.ApprovalWork, len(in.Work.ApprovalWorks))
|
|
|
|
DB.Where(&ApprovalWork{WorkID: m.ID}).Find(&oldApprovalWorks)
|
|
|
|
for _, oldAW := range oldApprovalWorks {
|
|
oldArtWorkID = append(oldArtWorkID, oldAW.ArtworkID)
|
|
}
|
|
|
|
for _, approvalWork := range in.Work.ApprovalWorks {
|
|
inArtWorkID = append(inArtWorkID, approvalWork.ArtworkID)
|
|
inApprovalWorkMap[approvalWork.ArtworkID] = approvalWork
|
|
}
|
|
|
|
needDel := collection.DiffArrayUint64(oldArtWorkID, inArtWorkID)
|
|
|
|
if len(needDel) > 0 {
|
|
DB.Where(&ApprovalWork{WorkID: m.ID}).Where("artwork_id in ?", needDel).
|
|
Delete(&ApprovalWork{})
|
|
}
|
|
|
|
needAdd := collection.DiffArrayUint64(inArtWorkID, oldArtWorkID)
|
|
|
|
//传递的id去除表 新增
|
|
if len(needAdd) > 0 {
|
|
var approvalWorks []ApprovalWork
|
|
for _, tempId := range needAdd {
|
|
temp := ApprovalWork{
|
|
ApprovalID: a.ID,
|
|
WorkID: m.ID,
|
|
ArtworkID: inApprovalWorkMap[tempId].ArtworkID,
|
|
ArtworkName: inApprovalWorkMap[tempId].ArtworkName,
|
|
ArtistName: inApprovalWorkMap[tempId].ArtistName,
|
|
ArtworkCover: inApprovalWorkMap[tempId].ArtworkCover,
|
|
ArtworkNumber: inApprovalWorkMap[tempId].ArtworkNumber,
|
|
}
|
|
|
|
approvalWorks = append(approvalWorks, temp)
|
|
}
|
|
|
|
if len(approvalWorks) > 0 {
|
|
if err = DB.Create(&approvalWorks).Error; err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
|
|
//更新 主要修改绑定的数据权限id
|
|
changeIds := collection.IntersectArrayUint64(inArtWorkID, oldArtWorkID)
|
|
if len(changeIds) > 0 {
|
|
for _, tempId := range changeIds {
|
|
|
|
if _, ok := inApprovalWorkMap[tempId]; ok == false {
|
|
continue
|
|
}
|
|
|
|
temp := ApprovalWork{
|
|
ApprovalID: a.ID,
|
|
WorkID: m.ID,
|
|
ArtworkID: inApprovalWorkMap[tempId].ArtworkID,
|
|
ArtworkName: inApprovalWorkMap[tempId].ArtworkName,
|
|
ArtistName: inApprovalWorkMap[tempId].ArtistName,
|
|
ArtworkCover: inApprovalWorkMap[tempId].ArtworkCover,
|
|
ArtworkNumber: inApprovalWorkMap[tempId].ArtworkNumber,
|
|
}
|
|
|
|
DB.Model(&ApprovalWork{}).
|
|
Where(&ApprovalWork{WorkID: m.ID, ArtworkID: inApprovalWorkMap[tempId].ArtworkID}).
|
|
Updates(temp)
|
|
}
|
|
}
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
func (m *Work) BuildResContent(a *Approval, request *approval.CreateRequest) {
|
|
if a.Work == nil {
|
|
return
|
|
}
|
|
|
|
var approvalWorks []*approval.ApprovalWork
|
|
|
|
for _, one := range a.Work.ApprovalWorks {
|
|
temp := &approval.ApprovalWork{
|
|
|
|
ID: one.ID,
|
|
WorkID: one.WorkID,
|
|
ApprovalID: one.ApprovalID,
|
|
ArtworkID: one.ArtworkID,
|
|
ArtworkName: one.ArtworkName,
|
|
ArtistName: one.ArtistName,
|
|
ArtworkCover: one.ArtworkCover,
|
|
ArtworkNumber: one.ArtworkNumber,
|
|
ArtistUID: one.ArtistUID,
|
|
ShowSeq: one.ShowSeq,
|
|
}
|
|
approvalWorks = append(approvalWorks, temp)
|
|
|
|
}
|
|
|
|
request.Work = &approval.Work{
|
|
ID: a.Work.ID,
|
|
ReturnAt: a.Work.ReturnAt,
|
|
ReceivedAt: a.Work.ReceivedAt,
|
|
ApprovalWorks: approvalWorks,
|
|
ArtistUID: a.Work.ArtistUID,
|
|
}
|
|
}
|
|
|
|
func (m *Work) DeleteApproval(p *Approval) error {
|
|
|
|
var err error
|
|
if err = DB.Where(&ApprovalWork{ApprovalID: p.ID}).
|
|
Delete(&ApprovalWork{}).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
return DB.Where(&Work{ApprovalID: p.ID}).Delete(&Work{}).Error
|
|
}
|