2022-07-28 09:18:01 +00:00
|
|
|
|
package model
|
|
|
|
|
|
|
|
|
|
import (
|
2023-01-16 08:09:19 +00:00
|
|
|
|
"database/sql/driver"
|
|
|
|
|
"encoding/json"
|
2022-07-28 09:18:01 +00:00
|
|
|
|
"errors"
|
2022-10-14 08:48:45 +00:00
|
|
|
|
"fmt"
|
2023-06-21 06:54:47 +00:00
|
|
|
|
"github.com/fonchain_enterprise/fonchain-approval-fork/api/approval"
|
|
|
|
|
"github.com/fonchain_enterprise/fonchain-approval-fork/pkg/common/page"
|
|
|
|
|
msg "github.com/fonchain_enterprise/fonchain-approval-fork/pkg/m"
|
2023-05-29 06:24:00 +00:00
|
|
|
|
"github.com/jinzhu/copier"
|
2022-07-28 09:18:01 +00:00
|
|
|
|
"gorm.io/gorm"
|
|
|
|
|
"gorm.io/plugin/soft_delete"
|
2023-05-29 05:06:24 +00:00
|
|
|
|
"strconv"
|
2022-07-28 09:18:01 +00:00
|
|
|
|
"time"
|
|
|
|
|
)
|
|
|
|
|
|
2023-01-16 08:09:19 +00:00
|
|
|
|
type KeyInfo struct {
|
|
|
|
|
ApprovalKey string
|
|
|
|
|
ApprovalName string
|
|
|
|
|
ApprovalType string
|
|
|
|
|
ApprovalValue string
|
2023-03-01 10:53:47 +00:00
|
|
|
|
ApprovalMark bool
|
2023-01-16 08:09:19 +00:00
|
|
|
|
}
|
|
|
|
|
type KeyInfos []KeyInfo
|
|
|
|
|
|
2022-07-28 09:18:01 +00:00
|
|
|
|
// Approval 审批
|
|
|
|
|
type Approval struct {
|
2022-08-16 10:45:28 +00:00
|
|
|
|
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"`
|
|
|
|
|
SubmitterID uint64 `gorm:"column:submitter_id" json:"submitterId"`
|
|
|
|
|
Status int8 `gorm:"column:status" json:"status"`
|
|
|
|
|
SubmitterName string `gorm:"column:submitter_name" json:"submitterName"`
|
|
|
|
|
CopyUsers CopyUsers `gorm:"column:copy_users" json:"copyUsers"`
|
|
|
|
|
ApprovalUsers ApprovalUsers `gorm:"column:approval_users" json:"approvalUsers"`
|
|
|
|
|
Type string `gorm:"column:type" json:"type"`
|
|
|
|
|
Level uint8 `gorm:"column:level" json:"level"`
|
|
|
|
|
NowLevel uint8 `gorm:"column:now_level" json:"nowLevel"`
|
|
|
|
|
NowUserId uint64 `gorm:"column:now_user_id" json:"nowUserId"`
|
|
|
|
|
NowUserName string `gorm:"column:now_user_name" json:"nowUserName"`
|
|
|
|
|
Content string `gorm:"column:content" json:"content"`
|
2023-01-16 08:09:19 +00:00
|
|
|
|
ValueJson KeyInfos `gorm:"type:json;column:value_json;default:null;comment:自定义信息" json:"valueJson"`
|
2022-08-16 10:45:28 +00:00
|
|
|
|
Reply string `gorm:"column:reply" json:"reply"`
|
|
|
|
|
Domain *string `gorm:"column:domain" json:"domain"`
|
|
|
|
|
Show *Show `gorm:"foreignKey:ApprovalID" json:"Show"`
|
2023-03-01 10:53:47 +00:00
|
|
|
|
ApprovalType *ApprovalType `gorm:"foreignKey:KeyWord;references:Type" json:"approvalType"` // type类型
|
2022-08-16 10:45:28 +00:00
|
|
|
|
Work *Work `gorm:"foreignKey:ApprovalID" json:"Work"`
|
|
|
|
|
Bundle *Bundle `gorm:"foreignKey:ApprovalID" json:"Bundle"`
|
|
|
|
|
Exhibition *Exhibition `gorm:"foreignKey:ApprovalID" json:"Exhibition"`
|
2023-03-20 10:26:13 +00:00
|
|
|
|
BundlePayPrice *BundlePayPrice `gorm:"foreignKey:ApprovalID" json:"BundlePayPrice"` //关联的type
|
|
|
|
|
ExhibitionReward *ExhibitionReward `gorm:"foreignKey:ApprovalID" json:"ExhibitionReward"` //关联的type
|
2022-08-16 10:45:28 +00:00
|
|
|
|
ApprovalWorkFlows []*ApprovalWorkFlow `gorm:"foreignKey:ApprovalID" json:"ApprovalWorkFlows"`
|
2023-05-04 02:15:50 +00:00
|
|
|
|
ApprovalOA *ApprovalOA `gorm:"foreignKey:ApprovalID" json:"oa"`
|
2023-04-25 06:42:24 +00:00
|
|
|
|
FinancialForm *FinancialForm `gorm:"foreignKey:ApprovalID" json:"financialForm"`
|
2022-07-28 09:18:01 +00:00
|
|
|
|
}
|
|
|
|
|
|
2023-01-16 08:09:19 +00:00
|
|
|
|
func (j *KeyInfos) Scan(src interface{}) error {
|
|
|
|
|
return json.Unmarshal(src.([]byte), j)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (j KeyInfos) Value() (driver.Value, error) {
|
|
|
|
|
|
|
|
|
|
v, err := json.Marshal(j)
|
|
|
|
|
|
|
|
|
|
return string(v), err
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-28 09:18:01 +00:00
|
|
|
|
const (
|
2023-03-18 08:35:55 +00:00
|
|
|
|
TypeContent = "content"
|
|
|
|
|
TypeWork = "work"
|
|
|
|
|
TypeExhibition = "exhibition"
|
|
|
|
|
TypeShow = "show"
|
|
|
|
|
TypeBundle = "bundle"
|
|
|
|
|
TypeBundlePayPrice = "bundlePayPrice"
|
|
|
|
|
TypeArtExhibitionReward = "artExhibitionReward"
|
2023-05-04 02:43:48 +00:00
|
|
|
|
|
|
|
|
|
TypeOa = "oa" // oa 父类
|
|
|
|
|
|
2023-05-22 07:25:45 +00:00
|
|
|
|
TypeMakeUp = "makeUp"
|
|
|
|
|
|
2023-05-04 02:43:48 +00:00
|
|
|
|
TypeFinancialForm = "financialFormApply"
|
2022-07-28 09:18:01 +00:00
|
|
|
|
)
|
2022-07-29 07:40:30 +00:00
|
|
|
|
const (
|
2022-08-18 05:26:14 +00:00
|
|
|
|
StatusDoing = 1
|
|
|
|
|
StatusOk = 2
|
|
|
|
|
StatusFail = 3
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
StatusNeedViewed = 4
|
|
|
|
|
StatusViewed = 5
|
2022-07-29 07:40:30 +00:00
|
|
|
|
)
|
2022-07-28 09:18:01 +00:00
|
|
|
|
|
|
|
|
|
type ApprovalContentInterface interface {
|
2023-03-20 10:26:13 +00:00
|
|
|
|
GetApproval(id uint64) (*Approval, error)
|
2022-07-29 09:08:00 +00:00
|
|
|
|
SaveApprovalContent(in *approval.CreateRequest, a *Approval) error
|
|
|
|
|
UpdateApprovalContent(in *approval.CreateRequest, a *Approval) error
|
|
|
|
|
BuildResContent(a *Approval, request *approval.CreateRequest)
|
2022-07-28 09:18:01 +00:00
|
|
|
|
DeleteApproval(p *Approval) error
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TableName get sql table name.获取数据库表名
|
|
|
|
|
func (m *Approval) TableName() string {
|
|
|
|
|
return "approval"
|
|
|
|
|
}
|
|
|
|
|
|
2022-10-14 08:48:45 +00:00
|
|
|
|
func preValidateExhibition(in *approval.CreateRequest) error {
|
|
|
|
|
|
|
|
|
|
if in.Type != TypeExhibition {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
total := GetExhibitionNumByUser(in.Domain, in.SubmitterID)
|
|
|
|
|
|
|
|
|
|
if total <= 0 {
|
|
|
|
|
return errors.New("您现在可选数量为0,请先申请画展包数量")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if len(in.Exhibition.ApprovalExhibitions) > int(total) {
|
|
|
|
|
errStr := fmt.Sprintf("您现在可选数量为%d,申请画展包数量为 %d", len(in.Exhibition.ApprovalExhibitions), total)
|
|
|
|
|
return errors.New(errStr)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
2022-08-18 05:26:14 +00:00
|
|
|
|
func preValidateExhibition(in *approval.CreateRequest) error {
|
|
|
|
|
var entity *Bundle
|
|
|
|
|
|
|
|
|
|
if in.Type != TypeExhibition {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if in.Exhibition == nil || in.Exhibition.PidApprovalID == 0 {
|
|
|
|
|
return errors.New(msg.ErrorApprovalType)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := DB.Where(Bundle{ApprovalID: in.Exhibition.PidApprovalID}).First(&entity).Error; err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if len(in.Exhibition.ApprovalExhibitions) != int(entity.ApplicationsNum) {
|
|
|
|
|
return errors.New(msg.ErrorWrongNum)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
|
|
|
|
|
}
|
2022-10-14 08:48:45 +00:00
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
// GetExhibitionNumByUser 获取用户可以使用的画展包数量
|
|
|
|
|
func GetExhibitionNumByUser(domain string, submitterID uint64) int64 {
|
|
|
|
|
var total, usedNum int64
|
|
|
|
|
|
|
|
|
|
//已经使用的
|
|
|
|
|
str := `SELECT SUM(exhibition.num) AS total FROM exhibition
|
|
|
|
|
left join approval ON approval.id = exhibition.approval_id WHERE approval.STATUS != ?
|
2023-02-03 08:15:21 +00:00
|
|
|
|
AND approval.domain = ? AND approval.submitter_id = ? AND approval.type = ? AND approval.deleted_at=0`
|
2022-10-14 08:48:45 +00:00
|
|
|
|
DB.Raw(str, StatusFail, domain, submitterID, TypeExhibition).Scan(&usedNum)
|
|
|
|
|
fmt.Println("已经使用", usedNum)
|
|
|
|
|
|
|
|
|
|
//所有的
|
|
|
|
|
str1 := `SELECT SUM(bundle.applications_num) AS total FROM bundle
|
|
|
|
|
left join approval ON approval.id = bundle.approval_id WHERE approval.STATUS = ?
|
2023-02-03 08:15:21 +00:00
|
|
|
|
AND approval.domain = ? AND approval.submitter_id = ? AND approval.type = ? AND approval.deleted_at=0`
|
2022-10-14 08:48:45 +00:00
|
|
|
|
DB.Raw(str1, StatusOk, domain, submitterID, TypeBundle).Scan(&total)
|
|
|
|
|
fmt.Println("所有申请的", total)
|
|
|
|
|
|
|
|
|
|
return total - usedNum
|
|
|
|
|
}
|
2022-08-18 05:26:14 +00:00
|
|
|
|
|
2023-03-27 06:57:26 +00:00
|
|
|
|
func ExistPayApproval(in *approval.CreateRequest) bool {
|
|
|
|
|
var count int64
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
subQuery1 := DB.Model(&Approval{}).Where(&Approval{SubmitterID: in.SubmitterID, Type: TypeBundlePayPrice}).
|
2023-03-31 02:53:42 +00:00
|
|
|
|
Where("status in (?)", []uint64{StatusDoing, StatusOk}).
|
2023-03-27 06:57:26 +00:00
|
|
|
|
Select("id")
|
|
|
|
|
|
|
|
|
|
DB.Model(&BundlePayPrice{}).Where("approval_id in (?)", subQuery1).Where(&BundlePayPrice{ShowUid: in.BundlePayPrice.ShowUid}).Count(&count)
|
|
|
|
|
|
|
|
|
|
if count >= 1 {
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
|
2023-05-18 08:13:28 +00:00
|
|
|
|
// 余额申请 校验
|
|
|
|
|
func ExistLeaveApplyApproval(in *approval.CreateRequest) bool {
|
|
|
|
|
var count int64
|
|
|
|
|
|
|
|
|
|
// 校验 规则
|
|
|
|
|
// 一年一次 多次 一次
|
|
|
|
|
subQuery1 := DB.Model(&Approval{}).Where(&Approval{SubmitterID: in.SubmitterID, Type: in.Type}).
|
|
|
|
|
Where("status in (?)", []uint64{StatusDoing, StatusOk})
|
|
|
|
|
|
|
|
|
|
if LeaveBalanceUsefulTime[in.Type] == OnceAYear {
|
2023-05-18 10:32:17 +00:00
|
|
|
|
subQuery1.Where(" date_format(created_at,'%Y') = ?", time.Now().Format("2006"))
|
2023-05-18 08:13:28 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
subQuery1.Select("id")
|
|
|
|
|
|
|
|
|
|
DB.Model(&ApprovalOA{}).Where("approval_id in (?)", subQuery1).Count(&count)
|
|
|
|
|
|
|
|
|
|
if count >= 1 {
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
|
2023-05-22 07:25:45 +00:00
|
|
|
|
func CheckMakeUpApplyApproval(in *approval.CreateRequest) bool {
|
|
|
|
|
var count int64
|
|
|
|
|
|
|
|
|
|
// 校验 规则
|
|
|
|
|
// 一年一次 多次 一次
|
|
|
|
|
subQuery1 := DB.Model(&Approval{}).Where(&Approval{SubmitterID: in.SubmitterID, Type: in.Type}).
|
|
|
|
|
Where("status in (?)", []uint64{StatusDoing, StatusOk})
|
|
|
|
|
|
|
|
|
|
subQuery1.Where(" `type` = ? ", in.Type)
|
|
|
|
|
|
|
|
|
|
subQuery1.Select("id")
|
|
|
|
|
|
|
|
|
|
DB.Model(&ApprovalOA{}).Where("approval_id in (?)", subQuery1).Count(&count)
|
|
|
|
|
|
|
|
|
|
if count >= 2 {
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-29 09:08:00 +00:00
|
|
|
|
func StoreApproval(in *approval.CreateRequest) (*Approval, error) {
|
2022-07-28 09:18:01 +00:00
|
|
|
|
var entity *Approval
|
|
|
|
|
|
2022-08-18 05:26:14 +00:00
|
|
|
|
if err1 := preValidateExhibition(in); err1 != nil {
|
|
|
|
|
return entity, err1
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-24 07:03:38 +00:00
|
|
|
|
fmt.Println("------------t1----------")
|
2022-07-28 09:18:01 +00:00
|
|
|
|
err := DB.Transaction(func(tx *gorm.DB) error {
|
|
|
|
|
|
2023-03-24 07:03:38 +00:00
|
|
|
|
fmt.Println("------------t2----------")
|
2022-08-16 10:45:28 +00:00
|
|
|
|
setting, terr := GetApprovalSettingFromKeyWord(in.Domain, in.Type)
|
2023-02-03 08:15:21 +00:00
|
|
|
|
fmt.Println("1-----", terr, setting)
|
2023-01-16 08:09:19 +00:00
|
|
|
|
|
2023-02-03 08:15:21 +00:00
|
|
|
|
if terr != nil || setting == nil {
|
2023-03-18 08:35:55 +00:00
|
|
|
|
return errors.New("审批人员没有配置")
|
2022-08-16 10:45:28 +00:00
|
|
|
|
}
|
|
|
|
|
|
2023-03-24 07:03:38 +00:00
|
|
|
|
fmt.Println("------------t3----------")
|
2023-02-03 08:15:21 +00:00
|
|
|
|
approvalUsers := setting.GetCombineApproveUsers(FormatApproveUsers(in.ApprovalUsers))
|
|
|
|
|
fmt.Println("2-----", approvalUsers)
|
|
|
|
|
|
2022-07-28 09:18:01 +00:00
|
|
|
|
// 保存基本信息
|
|
|
|
|
entity = &Approval{
|
2022-07-29 07:40:30 +00:00
|
|
|
|
Domain: &in.Domain,
|
|
|
|
|
SubmitterID: in.SubmitterID,
|
2022-07-28 09:18:01 +00:00
|
|
|
|
SubmitterName: in.SubmitterName,
|
2022-08-16 10:45:28 +00:00
|
|
|
|
CopyUsers: setting.CopyUsers,
|
2023-02-01 05:18:09 +00:00
|
|
|
|
ApprovalUsers: approvalUsers,
|
2022-07-28 09:18:01 +00:00
|
|
|
|
Type: in.Type,
|
|
|
|
|
Content: in.Content,
|
2023-01-16 08:09:19 +00:00
|
|
|
|
ValueJson: ToKeyInfos(in.CustomizeInfo),
|
2022-08-18 05:26:14 +00:00
|
|
|
|
Status: StatusDoing,
|
2023-02-01 05:18:09 +00:00
|
|
|
|
Level: uint8(len(approvalUsers)),
|
2022-08-16 10:45:28 +00:00
|
|
|
|
NowLevel: 1,
|
2023-02-01 05:18:09 +00:00
|
|
|
|
NowUserId: approvalUsers[0].ID,
|
|
|
|
|
NowUserName: approvalUsers[0].Name,
|
2022-07-28 09:18:01 +00:00
|
|
|
|
}
|
|
|
|
|
|
2023-01-16 08:09:19 +00:00
|
|
|
|
fmt.Println(3)
|
2023-03-01 10:53:47 +00:00
|
|
|
|
fmt.Println(entity)
|
2022-07-28 09:18:01 +00:00
|
|
|
|
if err := DB.Create(&entity).Error; err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 不同类型保存不同的结构体
|
2023-01-16 08:09:19 +00:00
|
|
|
|
|
|
|
|
|
fmt.Println(41, entity)
|
2022-07-28 09:18:01 +00:00
|
|
|
|
err := entity.SaveContent(in)
|
|
|
|
|
|
2023-01-16 08:09:19 +00:00
|
|
|
|
fmt.Println(4)
|
|
|
|
|
|
2022-08-16 10:45:28 +00:00
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-16 08:09:19 +00:00
|
|
|
|
fmt.Println(5)
|
2023-03-18 08:35:55 +00:00
|
|
|
|
err = BatchSave(approvalUsers, entity.ID)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
2023-03-20 10:26:13 +00:00
|
|
|
|
|
2023-03-18 08:35:55 +00:00
|
|
|
|
return BatchCopySave(setting.CopyUsers, entity.ID)
|
2022-07-28 09:18:01 +00:00
|
|
|
|
})
|
2023-02-03 08:15:21 +00:00
|
|
|
|
|
|
|
|
|
//fmt.Println("nil", entity)
|
|
|
|
|
//fmt.Println("nil", entity.ID)
|
2022-07-28 09:18:01 +00:00
|
|
|
|
|
|
|
|
|
return entity, err
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-29 07:40:30 +00:00
|
|
|
|
func Viewed(in *approval.ViewedRequest) error {
|
|
|
|
|
|
|
|
|
|
var entity *Approval
|
|
|
|
|
var err error
|
2022-08-18 05:26:14 +00:00
|
|
|
|
var isView = false
|
2022-07-29 07:40:30 +00:00
|
|
|
|
|
|
|
|
|
if err = DB.First(&entity, in.ID).Error; err != nil {
|
2022-08-16 10:45:28 +00:00
|
|
|
|
return errors.New(msg.ErrorNotFound)
|
2022-07-29 07:40:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-08-18 05:26:14 +00:00
|
|
|
|
if entity.Status != StatusOk {
|
|
|
|
|
return errors.New(msg.ErrorDoingNotView)
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-29 07:40:30 +00:00
|
|
|
|
copyUsers := entity.CopyUsers
|
|
|
|
|
|
|
|
|
|
for i, temp := range copyUsers {
|
|
|
|
|
if temp.ID == in.UserID {
|
2022-08-18 05:26:14 +00:00
|
|
|
|
if temp.IsViewed == true {
|
|
|
|
|
return errors.New(msg.ErrorAlreadySettingView)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
isView = true
|
|
|
|
|
temp.IsViewed = isView
|
2022-07-29 07:40:30 +00:00
|
|
|
|
copyUsers[i] = temp
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-18 05:26:14 +00:00
|
|
|
|
if isView == false {
|
|
|
|
|
return errors.New(msg.ErrorSettingView)
|
|
|
|
|
}
|
2023-03-18 08:35:55 +00:00
|
|
|
|
err = DB.Model(&Approval{}).Where(&Approval{ID: in.ID}).Updates(&Approval{CopyUsers: copyUsers}).Error
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
2022-08-18 05:26:14 +00:00
|
|
|
|
|
2023-03-18 08:35:55 +00:00
|
|
|
|
DB.Model(&ApprovalCopy{}).Where(&ApprovalCopy{ApprovalID: in.ID, UserId: in.UserID}).Updates(&ApprovalCopy{Status: StatusOk})
|
|
|
|
|
|
|
|
|
|
return err
|
2022-07-29 07:40:30 +00:00
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-29 09:08:00 +00:00
|
|
|
|
func UpdateApproval(in *approval.CreateRequest) (*Approval, error) {
|
2022-07-29 07:40:30 +00:00
|
|
|
|
var entity *Approval
|
|
|
|
|
|
2022-08-18 05:26:14 +00:00
|
|
|
|
if err1 := preValidateExhibition(in); err1 != nil {
|
|
|
|
|
return entity, err1
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-29 07:40:30 +00:00
|
|
|
|
err := DB.Transaction(func(tx *gorm.DB) error {
|
|
|
|
|
|
|
|
|
|
if departErr := DB.First(&entity, in.ID).Error; departErr != nil {
|
2022-08-16 10:45:28 +00:00
|
|
|
|
return errors.New(msg.ErrorNotFound)
|
2022-07-29 07:40:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-07-30 03:41:22 +00:00
|
|
|
|
if entity.Type != in.Type {
|
2022-08-16 10:45:28 +00:00
|
|
|
|
return errors.New(msg.ErrorChangeType)
|
2022-07-30 03:41:22 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-07-29 07:40:30 +00:00
|
|
|
|
// 保存基本信息
|
2022-08-25 07:53:38 +00:00
|
|
|
|
upEntity := &Approval{
|
2022-07-29 07:40:30 +00:00
|
|
|
|
Content: in.Content,
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-16 08:09:19 +00:00
|
|
|
|
if entity.Status == StatusFail {
|
|
|
|
|
upEntity.Status = StatusDoing
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-25 07:53:38 +00:00
|
|
|
|
if err := DB.Where(&Approval{ID: in.ID}).Updates(&upEntity).Error; err != nil {
|
2022-07-29 07:40:30 +00:00
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 不同类型保存不同的结构体
|
|
|
|
|
err := entity.UpdateContent(in)
|
|
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
return entity, err
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func approvalCalc(filter *Approval) *approval.Information {
|
|
|
|
|
|
|
|
|
|
var num int64
|
|
|
|
|
|
2022-07-30 05:11:18 +00:00
|
|
|
|
info := &approval.Information{
|
|
|
|
|
Total: 0,
|
|
|
|
|
DoingTotal: 0,
|
|
|
|
|
SuccessTotal: 0,
|
|
|
|
|
FailTotal: 0,
|
|
|
|
|
}
|
2022-07-29 07:40:30 +00:00
|
|
|
|
|
|
|
|
|
DB.Model(&Approval{}).Where(&filter).Count(&num)
|
|
|
|
|
info.Total = uint64(num)
|
|
|
|
|
|
2022-08-18 05:26:14 +00:00
|
|
|
|
DB.Model(&Approval{}).Where(&filter).Where(&Approval{Status: StatusDoing}).Count(&num)
|
2022-07-29 07:40:30 +00:00
|
|
|
|
info.DoingTotal = uint64(num)
|
|
|
|
|
|
|
|
|
|
DB.Model(&Approval{}).Where(&filter).Where(&Approval{Status: StatusOk}).Count(&num)
|
|
|
|
|
info.SuccessTotal = uint64(num)
|
|
|
|
|
|
|
|
|
|
DB.Model(&Approval{}).Where(&filter).Where(&Approval{Status: StatusFail}).Count(&num)
|
|
|
|
|
info.FailTotal = uint64(num)
|
|
|
|
|
|
|
|
|
|
return info
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-01 10:53:47 +00:00
|
|
|
|
func approvalCalcJsonV2(domain string, userId uint64) *approval.Information {
|
|
|
|
|
|
|
|
|
|
var num int64
|
2023-03-18 08:35:55 +00:00
|
|
|
|
var jsonStr = "json_contains(approval_users,json_object('ID', ?))"
|
2023-03-01 10:53:47 +00:00
|
|
|
|
|
|
|
|
|
info := &approval.Information{
|
|
|
|
|
Total: 0,
|
|
|
|
|
DoingTotal: 0,
|
|
|
|
|
SuccessTotal: 0,
|
|
|
|
|
FailTotal: 0,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DB.Model(&Approval{}).Where(jsonStr, userId).Count(&num)
|
|
|
|
|
info.Total = uint64(num)
|
|
|
|
|
|
|
|
|
|
DB.Model(&Approval{}).Where(jsonStr, userId).Where(&Approval{Status: StatusDoing, Domain: &domain, NowUserId: userId}).Count(&num)
|
|
|
|
|
info.DoingTotal = uint64(num)
|
|
|
|
|
|
|
|
|
|
DB.Model(&Approval{}).Where(jsonStr, userId).Where(&Approval{Status: StatusOk, Domain: &domain, NowUserId: userId}).Count(&num)
|
|
|
|
|
info.SuccessTotal = uint64(num)
|
|
|
|
|
|
|
|
|
|
DB.Model(&Approval{}).Where(jsonStr, userId).Where(&Approval{Status: StatusFail, Domain: &domain, NowUserId: userId}).Count(&num)
|
|
|
|
|
info.FailTotal = uint64(num)
|
|
|
|
|
|
|
|
|
|
return info
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-16 10:45:28 +00:00
|
|
|
|
func approvalCalcJson(domain string, userId uint64) *approval.Information {
|
|
|
|
|
|
|
|
|
|
var num int64
|
2022-08-18 05:26:14 +00:00
|
|
|
|
var jsonStr = "JSON_CONTAINS(approval_users,JSON_OBJECT('ID', ?))"
|
2022-08-16 10:45:28 +00:00
|
|
|
|
|
|
|
|
|
info := &approval.Information{
|
|
|
|
|
Total: 0,
|
|
|
|
|
DoingTotal: 0,
|
|
|
|
|
SuccessTotal: 0,
|
|
|
|
|
FailTotal: 0,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DB.Model(&Approval{}).Where(jsonStr, userId).Count(&num)
|
|
|
|
|
info.Total = uint64(num)
|
|
|
|
|
|
2022-08-18 05:26:14 +00:00
|
|
|
|
DB.Model(&Approval{}).Where(jsonStr, userId).Where(&Approval{Status: StatusDoing, Domain: &domain}).Count(&num)
|
2022-08-16 10:45:28 +00:00
|
|
|
|
info.DoingTotal = uint64(num)
|
|
|
|
|
|
|
|
|
|
DB.Model(&Approval{}).Where(jsonStr, userId).Where(&Approval{Status: StatusOk, Domain: &domain}).Count(&num)
|
|
|
|
|
info.SuccessTotal = uint64(num)
|
|
|
|
|
|
|
|
|
|
DB.Model(&Approval{}).Where(jsonStr, userId).Where(&Approval{Status: StatusFail, Domain: &domain}).Count(&num)
|
|
|
|
|
info.FailTotal = uint64(num)
|
|
|
|
|
|
|
|
|
|
return info
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-29 07:40:30 +00:00
|
|
|
|
// ApprovalInfo 统计
|
|
|
|
|
func ApprovalInfo(in *approval.InformationRequest) (*approval.InformationResponse, error) {
|
|
|
|
|
|
|
|
|
|
response := &approval.InformationResponse{
|
|
|
|
|
MySubmitInfo: approvalCalc(&Approval{Domain: &in.Domain, SubmitterID: in.UserID}),
|
2023-03-01 10:53:47 +00:00
|
|
|
|
SubmitMeInfo: approvalCalcJsonV2(in.Domain, in.UserID),
|
2022-07-29 07:40:30 +00:00
|
|
|
|
DomainInfo: approvalCalc(&Approval{Domain: &in.Domain}),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return response, nil
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-20 10:26:13 +00:00
|
|
|
|
func (m *Approval) GetApprovalInfo() (*Approval, error) {
|
|
|
|
|
factory, err := getApprovalContentFactory(m.Type)
|
|
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return factory.GetApproval(m.ID)
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m *Approval) GetApproval(id uint64) (*Approval, error) {
|
|
|
|
|
|
|
|
|
|
var entity *Approval
|
|
|
|
|
if err := DB.
|
|
|
|
|
Preload("ApprovalWorkFlows").
|
|
|
|
|
Preload("ApprovalType").
|
|
|
|
|
First(&entity, id).Error; err != nil {
|
|
|
|
|
return entity, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return entity, nil
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-29 09:08:00 +00:00
|
|
|
|
func (m *Approval) SaveApprovalContent(in *approval.CreateRequest, a *Approval) error {
|
2022-07-28 09:18:01 +00:00
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-29 09:08:00 +00:00
|
|
|
|
func (m *Approval) UpdateApprovalContent(in *approval.CreateRequest, a *Approval) error {
|
2022-07-29 07:40:30 +00:00
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-28 09:18:01 +00:00
|
|
|
|
func (m *Approval) DeleteApproval(p *Approval) error {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m *Approval) DeleteContent() error {
|
|
|
|
|
|
2022-08-16 10:45:28 +00:00
|
|
|
|
factory, err := getApprovalContentFactory(m.Type)
|
2022-07-28 09:18:01 +00:00
|
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return factory.DeleteApproval(m)
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-29 09:08:00 +00:00
|
|
|
|
func (m *Approval) BuildResContent(a *Approval, request *approval.CreateRequest) {
|
2022-07-28 09:18:01 +00:00
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-29 09:08:00 +00:00
|
|
|
|
func (m *Approval) SetResContent(request *approval.CreateRequest) error {
|
2022-07-28 09:18:01 +00:00
|
|
|
|
|
2023-03-20 10:26:13 +00:00
|
|
|
|
fmt.Println(m.Type)
|
2022-08-16 10:45:28 +00:00
|
|
|
|
factory, err := getApprovalContentFactory(m.Type)
|
2022-07-28 09:18:01 +00:00
|
|
|
|
|
2023-03-20 10:26:13 +00:00
|
|
|
|
fmt.Println(factory, err)
|
2022-07-28 09:18:01 +00:00
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-20 10:26:13 +00:00
|
|
|
|
fmt.Println("开始执行")
|
2022-07-28 09:18:01 +00:00
|
|
|
|
factory.BuildResContent(m, request)
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-29 09:08:00 +00:00
|
|
|
|
func (m *Approval) SaveContent(in *approval.CreateRequest) error {
|
2022-07-28 09:18:01 +00:00
|
|
|
|
|
2022-08-16 10:45:28 +00:00
|
|
|
|
factory, err := getApprovalContentFactory(in.Type)
|
2022-07-28 09:18:01 +00:00
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
err = factory.SaveApprovalContent(in, m)
|
|
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-29 09:08:00 +00:00
|
|
|
|
func (m *Approval) UpdateContent(in *approval.CreateRequest) error {
|
2022-07-29 07:40:30 +00:00
|
|
|
|
|
2022-08-16 10:45:28 +00:00
|
|
|
|
factory, err := getApprovalContentFactory(in.Type)
|
2022-07-29 07:40:30 +00:00
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
err = factory.UpdateApprovalContent(in, m)
|
|
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-21 06:54:47 +00:00
|
|
|
|
// MyAllWorkApprovals 待阅读的和待我操作的
|
2023-03-18 08:35:55 +00:00
|
|
|
|
func MyAllWorkApprovals(in *approval.ListRequest) ([]*Approval, int64) {
|
|
|
|
|
var list []*Approval
|
|
|
|
|
var ids []string
|
|
|
|
|
var count int64
|
|
|
|
|
|
|
|
|
|
//list
|
|
|
|
|
modelObj := DB.Model(&Approval{}).
|
|
|
|
|
Preload("Show").
|
|
|
|
|
Preload("Work.ApprovalWorks").
|
|
|
|
|
Preload("Bundle").
|
|
|
|
|
Preload("ApprovalType").
|
|
|
|
|
Preload("BundlePayPrice").
|
|
|
|
|
Preload("ApprovalType.ApprovalTypeGroup").
|
2023-03-20 10:26:13 +00:00
|
|
|
|
Preload("ExhibitionReward.ApprovalExhibitions").
|
2023-03-18 08:35:55 +00:00
|
|
|
|
Preload("ApprovalWorkFlows").
|
2023-04-25 03:07:00 +00:00
|
|
|
|
Preload("Exhibition.ApprovalExhibitions").
|
2023-04-25 06:15:05 +00:00
|
|
|
|
Preload("FinancialForm")
|
2023-03-18 08:35:55 +00:00
|
|
|
|
|
2023-06-13 09:56:21 +00:00
|
|
|
|
fmt.Println("list request :==================== start ===================")
|
|
|
|
|
fmt.Println(" value ", in)
|
|
|
|
|
fmt.Println("list request :==================== end ===================")
|
|
|
|
|
|
2023-03-18 08:35:55 +00:00
|
|
|
|
//我未阅读的和我未操作的
|
2023-06-13 11:36:15 +00:00
|
|
|
|
queryApproval := &Approval{}
|
2023-03-18 08:35:55 +00:00
|
|
|
|
|
2023-06-13 08:55:25 +00:00
|
|
|
|
if in.SubmitterName != "" {
|
|
|
|
|
queryApproval.SubmitterName = in.SubmitterName
|
2023-06-13 08:46:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
2023-06-14 01:24:22 +00:00
|
|
|
|
if in.ApprovalStatus == 0 && in.SubmitterName == "" { // 此处 为 阅读状态 表示 审批状态 默认为 StatusDoing
|
2023-06-14 01:28:19 +00:00
|
|
|
|
queryApproval.NowUserId = in.UserID
|
2023-06-14 01:24:22 +00:00
|
|
|
|
queryApproval.Status = StatusDoing
|
|
|
|
|
}
|
2023-06-13 08:55:25 +00:00
|
|
|
|
|
2023-06-13 08:46:07 +00:00
|
|
|
|
if in.ApprovalStatus <= StatusFail && in.ApprovalStatus > 0 { // 具体 的 审批状态
|
2023-06-13 11:36:15 +00:00
|
|
|
|
queryApproval.NowUserId = in.UserID
|
2023-06-13 03:46:35 +00:00
|
|
|
|
queryApproval.Status = int8(in.ApprovalStatus)
|
|
|
|
|
}
|
2023-06-13 08:46:07 +00:00
|
|
|
|
|
2023-06-13 11:50:31 +00:00
|
|
|
|
queryApprovalCopy := &ApprovalCopy{}
|
2023-06-13 08:46:07 +00:00
|
|
|
|
if in.ApprovalStatus > StatusFail { // 具体 的 阅读状态
|
2023-06-13 03:46:35 +00:00
|
|
|
|
if in.ApprovalStatus == 4 {
|
2023-06-13 09:12:36 +00:00
|
|
|
|
queryApprovalCopy.Status = 1
|
2023-06-13 03:46:35 +00:00
|
|
|
|
} else if in.ApprovalStatus == 5 {
|
2023-06-13 09:12:36 +00:00
|
|
|
|
queryApprovalCopy.Status = 2
|
2023-06-13 03:46:35 +00:00
|
|
|
|
}
|
2023-06-13 08:46:07 +00:00
|
|
|
|
queryApproval.Status = StatusOk // 此处 为 阅读状态 表示 审批状态 为 StatusOk
|
2023-06-13 03:46:35 +00:00
|
|
|
|
}
|
2023-06-13 08:46:07 +00:00
|
|
|
|
|
|
|
|
|
DB.Model(&Approval{}).Where(&Approval{Type: in.Type}).Where(queryApproval).Order("id " + in.OrderBy).Select("id").Find(&ids)
|
2023-06-13 11:50:31 +00:00
|
|
|
|
s1 := DB.Model(&ApprovalCopy{}).Where(queryApprovalCopy)
|
2023-03-18 08:35:55 +00:00
|
|
|
|
|
2023-06-13 06:53:34 +00:00
|
|
|
|
if in.StartTime != "" && in.EndTime != "" {
|
|
|
|
|
modelObj = modelObj.Where(" created_at between ? and ? ", in.StartTime, in.EndTime)
|
|
|
|
|
}
|
2023-03-18 08:35:55 +00:00
|
|
|
|
|
2023-06-13 10:01:57 +00:00
|
|
|
|
fmt.Println("queryApproval request :==================== start ===================")
|
2023-06-13 10:13:26 +00:00
|
|
|
|
fmt.Printf("queryApproval %+v\n", queryApproval)
|
2023-06-13 10:01:57 +00:00
|
|
|
|
fmt.Println("queryApproval request :==================== end ===================")
|
2023-06-13 06:53:34 +00:00
|
|
|
|
|
2023-06-13 10:27:44 +00:00
|
|
|
|
if in.SubmitterName == "" && in.ApprovalStatus == 0 {
|
2023-06-13 09:04:14 +00:00
|
|
|
|
modelObj = modelObj.Where(&Approval{Type: in.Type}).Where(
|
|
|
|
|
DB.Where(&Approval{NowUserId: in.UserID, Status: StatusDoing}). // 我需要审批的
|
2023-06-14 01:28:19 +00:00
|
|
|
|
Or(DB.Where("status = ?", StatusOk).Where("id in (?)", s1.Where("user_id = ?", in.UserID).Select("approval_id")))) // 已完成,抄送给我的
|
2023-03-18 08:35:55 +00:00
|
|
|
|
} else {
|
2023-06-13 11:36:15 +00:00
|
|
|
|
sonQuery := DB.Where(queryApproval)
|
2023-06-13 11:50:31 +00:00
|
|
|
|
if in.ApprovalStatus > StatusFail || in.ApprovalStatus == 0 {
|
2023-06-13 11:56:26 +00:00
|
|
|
|
sonQuery.Where(DB.Where("id in (?)", s1.Where("user_id = ?", in.UserID).Select("approval_id")))
|
2023-06-13 11:36:15 +00:00
|
|
|
|
}
|
2023-06-13 09:04:14 +00:00
|
|
|
|
modelObj = modelObj.Where(&Approval{Type: in.Type}).Where(
|
2023-06-13 11:36:15 +00:00
|
|
|
|
sonQuery)
|
2023-03-18 08:35:55 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
modelObj.Count(&count)
|
|
|
|
|
|
2023-06-14 01:34:34 +00:00
|
|
|
|
//if len(ids) > 0 { //根据具体id排序
|
|
|
|
|
// modelObj = modelObj.Clauses(clause.OrderBy{
|
|
|
|
|
// Expression: clause.Expr{SQL: "FIELD(id,?) " + in.OrderBy, Vars: []interface{}{ids}, WithoutParentheses: true},
|
|
|
|
|
// })
|
|
|
|
|
//} else {
|
|
|
|
|
modelObj = modelObj.Order("id " + in.OrderBy)
|
|
|
|
|
//}
|
2023-03-18 08:35:55 +00:00
|
|
|
|
|
|
|
|
|
modelObj.Limit(int(in.PageSize)).Offset(page.GetOffset(in.Page, in.PageSize)).Find(&list)
|
|
|
|
|
|
|
|
|
|
return list, count
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func MyApprovalWorkApprovals(in *approval.ListRequest) ([]*Approval, int64) {
|
|
|
|
|
var list []*Approval
|
|
|
|
|
var count int64
|
|
|
|
|
|
|
|
|
|
//list
|
|
|
|
|
modelObj := DB.Model(&Approval{}).
|
|
|
|
|
Preload("Show").
|
|
|
|
|
Preload("Work.ApprovalWorks").
|
|
|
|
|
Preload("Bundle").
|
|
|
|
|
Preload("ApprovalType").
|
|
|
|
|
Preload("BundlePayPrice").
|
|
|
|
|
Preload("ApprovalType.ApprovalTypeGroup").
|
|
|
|
|
Preload("ApprovalWorkFlows").
|
2023-04-25 03:07:00 +00:00
|
|
|
|
Preload("Exhibition.ApprovalExhibitions").
|
2023-05-08 02:52:00 +00:00
|
|
|
|
Preload("FinancialForm").
|
|
|
|
|
Preload("ApprovalOA")
|
2023-03-18 08:35:55 +00:00
|
|
|
|
|
|
|
|
|
if in.Type != "" {
|
|
|
|
|
modelObj = modelObj.Where(&Approval{Type: in.Type})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 审批展示(抄送在此不表)
|
|
|
|
|
/ \
|
|
|
|
|
进行中 通过或者拒绝
|
|
|
|
|
/ \
|
|
|
|
|
当前是我审批 我参与审批的
|
|
|
|
|
*/
|
|
|
|
|
if in.UserID != 0 {
|
|
|
|
|
modelObj = modelObj.Where(
|
|
|
|
|
DB.Where("JSON_CONTAINS(approval_users,JSON_OBJECT('ID', ?))", in.UserID).
|
2023-03-31 02:53:42 +00:00
|
|
|
|
Where("status != ?", StatusDoing). //完成,我参与审批
|
|
|
|
|
Or(DB.Where("now_user_id", in.UserID).Where("status = ?", StatusDoing)). //进行中,当前审批人是我,
|
2023-03-18 08:35:55 +00:00
|
|
|
|
Or(DB.Where("JSON_CONTAINS(copy_users,JSON_OBJECT('ID', ?))", in.UserID).Where("status = ?", StatusOk))) //抄送人(完成抄送)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if in.ApprovedBossId != 0 {
|
|
|
|
|
|
|
|
|
|
fmt.Println("---------1--------查看我已经审批过的")
|
|
|
|
|
subQuery2 := DB.Model(&ApprovalWorkFlow{}).
|
|
|
|
|
Where("status in (?)", []uint8{StatusOk, StatusFail}).
|
|
|
|
|
Where(&ApprovalWorkFlow{UserId: in.ApprovedBossId}).
|
|
|
|
|
Select("approval_id")
|
|
|
|
|
|
|
|
|
|
modelObj = modelObj.Where("id in (?)", subQuery2)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if in.Status != 0 {
|
|
|
|
|
modelObj = modelObj.Where(&Approval{Status: int8(in.Status)})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
modelObj.Count(&count)
|
|
|
|
|
|
2023-06-13 03:46:35 +00:00
|
|
|
|
modelObj.Order("id " + in.OrderBy).Limit(int(in.PageSize)).Offset(page.GetOffset(in.Page, in.PageSize)).Find(&list)
|
2023-03-18 08:35:55 +00:00
|
|
|
|
|
|
|
|
|
return list, count
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-18 05:26:14 +00:00
|
|
|
|
func MyWorkApprovals(in *approval.ListRequest) ([]*Approval, int64) {
|
2022-07-28 09:18:01 +00:00
|
|
|
|
var list []*Approval
|
|
|
|
|
var count int64
|
|
|
|
|
|
|
|
|
|
//list
|
2022-07-30 03:41:22 +00:00
|
|
|
|
modelObj := DB.Model(&Approval{}).
|
|
|
|
|
Preload("Show").
|
|
|
|
|
Preload("Work.ApprovalWorks").
|
|
|
|
|
Preload("Bundle").
|
2023-03-18 08:35:55 +00:00
|
|
|
|
Preload("ApprovalType").
|
|
|
|
|
Preload("BundlePayPrice").
|
2023-03-01 10:53:47 +00:00
|
|
|
|
Preload("ApprovalType.ApprovalTypeGroup").
|
2023-03-20 10:26:13 +00:00
|
|
|
|
Preload("ExhibitionReward.ApprovalExhibitions").
|
2022-08-16 10:45:28 +00:00
|
|
|
|
Preload("ApprovalWorkFlows").
|
2023-04-25 03:07:00 +00:00
|
|
|
|
Preload("Exhibition.ApprovalExhibitions").
|
2023-05-08 02:52:00 +00:00
|
|
|
|
Preload("FinancialForm").
|
|
|
|
|
Preload("ApprovalOA")
|
2022-07-28 09:18:01 +00:00
|
|
|
|
|
|
|
|
|
if in.Type != "" {
|
|
|
|
|
modelObj = modelObj.Where(&Approval{Type: in.Type})
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-13 03:46:35 +00:00
|
|
|
|
if in.SubmitterName != "" {
|
|
|
|
|
modelObj = modelObj.Where(&Approval{SubmitterName: in.SubmitterName})
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-13 05:18:58 +00:00
|
|
|
|
if in.StartTime != "" && in.EndTime != "" {
|
|
|
|
|
modelObj = modelObj.Where(" created_at between ? and ? ", in.StartTime, in.EndTime)
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-27 03:54:59 +00:00
|
|
|
|
/**
|
|
|
|
|
* 审批展示(抄送在此不表)
|
|
|
|
|
/ \
|
|
|
|
|
进行中 通过或者拒绝
|
|
|
|
|
/ \
|
|
|
|
|
当前是我审批 我参与审批的
|
|
|
|
|
*/
|
2022-08-04 03:07:55 +00:00
|
|
|
|
if in.UserID != 0 {
|
2022-08-27 03:54:59 +00:00
|
|
|
|
modelObj = modelObj.Where(
|
|
|
|
|
DB.Where("JSON_CONTAINS(approval_users,JSON_OBJECT('ID', ?))", in.UserID).
|
2023-03-31 02:53:42 +00:00
|
|
|
|
Where("status != ?", StatusDoing). //完成,我参与审批
|
|
|
|
|
Or(DB.Where("now_user_id", in.UserID).Where("status = ?", StatusDoing)). //进行中,当前审批人是我,
|
2022-08-27 03:54:59 +00:00
|
|
|
|
Or(DB.Where("JSON_CONTAINS(copy_users,JSON_OBJECT('ID', ?))", in.UserID).Where("status = ?", StatusOk))) //抄送人(完成抄送)
|
2022-07-30 08:44:54 +00:00
|
|
|
|
}
|
|
|
|
|
|
2023-03-01 10:53:47 +00:00
|
|
|
|
if in.ApprovedBossId != 0 {
|
|
|
|
|
|
|
|
|
|
fmt.Println("---------1--------查看我已经审批过的")
|
|
|
|
|
subQuery2 := DB.Model(&ApprovalWorkFlow{}).
|
|
|
|
|
Where("status in (?)", []uint8{StatusOk, StatusFail}).
|
|
|
|
|
Where(&ApprovalWorkFlow{UserId: in.ApprovedBossId}).
|
|
|
|
|
Select("approval_id")
|
|
|
|
|
|
|
|
|
|
modelObj = modelObj.Where("id in (?)", subQuery2)
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-28 09:18:01 +00:00
|
|
|
|
if in.Status != 0 {
|
|
|
|
|
modelObj = modelObj.Where(&Approval{Status: int8(in.Status)})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
modelObj.Count(&count)
|
|
|
|
|
|
2023-06-13 03:46:35 +00:00
|
|
|
|
modelObj.Order("id " + in.OrderBy).Limit(int(in.PageSize)).Offset(page.GetOffset(in.Page, in.PageSize)).Find(&list)
|
2022-07-28 09:18:01 +00:00
|
|
|
|
|
|
|
|
|
return list, count
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-18 05:26:14 +00:00
|
|
|
|
func MySubmitApprovals(in *approval.ListRequest) ([]*Approval, int64) {
|
|
|
|
|
var list []*Approval
|
|
|
|
|
var count int64
|
|
|
|
|
|
|
|
|
|
//list
|
|
|
|
|
modelObj := DB.Model(&Approval{}).
|
|
|
|
|
Preload("Show").
|
|
|
|
|
Preload("Work.ApprovalWorks").
|
|
|
|
|
Preload("Bundle").
|
2023-03-18 08:35:55 +00:00
|
|
|
|
Preload("BundlePayPrice").
|
2022-08-18 05:26:14 +00:00
|
|
|
|
Preload("ApprovalWorkFlows").
|
2023-03-20 10:26:13 +00:00
|
|
|
|
Preload("ExhibitionReward.ApprovalExhibitions").
|
2023-03-01 10:53:47 +00:00
|
|
|
|
Preload("ApprovalType.ApprovalTypeGroup").
|
2023-04-25 03:07:00 +00:00
|
|
|
|
Preload("Exhibition.ApprovalExhibitions").
|
2023-05-08 02:52:00 +00:00
|
|
|
|
Preload("FinancialForm").
|
|
|
|
|
Preload("ApprovalOA")
|
2022-08-18 05:26:14 +00:00
|
|
|
|
|
|
|
|
|
if in.Status != 0 {
|
|
|
|
|
modelObj = modelObj.Where(&Approval{Status: int8(in.Status)})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if in.Type != "" {
|
|
|
|
|
modelObj = modelObj.Where(&Approval{Type: in.Type})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
modelObj = modelObj.Where(&Approval{SubmitterID: in.UserID})
|
|
|
|
|
|
|
|
|
|
modelObj.Count(&count)
|
|
|
|
|
|
2023-06-13 03:46:35 +00:00
|
|
|
|
modelObj.Limit(int(in.PageSize)).Offset(page.GetOffset(in.Page, in.PageSize)).Order("id " + in.OrderBy).Find(&list)
|
2022-08-18 05:26:14 +00:00
|
|
|
|
|
|
|
|
|
return list, count
|
|
|
|
|
}
|
|
|
|
|
|
2023-04-13 12:08:55 +00:00
|
|
|
|
func MyReadApprovals(in *approval.ListRequest) ([]*Approval, int64) {
|
|
|
|
|
var list []*Approval
|
|
|
|
|
var count int64
|
|
|
|
|
|
|
|
|
|
//list
|
|
|
|
|
modelObj := DB.Model(&Approval{}).
|
|
|
|
|
Preload("Show").
|
|
|
|
|
Preload("Work.ApprovalWorks").
|
|
|
|
|
Preload("Bundle").
|
|
|
|
|
Preload("BundlePayPrice").
|
|
|
|
|
Preload("ApprovalWorkFlows").
|
|
|
|
|
Preload("ExhibitionReward.ApprovalExhibitions").
|
|
|
|
|
Preload("ApprovalType.ApprovalTypeGroup").
|
2023-04-25 03:07:00 +00:00
|
|
|
|
Preload("Exhibition.ApprovalExhibitions").
|
2023-05-08 02:52:00 +00:00
|
|
|
|
Preload("FinancialForm").
|
|
|
|
|
Preload("ApprovalOA")
|
2023-04-13 12:08:55 +00:00
|
|
|
|
|
2022-08-18 05:26:14 +00:00
|
|
|
|
if in.Type != "" {
|
2023-04-13 10:42:21 +00:00
|
|
|
|
modelObj = modelObj.Where(&Approval{Type: in.Type})
|
2022-08-18 05:26:14 +00:00
|
|
|
|
}
|
|
|
|
|
|
2023-04-14 01:02:56 +00:00
|
|
|
|
//modelObj = modelObj.Where(&Approval{SubmitterID: in.UserID})
|
2023-06-15 07:49:00 +00:00
|
|
|
|
if in.SubmitterName != "" {
|
|
|
|
|
modelObj = modelObj.Where("submitter_name = ? ", in.SubmitterName)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if in.StartTime != "" && in.EndTime != "" {
|
|
|
|
|
modelObj = modelObj.Where(" created_at between ? and ? ", in.StartTime, in.EndTime)
|
|
|
|
|
}
|
2022-08-18 05:26:14 +00:00
|
|
|
|
|
2023-04-14 01:26:09 +00:00
|
|
|
|
modelObj.Where(" status = 2 and json_contains(copy_users,JSON_OBJECT('ID', ?))", in.UserID)
|
2023-04-13 12:14:58 +00:00
|
|
|
|
|
2022-08-18 05:26:14 +00:00
|
|
|
|
modelObj.Count(&count)
|
|
|
|
|
|
2023-06-13 03:46:35 +00:00
|
|
|
|
modelObj.Limit(int(in.PageSize)).Offset(page.GetOffset(in.Page, in.PageSize)).Order("id " + in.OrderBy).Find(&list)
|
2022-08-18 05:26:14 +00:00
|
|
|
|
|
|
|
|
|
return list, count
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-16 10:45:28 +00:00
|
|
|
|
func (m *Approval) Pass(reply string, workFlowId uint64) error {
|
|
|
|
|
return m.operateStatus(StatusOk, reply, workFlowId)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m *Approval) Refuse(reply string, workFlowId uint64) error {
|
|
|
|
|
return m.operateStatus(StatusFail, reply, workFlowId)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (m *Approval) operateStatus(status uint8, reply string, workFlowId uint64) error {
|
|
|
|
|
|
|
|
|
|
var workFlow ApprovalWorkFlow
|
|
|
|
|
|
2022-08-18 05:26:14 +00:00
|
|
|
|
m.Reply = reply
|
2022-08-16 10:45:28 +00:00
|
|
|
|
if err := DB.Model(&ApprovalWorkFlow{ApprovalID: m.ID, Status: StatusDoing}).First(&workFlow, workFlowId).Error; err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if m.NowLevel != workFlow.Level {
|
|
|
|
|
return errors.New(msg.ErrorOperate)
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-18 05:26:14 +00:00
|
|
|
|
// 拒绝通过
|
|
|
|
|
if status == StatusFail {
|
2022-08-16 10:45:28 +00:00
|
|
|
|
m.Status = StatusFail
|
|
|
|
|
|
|
|
|
|
if err := DB.Save(m).Error; err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return workFlow.Refuse(reply)
|
|
|
|
|
}
|
|
|
|
|
|
2022-08-18 05:26:14 +00:00
|
|
|
|
/*--------层级审批通过---------*/
|
|
|
|
|
// 整个审批通过
|
|
|
|
|
if m.Level == m.NowLevel {
|
2022-08-16 10:45:28 +00:00
|
|
|
|
m.Status = StatusOk
|
2022-08-18 05:26:14 +00:00
|
|
|
|
|
|
|
|
|
//审批层级通过
|
|
|
|
|
} else {
|
2022-08-16 10:45:28 +00:00
|
|
|
|
m.NowLevel = workFlow.Level + 1
|
|
|
|
|
nextFlow, err := GetWorkFlowByLevel(m.ID, m.NowLevel)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
m.NowUserId = nextFlow.UserId
|
|
|
|
|
m.NowUserName = nextFlow.Name
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := DB.Save(m).Error; err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return workFlow.Pass(reply)
|
|
|
|
|
}
|
|
|
|
|
|
2023-05-29 05:06:24 +00:00
|
|
|
|
func UpdateLeaveBalance(p *Approval, leaveBalance string) error {
|
|
|
|
|
if leaveBalance == "" {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
approvalOA := new(ApprovalOA)
|
|
|
|
|
|
2023-05-29 05:34:35 +00:00
|
|
|
|
err := DB.Model(&ApprovalOA{}).Where("approval_id = ?", p.ID).Find(&approvalOA).Error
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
2023-05-29 06:24:00 +00:00
|
|
|
|
copier.CopyWithOption(&approvalOA, p.ApprovalOA, copier.Option{DeepCopy: true})
|
2023-05-29 05:06:24 +00:00
|
|
|
|
|
|
|
|
|
balance, _ := strconv.ParseFloat(leaveBalance, 10)
|
|
|
|
|
|
2023-05-29 06:24:00 +00:00
|
|
|
|
approvalOA.LeaveApply.LeaveBalance = float32(balance)
|
2023-05-29 05:06:24 +00:00
|
|
|
|
|
|
|
|
|
fmt.Println("============== 更新 余额申请 余额 ========== 开始 =========")
|
|
|
|
|
fmt.Printf("approval info is : %+v\n", p)
|
|
|
|
|
fmt.Printf("approval_oa info is : %+v\n", approvalOA)
|
|
|
|
|
fmt.Println("============== 更新 余额申请 余额 ========== 结束 =========")
|
|
|
|
|
|
2023-05-29 06:24:00 +00:00
|
|
|
|
//return DB.Model(&ApprovalOA{}).Where("id = ?", approvalOA.ID).Updates(map[string]interface{}{"leave_apply": approvalOA.LeaveApply}).Error
|
|
|
|
|
return DB.Model(&ApprovalOA{}).Where("id = ?", approvalOA.ID).Updates(approvalOA).Error
|
2023-05-29 05:06:24 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-08-16 10:45:28 +00:00
|
|
|
|
func getApprovalContentFactory(typeFiled string) (ApprovalContentInterface, error) {
|
2022-07-28 09:18:01 +00:00
|
|
|
|
switch typeFiled {
|
|
|
|
|
case TypeContent:
|
|
|
|
|
return &Approval{}, nil
|
|
|
|
|
case TypeShow:
|
|
|
|
|
return &Show{}, nil
|
|
|
|
|
case TypeWork:
|
|
|
|
|
return &Work{}, nil
|
|
|
|
|
case TypeBundle:
|
|
|
|
|
return &Bundle{}, nil
|
|
|
|
|
case TypeExhibition:
|
|
|
|
|
return &Exhibition{}, nil
|
2023-03-01 10:53:47 +00:00
|
|
|
|
case TypeBundlePayPrice:
|
|
|
|
|
return &BundlePayPrice{}, nil
|
2023-03-20 10:26:13 +00:00
|
|
|
|
case TypeArtExhibitionReward:
|
|
|
|
|
return &ExhibitionReward{}, nil
|
2023-04-25 03:07:00 +00:00
|
|
|
|
case TypeFinancialForm:
|
2023-04-25 06:15:05 +00:00
|
|
|
|
return &FinancialForm{}, nil
|
2022-07-28 09:18:01 +00:00
|
|
|
|
default:
|
2023-05-08 02:52:00 +00:00
|
|
|
|
if TypeMap[typeFiled] == TypeOa {
|
2023-04-24 08:17:01 +00:00
|
|
|
|
return &ApprovalOA{}, nil
|
|
|
|
|
} else {
|
2023-05-08 08:46:05 +00:00
|
|
|
|
return &Approval{}, nil
|
2023-04-24 08:17:01 +00:00
|
|
|
|
}
|
2022-07-28 09:18:01 +00:00
|
|
|
|
}
|
|
|
|
|
}
|