sys_user_model.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package model
  2. import (
  3. "database/sql"
  4. "fmt"
  5. "strings"
  6. "time"
  7. "git.i2edu.net/i2/go-zero/core/stores/cache"
  8. "git.i2edu.net/i2/go-zero/core/stores/sqlc"
  9. "git.i2edu.net/i2/go-zero/core/stores/sqlx"
  10. "git.i2edu.net/i2/go-zero/core/stringx"
  11. "git.i2edu.net/i2/go-zero/tools/goctl/model/sql/builderx"
  12. )
  13. var (
  14. sysUserFieldNames = builderx.RawFieldNames(&SysUser{})
  15. sysUserRows = strings.Join(sysUserFieldNames, ",")
  16. sysUserRowsExpectAutoSet = strings.Join(stringx.Remove(sysUserFieldNames, "`create_time`", "`update_time`"), ",")
  17. sysUserRowsWithPlaceHolder = strings.Join(stringx.Remove(sysUserFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
  18. cacheSysUserIdPrefix = "cache:sysUser:id:"
  19. cacheSysUserPhonePrefix = "cache:sysUser:phone:"
  20. cacheSysUserOrgIdPrefix = "cache:sysUser:orgId:"
  21. )
  22. type (
  23. SysUserModel interface {
  24. Insert(data SysUser) (sql.Result, error)
  25. FindOne(id string) (*SysUser, error)
  26. FindOneByPhone(id string) (*SysUser, error)
  27. Update(data SysUser) error
  28. Delete(id string) error
  29. FindOrgById(id string) (*SysUserSchool, error)
  30. }
  31. defaultSysUserModel struct {
  32. sqlc.CachedConn
  33. table string
  34. }
  35. SysUserSchool struct {
  36. OsId string `db:"os_id"`
  37. }
  38. SysUser struct {
  39. Status sql.NullInt64 `db:"status"`
  40. Avatar sql.NullString `db:"avatar"`
  41. LastUpdateTime int64 `db:"last_update_time"`
  42. Address sql.NullString `db:"address"`
  43. Password string `db:"password"`
  44. OrgId sql.NullString `db:"org_id"`
  45. CreateBy string `db:"create_by"`
  46. LastUpdateBy string `db:"last_update_by"`
  47. LoginId string `db:"login_id"`
  48. Name string `db:"name"`
  49. CreateTime time.Time `db:"create_time"`
  50. DelFlag int64 `db:"del_flag"`
  51. TempId sql.NullString `db:"temp_id"`
  52. Id string `db:"id"`
  53. FullName string `db:"full_name"`
  54. Mobile string `db:"mobile"`
  55. Email string `db:"email"`
  56. Gender int64 `db:"gender"`
  57. Type sql.NullInt64 `db:"type"`
  58. Domain string `db:"domain"`
  59. TempValue sql.NullString `db:"temp_value"`
  60. }
  61. )
  62. func NewSysUserModel(conn sqlx.SqlConn, c cache.CacheConf) SysUserModel {
  63. return &defaultSysUserModel{
  64. CachedConn: sqlc.NewConn(conn, c),
  65. table: "`sys_user`",
  66. }
  67. }
  68. func (m *defaultSysUserModel) Insert(data SysUser) (sql.Result, error) {
  69. query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, sysUserRowsExpectAutoSet)
  70. ret, err := m.ExecNoCache(query, data.Status, data.Avatar, data.LastUpdateTime, data.Address, data.Password, data.OrgId, data.CreateBy, data.LastUpdateBy, data.LoginId, data.Name, data.DelFlag, data.TempId, data.Id, data.FullName, data.Mobile, data.Email, data.Gender, data.Type, data.Domain, data.TempValue)
  71. return ret, err
  72. }
  73. func (m *defaultSysUserModel) FindOne(id string) (*SysUser, error) {
  74. var resp SysUser
  75. query := fmt.Sprintf("select %s from %s where `id` = ? and status = 0 and del_flag = 0 limit 1", sysUserRows, m.table)
  76. err := m.QueryRowNoCache(&resp, query, id)
  77. switch err {
  78. case nil:
  79. return &resp, nil
  80. case sqlc.ErrNotFound:
  81. return nil, ErrNotFound
  82. default:
  83. return nil, err
  84. }
  85. }
  86. func (m *defaultSysUserModel) FindOneByPhone(phone string) (*SysUser, error) {
  87. var resp SysUser
  88. query := fmt.Sprintf("select %s from %s where `mobile` = ? and status = 0 and del_flag = 0 limit 1 ", sysUserRows, m.table)
  89. err := m.QueryRowNoCache(&resp, query, phone)
  90. switch err {
  91. case nil:
  92. return &resp, nil
  93. case sqlc.ErrNotFound:
  94. return nil, ErrNotFound
  95. default:
  96. return nil, err
  97. }
  98. }
  99. func (m *defaultSysUserModel) Update(data SysUser) error {
  100. sysUserIdKey := fmt.Sprintf("%s%v", cacheSysUserIdPrefix, data.Id)
  101. _, err := m.Exec(func(conn sqlx.SqlConn) (result sql.Result, err error) {
  102. query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, sysUserRowsWithPlaceHolder)
  103. return conn.Exec(query, data.Status, data.Avatar, data.LastUpdateTime, data.Address, data.Password, data.OrgId, data.CreateBy, data.LastUpdateBy, data.LoginId, data.Name, data.DelFlag, data.TempId, data.FullName, data.Mobile, data.Email, data.Gender, data.Type, data.Domain, data.TempValue, data.Id)
  104. }, sysUserIdKey)
  105. return err
  106. }
  107. func (m *defaultSysUserModel) Delete(id string) error {
  108. sysUserIdKey := fmt.Sprintf("%s%v", cacheSysUserIdPrefix, id)
  109. _, err := m.Exec(func(conn sqlx.SqlConn) (result sql.Result, err error) {
  110. query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
  111. return conn.Exec(query, id)
  112. }, sysUserIdKey)
  113. return err
  114. }
  115. func (m *defaultSysUserModel) formatPrimary(primary interface{}) string {
  116. return fmt.Sprintf("%s%v", cacheSysUserIdPrefix, primary)
  117. }
  118. func (m *defaultSysUserModel) queryPrimary(conn sqlx.SqlConn, v, primary interface{}) error {
  119. query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", sysUserRows, m.table)
  120. return conn.QueryRow(v, query, primary)
  121. }
  122. func (m *defaultSysUserModel) FindOrgById(id string) (school *SysUserSchool, err error) {
  123. erpUserOrgIdKey := fmt.Sprintf("%s%v", cacheSysUserOrgIdPrefix, id)
  124. var resp SysUserSchool
  125. err = m.QueryRow(&resp, erpUserOrgIdKey, func(conn sqlx.SqlConn, v interface{}) error {
  126. query := fmt.Sprintf("select os_id from sys_user_school where `id` = ? limit 1")
  127. return conn.QueryRow(v, query, id)
  128. })
  129. switch err {
  130. case nil:
  131. return &resp, nil
  132. case sqlc.ErrNotFound:
  133. return nil, ErrNotFound
  134. default:
  135. return nil, err
  136. }
  137. }