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.

225 lines
6.1 KiB
Go

package model
import (
"errors"
"fmt"
"github.com/fonchain_enterprise/fonchain-approval/api/approval"
"github.com/fonchain_enterprise/fonchain-approval/pkg/common/collection"
m2 "github.com/fonchain_enterprise/fonchain-approval/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
2 years ago
ApprovalWorks []*ApprovalWork `gorm:"foreignKey:WorkID" json:"ApprovalWorks"` //type:string comment:备注 version:2022-06-12 15:10
}
// TableName get sql table name.获取数据库表名
func (m *Work) TableName() string {
return "work"
}
2 years ago
func (m *Work) SaveApprovalContent(in *approval.CreateRequest, a *Approval) error {
//主体保存
m.ApprovalID = a.ApproverID
m.ReturnAt = in.Work.ReturnAt
m.ReceivedAt = in.Work.ReceivedAt
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,
}
approvalWorks = append(approvalWorks, temp)
}
if len(approvalWorks) > 0 {
err = DB.Create(&approvalWorks).Error
}
return err
}
2 years ago
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.Save(m).Error; err != nil {
return err
}
return m.UpdateContent(in, a)
}
2 years ago
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 _, approvalWork := range in.Work.ApprovalWorks {
temp := ApprovalWork{
ApprovalID: a.ID,
WorkID: m.ID,
ArtworkID: approvalWork.ArtworkID,
ArtworkName: approvalWork.ArtworkName,
ArtistName: approvalWork.ArtistName,
ArtworkCover: approvalWork.ArtworkCover,
ArtworkNumber: approvalWork.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
}
2 years ago
func (m *Work) BuildResContent(a *Approval, request *approval.CreateRequest) {
//ApprovalWorks []*ApprovalWork `protobuf:"bytes,4,rep,name=ApprovalWorks,json=approvalWorks,proto3" json:"ApprovalWorks,omitempty"`
var approvalWorks []*approval.ApprovalWork
for _, one := range m.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,
}
approvalWorks = append(approvalWorks, temp)
}
request.Work = &approval.Work{
ID: m.ID,
ReturnAt: m.ReturnAt,
ReceivedAt: m.ReceivedAt,
ApprovalWorks: approvalWorks,
}
}
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
}
// WorkColumns get sql column name.获取数据库列名
var WorkColumns = struct {
ID string
DeletedAt string
CreatedAt string
UpdatedAt string
ReturnAt string
ReceivedAt string
}{
ID: "id",
DeletedAt: "deleted_at",
CreatedAt: "created_at",
UpdatedAt: "updated_at",
ReturnAt: "return_at",
ReceivedAt: "received_at",
}