You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

113 lines
3.0 KiB

  1. package couponusers
  2. import (
  3. "CouponBackendGo/api/v1/couponusers"
  4. "CouponBackendGo/internal/dao"
  5. "CouponBackendGo/internal/service"
  6. "context"
  7. "database/sql"
  8. "encoding/json"
  9. "errors"
  10. "fmt"
  11. "github.com/gogf/gf/v2/frame/g"
  12. "strings"
  13. )
  14. type sCouponUsers struct{}
  15. func init() {
  16. service.RegisterCouponUsers(&sCouponUsers{})
  17. }
  18. // 根据优惠券id查看拥有优惠券的用户
  19. func (s *sCouponUsers) GetCouponUsersByCondition(ctx context.Context, couponId, jwcode int, name string) (users []couponusers.GetCouponUsersRes, err error) {
  20. //从redis中获取数据但不返回
  21. value, _ := g.Redis().Get(ctx, fmt.Sprintf("%d CouponUsers", couponId))
  22. if value.String() != "" {
  23. err = json.Unmarshal(value.Bytes(), &users)
  24. if err != nil {
  25. return nil, errors.New("redis中数据解析失败")
  26. }
  27. } else {
  28. /*查询所有数据*/
  29. //在coupon_users中查询出对应的jwcode
  30. err = dao.CouponUsers.Ctx(ctx).Fields("jwcode").
  31. Where("coupon_id = ", couponId).Scan(&users)
  32. if err != nil {
  33. return nil, errors.New("根据卡券id搜索jwcode失败")
  34. }
  35. //根据jwcode查询用户信息
  36. for i, userInfo := range users {
  37. err = dao.MemberInfo.Ctx(ctx).Fields("jwcode", "name", "deptName", "shopName").
  38. Where("jwcode = ?", userInfo.Jwcode).Scan(&users[i])
  39. if err != nil {
  40. return nil, errors.New("根据jwcode搜索用户信息失败")
  41. }
  42. }
  43. /*查询所有数据*/
  44. //将数据存入redis
  45. UsersMarshal, _ := json.Marshal(users)
  46. _, err = g.Redis().Set(ctx, fmt.Sprintf("%d CouponUsers", couponId), UsersMarshal)
  47. if err != nil {
  48. return nil, errors.New("将数据存入redis失败")
  49. }
  50. }
  51. if jwcode != 0 && name == "" {
  52. var result []couponusers.GetCouponUsersRes
  53. for _, user := range users {
  54. if user.Jwcode == jwcode {
  55. result = append(result, user)
  56. }
  57. }
  58. return result, err
  59. } else if jwcode == 0 && name != "" {
  60. var result []couponusers.GetCouponUsersRes
  61. for _, user := range users {
  62. if strings.Contains(user.Name, name) {
  63. result = append(result, user)
  64. }
  65. }
  66. return result, err
  67. } else if jwcode != 0 && name != "" {
  68. var result []couponusers.GetCouponUsersRes
  69. for _, user := range users {
  70. if user.Jwcode == jwcode && strings.Contains(user.Name, name) {
  71. result = append(result, user)
  72. }
  73. }
  74. return result, err
  75. }
  76. return users, err
  77. }
  78. // 根据jwcode,优惠券id删除用户
  79. func (s *sCouponUsers) DeleteCouponUserByJwcode(ctx context.Context, couponId, jwcode int) (result sql.Result, err error) {
  80. if jwcode == 0 {
  81. return nil, errors.New("jwcode不能为空")
  82. }
  83. if couponId == 0 {
  84. return nil, errors.New("couponId不能为空")
  85. }
  86. result, err = dao.CouponUsers.Ctx(ctx).Where("coupon_id = ?", couponId).Where("jwcode = ?", jwcode).Delete()
  87. if err != nil {
  88. return nil, errors.New("删除用户失败")
  89. }
  90. return result, err
  91. }
  92. // 通过excel导入精网号
  93. func (s *sCouponUsers) InsertJwcodeByExcel(ctx context.Context) {
  94. return
  95. }
  96. // 根据精网号发放用户优惠券
  97. func (s *sCouponUsers) InsertCouponUserByJwcode(ctx context.Context) {
  98. return
  99. }