sys_user_model.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  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 int64 `db:"os_id"`
  37. OsName string `db:"os_name"`
  38. }
  39. SysUser struct {
  40. Status sql.NullInt64 `db:"status"`
  41. Avatar sql.NullString `db:"avatar"`
  42. LastUpdateTime int64 `db:"last_update_time"`
  43. Address sql.NullString `db:"address"`
  44. Password string `db:"password"`
  45. OrgId sql.NullString `db:"org_id"`
  46. CreateBy string `db:"create_by"`
  47. LastUpdateBy string `db:"last_update_by"`
  48. LoginId string `db:"login_id"`
  49. Name string `db:"name"`
  50. CreateTime time.Time `db:"create_time"`
  51. DelFlag int64 `db:"del_flag"`
  52. TempId sql.NullString `db:"temp_id"`
  53. Id string `db:"id"`
  54. FullName string `db:"full_name"`
  55. Mobile string `db:"mobile"`
  56. Email string `db:"email"`
  57. Gender int64 `db:"gender"`
  58. Type sql.NullInt64 `db:"type"`
  59. Domain string `db:"domain"`
  60. TempValue sql.NullString `db:"temp_value"`
  61. }
  62. )
  63. func NewSysUserModel(conn sqlx.SqlConn, c cache.CacheConf) SysUserModel {
  64. return &defaultSysUserModel{
  65. CachedConn: sqlc.NewConn(conn, c),
  66. table: "`sys_user`",
  67. }
  68. }
  69. func (m *defaultSysUserModel) Insert(data SysUser) (sql.Result, error) {
  70. query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, sysUserRowsExpectAutoSet)
  71. 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)
  72. return ret, err
  73. }
  74. func (m *defaultSysUserModel) FindOne(id string) (*SysUser, error) {
  75. var resp SysUser
  76. query := fmt.Sprintf("select %s from %s where `id` = ? and status = 0 and del_flag = 0 limit 1", sysUserRows, m.table)
  77. err := m.QueryRowNoCache(&resp, query, id)
  78. switch err {
  79. case nil:
  80. return &resp, nil
  81. case sqlc.ErrNotFound:
  82. return nil, ErrNotFound
  83. default:
  84. return nil, err
  85. }
  86. }
  87. func (m *defaultSysUserModel) FindOneByPhone(phone string) (*SysUser, error) {
  88. var resp SysUser
  89. query := fmt.Sprintf("select %s from %s where `mobile` = ? and status = 0 and del_flag = 0 limit 1 ", sysUserRows, m.table)
  90. err := m.QueryRowNoCache(&resp, query, phone)
  91. switch err {
  92. case nil:
  93. return &resp, nil
  94. case sqlc.ErrNotFound:
  95. return nil, ErrNotFound
  96. default:
  97. return nil, err
  98. }
  99. }
  100. func (m *defaultSysUserModel) Update(data SysUser) error {
  101. sysUserIdKey := fmt.Sprintf("%s%v", cacheSysUserIdPrefix, data.Id)
  102. _, err := m.Exec(func(conn sqlx.SqlConn) (result sql.Result, err error) {
  103. query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, sysUserRowsWithPlaceHolder)
  104. 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)
  105. }, sysUserIdKey)
  106. return err
  107. }
  108. func (m *defaultSysUserModel) Delete(id string) error {
  109. sysUserIdKey := fmt.Sprintf("%s%v", cacheSysUserIdPrefix, id)
  110. _, err := m.Exec(func(conn sqlx.SqlConn) (result sql.Result, err error) {
  111. query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
  112. return conn.Exec(query, id)
  113. }, sysUserIdKey)
  114. return err
  115. }
  116. func (m *defaultSysUserModel) formatPrimary(primary interface{}) string {
  117. return fmt.Sprintf("%s%v", cacheSysUserIdPrefix, primary)
  118. }
  119. func (m *defaultSysUserModel) queryPrimary(conn sqlx.SqlConn, v, primary interface{}) error {
  120. query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", sysUserRows, m.table)
  121. return conn.QueryRow(v, query, primary)
  122. }
  123. func (m *defaultSysUserModel) FindOrgById(id string) (school *SysUserSchool, err error) {
  124. erpUserOrgIdKey := fmt.Sprintf("%s%v", cacheSysUserOrgIdPrefix, id)
  125. var resp SysUserSchool
  126. err = m.QueryRow(&resp, erpUserOrgIdKey, func(conn sqlx.SqlConn, v interface{}) error {
  127. query := fmt.Sprintf("select sys_user_school.os_id," +
  128. "base_organ_scholl.name os_name " +
  129. "from sys_user_school join base_organ_school on sys_user_school.os_id = base_organ_school.id " +
  130. "where sys_user_school.`user_id` = ?" +
  131. "and sys_user.status = 0 " +
  132. "and sys_user.del_flag = 0 " +
  133. " limit 1")
  134. return conn.QueryRow(v, query, id)
  135. })
  136. switch err {
  137. case nil:
  138. return &resp, nil
  139. case sqlc.ErrNotFound:
  140. return nil, ErrNotFound
  141. default:
  142. return nil, err
  143. }
  144. }