147 lines
3.4 KiB
Go
147 lines
3.4 KiB
Go
package model
|
|
|
|
import (
|
|
"database/sql/driver"
|
|
"encoding/json"
|
|
"github.com/fonchain_enterprise/fonchain-approval-fork/api/approval"
|
|
"gorm.io/plugin/soft_delete"
|
|
"time"
|
|
)
|
|
|
|
type CopyUser struct {
|
|
ID uint64
|
|
Name string
|
|
IsViewed bool
|
|
}
|
|
|
|
type CopyUsers []CopyUser
|
|
|
|
type ApprovalUser struct {
|
|
ID uint64
|
|
Name string
|
|
}
|
|
|
|
type ApprovalUsers []ApprovalUser
|
|
|
|
// ApprovalSetting 部门抄送人设置
|
|
type ApprovalSetting struct {
|
|
ID uint64 `gorm:"primaryKey;column:id" json:"id"` // 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"` // 更新时间
|
|
KeyWord string `gorm:"column:key_word" json:"keyWord"`
|
|
ApprovalUsers ApprovalUsers `gorm:"column:approval_users" json:"approvalUsers"`
|
|
CopyUsers CopyUsers `gorm:"column:copy_users" json:"copyUsers"`
|
|
ApprovalType *ApprovalType `gorm:"foreignKey:key_word;references:key_word" json:"approvalType"`
|
|
|
|
Domain string `gorm:"column:domain" json:"domain"`
|
|
}
|
|
|
|
// TableName get sql table name.获取数据库表名
|
|
func (m *ApprovalSetting) TableName() string {
|
|
return "approval_setting"
|
|
}
|
|
|
|
func (j *CopyUsers) Scan(src interface{}) error {
|
|
return json.Unmarshal(src.([]byte), j)
|
|
}
|
|
|
|
func (j CopyUsers) Value() (driver.Value, error) {
|
|
|
|
v, err := json.Marshal(j)
|
|
|
|
return string(v), err
|
|
}
|
|
|
|
func (s *ApprovalUsers) Scan(src interface{}) error {
|
|
return json.Unmarshal(src.([]byte), s)
|
|
}
|
|
|
|
func (s ApprovalUsers) Value() (driver.Value, error) {
|
|
|
|
v, err := json.Marshal(s)
|
|
|
|
return string(v), err
|
|
}
|
|
|
|
func GetApprovalSettingFromKeyWord(Domain, keyWord string) (setting *ApprovalSetting, err error) {
|
|
|
|
err = DB.Model(&ApprovalSetting{}).Where(&ApprovalSetting{KeyWord: keyWord, Domain: Domain}).First(&setting).Error
|
|
|
|
return setting, err
|
|
}
|
|
|
|
func FormatCopyUsers(copyUsers []*approval.CopyUser) CopyUsers {
|
|
var res CopyUsers
|
|
copyMap := make(map[uint64]struct{})
|
|
|
|
// copyer
|
|
for _, copyUser := range copyUsers {
|
|
|
|
if _, ok := copyMap[copyUser.ID]; ok { //存在
|
|
continue
|
|
}
|
|
|
|
temp := CopyUser{
|
|
ID: copyUser.ID,
|
|
Name: copyUser.Name,
|
|
}
|
|
|
|
res = append(res, temp)
|
|
}
|
|
|
|
return res
|
|
}
|
|
|
|
func FormatApproveUsers(copyUsers []*approval.ApprovalUser) ApprovalUsers {
|
|
var res ApprovalUsers
|
|
|
|
// copyer
|
|
for _, copyUser := range copyUsers {
|
|
temp := ApprovalUser{
|
|
ID: copyUser.ID,
|
|
Name: copyUser.Name,
|
|
}
|
|
res = append(res, temp)
|
|
}
|
|
|
|
return res
|
|
}
|
|
|
|
// GetCombineApproveUsers 混合获取
|
|
func (m *ApprovalSetting) GetCombineApproveUsers(approvalUser []ApprovalUser) []ApprovalUser {
|
|
approvalUserMap := make(map[uint64]struct{})
|
|
|
|
// copyer
|
|
for _, tt := range approvalUser {
|
|
if _, ok := approvalUserMap[tt.ID]; ok == false {
|
|
approvalUserMap[tt.ID] = struct{}{}
|
|
}
|
|
}
|
|
|
|
for _, tt := range m.ApprovalUsers {
|
|
if _, ok := approvalUserMap[tt.ID]; ok == false {
|
|
approvalUserMap[tt.ID] = struct{}{}
|
|
approvalUser = append(approvalUser, tt)
|
|
}
|
|
}
|
|
|
|
return approvalUser
|
|
}
|
|
|
|
func FormatToResponse(copyUsers CopyUsers) []*approval.CopyUser {
|
|
var res []*approval.CopyUser
|
|
|
|
for _, copyUser := range copyUsers {
|
|
temp := &approval.CopyUser{
|
|
ID: copyUser.ID,
|
|
Name: copyUser.Name,
|
|
IsViewed: copyUser.IsViewed,
|
|
}
|
|
|
|
res = append(res, temp)
|
|
}
|
|
|
|
return res
|
|
}
|