package domain import "time" //用户是否可用状态:【1:正常】【 2:禁用】 const ( userStatusUsable int8 = 1 userStatusUnusable int8 = 2 ) //用户是否是主管 :【1:是主管】【 2:不是主管】 const ( UserIsCompanyCharge int8 = 1 UserIsNotCompanyCharge int8 = 2 ) //用户类型 1普通用户 2主管理员 const ( UserIsNotAdmin int8 = 1 UserIsAdmin int8 = 2 ) //Users 企业平台的用户 type Users struct { Id int64 //用户id CompanyId int64 //公司id OpenId int64 //统一用户中心 Name string //用户名称 Sex int8 //性别:【0:未知】【1:男】【2:女】 JobNum string //工号 Phone string //手机号,同账号 PrivatePhone string //私人手机号 Email string //邮件 ExtensionNum string //分机号 EntryTime time.Time //入职时间 Workspace string //工作地 Status int8 //状态:【1:正常】【 2:禁用】 Avatar string ///头像 Remarks string //备注 ChargeStatus int8 //是否为当前公司主管 【1:是】【2:否】 CreateAt time.Time UpdateAt time.Time Permission []AdminPermissionBase //权限 AccessPartners []Partner AdminType int8 //是否是公司负责人,即超级管理员 1普通用户 2主管理员 } //IsUsable 用户是否可用 func (u Users) IsUsable() bool { return u.Status == userStatusUsable } //IsSuperAdmin 用户是否是负责人 func (u Users) IsSuperAdmin() bool { return u.AdminType == UserIsAdmin } func (u Users) InCompany(companyid int64) bool { return u.CompanyId == companyid } func (u Users) HasPermissionByCode(code string) bool { if u.IsSuperAdmin() { return true } for _, v := range u.Permission { if v.Code == code { return true } } return false } func (u *Users) Update(m map[string]interface{}) error { if v, ok := m["CompanyId"]; ok { u.CompanyId = v.(int64) } if v, ok := m["OpenId"]; ok { u.OpenId = v.(int64) } if v, ok := m["Name"]; ok { u.Name = v.(string) } if v, ok := m["Sex"]; ok { u.Sex = v.(int8) } if v, ok := m["JobNum"]; ok { u.JobNum = v.(string) } if v, ok := m["Phone"]; ok { u.Phone = v.(string) } if v, ok := m["PrivatePhone"]; ok { u.PrivatePhone = v.(string) } if v, ok := m["Email"]; ok { u.Email = v.(string) } if v, ok := m["ExtensionNum"]; ok { u.ExtensionNum = v.(string) } if v, ok := m["EntryTime"]; ok { u.EntryTime = v.(time.Time) } if v, ok := m["Workspace"]; ok { u.Workspace = v.(string) } if v, ok := m["Status"]; ok { u.Status = v.(int8) } if v, ok := m["Avatar"]; ok { u.Avatar = v.(string) } if v, ok := m["Remarks"]; ok { u.Remarks = v.(string) } if v, ok := m["ChargeStatus"]; ok { u.ChargeStatus = v.(int8) } if v, ok := m["Permission"]; ok { u.Permission = v.([]AdminPermissionBase) } if v, ok := m["AccessPartners"]; ok { u.AccessPartners = v.([]Partner) } if v, ok := m["AdminType"]; ok { u.AdminType = v.(int8) } return nil } type UsersFindOneQuery struct { Id int64 Phone string CompanyId int64 OpenId int64 } type UsersFindQuery struct { AdminType int8 ChargeStatus int8 CompanyId int64 Ids []int64 Offset int Limit int UserNameMatch string } type UsersRepository interface { Add(*Users) error Edit(*Users) error Remove([]int64) error FindOne(queryOptions UsersFindOneQuery) (Users, error) Find(queryOptions UsersFindQuery) (int, []Users, error) }