package model import ( "database/sql/driver" "encoding/json" "errors" "fmt" model2 "gas-cylinder-api/common/model" log "gogs.baozhida.cn/zoie/OAuth-core/logger" coreModel "gogs.baozhida.cn/zoie/OAuth-core/model" "gogs.baozhida.cn/zoie/OAuth-core/sdk" "gogs.baozhida.cn/zoie/OAuth-core/sdk/config" "golang.org/x/crypto/bcrypt" "gorm.io/gorm" ) // 省平台用户 type ProvUser struct { UserId string `json:"userId" gorm:"size:48;" 钢瓶规格ignore:"true"` // 用户ID Name string `json:"name" gorm:"size:128;"` // 用户姓名 IdCard string `json:"idCard" gorm:"size:32"` // 身份证号 No string `json:"no" gorm:"size:32"` // 用户工号 Phone string `json:"phone" gorm:"size:32"` // 联系电话 UserType int `json:"userType" gorm:"size:4"` // 用户类型 3-门店人员 4-货车司机 5-充装站人员 Description string `json:"description" gorm:"size:255"` // 描述 HireStatus string `json:"hireStatus" gorm:"size:64"` // 聘用状态 HireTime string `json:"hireTime" gorm:"size:10"` // 聘用日期 Education string `json:"education" gorm:"size:64"` // 教育程度 JobCategory string `json:"jobCategory" gorm:"size:64"` // 岗位类别 PersonQual string `json:"personQual" gorm:"size:128"` // 资质 Isorders int `json:"isorders" gorm:"size:4"` // 用户类型 0-送气员 1-库管 userType=3时必填 CmpCode string `json:"cmpCode" gorm:"size:48"` // 所属机 } // 送气人员绑定资质信息《燃气从业资格证》 type ProvStoreUserBindCertificate struct { UserId string `json:"userId,omitempty" gorm:"size:48;" swaggerignore:"true"` // 用户ID CertificateNo string `json:"certificateNo,omitempty" gorm:"size:32;"` // 证书编号 Type int `json:"type,omitempty" gorm:"size:4;default:1"` // 人员类型 1:运输、维护和抢修人员 IssueAuthority string `json:"issueAuthority,omitempty" gorm:"size:128;"` // 发证机关 IssueTime string `json:"issueTime,omitempty" gorm:"size:10;"` // 发证时间 ImgUrl string `json:"imgUrl,omitempty" gorm:"size:255;"` // 资质图片URL地址 Remarks string `json:"remarks,omitempty" gorm:"size:255;"` // 备注信息 } // 货车司机绑定《道路运输从业人员从业资格证》信息 type ProvTruckUserBindCertificate struct { UserId string `json:"userId,omitempty" gorm:"size:48;" swaggerignore:"true"` // 用户ID CertificateNo string `json:"certificateNo,omitempty" gorm:"size:32;"` // 证书编号 Type int `json:"type,omitempty" gorm:"size:4;default:1"` // 从业资格类型 1:道路危险货物运输押运员 IssueAuthority string `json:"issueAuthority,omitempty" gorm:"size:64;"` // 发证机关 IssueTime string `json:"issueTime,omitempty" gorm:"size:10;"` // 发证时间 FirstIssueTime string `json:"firstIssueTime,omitempty" gorm:"size:10;"` // 首次发证时间 ExpireTime string `json:"expireTime,omitempty" gorm:"size:10;"` // 有效期 ImgUrl string `json:"imgUrl,omitempty" gorm:"size:255;"` // 资质图片URL地址 Remarks string `json:"remarks,omitempty" gorm:"size:255;"` // 备注信息 } type SysUser struct { model2.Model coreModel.User Dept SysDept `json:"dept" gorm:"->"` // 部门 Role SysRole `json:"role" gorm:"->"` // 角色 ProvUser ProvUser `json:"provUser"` // 省平台用户信息 ProvUserId string `json:"provUserId" gorm:"size:48;"` // 省平台用户id ProvStoreUserBindCertificate ProvStoreUserBindCertificate `json:"provStoreUserBindCertificate"` // 送气人员绑定资质信息《燃气从业资格证》 ProvTruckUserBindCertificate ProvTruckUserBindCertificate `json:"provTruckUserBindCertificate"` // 货车司机绑定《道路运输从业人员从业资格证》信息 model2.ControlBy model2.ModelTime } func (SysUser) TableName() string { return "sys_user" } func (e ProvUser) Value() (driver.Value, error) { d, err := json.Marshal(e) return string(d), err } func (e *ProvUser) Scan(src interface{}) error { return json.Unmarshal(src.([]byte), e) } func (e *SysUser) Generate() model2.ActiveRecord { o := *e return &o } func (e ProvStoreUserBindCertificate) Value() (driver.Value, error) { d, err := json.Marshal(e) return string(d), err } func (e *ProvStoreUserBindCertificate) Scan(src interface{}) error { return json.Unmarshal(src.([]byte), e) } func (e ProvTruckUserBindCertificate) Value() (driver.Value, error) { d, err := json.Marshal(e) return string(d), err } func (e *ProvTruckUserBindCertificate) Scan(src interface{}) error { return json.Unmarshal(src.([]byte), e) } func (e *SysUser) GetId() interface{} { return e.Id } // 加密 func (e *SysUser) Encrypt() (err error) { if e.Password == "" { return } var hash []byte if hash, err = bcrypt.GenerateFromPassword([]byte(e.Password), bcrypt.DefaultCost); err != nil { return } else { e.Password = string(hash) return } } var ( ErrForbidUpdateSysUser = errors.New("禁止修改系统用户") ErrForbidDeleteSysUser = errors.New("禁止删除系统用户") ) func (e *SysUser) BeforeCreate(_ *gorm.DB) error { return e.Encrypt() } func (e *SysUser) BeforeUpdate(_ *gorm.DB) error { if e.Username == "admin" { return ErrForbidUpdateSysUser } var err error if e.Password != "" { err = e.Encrypt() } return err } func (e *SysUser) BeforeDelete(_ *gorm.DB) error { if e.Username == "admin" { return ErrForbidDeleteSysUser } return nil } func GetUserCacheKey(id int) string { return fmt.Sprintf("oauth:user:%d", id) } func GetUserCode(id int) (SysUser, error) { var err error var userModel SysUser //准备db db := sdk.Runtime.GetDbByKey(config.ApplicationConfig.Host) if db == nil { err = errors.New("db not exist") log.Errorf("host[%s]'s %s", err.Error()) return userModel, err } err = db.Preload("Dept").First(&userModel, id).Error if err != nil { log.Errorf("db error: %s", err) err = errors.New("获取用户信息失败") return userModel, err } return userModel, nil } type SysUserOmit struct { Id int `json:"id,omitempty"` // 主键编码 NickName string `json:"nickName,omitempty"` // 昵称 ProvUserId string `json:"provUserId,omitempty"` // 省平台用户id Phone string `json:"phone,omitempty"` // 手机号 } func (SysUserOmit) TableName() string { return "sys_user" }