Explorar o código

refactor(system): 优化用户和物品相关数据结构和逻辑

- 将 ItemsUserBo 中的 type 字段从 String 改为 Integer
- 修改 User、UserBo 和 UserVo 中的时间字段类型从 Date 改为 String
- 优化 UserCheckRecordServiceImpl 中的核销逻辑
- 改进 UserServiceImpl 中的道具发放和扣减逻辑
fugui001 hai 4 meses
pai
achega
a332337618

+ 3 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/domain/User.java

@@ -46,12 +46,12 @@ public class User extends BaseEntity {
     /**
      * 创建时间
      */
-    private Date createAt;
+    private String createAt;
 
     /**
      * 更新时间
      */
-    private Date updateAt;
+    private String updateAt;
 
     /**
      * 性别
@@ -126,7 +126,7 @@ public class User extends BaseEntity {
     /**
      * 上一次登录时间
      */
-    private Date lastLoginTime;
+    private String lastLoginTime;
 
     /**
      * 上一次登录ip

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

@@ -38,6 +38,6 @@ public class ItemsUserBo extends BaseEntity {
     /**
      * 1 新增  2 扣除 3 其他
      */
-    private String type = "1"; // ✅ 默认值
+    private Integer type = 1; // ✅ 默认值
 
 }

+ 3 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/domain/bo/UserBo.java

@@ -47,12 +47,12 @@ public class UserBo extends BaseEntity {
     /**
      * 创建时间
      */
-    private Date createAt;
+    private String createAt;
 
     /**
      * 更新时间
      */
-    private Date updateAt;
+    private String updateAt;
 
     /**
      * 性别
@@ -127,7 +127,7 @@ public class UserBo extends BaseEntity {
     /**
      * 上一次登录时间
      */
-    private Date lastLoginTime;
+    private String lastLoginTime;
 
     /**
      * 上一次登录ip

+ 3 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/business/domain/vo/UserVo.java

@@ -56,13 +56,13 @@ public class UserVo implements Serializable {
      * 创建时间
      */
     @ExcelProperty(value = "创建时间")
-    private Date createAt;
+    private String createAt;
 
     /**
      * 更新时间
      */
     @ExcelProperty(value = "更新时间")
-    private Date updateAt;
+    private String updateAt;
 
     /**
      * 性别
@@ -152,7 +152,7 @@ public class UserVo implements Serializable {
      * 上一次登录时间
      */
     @ExcelProperty(value = "上一次登录时间")
-    private Date lastLoginTime;
+    private String lastLoginTime;
 
     /**
      * 上一次登录ip

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

@@ -2,12 +2,14 @@ package org.dromara.business.service.impl;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 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.vo.PlayerItemsVo;
 import org.dromara.business.domain.vo.UserCheckRecordVo;
 import org.dromara.business.mapper.PlayerItemsMapper;
 import org.dromara.business.mapper.UserCheckRecordMapper;
 import org.dromara.business.service.IUserCheckRecordService;
+import org.dromara.business.service.IUserService;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -37,6 +39,8 @@ public class UserCheckRecordServiceImpl implements IUserCheckRecordService {
 
     private final PlayerItemsMapper playerItemsMapper;
 
+    private final IUserService userService;
+
     /**
      * 查询用户核销记录
      *
@@ -140,7 +144,7 @@ public class UserCheckRecordServiceImpl implements IUserCheckRecordService {
         Long userId = bo.getUserId();
         Long num = bo.getNum();
 
-        PlayerItemsVo playerItemsVo = playerItemsMapper.selectPlayerItemsInfo(userId, 1001L);
+        PlayerItemsVo playerItemsVo = playerItemsMapper.selectPlayerItemsInfo(userId, bo.getItemId());
         if(playerItemsVo.getQuantity()<0 || playerItemsVo.getQuantity()<num){
             throw new RuntimeException("数量不足!!!");
         }
@@ -151,8 +155,12 @@ public class UserCheckRecordServiceImpl implements IUserCheckRecordService {
         boolean flag = baseMapper.insertCheckRecord(add) > 0;
         if (flag) {
             //核销完成之后 记录道具流水日志  扣减用户道具表数量
-
-
+            ItemsUserBo itemsUserBo=new ItemsUserBo();
+            itemsUserBo.setItemId(bo.getItemId());
+            itemsUserBo.setQuantity(Integer.valueOf(num.toString()));
+            itemsUserBo.setType(2);
+            itemsUserBo.setUserId(userId);
+            userService.sendRewardToos(itemsUserBo);
             bo.setId(add.getId());
         }
         return flag;

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

@@ -327,11 +327,16 @@ public class UserServiceImpl implements IUserService {
 
     // 构建道具列表
     private List<PlayerItems> buildPlayerItems(ItemsUserBo bo) {
+        //根据类型 判断发放 还是 扣减  type 1 新增  2 扣除 3 其他
         List<PlayerItems> playerItemsList = new ArrayList<>();
         PlayerItems playerItem = new PlayerItems();
         playerItem.setPlayerId(bo.getUserId());
         playerItem.setItemId(bo.getItemId().longValue());
-        playerItem.setQuantity(bo.getQuantity().longValue());
+       if(bo.getType()==1){
+            playerItem.setQuantity(bo.getQuantity().longValue());
+        }else{
+            playerItem.setQuantity(-bo.getQuantity().longValue());
+        }
         playerItemsList.add(playerItem);
         return playerItemsList;
     }
@@ -349,17 +354,27 @@ public class UserServiceImpl implements IUserService {
 
         PlayerItemsVo playerItemsVos = playerItemsMapper.selectPlayerItems(playerItem);
         Integer beforeNum = playerItemsVos != null ? Integer.valueOf(playerItemsVos.getQuantity().toString()) : 0;
-        Integer afterNum = beforeNum + bo.getQuantity();
+        Integer afterNum=0;
+        if(bo.getType()==1){
+            afterNum = beforeNum + bo.getQuantity();
+        }else{
+            afterNum = beforeNum - bo.getQuantity();
+        }
 
         PlayersItemsLog logEntry = new PlayersItemsLog();
         logEntry.setItemId(bo.getItemId().longValue());
         logEntry.setScoreNum(bo.getQuantity().longValue());
         logEntry.setAfterNum(afterNum.longValue());
         logEntry.setUserId(bo.getUserId());
-        logEntry.setType(1L);
+
         logEntry.setBeforeNum(beforeNum.longValue());
         logEntry.setItemTypeText(itemsVo.getName());
         logEntry.setRemark(itemsVo.getItemDesc());
+        if(bo.getType()==1){
+            logEntry.setType(1L);
+        }else{
+            logEntry.setType(2L);
+        }
         int insertResult = playersItemsLogMapper.insertPlayerItemLog(logEntry);
         if (insertResult <= 0) {
             throw new RuntimeException("道具日志记录失败");