用户余额查询
This commit is contained in:
@@ -68,14 +68,24 @@ func (s *couponService) Update(data UpdateCouponData) error {
|
||||
do = append(do, q.Coupon.Status.Value(int(*data.Status)))
|
||||
}
|
||||
if data.ExpireType != nil {
|
||||
switch *data.ExpireType {
|
||||
case m.CouponExpireTypeNever:
|
||||
do = append(do, q.Coupon.ExpireAt.Null(), q.Coupon.ExpireIn.Null())
|
||||
|
||||
case m.CouponExpireTypeFixed:
|
||||
if data.ExpireAt == nil {
|
||||
return core.NewBizErr("expire_at 不能为空")
|
||||
}
|
||||
do = append(do, q.Coupon.ExpireAt.Value(*data.ExpireAt), q.Coupon.ExpireIn.Null())
|
||||
|
||||
case m.CouponExpireTypeRelative:
|
||||
if data.ExpireIn == nil {
|
||||
return core.NewBizErr("expire_in 不能为空")
|
||||
}
|
||||
do = append(do, q.Coupon.ExpireAt.Null(), q.Coupon.ExpireIn.Value(*data.ExpireIn))
|
||||
}
|
||||
do = append(do, q.Coupon.ExpireType.Value(int(*data.ExpireType)))
|
||||
}
|
||||
if data.ExpireAt != nil {
|
||||
do = append(do, q.Coupon.ExpireAt.Value(*data.ExpireAt))
|
||||
}
|
||||
if data.ExpireIn != nil {
|
||||
do = append(do, q.Coupon.ExpireIn.Value(*data.ExpireIn))
|
||||
}
|
||||
|
||||
_, err := q.Coupon.Where(q.Coupon.ID.Eq(data.ID)).UpdateSimple(do...)
|
||||
return err
|
||||
@@ -98,6 +108,56 @@ 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
|
||||
})
|
||||
if err != nil {
|
||||
return core.NewBizErr("发放优惠券失败", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetUserCoupon 获取用户的指定优惠券
|
||||
func (s *couponService) GetUserCoupon(uid int32, cuid int32, amount decimal.Decimal) (*m.CouponUser, error) {
|
||||
// 获取优惠券
|
||||
|
||||
Reference in New Issue
Block a user