sysProductMemberModel.go 2.8 KB

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