diff --git a/internal/biz/bo/product_bo.go b/internal/biz/bo/product_bo.go index 8a95ab4..31f412e 100644 --- a/internal/biz/bo/product_bo.go +++ b/internal/biz/bo/product_bo.go @@ -16,6 +16,7 @@ type ProductBo struct { Channel vo.Channel AvailableType vo.AvailableType AvailableDays uint32 + Amount int64 WarningBudget int64 StartTime *time.Time EndTime *time.Time diff --git a/internal/biz/do/product.go b/internal/biz/do/product.go new file mode 100644 index 0000000..d228d57 --- /dev/null +++ b/internal/biz/do/product.go @@ -0,0 +1,21 @@ +package do + +import "time" + +type WxResp struct { + Amount int64 // 券面额 + AllBudget int64 // 总预算 + AllStock int64 // 总库存 + UsedStock int64 // 已使用库存 + UsedBudget int64 // 已使用预算 + AvailableStock int64 // 可用库存 + RemainingBudget int64 // 剩余预算 + StartTime *time.Time + EndTime *time.Time +} + +type WarningPerson struct { + Mobile string `json:"mobile"` + Name string `json:"name"` + Tag string `json:"tag"` +} diff --git a/internal/biz/do/warning_budget.go b/internal/biz/do/warning_budget.go index ff9d165..627cde2 100644 --- a/internal/biz/do/warning_budget.go +++ b/internal/biz/do/warning_budget.go @@ -14,9 +14,6 @@ type WarningBudget struct { AvailableStock int64 // 可用库存 RemainingBudget int64 // 剩余预算 StockUsageRate float64 // 券使用率 - - StartTime *time.Time - EndTime *time.Time } type WarningBudgetLog struct { @@ -24,13 +21,3 @@ type WarningBudgetLog struct { Num int LastTime time.Time } - -type WarningPerson struct { - Mobile string `json:"mobile"` - Name string `json:"name"` - Tag string `json:"tag"` -} - -type WarningSend struct { - title, text string -} diff --git a/internal/biz/product.go b/internal/biz/product.go index 9d62b66..7a220a1 100644 --- a/internal/biz/product.go +++ b/internal/biz/product.go @@ -3,8 +3,10 @@ package biz import ( "context" "fmt" + "github.com/wechatpay-apiv3/wechatpay-go/services/cashcoupons" "time" v1 "voucher/api/v1" + "voucher/internal/biz/do" "voucher/internal/biz/vo" "voucher/internal/pkg/lock" ) @@ -78,3 +80,35 @@ func (v *VoucherBiz) CmbProductQuery(ctx context.Context, productNo string) (rep return } + +func (v *VoucherBiz) WxResp(wxResp *cashcoupons.Stock) (reps *do.WxResp) { + + availableStock := *wxResp.StockUseRule.MaxCoupons - *wxResp.DistributedCoupons + couponAmount := *wxResp.StockUseRule.FixedNormalCoupon.CouponAmount / 100 + + remainingBudget := availableStock * couponAmount + + req := &do.WxResp{ + Amount: couponAmount, + AllBudget: *wxResp.StockUseRule.MaxAmount / 100, + AllStock: *wxResp.StockUseRule.MaxCoupons, + UsedStock: *wxResp.DistributedCoupons, + UsedBudget: *wxResp.DistributedCoupons * couponAmount, + AvailableStock: availableStock, + RemainingBudget: remainingBudget, + } + + inputFormat := time.RFC3339 + + if wxResp.AvailableBeginTime != nil { + availableBeginTime, _ := time.Parse(inputFormat, *wxResp.AvailableBeginTime) + req.StartTime = &availableBeginTime + } + + if wxResp.AvailableEndTime != nil { + availableEndTime, _ := time.Parse(inputFormat, *wxResp.AvailableEndTime) + req.EndTime = &availableEndTime + } + + return req +} diff --git a/internal/biz/register_tag.go b/internal/biz/register_tag.go index 3ec029e..c92c36c 100644 --- a/internal/biz/register_tag.go +++ b/internal/biz/register_tag.go @@ -22,10 +22,7 @@ func (this *VoucherBiz) RegisterTag(ctx context.Context, batchNo string) error { return err } - req, err := this.GetWarningBudget(stock, wxResp) - if err != nil { - return err - } + req := this.WxResp(wxResp) err = this.ProductRepo.UpdateWarningBudget(ctx, stock.ID, req) if err != nil { diff --git a/internal/biz/repo/product.go b/internal/biz/repo/product.go index eb93abe..9424a71 100644 --- a/internal/biz/repo/product.go +++ b/internal/biz/repo/product.go @@ -10,5 +10,5 @@ type ProductRepo interface { FindWarningBudget(ctx context.Context, fun func(ctx context.Context, rows []*bo.ProductBo) error) error GetByBatchNo(ctx context.Context, batchNo string) (*bo.ProductBo, error) GetByProductNo(ctx context.Context, productNo string) (*bo.ProductBo, error) - UpdateWarningBudget(ctx context.Context, id int32, req *do.WarningBudget) error + UpdateWarningBudget(ctx context.Context, id int32, req *do.WxResp) error } diff --git a/internal/biz/warning_budget.go b/internal/biz/warning_budget.go index e151bd3..1df45a6 100644 --- a/internal/biz/warning_budget.go +++ b/internal/biz/warning_budget.go @@ -161,18 +161,6 @@ func (v *VoucherBiz) GetWarningBudget(product *bo.ProductBo, wxResp *cashcoupons StockUsageRate: stockUsageRate, } - inputFormat := time.RFC3339 - - if wxResp.AvailableBeginTime != nil { - availableBeginTime, _ := time.Parse(inputFormat, *wxResp.AvailableBeginTime) - req.StartTime = &availableBeginTime - } - - if wxResp.AvailableEndTime != nil { - availableEndTime, _ := time.Parse(inputFormat, *wxResp.AvailableEndTime) - req.EndTime = &availableEndTime - } - return req, nil } @@ -183,7 +171,7 @@ func (v *VoucherBiz) Calculate(ctx context.Context, product *bo.ProductBo, wxRes return err } - err = v.ProductRepo.UpdateWarningBudget(ctx, product.ID, req) + err = v.ProductRepo.UpdateWarningBudget(ctx, product.ID, v.WxResp(wxResp)) if err != nil { return err } diff --git a/internal/data/model/product.gen.go b/internal/data/model/product.gen.go index 8dcd391..8cdd9dc 100644 --- a/internal/data/model/product.gen.go +++ b/internal/data/model/product.gen.go @@ -21,6 +21,7 @@ type Product struct { Channel uint8 `gorm:"column:channel;not null;comment:1:微信 2:支付宝" json:"channel"` // 1:微信 2:支付宝 AvailableType uint8 `gorm:"column:available_type;not null;comment:1:固定有效期 2:动态有效期" json:"available_type"` AvailableDays uint32 `gorm:"column:available_days;not null;comment:领取后多少天内" json:"available_days"` + Amount int64 `gorm:"column:amount;not null;default:0" json:"amount"` AllBudget int64 `gorm:"column:all_budget;not null;default:0" json:"all_budget"` RemainingBudget int64 `gorm:"column:remaining_budget;not null;default:0" json:"remaining_budget"` WarningBudget int64 `gorm:"column:warning_budget;not null;default:0" json:"warning_budget"` // 预警预算=0不做预警 diff --git a/internal/data/repoimpl/product.go b/internal/data/repoimpl/product.go index ad70199..7b2461d 100644 --- a/internal/data/repoimpl/product.go +++ b/internal/data/repoimpl/product.go @@ -53,7 +53,7 @@ func (r *ProductRepoImpl) FindWarningBudget(ctx context.Context, fun func(ctx co return nil } -func (r *ProductRepoImpl) UpdateWarningBudget(ctx context.Context, id int32, req *do.WarningBudget) error { +func (r *ProductRepoImpl) UpdateWarningBudget(ctx context.Context, id int32, req *do.WxResp) error { now := time.Now()