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.

99 lines
2.3 KiB

6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
  1. package coupon
  2. import (
  3. "CouponBackendGo/api/v1/coupon"
  4. "CouponBackendGo/internal/dao"
  5. "CouponBackendGo/internal/model/do"
  6. "CouponBackendGo/internal/model/dto"
  7. "CouponBackendGo/internal/service"
  8. "context"
  9. "github.com/gogf/gf/v2/os/gtime"
  10. )
  11. type (
  12. sCoupon struct{}
  13. )
  14. func init() {
  15. service.RegisterCoupon(New())
  16. }
  17. func New() service.ICoupon {
  18. return &sCoupon{}
  19. }
  20. func (s *sCoupon) GetCouponList(ctx context.Context, pageNo int, pageSize int) (couponList []*dto.DtoCoupon, err error) {
  21. err = dao.Coupon.Ctx(ctx).Where("deleted", 0).Order("updated_at desc, end_time desc").Page(pageNo, pageSize).Scan(&couponList)
  22. couponList = InitCoupon(ctx, couponList)
  23. if err != nil {
  24. return nil, err
  25. }
  26. return
  27. }
  28. func InitCoupon(ctx context.Context, couponList []*dto.DtoCoupon) []*dto.DtoCoupon {
  29. for _, v := range couponList {
  30. v.Status = 0 //待使用期
  31. if v.StartTime.Unix() <= gtime.Now().Unix() {
  32. if v.EndTime.Unix() <= gtime.Now().Unix() {
  33. v.Status = 2 //使用期后
  34. } else {
  35. v.Status = 1 //使用期中
  36. }
  37. }
  38. v.Count, _ = dao.CouponUsers.Ctx(ctx).Where("coupon_id", v.Id).Count()
  39. }
  40. return couponList
  41. }
  42. func (s *sCoupon) GetCouponListTotal(ctx context.Context) (total int, err error) {
  43. total, err = dao.Coupon.Ctx(ctx).Where("deleted", 0).Count()
  44. if err != nil {
  45. return 0, err
  46. }
  47. return
  48. }
  49. func (s *sCoupon) GetCoupon(ctx context.Context, id int) (coupon *dto.DtoCoupon, err error) {
  50. err = dao.Coupon.Ctx(ctx).WherePri(id).Scan(&coupon)
  51. if err != nil {
  52. return nil, err
  53. }
  54. return
  55. }
  56. func (s *sCoupon) DeleteCoupon(ctx context.Context, id int) (err error) {
  57. _, err = dao.Coupon.Ctx(ctx).Data(do.Coupon{
  58. Deleted: 1,
  59. }).WherePri(id).Update()
  60. if err != nil {
  61. return err
  62. }
  63. return
  64. }
  65. func (s *sCoupon) InsertCoupon(ctx context.Context, req *coupon.InsertCouponReq) (err error) {
  66. if req.Id == 0 {
  67. _, err = dao.Coupon.Ctx(ctx).Data(do.Coupon{
  68. Title: req.Title,
  69. Cover: req.Image,
  70. ImgUrl: req.Image,
  71. Type: req.Type,
  72. StartTime: req.StartTime.Unix(),
  73. EndTime: req.EndTime.Unix(),
  74. }).Insert()
  75. } else {
  76. _, err = dao.Coupon.Ctx(ctx).Data(do.Coupon{
  77. Title: req.Title,
  78. Cover: req.Image,
  79. ImgUrl: req.Image,
  80. Type: req.Type,
  81. StartTime: req.StartTime.Unix(),
  82. EndTime: req.EndTime.Unix(),
  83. }).WherePri(req.Id).Update()
  84. }
  85. if err != nil {
  86. return err
  87. }
  88. return
  89. }