diff --git a/internal/biz/query.go b/internal/biz/query.go index 955fde6..7d47a98 100644 --- a/internal/biz/query.go +++ b/internal/biz/query.go @@ -75,7 +75,7 @@ func (v *VoucherBiz) UpdateOrderStatus(ctx context.Context, orderId uint64, stat } else if status.IsUse() { - return v.OrderRepo.Used(ctx, orderId) + return v.OrderRepo.Used(ctx, orderId, time.Now()) } else if status.IsExpired() { diff --git a/internal/biz/repo/order.go b/internal/biz/repo/order.go index b2c72ea..7e3b768 100644 --- a/internal/biz/repo/order.go +++ b/internal/biz/repo/order.go @@ -2,6 +2,7 @@ package repo import ( "context" + "time" "voucher/internal/biz/bo" "voucher/internal/biz/vo" ) @@ -16,7 +17,7 @@ type OrderRepo interface { Ing(ctx context.Context, id uint64) error Success(ctx context.Context, id uint64, voucherNo string) error Fail(ctx context.Context, id uint64, remark string) error - Used(ctx context.Context, id uint64) error + Used(ctx context.Context, id uint64, usedTime time.Time) error Available(ctx context.Context, id uint64) error Expired(ctx context.Context, id uint64) error } diff --git a/internal/biz/wechat_notify.go b/internal/biz/wechat_notify.go index c378b58..c2aafde 100644 --- a/internal/biz/wechat_notify.go +++ b/internal/biz/wechat_notify.go @@ -30,7 +30,7 @@ func (v *VoucherBiz) WechatNotifyConsumer(ctx context.Context, tag string, req * } else if req.PlainText.Status.IsUsed() { - if err = v.used(ctx, order); err != nil { + if err = v.used(ctx, order, req.PlainText.ConsumeInformation.ConsumeTime); err != nil { return err } @@ -90,9 +90,16 @@ func (v *VoucherBiz) createUseLog(ctx context.Context, order *bo.OrderBo, req *b return nil } -func (v *VoucherBiz) used(ctx context.Context, order *bo.OrderBo) error { +func (v *VoucherBiz) used(ctx context.Context, order *bo.OrderBo, consumeTime string) error { - if err := v.OrderRepo.Used(ctx, order.ID); err != nil { + var usedTime time.Time + if consumeTime != "" { + usedTime, _ = time.Parse(time.RFC3339, consumeTime) + } else { + usedTime = time.Now() + } + + if err := v.OrderRepo.Used(ctx, order.ID, usedTime); err != nil { return err } diff --git a/internal/data/repoimpl/order.go b/internal/data/repoimpl/order.go index 28acd27..0aa58a4 100644 --- a/internal/data/repoimpl/order.go +++ b/internal/data/repoimpl/order.go @@ -256,7 +256,7 @@ func (p *OrderRepoImpl) Fail(ctx context.Context, id uint64, remark string) erro return nil } -func (p *OrderRepoImpl) Used(ctx context.Context, id uint64) error { +func (p *OrderRepoImpl) Used(ctx context.Context, id uint64, usedTime time.Time) error { now := time.Now() tx := p.DB(ctx). @@ -265,7 +265,7 @@ func (p *OrderRepoImpl) Used(ctx context.Context, id uint64) error { }). Updates(model.Order{ Status: vo.OrderStatusUse.GetValue(), - LastUseTime: &now, + LastUseTime: &usedTime, UpdateTime: &now, })