用户余额查询

This commit is contained in:
2026-04-25 14:15:37 +08:00
parent 0edc883084
commit d59f4ca37f
8 changed files with 153 additions and 32 deletions

View File

@@ -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) {
// 获取优惠券