소스 검색

feat(system): 添加道具获取类型枚举及日志记录功能

- 新增 ItemsTypeEnum 枚举类,定义道具获取类型
- 在 PlayersItemsLog 和 ItemsUserBo 中添加 itemType 字段
- 更新 RewardClaimsServiceImpl、UserCheckRecordServiceImpl 和 UserServiceImpl
  中的日志记录逻辑,使用新的枚举类型- 修改 UserController 中的 sendRewardToos 接口,默认设置系统赠送类型
- 调整 UserServiceImpl 中的部分 debug 日志为 info 级别- 修复 GameStatus 枚举缺少 EXCEPTION 类型的问题
fugui001 2 달 전
부모
커밋
78dfa39714

+ 2 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/controller/UserController.java

@@ -8,6 +8,7 @@ import jakarta.validation.constraints.*;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import org.dromara.business.domain.bo.ItemsUserBo;
 import org.dromara.business.domain.bo.UserBo;
+import org.dromara.business.domain.enums.ItemsTypeEnum;
 import org.dromara.business.domain.vo.UserVo;
 import org.dromara.business.service.IUserService;
 import org.springframework.web.bind.annotation.*;
@@ -113,6 +114,7 @@ public class UserController extends BaseController {
     @RepeatSubmit()
     @PostMapping("/sendRewardToos")
     public R<Void> sendRewardToos(@RequestBody ItemsUserBo bo) {
+        bo.setItemType(ItemsTypeEnum.SYSTEM_GIFT.getCode());
         return toAjax(userService.sendRewardToos(bo));
     }
 

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/domain/PlayersItemsLog.java

@@ -72,7 +72,7 @@ public class PlayersItemsLog{
     /**
      * 道具获取类型   充值/奖励/报名/比赛
      */
-    private int itemType;
+    private Long itemType;
 
     /**
      * 道具获取类型   充值/奖励/报名/比赛

+ 6 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/domain/bo/ItemsUserBo.java

@@ -40,4 +40,10 @@ public class ItemsUserBo extends BaseEntity {
      */
     private Integer type = 1; // ✅ 默认值
 
+
+    /**
+     *  道具获取类型  (充值 1/奖励 2/报名 3/比赛 4  / 核销 5 / 系统赠送  6)',
+     */
+    private Long itemType;
+
 }

+ 1 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/domain/enums/GameStatus.java

@@ -9,6 +9,7 @@ public enum GameStatus {
     RUNNING(1, "进行中"),
     HAND_FOR_HAND(2, "同步发牌"),
     PAUSED(3, "普通暂停"),
+    EXCEPTION(5, "异常"),
     FINISHED(4, "完成");
 
     private final int code;

+ 44 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/domain/enums/ItemsTypeEnum.java

@@ -0,0 +1,44 @@
+package org.dromara.business.domain.enums;
+/**
+ * 道具获取类型枚举类
+ *
+ * @author xpg
+ * @date 2023/09/05
+ */
+public enum ItemsTypeEnum {
+    // 道具获取类型  (充值 1/奖励 2/报名 3/比赛 4  / 核销 5 / 系统赠送  6)',
+    TOP_UP(1L, "充值"),
+    REWARD(2L, "奖励"),
+    SIGNUP(3L, "报名"),
+    COMPETITION(4L, "比赛"),
+    WRITE_OFF(5L, "核销"),
+    SYSTEM_GIFT(6L, "系统赠送");
+
+    private final Long code;
+    private final String description;
+
+    ItemsTypeEnum(Long code, String description) {
+        this.code = code;
+        this.description = description;
+    }
+
+    public Long getCode() {
+        return code;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    // 根据code获取对应的枚举值
+    public static ItemsTypeEnum fromCode(Long code) {
+        for (ItemsTypeEnum status : ItemsTypeEnum.values()) {
+            if (status.getCode().equals(code)) {
+                return status;
+            }
+        }
+        throw new IllegalArgumentException("Invalid code: " + code);
+    }
+
+
+}

+ 4 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/service/impl/RewardClaimsServiceImpl.java

@@ -6,6 +6,7 @@ import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.dromara.business.domain.*;
 import org.dromara.business.domain.bo.RewardClaimsBo;
+import org.dromara.business.domain.enums.ItemsTypeEnum;
 import org.dromara.business.domain.enums.RewardStatusEnum;
 import org.dromara.business.domain.vo.*;
 import org.dromara.business.mapper.*;
@@ -694,8 +695,10 @@ public class RewardClaimsServiceImpl implements IRewardClaimsService {
                     logEntry.setBeforeNum(beforeNum.longValue());
                     /*    logEntry.setItemType(ItermTypeLogEnum.COMPETITION.getCode());*/
                     logEntry.setItemTypeText(itemsVo.getName());
-                    logEntry.setRemark(itemsVo.getItemDesc());
+                    logEntry.setRemark(ItemsTypeEnum.REWARD.getDescription()+"-"+itemsVo.getItemDesc());
                     logEntry.setCreatedAt(new Date());
+
+                    logEntry.setItemType(ItemsTypeEnum.REWARD.getCode());
                     playersItemsLogs.add(logEntry);
                 }
 

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import org.dromara.business.domain.UserCheckRecord;
 import org.dromara.business.domain.bo.ItemsUserBo;
 import org.dromara.business.domain.bo.UserCheckRecordBo;
+import org.dromara.business.domain.enums.ItemsTypeEnum;
 import org.dromara.business.domain.vo.PlayerItemsVo;
 import org.dromara.business.domain.vo.UserCheckRecordVo;
 import org.dromara.business.mapper.PlayerItemsMapper;
@@ -171,6 +172,8 @@ public class UserCheckRecordServiceImpl implements IUserCheckRecordService {
             itemsUserBo.setQuantity(Integer.valueOf(num.toString()));
             itemsUserBo.setType(2);
             itemsUserBo.setUserId(userId);
+            //核销记录
+            itemsUserBo.setItemType(ItemsTypeEnum.WRITE_OFF.getCode());
             userService.sendRewardToos(itemsUserBo);
             bo.setId(add.getId());
         }

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

@@ -12,6 +12,7 @@ import org.dromara.business.domain.PlayersItemsLog;
 import org.dromara.business.domain.User;
 import org.dromara.business.domain.bo.ItemsUserBo;
 import org.dromara.business.domain.bo.UserBo;
+import org.dromara.business.domain.enums.ItemsTypeEnum;
 import org.dromara.business.domain.vo.ItemsVo;
 import org.dromara.business.domain.vo.PlayerItemsVo;
 import org.dromara.business.domain.vo.UserVo;
@@ -347,7 +348,7 @@ public class UserServiceImpl implements IUserService {
 
             // 1. 参数校验
             validateParams(bo);
-            logger.debug("参数校验通过: userId={}, itemId={}, quantity={}, type={}",
+            logger.info("参数校验通过: userId={}, itemId={}, quantity={}, type={}",
                 bo.getUserId(), bo.getItemId(), bo.getQuantity(), bo.getType());
 
             // 2. 获取分布式锁
@@ -357,12 +358,12 @@ public class UserServiceImpl implements IUserService {
                 throw new RuntimeException("获取道具操作锁失败,请稍后再试");
             }
 
-            logger.debug("成功获取分布式锁: userId={}", bo.getUserId());
+            logger.info("成功获取分布式锁: userId={}", bo.getUserId());
 
             try {
                 // * type: 1 新增, 2 扣除, 3 其他
                 if (bo.getType() == 2) {
-                    logger.debug("执行道具扣除前检查: userId={}, itemId={}, requiredQuantity={}",
+                    logger.info("执行道具扣除前检查: userId={}, itemId={}, requiredQuantity={}",
                         bo.getUserId(), bo.getItemId(), bo.getQuantity());
 
                     PlayerItems playerItem = new PlayerItems();
@@ -377,16 +378,16 @@ public class UserServiceImpl implements IUserService {
                             bo.getQuantity());
                         throw new RuntimeException("道具数量不足");
                     }
-                    logger.debug("道具数量检查通过: 当前持有={}", playerItemsVos.getQuantity());
+                    logger.info("道具数量检查通过: 当前持有={}", playerItemsVos.getQuantity());
                 }
 
                 // 3. 记录变更日志
-                logger.debug("开始记录道具操作日志");
+                logger.info("开始记录道具操作日志");
                 logRewardDistribution(bo);
-                logger.debug("道具操作日志记录完成");
+                logger.info("道具操作日志记录完成");
 
                 // 4. 发放/更新道具
-                logger.debug("开始构建道具变更列表");
+                logger.info("开始构建道具变更列表");
                 List<PlayerItems> playerItemsList = buildPlayerItems(bo);
                 int updateCount = playerItemsMapper.batchInsertOrUpdatePlayerItems(playerItemsList);
 
@@ -403,14 +404,14 @@ public class UserServiceImpl implements IUserService {
                 jsonObject.put("channelType", "item_update");
                 jsonObject.put("value", bo.getUserId());
                 redisUtil.publish(RedisKeys.CHANNEL_ADMIN, jsonObject);
-                logger.debug("已发布 Redis 消息: channel={}, data={}", RedisKeys.CHANNEL_ADMIN, jsonObject);
+                logger.info("已发布 Redis 消息: channel={}, data={}", RedisKeys.CHANNEL_ADMIN, jsonObject);
 
                 return Boolean.TRUE;
 
             } finally {
                 // 确保释放锁
                 ItemOperationLock.releaseLock(bo.getUserId());
-                logger.debug("已释放分布式锁: userId={}", bo.getUserId());
+                logger.info("已释放分布式锁: userId={}", bo.getUserId());
             }
 
         } catch (Exception e) {
@@ -541,7 +542,7 @@ public class UserServiceImpl implements IUserService {
                 logger.error("道具信息不存在,itemId={}", bo.getItemId());
                 throw new RuntimeException("道具信息不存在,itemId=" + bo.getItemId());
             }
-            logger.debug("查询到道具信息: itemId={}, name={}, itemDesc={}",
+            logger.info("查询到道具信息: itemId={}, name={}, itemDesc={}",
                 itemsVo.getId(), itemsVo.getName(), itemsVo.getItemDesc());
 
             PlayerItems playerItem = new PlayerItems();
@@ -551,17 +552,17 @@ public class UserServiceImpl implements IUserService {
             // 查询玩家当前持有数量
             PlayerItemsVo playerItemsVos = playerItemsMapper.selectPlayerItems(playerItem);
             Integer beforeNum = playerItemsVos != null ? Integer.valueOf(playerItemsVos.getQuantity().toString()) : 0;
-            logger.debug("玩家当前持有道具数量: playerId={}, itemId={}, beforeNum={}",
+            logger.info("玩家当前持有道具数量: playerId={}, itemId={}, beforeNum={}",
                 bo.getUserId(), bo.getItemId(), beforeNum);
 
             // 计算变更后数量
             Integer afterNum;
             if (bo.getType() == 1) {
                 afterNum = beforeNum + bo.getQuantity();
-                logger.debug("道具发放操作: quantity={}", bo.getQuantity());
+                logger.info("道具发放操作: quantity={}", bo.getQuantity());
             } else {
                 afterNum = beforeNum - bo.getQuantity();
-                logger.debug("道具回收操作: quantity={}", bo.getQuantity());
+                logger.info("道具回收操作: quantity={}", bo.getQuantity());
             }
 
             // 构建日志实体
@@ -572,10 +573,11 @@ public class UserServiceImpl implements IUserService {
             logEntry.setAfterNum(afterNum.longValue());
             logEntry.setUserId(bo.getUserId());
             logEntry.setItemTypeText(itemsVo.getName());
-            logEntry.setRemark(itemsVo.getItemDesc());
+            logEntry.setRemark(ItemsTypeEnum.fromCode(bo.getItemType()).getDescription()+"-"+itemsVo.getItemDesc());
             logEntry.setType(bo.getType() == 1 ? 1L : 2L); // 简化赋值
-
-            logger.debug("准备插入日志记录: {}", logEntry);
+            //后台 系统赠送
+            logEntry.setItemType(bo.getItemType());
+            logger.info("准备插入日志记录: {}", logEntry);
 
             // 插入日志
             int insertResult = playersItemsLogMapper.insertPlayerItemLog(logEntry);