package model import ( "database/sql/driver" "encoding/json" "github.com/fonchain_enterprise/fonchain-approval/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 }