sysUserModel.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package user
  2. import (
  3. "context"
  4. "fmt"
  5. "strings"
  6. "github.com/zeromicro/go-zero/core/stores/cache"
  7. "github.com/zeromicro/go-zero/core/stores/sqlx"
  8. )
  9. var _ SysUserModel = (*customSysUserModel)(nil)
  10. type (
  11. SysUserModel interface {
  12. sysUserModel
  13. FindListByPage(ctx context.Context, page, pageSize int64) ([]*SysUser, int64, error)
  14. FindListByDeptIds(ctx context.Context, deptIds []int64, page, pageSize int64) ([]*SysUser, int64, error)
  15. FindByIds(ctx context.Context, ids []int64) ([]*SysUser, error)
  16. FindIdsByDeptId(ctx context.Context, deptId int64) ([]int64, error)
  17. }
  18. customSysUserModel struct {
  19. *defaultSysUserModel
  20. }
  21. )
  22. func NewSysUserModel(conn sqlx.SqlConn, c cache.CacheConf, cachePrefix string, opts ...cache.Option) SysUserModel {
  23. return &customSysUserModel{
  24. defaultSysUserModel: newSysUserModel(conn, c, cachePrefix, opts...),
  25. }
  26. }
  27. func (m *customSysUserModel) FindListByPage(ctx context.Context, page, pageSize int64) ([]*SysUser, int64, error) {
  28. var total int64
  29. countQuery := fmt.Sprintf("SELECT COUNT(*) FROM %s", m.table)
  30. if err := m.QueryRowNoCacheCtx(ctx, &total, countQuery); err != nil {
  31. return nil, 0, err
  32. }
  33. var list []*SysUser
  34. query := fmt.Sprintf("SELECT %s FROM %s ORDER BY id DESC LIMIT ?,?", sysUserRows, m.table)
  35. if err := m.QueryRowsNoCacheCtx(ctx, &list, query, (page-1)*pageSize, pageSize); err != nil {
  36. return nil, 0, err
  37. }
  38. return list, total, nil
  39. }
  40. func (m *customSysUserModel) FindListByDeptIds(ctx context.Context, deptIds []int64, page, pageSize int64) ([]*SysUser, int64, error) {
  41. if len(deptIds) == 0 {
  42. return nil, 0, nil
  43. }
  44. placeholders := make([]string, len(deptIds))
  45. args := make([]interface{}, len(deptIds))
  46. for i, id := range deptIds {
  47. placeholders[i] = "?"
  48. args[i] = id
  49. }
  50. inClause := strings.Join(placeholders, ",")
  51. var total int64
  52. countQuery := fmt.Sprintf("SELECT COUNT(*) FROM %s WHERE `deptId` IN (%s)", m.table, inClause)
  53. if err := m.QueryRowNoCacheCtx(ctx, &total, countQuery, args...); err != nil {
  54. return nil, 0, err
  55. }
  56. var list []*SysUser
  57. pageArgs := append(args, (page-1)*pageSize, pageSize)
  58. query := fmt.Sprintf("SELECT %s FROM %s WHERE `deptId` IN (%s) ORDER BY id DESC LIMIT ?,?", sysUserRows, m.table, inClause)
  59. if err := m.QueryRowsNoCacheCtx(ctx, &list, query, pageArgs...); err != nil {
  60. return nil, 0, err
  61. }
  62. return list, total, nil
  63. }
  64. func (m *customSysUserModel) FindIdsByDeptId(ctx context.Context, deptId int64) ([]int64, error) {
  65. var ids []int64
  66. query := fmt.Sprintf("SELECT `id` FROM %s WHERE `deptId` = ?", m.table)
  67. if err := m.QueryRowsNoCacheCtx(ctx, &ids, query, deptId); err != nil {
  68. return nil, err
  69. }
  70. return ids, nil
  71. }
  72. func (m *customSysUserModel) FindByIds(ctx context.Context, ids []int64) ([]*SysUser, error) {
  73. if len(ids) == 0 {
  74. return nil, nil
  75. }
  76. placeholders := make([]string, len(ids))
  77. args := make([]interface{}, len(ids))
  78. for i, id := range ids {
  79. placeholders[i] = "?"
  80. args[i] = id
  81. }
  82. var list []*SysUser
  83. query := fmt.Sprintf("SELECT %s FROM %s WHERE `id` IN (%s)", sysUserRows, m.table, strings.Join(placeholders, ","))
  84. if err := m.QueryRowsNoCacheCtx(ctx, &list, query, args...); err != nil {
  85. return nil, err
  86. }
  87. return list, nil
  88. }