实现已发放优惠券的管理接口
This commit is contained in:
@@ -108,54 +108,11 @@ func (s *couponService) Delete(id int32) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// 发放优惠券
|
||||
func (s *couponService) Assign(couponID int32, userID int32) error {
|
||||
// 获取优惠券信息
|
||||
coupon, err := q.Coupon.Where(q.Coupon.ID.Eq(couponID)).Take()
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return core.NewBizErr("优惠券不存在")
|
||||
}
|
||||
if err != nil {
|
||||
return core.NewBizErr("获取优惠券数据失败", err)
|
||||
}
|
||||
|
||||
// 检查优惠券是否可用
|
||||
// 1. 状态必须为正常
|
||||
if coupon.Status != m.CouponStatusEnabled {
|
||||
return core.NewBizErr("优惠券不可用")
|
||||
}
|
||||
// 2. 数量必须大于0
|
||||
if coupon.Count <= 0 {
|
||||
return core.NewBizErr("优惠券已发放完")
|
||||
}
|
||||
|
||||
// 发放优惠券
|
||||
err = q.Q.Transaction(func(q *q.Query) error {
|
||||
// 创建用户优惠券记录
|
||||
err := q.CouponUser.Create(&m.CouponUser{
|
||||
UserID: userID,
|
||||
CouponID: couponID,
|
||||
Status: m.CouponUserStatusUnused,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 扣减优惠券数量
|
||||
_, err = q.Coupon.
|
||||
Where(q.Coupon.ID.Eq(couponID), q.Coupon.Count_.Eq(coupon.Count)).
|
||||
UpdateSimple(q.Coupon.Count_.Value(coupon.Count - 1))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
return CouponUser.Create(CreateCouponUserData{
|
||||
CouponID: couponID,
|
||||
UserID: userID,
|
||||
})
|
||||
if err != nil {
|
||||
return core.NewBizErr("发放优惠券失败", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetUserCoupon 获取用户的指定优惠券
|
||||
@@ -165,7 +122,7 @@ func (s *couponService) GetUserCoupon(uid int32, cuid int32, amount decimal.Deci
|
||||
q.CouponUser.ID.Eq(cuid),
|
||||
q.CouponUser.UserID.Eq(uid),
|
||||
q.CouponUser.Status.Eq(int(m.CouponUserStatusUnused)),
|
||||
q.CouponUser.ExpireAt.Gt(time.Now()),
|
||||
q.CouponUser.Where(q.CouponUser.ExpireAt.IsNull()).Or(q.CouponUser.ExpireAt.Gt(time.Now())),
|
||||
).Take()
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return nil, core.NewBizErr("优惠券不存在或已失效")
|
||||
|
||||
Reference in New Issue
Block a user