fix(activity): 对对碰发奖跳过奖项库存扣减
仅对对碰调用订单发奖时跳过 activity_reward_settings.quantity 校验和扣减,其他发奖场景仍保留原有库存保护。
This commit is contained in:
parent
566641a2e7
commit
c849d2cc4f
@ -65,6 +65,7 @@ func (h *handler) grantRewardHelper(ctx context.Context, userID, orderID int64,
|
|||||||
ActivityID: &actID,
|
ActivityID: &actID,
|
||||||
RewardID: &rid,
|
RewardID: &rid,
|
||||||
Remark: remark,
|
Remark: remark,
|
||||||
|
SkipRewardInventory: true,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
h.logger.Error("Failed to grant reward to order", zap.Int64("order_id", orderID), zap.Error(err))
|
h.logger.Error("Failed to grant reward to order", zap.Int64("order_id", orderID), zap.Error(err))
|
||||||
|
|||||||
@ -286,6 +286,7 @@ type GrantRewardToOrderRequest struct {
|
|||||||
ActivityID *int64 `json:"activity_id,omitempty"` // 活动ID(可选)
|
ActivityID *int64 `json:"activity_id,omitempty"` // 活动ID(可选)
|
||||||
RewardID *int64 `json:"reward_id,omitempty"` // 奖励配置ID(可选)
|
RewardID *int64 `json:"reward_id,omitempty"` // 奖励配置ID(可选)
|
||||||
Remark string `json:"remark,omitempty"` // 备注
|
Remark string `json:"remark,omitempty"` // 备注
|
||||||
|
SkipRewardInventory bool `json:"-"` // 跳过活动奖项库存扣减
|
||||||
}
|
}
|
||||||
|
|
||||||
// GrantRewardToOrderResponse 在现有订单上发放奖励的响应
|
// GrantRewardToOrderResponse 在现有订单上发放奖励的响应
|
||||||
@ -330,6 +331,7 @@ func (s *service) GrantRewardToOrder(ctx context.Context, userID int64, req Gran
|
|||||||
if req.RewardID != nil {
|
if req.RewardID != nil {
|
||||||
logger.Info("检查奖励配置", zap.Int64("reward_id", *req.RewardID))
|
logger.Info("检查奖励配置", zap.Int64("reward_id", *req.RewardID))
|
||||||
|
|
||||||
|
if !req.SkipRewardInventory {
|
||||||
// 【使用乐观锁扣减库存】直接用 Quantity > 0 作为更新条件,避免竞态
|
// 【使用乐观锁扣减库存】直接用 Quantity > 0 作为更新条件,避免竞态
|
||||||
result, err := tx.ActivityRewardSettings.WithContext(ctx).Where(
|
result, err := tx.ActivityRewardSettings.WithContext(ctx).Where(
|
||||||
tx.ActivityRewardSettings.ID.Eq(*req.RewardID),
|
tx.ActivityRewardSettings.ID.Eq(*req.RewardID),
|
||||||
@ -343,6 +345,8 @@ func (s *service) GrantRewardToOrder(ctx context.Context, userID int64, req Gran
|
|||||||
logger.Error("奖励库存不足或不存在")
|
logger.Error("奖励库存不足或不存在")
|
||||||
return fmt.Errorf("奖励库存不足或不存在")
|
return fmt.Errorf("奖励库存不足或不存在")
|
||||||
}
|
}
|
||||||
|
logger.Info("奖励库存扣减成功(乐观锁)")
|
||||||
|
}
|
||||||
rewardSetting, err = tx.ActivityRewardSettings.WithContext(ctx).Where(
|
rewardSetting, err = tx.ActivityRewardSettings.WithContext(ctx).Where(
|
||||||
tx.ActivityRewardSettings.ID.Eq(*req.RewardID),
|
tx.ActivityRewardSettings.ID.Eq(*req.RewardID),
|
||||||
).First()
|
).First()
|
||||||
@ -350,7 +354,6 @@ func (s *service) GrantRewardToOrder(ctx context.Context, userID int64, req Gran
|
|||||||
logger.Error("查询奖励配置失败", zap.Error(err))
|
logger.Error("查询奖励配置失败", zap.Error(err))
|
||||||
return fmt.Errorf("查询奖励配置失败: %w", err)
|
return fmt.Errorf("查询奖励配置失败: %w", err)
|
||||||
}
|
}
|
||||||
logger.Info("奖励库存扣减成功(乐观锁)")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 查询商品信息快照
|
// 3. 查询商品信息快照
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user