sys_user.go 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. package model
  2. import (
  3. "database/sql/driver"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. model2 "gas-cylinder-api/common/model"
  8. log "gogs.baozhida.cn/zoie/OAuth-core/logger"
  9. coreModel "gogs.baozhida.cn/zoie/OAuth-core/model"
  10. "gogs.baozhida.cn/zoie/OAuth-core/sdk"
  11. "gogs.baozhida.cn/zoie/OAuth-core/sdk/config"
  12. "golang.org/x/crypto/bcrypt"
  13. "gorm.io/gorm"
  14. )
  15. // 省平台用户
  16. type ProvUser struct {
  17. UserId string `json:"userId" gorm:"size:48;" 钢瓶规格ignore:"true"` // 用户ID
  18. Name string `json:"name" gorm:"size:128;"` // 用户姓名
  19. IdCard string `json:"idCard" gorm:"size:32"` // 身份证号
  20. No string `json:"no" gorm:"size:32"` // 用户工号
  21. Phone string `json:"phone" gorm:"size:32"` // 联系电话
  22. UserType int `json:"userType" gorm:"size:4"` // 用户类型 3-门店人员 4-货车司机 5-充装站人员
  23. Description string `json:"description" gorm:"size:255"` // 描述
  24. HireStatus string `json:"hireStatus" gorm:"size:64"` // 聘用状态
  25. HireTime string `json:"hireTime" gorm:"size:10"` // 聘用日期
  26. Education string `json:"education" gorm:"size:64"` // 教育程度
  27. JobCategory string `json:"jobCategory" gorm:"size:64"` // 岗位类别
  28. PersonQual string `json:"personQual" gorm:"size:128"` // 资质
  29. Isorders int `json:"isorders" gorm:"size:4"` // 用户类型 0-送气员 1-库管 userType=3时必填
  30. CmpCode string `json:"cmpCode" gorm:"size:48"` // 所属机
  31. }
  32. // 送气人员绑定资质信息《燃气从业资格证》
  33. type ProvStoreUserBindCertificate struct {
  34. UserId string `json:"userId,omitempty" gorm:"size:48;" swaggerignore:"true"` // 用户ID
  35. CertificateNo string `json:"certificateNo,omitempty" gorm:"size:32;"` // 证书编号
  36. Type int `json:"type,omitempty" gorm:"size:4;default:1"` // 人员类型 1:运输、维护和抢修人员
  37. IssueAuthority string `json:"issueAuthority,omitempty" gorm:"size:128;"` // 发证机关
  38. IssueTime string `json:"issueTime,omitempty" gorm:"size:10;"` // 发证时间
  39. ImgUrl string `json:"imgUrl,omitempty" gorm:"size:255;"` // 资质图片URL地址
  40. Remarks string `json:"remarks,omitempty" gorm:"size:255;"` // 备注信息
  41. }
  42. // 货车司机绑定《道路运输从业人员从业资格证》信息
  43. type ProvTruckUserBindCertificate struct {
  44. UserId string `json:"userId,omitempty" gorm:"size:48;" swaggerignore:"true"` // 用户ID
  45. CertificateNo string `json:"certificateNo,omitempty" gorm:"size:32;"` // 证书编号
  46. Type int `json:"type,omitempty" gorm:"size:4;default:1"` // 从业资格类型 1:道路危险货物运输押运员
  47. IssueAuthority string `json:"issueAuthority,omitempty" gorm:"size:64;"` // 发证机关
  48. IssueTime string `json:"issueTime,omitempty" gorm:"size:10;"` // 发证时间
  49. FirstIssueTime string `json:"firstIssueTime,omitempty" gorm:"size:10;"` // 首次发证时间
  50. ExpireTime string `json:"expireTime,omitempty" gorm:"size:10;"` // 有效期
  51. ImgUrl string `json:"imgUrl,omitempty" gorm:"size:255;"` // 资质图片URL地址
  52. Remarks string `json:"remarks,omitempty" gorm:"size:255;"` // 备注信息
  53. }
  54. type SysUser struct {
  55. model2.Model
  56. coreModel.User
  57. Dept SysDept `json:"dept" gorm:"->"` // 部门
  58. Role SysRole `json:"role" gorm:"->"` // 角色
  59. ProvUser ProvUser `json:"provUser"` // 省平台用户信息
  60. ProvUserId string `json:"provUserId" gorm:"size:48;"` // 省平台用户id
  61. ProvStoreUserBindCertificate ProvStoreUserBindCertificate `json:"provStoreUserBindCertificate"` // 送气人员绑定资质信息《燃气从业资格证》
  62. ProvTruckUserBindCertificate ProvTruckUserBindCertificate `json:"provTruckUserBindCertificate"` // 货车司机绑定《道路运输从业人员从业资格证》信息
  63. model2.ControlBy
  64. model2.ModelTime
  65. }
  66. func (SysUser) TableName() string {
  67. return "sys_user"
  68. }
  69. func (e ProvUser) Value() (driver.Value, error) {
  70. d, err := json.Marshal(e)
  71. return string(d), err
  72. }
  73. func (e *ProvUser) Scan(src interface{}) error {
  74. return json.Unmarshal(src.([]byte), e)
  75. }
  76. func (e *SysUser) Generate() model2.ActiveRecord {
  77. o := *e
  78. return &o
  79. }
  80. func (e ProvStoreUserBindCertificate) Value() (driver.Value, error) {
  81. d, err := json.Marshal(e)
  82. return string(d), err
  83. }
  84. func (e *ProvStoreUserBindCertificate) Scan(src interface{}) error {
  85. return json.Unmarshal(src.([]byte), e)
  86. }
  87. func (e ProvTruckUserBindCertificate) Value() (driver.Value, error) {
  88. d, err := json.Marshal(e)
  89. return string(d), err
  90. }
  91. func (e *ProvTruckUserBindCertificate) Scan(src interface{}) error {
  92. return json.Unmarshal(src.([]byte), e)
  93. }
  94. func (e *SysUser) GetId() interface{} {
  95. return e.Id
  96. }
  97. // 加密
  98. func (e *SysUser) Encrypt() (err error) {
  99. if e.Password == "" {
  100. return
  101. }
  102. var hash []byte
  103. if hash, err = bcrypt.GenerateFromPassword([]byte(e.Password), bcrypt.DefaultCost); err != nil {
  104. return
  105. } else {
  106. e.Password = string(hash)
  107. return
  108. }
  109. }
  110. var (
  111. ErrForbidUpdateSysUser = errors.New("禁止修改系统用户")
  112. ErrForbidDeleteSysUser = errors.New("禁止删除系统用户")
  113. )
  114. func (e *SysUser) BeforeCreate(_ *gorm.DB) error {
  115. return e.Encrypt()
  116. }
  117. func (e *SysUser) BeforeUpdate(_ *gorm.DB) error {
  118. if e.Username == "admin" {
  119. return ErrForbidUpdateSysUser
  120. }
  121. var err error
  122. if e.Password != "" {
  123. err = e.Encrypt()
  124. }
  125. return err
  126. }
  127. func (e *SysUser) BeforeDelete(_ *gorm.DB) error {
  128. if e.Username == "admin" {
  129. return ErrForbidDeleteSysUser
  130. }
  131. return nil
  132. }
  133. func GetUserCacheKey(id int) string {
  134. return fmt.Sprintf("oauth:user:%d", id)
  135. }
  136. func GetUserCode(id int) (SysUser, error) {
  137. var err error
  138. var userModel SysUser
  139. //准备db
  140. db := sdk.Runtime.GetDbByKey(config.ApplicationConfig.Host)
  141. if db == nil {
  142. err = errors.New("db not exist")
  143. log.Errorf("host[%s]'s %s", err.Error())
  144. return userModel, err
  145. }
  146. err = db.Preload("Dept").First(&userModel, id).Error
  147. if err != nil {
  148. log.Errorf("db error: %s", err)
  149. err = errors.New("获取用户信息失败")
  150. return userModel, err
  151. }
  152. return userModel, nil
  153. }
  154. type SysUserOmit struct {
  155. Id int `json:"id,omitempty"` // 主键编码
  156. NickName string `json:"nickName,omitempty"` // 昵称
  157. ProvUserId string `json:"provUserId,omitempty"` // 省平台用户id
  158. Phone string `json:"phone,omitempty"` // 手机号
  159. }
  160. func (SysUserOmit) TableName() string {
  161. return "sys_user"
  162. }