Explorar o código

feat(reward): 增加道具发放时的数量检查逻辑

- 在用户领取奖励时,针对道具类型(type=2)增加数量检查
- 检查玩家背包中对应道具的数量是否充足- 如果道具数量不足,抛出异常并阻止发放
-道具发放成功后,发布消息到频道以更新相关数据
fugui001 hai 3 meses
pai
achega
1ecd98b82b

+ 14 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/service/impl/UserServiceImpl.java

@@ -316,6 +316,19 @@ public class UserServiceImpl implements IUserService {
             }
 
             try {
+                if(bo.getType()==2){
+                    //判断道具数量是否充足
+                    PlayerItems playerItem = new PlayerItems();
+                    playerItem.setPlayerId(bo.getUserId());
+                    playerItem.setItemId(bo.getItemId().longValue());
+
+                    PlayerItemsVo playerItemsVos = playerItemsMapper.selectPlayerItems(playerItem);
+                    if (playerItemsVos == null || playerItemsVos.getQuantity() < bo.getQuantity()) {
+                        throw new RuntimeException("道具数量不足");
+                    }
+                }
+
+
                 // 3. 记录日志
                 logRewardDistribution(bo);
 
@@ -326,6 +339,7 @@ public class UserServiceImpl implements IUserService {
                 if (updateCount <= 0) {
                     throw new RuntimeException("道具发放失败");
                 }
+
                 redisUtil.publish("channel:item_updates", bo.getUserId());
                 return Boolean.TRUE;