xst пре 4 година
родитељ
комит
fd9c19c776

+ 0 - 4
src/main/java/com/td/boss/game/complayersattri/controller/ComPlayersLuckyController.java

@@ -3,7 +3,6 @@ package com.td.boss.game.complayersattri.controller;
 import com.td.boss.common.pojo.Result;
 import com.td.boss.game.complayersattri.service.ComPlayersLuckyService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 /**
@@ -46,7 +45,6 @@ public class ComPlayersLuckyController {
      * @return
      */
     @PostMapping("/tools")
-    @Transactional(rollbackFor = Exception.class)
     public Result<?> useLuckyTools(@RequestParam(value = "userId") String userId,
                                    @RequestParam(value = "toolId") Integer toolId,
                                    @RequestParam(value = "landId") Integer landId) {
@@ -62,7 +60,6 @@ public class ComPlayersLuckyController {
      * @return
      */
     @PostMapping("/level")
-    @Transactional(rollbackFor = Exception.class)
     public Result<?> landLevelUp(@RequestParam(value = "userId") String userId,
                                  @RequestParam(value = "level") Integer level,
                                  @RequestParam(value = "landId") Integer landId) {
@@ -77,7 +74,6 @@ public class ComPlayersLuckyController {
      * @return
      */
     @GetMapping("/snb")
-    @Transactional(rollbackFor = Exception.class)
     public Result<?> toSNB(@RequestParam(value = "userId") String userId,
                            @RequestParam(value = "luckNum") Integer luckNum) {
         return service.toSNB(userId, luckNum);

+ 61 - 68
src/main/java/com/td/boss/game/complayersattri/service/ComPlayersLuckyServiceImpl.java

@@ -45,8 +45,6 @@ public class ComPlayersLuckyServiceImpl extends CommonServiceImpl<ComPlayersLuck
 
     private String toolskey = "land_tools";
     private String levelUp = "land_level";
-    @PersistenceContext
-    private EntityManager em;
 
     @Autowired
     private ComConfigService comConfigService;
@@ -63,28 +61,6 @@ public class ComPlayersLuckyServiceImpl extends CommonServiceImpl<ComPlayersLuck
     @Autowired
     private RedisLock redisLock;
 
-    /**
-     * 获取所有工具列表,方便用户选择使用哪种工具来获取幸运值
-     *
-     * @return
-     */
-    @Override
-    public List<ComPlayersLuckyToolsVo> getLandTools() {
-        String land_tools = comConfigService.selectByKey(toolskey);
-        return JSONUtil.toList(land_tools, ComPlayersLuckyToolsVo.class);
-    }
-
-    /**
-     * 获取土地升级列表
-     *
-     * @return
-     */
-    @Override
-    public List<ComPlayersLuckyLandLevelUpVo> getLandLevelUp() {
-        String land_tools = comConfigService.selectByKey(levelUp);
-        return JSONUtil.toList(land_tools, ComPlayersLuckyLandLevelUpVo.class);
-    }
-
     /**
      * 使用的工具 获得幸运值,12小时获取一次
      *
@@ -93,25 +69,33 @@ public class ComPlayersLuckyServiceImpl extends CommonServiceImpl<ComPlayersLuck
      * @return
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Result useLuckyTools(String userId, Integer toolId, Integer landId) {
-        if (toolId == null || toolId.equals(0)) {
-            return Result.of(null, false, "无效工具");
-        }
+        //验证工具是否存在
         ComPlayersLuckyToolsVo tools = getLandTools().stream().filter(a -> a.getId().equals(toolId)).findFirst().orElse(null);
         if (tools == null || tools.isEnable() == false) {
             return Result.of(null, false, "无效工具");
         }
+        //验证土地是否存在
+        ComPlayerLand comPlayerLand = comPlayerLandRepository.findById(landId).orElse(null);
+        if (comPlayerLand == null || comPlayerLand.getUserId().equals(userId) == false) {
+            return Result.of(null, false, "升级失败,无效土地!");
+        }
+        //土地租赁到期了,不能使用工具
+        if (comPlayerLand.getLeaseTime().before(new Date())) {
+            return Result.of(null, false, "升级失败,土地已到期!");
+        }
+        //验证用户是否存在
+        ComPlayersAttri playersAttri = comPlayersAttriRepository.findByUserId(userId).orElse(null);
+        if (playersAttri == null) {
+            return Result.of(null, false, "无效用户");
+        }
 
         long time = System.currentTimeMillis() + RedisData.getPlayerLandToolTimeout();
         String _redisKey = "LOCK:COM_PLAYER_LAND_TOOL:" + userId;
         if (!redisLock.lock(_redisKey, String.valueOf(time))) {
             return Result.of(null, false, ResultEnum.LAND_USE_TOOL.getMessage(), ResultEnum.LAND_USE_TOOL.getCode());
         }
-
-        ComPlayersAttri playersAttri = comPlayersAttriRepository.findByUserId(userId).orElse(null);
-        if (playersAttri == null) {
-            return Result.of(null, false, "无效用户");
-        }
         //验证工具是否可用:每隔一段时间才可使用
         Optional<ComPlayersLucky> lastComPlayersLuckyLog = repository.findFirstByUserIdOrderByCreateTimeDesc(userId);
         if (lastComPlayersLuckyLog.isPresent()) {
@@ -120,9 +104,10 @@ public class ComPlayersLuckyServiceImpl extends CommonServiceImpl<ComPlayersLuck
                 return Result.of(null, false, "请在" + nextTime.toDateStr() + "后使用工具");
             }
         }
+        int afterLucky = playersAttri.getLucky() + tools.getToolLucky();
         //写入使用工具明细
         ComPlayersLucky comPlayersLucky = new ComPlayersLucky();
-        comPlayersLucky.setAfterLucky(playersAttri.getLucky() + tools.getToolLucky());
+        comPlayersLucky.setAfterLucky(afterLucky);
         comPlayersLucky.setBeforeLucky(playersAttri.getLucky());
         comPlayersLucky.setAmount(tools.getToolLucky());
         comPlayersLucky.setLuckyType(ComPlayerLuckyLogEnum.tool.getCode());
@@ -135,7 +120,7 @@ public class ComPlayersLuckyServiceImpl extends CommonServiceImpl<ComPlayersLuck
         repository.save(comPlayersLucky);
 
         //更新幸运值
-        playersAttri.setLucky(playersAttri.getLucky() + tools.getToolLucky());
+        playersAttri.setLucky(afterLucky);
         comPlayersAttriRepository.save(playersAttri);
         return Result.of(null, true, "使用工具成功");
     }
@@ -149,45 +134,49 @@ public class ComPlayersLuckyServiceImpl extends CommonServiceImpl<ComPlayersLuck
      * @return
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Result<?> landLevelUp(String userId, Integer levelId, Integer landId) {
-
-        ComPlayersAttri playersAttri = comPlayersAttriRepository.findByUserId(userId).orElse(null);
-        if (playersAttri == null) {
-            return Result.of(null, false, "无效领取");
-        }
-        Optional<ComPlayersLuckyLandLevelUpVo> levelLand = getLandLevelUp().stream().filter(a -> a.getId().equals(levelId)).findFirst();
-        if (levelLand.isPresent() == false) {
+        //验证土地级别是否存在
+        ComPlayersLuckyLandLevelUpVo landLevelUpVo = getLandLevelUp().stream().filter(a -> a.getId().equals(levelId)).findFirst().orElse(null);
+        if (landLevelUpVo == null) {
             return Result.of(null, false, "升级失败,无效升级!");
         }
-        ComPlayerLand land = comPlayerLandRepository.findByUserIdAndConfigLandId(userId, landId).orElse(null);
-        if (land == null) {
+        //验证土地是否存在
+        ComPlayerLand comPlayerLand = comPlayerLandRepository.findById(landId).orElse(null);
+        if (comPlayerLand == null || comPlayerLand.getUserId().equals(userId) == false) {
             return Result.of(null, false, "升级失败,无效土地!");
         }
-        if (land.getLandLevel() >= levelId) {
+        //验证 将要升级的土地级别是否大于当前土地级别
+        if (comPlayerLand.getLandLevel() >= levelId) {
             return Result.of(null, false, "升级失败,无效级别!");
         }
         //土地租赁到期了,不能升级
-        if (getEndTime(land.getLeaseTime(), land.getLeaseDate()).before(new Date())) {
+        if (comPlayerLand.getLeaseTime().before(new Date())) {
             return Result.of(null, false, "升级失败,土地已到期!");
         }
-        //剩余幸运值
-        int sub = Convert.toInt(NumberUtil.sub(playersAttri.getLucky(), levelLand.get().getCostLucky()));
-        if (sub < 0) {
-            return Result.of(null, false, "升级失败,幸运值不足!");
-        }
+
         long time = System.currentTimeMillis() + RedisData.getPlayerLandLevelupTimeout();
         String _redisKey = "LOCK:COM_PLAYER_LAND_LEVELUP:" + userId;
-
         if (!redisLock.lock(_redisKey, String.valueOf(time))) {
             return Result.of(null, false, ResultEnum.LAND_LAND_LEVELUPPING.getMessage(), ResultEnum.LAND_LAND_LEVELUPPING.getCode());
         }
+        //验证用户是否存在
+        ComPlayersAttri playersAttri = comPlayersAttriRepository.findByUserId(userId).orElse(null);
+        if (playersAttri == null) {
+            return Result.of(null, false, "升级失败");
+        }
+        //验证幸运值是否够用
+        int sub = Convert.toInt(NumberUtil.sub(playersAttri.getLucky(), landLevelUpVo.getCostLucky()));
+        if (sub < 0) {
+            return Result.of(null, false, "升级失败,幸运值不足!");
+        }
         //写入使用工具明细
         ComPlayersLucky comPlayersLucky = new ComPlayersLucky();
         comPlayersLucky.setAfterLucky(sub);
         comPlayersLucky.setBeforeLucky(playersAttri.getLucky());
-        comPlayersLucky.setAmount(levelLand.get().getCostLucky());
+        comPlayersLucky.setAmount(landLevelUpVo.getCostLucky());
         comPlayersLucky.setLuckyType(ComPlayerLuckyLogEnum.level.getCode());
-        comPlayersLucky.setLuckyName(levelLand.get().getName());
+        comPlayersLucky.setLuckyName(landLevelUpVo.getName());
         comPlayersLucky.setLevelId(levelId);
         comPlayersLucky.setLandId(landId);
         comPlayersLucky.setUserId(userId);
@@ -199,8 +188,8 @@ public class ComPlayersLuckyServiceImpl extends CommonServiceImpl<ComPlayersLuck
         comPlayersAttriRepository.save(playersAttri);
 
         //更新土地级别
-        land.setLandLevel(levelId);
-        comPlayerLandRepository.save(land);
+        comPlayerLand.setLandLevel(levelId);
+        comPlayerLandRepository.save(comPlayerLand);
         return Result.of(null, true, "升级成功");
     }
 
@@ -212,6 +201,7 @@ public class ComPlayersLuckyServiceImpl extends CommonServiceImpl<ComPlayersLuck
      * @return
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Result<?> toSNB(String userId, Integer luckNum) {
         //兑换snb倍数
         int snb = Convert.toInt(comConfigService.selectByKey("land_luck_tosnb"), 0);
@@ -307,21 +297,24 @@ public class ComPlayersLuckyServiceImpl extends CommonServiceImpl<ComPlayersLuck
     }
 
     /**
-     * 获取土地到期时间
+     * 获取所有工具列表,方便用户选择使用哪种工具来获取幸运值
      *
-     * @param beginTime 租赁时间
-     * @param type      //租赁的日期,1是3个月,2是1年,3是5年
      * @return
      */
-    private Date getEndTime(Date beginTime, int type) {
-        if (type == 1) {
-            return DateUtil.date(beginTime).offset(DateField.MONTH, 3);
-        } else if (type == 2) {
-            return DateUtil.date(beginTime).offset(DateField.YEAR, 1);
-        } else if (type == 3) {
-            return DateUtil.date(beginTime).offset(DateField.YEAR, 5);
-        } else {
-            return beginTime;
-        }
+    @Override
+    public List<ComPlayersLuckyToolsVo> getLandTools() {
+        String land_tools = comConfigService.selectByKey(toolskey);
+        return JSONUtil.toList(land_tools, ComPlayersLuckyToolsVo.class);
+    }
+
+    /**
+     * 获取土地升级列表
+     *
+     * @return
+     */
+    @Override
+    public List<ComPlayersLuckyLandLevelUpVo> getLandLevelUp() {
+        String land_tools = comConfigService.selectByKey(levelUp);
+        return JSONUtil.toList(land_tools, ComPlayersLuckyLandLevelUpVo.class);
     }
 }

+ 57 - 5
src/test/java/com/td/boss/ComPlayerLuckyTests.java

@@ -3,17 +3,21 @@ package com.td.boss;
 import cn.hutool.json.JSONUtil;
 import com.td.boss.common.pojo.Result;
 import com.td.boss.game.complayersattri.controller.ComPlayersLuckyController;
+import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
+/**
+ * 工具模块
+ */
 @RunWith(SpringRunner.class)
 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
 public class ComPlayerLuckyTests {
     private String userId = "1002";
-    private int landId = 1;
+    private int landId = 169;
     private int levelId = 2;
 
     @Autowired
@@ -31,20 +35,68 @@ public class ComPlayerLuckyTests {
         System.out.println(JSONUtil.toJsonStr(landLevelUp));
     }
 
+    /**
+     * 测试使用工具
+     */
     @Test
     public void useLuckyTools() {
-        Result<?> landLevelUp = comPlayersLuckyController.useLuckyTools(userId, 1, landId);
-        System.out.println(JSONUtil.toJsonStr(landLevelUp));
+        Result<?> result_tool = comPlayersLuckyController.useLuckyTools(userId, 9999999, landId);
+        Assert.assertFalse(result_tool.isFlag());
+
+        Result<?> result_land = comPlayersLuckyController.useLuckyTools(userId, 2, 9999999);
+        Assert.assertFalse(result_land.isFlag());
+
+        Result<?> result_endDate = comPlayersLuckyController.useLuckyTools(userId, 2, 3);
+        Assert.assertFalse(result_endDate.isFlag());
+
+        Result<?> result_user = comPlayersLuckyController.useLuckyTools("9999999", 2, landId);
+        Assert.assertFalse(result_user.isFlag());
+
+        Result<?> result = comPlayersLuckyController.useLuckyTools(userId, 2, landId);
+        Assert.assertTrue(result.isFlag());
     }
 
+    /**
+     * 测试土地升级
+     */
     @Test
     public void landLevelUp() {
-        Result<?> landLevelUp = comPlayersLuckyController.landLevelUp(userId, levelId, landId);
-        System.out.println(JSONUtil.toJsonStr(landLevelUp));
+        Result<?> result_user = comPlayersLuckyController.landLevelUp("9999999", levelId, landId);
+        Assert.assertFalse(result_user.isFlag());
+        Result<?> result_level = comPlayersLuckyController.landLevelUp(userId, 9999999, landId);
+        Assert.assertFalse(result_level.isFlag());
+        Result<?> result_land = comPlayersLuckyController.landLevelUp(userId, levelId, 9999999);
+        Assert.assertFalse(result_land.isFlag());
+        //幸运值不够
+        Result<?> result_no = comPlayersLuckyController.landLevelUp("1024", levelId, 3);
+        Assert.assertFalse(result_no.isFlag());
+        //测试到期
+        Result<?> result_endDate = comPlayersLuckyController.useLuckyTools(userId, 2, 170);
+        Assert.assertFalse(result_endDate.isFlag());
+        //测试正常升级
+        Result<?> result = comPlayersLuckyController.landLevelUp(userId, levelId, landId);
+        Assert.assertTrue(result.isFlag());
+        //重复升级
+        Result<?> result2 = comPlayersLuckyController.landLevelUp(userId, levelId, landId);
+        Assert.assertFalse(result2.isFlag());
     }
 
+    /**
+     * 兑换snb
+     */
     @Test
     public void toSNB() {
+        Result<?> result_user = comPlayersLuckyController.toSNB("9999999", 50 * 20);
+        Assert.assertFalse(result_user.isFlag());
+        //幸运值不够
+        Result<?> result_land = comPlayersLuckyController.toSNB(userId, 100000);
+        Assert.assertFalse(result_land.isFlag());
+        //幸运值边界
+        Result<?> result_land1 = comPlayersLuckyController.toSNB(userId, 999);
+        Assert.assertFalse(result_land1.isFlag());
+        Result<?> result_land2 = comPlayersLuckyController.toSNB(userId, 100001);
+        Assert.assertFalse(result_land2.isFlag());
+        //正常兑换
         Result<?> result = comPlayersLuckyController.toSNB(userId, 50 * 20);
         System.out.println(JSONUtil.toJsonStr(result));
     }