sysProductMemberModel.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package productmember
  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 _ SysProductMemberModel = (*customSysProductMemberModel)(nil)
  10. type (
  11. SysProductMemberModel interface {
  12. sysProductMemberModel
  13. FindListByProductCode(ctx context.Context, productCode string, page, pageSize int64) ([]*SysProductMember, int64, error)
  14. FindMapByProductCodeUserIds(ctx context.Context, productCode string, userIds []int64) (map[int64]*SysProductMember, error)
  15. }
  16. customSysProductMemberModel struct {
  17. *defaultSysProductMemberModel
  18. }
  19. )
  20. func NewSysProductMemberModel(conn sqlx.SqlConn, c cache.CacheConf, cachePrefix string, opts ...cache.Option) SysProductMemberModel {
  21. return &customSysProductMemberModel{
  22. defaultSysProductMemberModel: newSysProductMemberModel(conn, c, cachePrefix, opts...),
  23. }
  24. }
  25. func (m *customSysProductMemberModel) FindListByProductCode(ctx context.Context, productCode string, page, pageSize int64) ([]*SysProductMember, int64, error) {
  26. var total int64
  27. countQuery := fmt.Sprintf("SELECT COUNT(*) FROM %s WHERE `productCode` = ?", m.table)
  28. if err := m.QueryRowNoCacheCtx(ctx, &total, countQuery, productCode); err != nil {
  29. return nil, 0, err
  30. }
  31. var list []*SysProductMember
  32. query := fmt.Sprintf("SELECT %s FROM %s WHERE `productCode` = ? ORDER BY id DESC LIMIT ?,?", sysProductMemberRows, m.table)
  33. if err := m.QueryRowsNoCacheCtx(ctx, &list, query, productCode, (page-1)*pageSize, pageSize); err != nil {
  34. return nil, 0, err
  35. }
  36. return list, total, nil
  37. }
  38. func (m *customSysProductMemberModel) FindMapByProductCodeUserIds(ctx context.Context, productCode string, userIds []int64) (map[int64]*SysProductMember, error) {
  39. if len(userIds) == 0 {
  40. return make(map[int64]*SysProductMember), nil
  41. }
  42. placeholders := make([]string, len(userIds))
  43. args := make([]interface{}, 0, len(userIds)+1)
  44. args = append(args, productCode)
  45. for i, id := range userIds {
  46. placeholders[i] = "?"
  47. args = append(args, id)
  48. }
  49. var list []*SysProductMember
  50. query := fmt.Sprintf("SELECT %s FROM %s WHERE `productCode` = ? AND `userId` IN (%s)", sysProductMemberRows, m.table, strings.Join(placeholders, ","))
  51. if err := m.QueryRowsNoCacheCtx(ctx, &list, query, args...); err != nil {
  52. return nil, err
  53. }
  54. result := make(map[int64]*SysProductMember, len(list))
  55. for _, pm := range list {
  56. result[pm.UserId] = pm
  57. }
  58. return result, nil
  59. }