Explorar o código

1.修改关卡信息

slambb %!s(int64=4) %!d(string=hai) anos
pai
achega
11420a1b53

+ 58 - 33
src/main/java/com/YuyeTech/TPlat/controller/LevelController.java

@@ -70,6 +70,18 @@ public class LevelController {
         return ResultVOUtil.success(map);
     }
 
+    /**
+     * 获取全部关卡列表
+     *
+     * @param userId
+     * @return
+     */
+    @GetMapping("/getLevelList")
+    public ResultVO getLevelList(@RequestParam(value = "userId") String userId) {
+        Map map = levelJumpService.findLevels(userId);
+        return ResultVOUtil.success(map);
+    }
+
     /**
      * 过关调用此处,第一次过关,添加对应的信息
      * 只处理levelJump信息
@@ -81,19 +93,24 @@ public class LevelController {
     @GetMapping("/passTheLevel")
     @Transactional(rollbackFor = Exception.class)
     public ResultVO passTheLevel(@RequestParam(value = "userId") String userId,
-                                 @RequestParam(value = "levelType") Integer eventType,
+                                 //@RequestParam(value = "levelType") Integer eventType,
                                  @RequestParam(value = "levelId") Integer eventId) {
 
         // todo 后面看是否需要处理判断过关条件
+        // todo 判断是否存在关卡
+        LevelJump levelJump = levelJumpService.findById(eventId);
+        if (levelJump == null){
+            return ResultVOUtil.error(ResultEnum.LEVEL_ERROR.getCode(),ResultEnum.LEVEL_ERROR.getMessage());
+        }
         //根据id和类型获取关卡信息
-        UserLevel userLevel = userLevelService.findByUserIdAndEventType(userId, eventType);
+        UserLevel userLevel = userLevelService.findByUserIdAndEventType(userId, levelJump.getType());
 
         if (userLevel == null) {
             userLevel = new UserLevel();
             userLevel.setUserId(userId);
             userLevel.setCreateTime(new Date());
             //1 代表 levelJump
-            userLevel.setEventType(eventType);
+            userLevel.setEventType(levelJump.getType());
             userLevel.setPassedState(eventId.toString());
             //本身已解锁的默认不用记录解锁
             userLevel.setUnlockState("");
@@ -118,9 +135,10 @@ public class LevelController {
         //todo 过关后,发放对应奖励,金币,钻石和荣誉,等等。
 
         Map map = new HashMap();
-        UserReward userReward = userRewardService.findByUserIdAndEventId(userId,eventId);
-        if (eventType.equals(1)) {
-            LevelJump levelJump = levelJumpService.findById(eventId);
+        UserReward userReward = userRewardService.findByUserIdAndEventId(userId, eventId);
+        //todo 暂时吧跳绳和拳击奖励放一起
+        if (levelJump.getType().equals(1) || levelJump.getType().equals(2)) {
+            //LevelJump levelJump = levelJumpService.findById(eventId);
             LevelHonorDTO levelHonorDTO = levelHonorService.findByHonorType(levelJump.getRewardHonor());
             if (userReward == null) {
                 userReward = new UserReward();
@@ -128,12 +146,12 @@ public class LevelController {
                 userReward.setCreateTime(new Date());
                 userReward.setEventId(levelJump.getId());
                 userReward.setEventName(levelJump.getName());
-                userReward.setEventType(eventType);
+                userReward.setEventType(levelJump.getType());
                 userReward.setEventState(1);
                 userReward.setPlayCount(1);
-            }else{
+            } else {
                 //如果存在数据,+1次数
-                userReward.setPlayCount(userReward.getPlayCount()+1);
+                userReward.setPlayCount(userReward.getPlayCount() + 1);
             }
             userReward.setGold(levelJump.getRewardGold());
             userReward.setDiamond(levelJump.getRewardDiamond());
@@ -145,15 +163,17 @@ public class LevelController {
             userRewardService.saveUserReward(userReward);
             //如果需要奖励
             //todo 奖励用户相应信息
-            UserWallets userWallets = userWalletsService.modifyGoldAndDiamondInUserWallets(userId, levelJump.getRewardGold(), levelJump.getRewardDiamond(),true);
+            UserWallets userWallets = userWalletsService.modifyGoldAndDiamondInUserWallets(userId, levelJump.getRewardGold(), levelJump.getRewardDiamond(), true);
 
-            map.put("rewardHonor",levelHonorDTO);
-            map.put("rewardGold",levelJump.getRewardGold());
-            map.put("rewardDiamond",levelJump.getRewardDiamond());
+            map.put("rewardHonor", levelHonorDTO);
+            map.put("rewardGold", levelJump.getRewardGold());
+            map.put("rewardDiamond", levelJump.getRewardDiamond());
             //返回一个钱包情况
             map.put("gold", userWallets.getGold());
             map.put("diamond", userWallets.getDiamond());
 
+        }else{
+            //todo
         }
 
 
@@ -164,10 +184,16 @@ public class LevelController {
 
     @GetMapping("/unlockLevel")
     public ResultVO UnlockLevel(@RequestParam(value = "userId") String userId,
-                                @RequestParam(value = "numberType") Integer numberType,
-                                @RequestParam(value = "levelType") Integer eventType,
+                                //@RequestParam(value = "numberType") Integer numberType,
+                                //@RequestParam(value = "levelType") Integer eventType,
                                 @RequestParam(value = "levelId") Integer eventId) {
 
+        // todo 判断是否存在关卡
+        LevelJump levelJump = levelJumpService.findById(eventId);
+        if (levelJump == null){
+            return ResultVOUtil.error(ResultEnum.LEVEL_ERROR.getCode(),ResultEnum.LEVEL_ERROR.getMessage());
+        }
+
         try {
             //0自动解锁
             //单人模式解锁条件:1上一关,2金币,3钻石,
@@ -175,7 +201,7 @@ public class LevelController {
             //1.第一步先判断除了金币和钻石的条件。目前除了2,3.其余的只有一个条件需要判断
             // 单人条件下,只需要判断上一关的是否已经解锁
             // 拿到用户记录的关卡数据 levelType = levelJump(1),
-            UserLevel userLevel = userLevelService.findByUserIdAndEventType(userId, eventType);
+            UserLevel userLevel = userLevelService.findByUserIdAndEventType(userId, levelJump.getType());
             if (userLevel == null) {
                 //提示必须通过第一个自动解锁的关卡。这样才能记录
                 return ResultVOUtil.error(ResultEnum.MUST_PASS_FIRST_LEVEL.getCode(), ResultEnum.MUST_PASS_FIRST_LEVEL.getMessage());
@@ -198,8 +224,8 @@ public class LevelController {
             Boolean isPassed = false;
             List<Map> _unlockMapList = new ArrayList<>();
             //单人条件下判断上一关一个条件
-            if (numberType.equals(1)) {
-                List<LevelJump> levelJumpList = levelJumpService.findLevelJumpsByNumberType(numberType, Sort.Direction.ASC);
+            if (levelJump.getNumberType().equals(1)) {
+                List<LevelJump> levelJumpList = levelJumpService.findLevelJumpsByNumberType(levelJump.getNumberType(), Sort.Direction.ASC);
                 for (int i = 0; i < levelJumpList.size(); i++) {
                     curLevelJump = levelJumpList.get(i);
                     if (curLevelJump.getId().equals(eventId)) {
@@ -209,7 +235,7 @@ public class LevelController {
                     }
                 }
 
-            } else if (numberType.equals(2)) {
+            } else if (levelJump.getNumberType().equals(2)) {
                 //2人模式下,处理条件是需要判断单人模式下对应的关卡是否解锁
                 //todo 拿到当前条件下得limitLevel
                 curLevelJump = levelJumpService.findById(eventId);
@@ -243,7 +269,7 @@ public class LevelController {
                 } else {
                     //如果需要扣除金币或者钻石
                     //todo 获取用户钱包信息
-                    UserWallets userWallets = userWalletsService.modifyGoldAndDiamondInUserWallets(userId, curLevelJump.getConsumeGold(), curLevelJump.getConsumeDiamond(),false);
+                    UserWallets userWallets = userWalletsService.modifyGoldAndDiamondInUserWallets(userId, curLevelJump.getConsumeGold(), curLevelJump.getConsumeDiamond(), false);
 
                     //扣费后记录关卡信息
                     userLevelService.saveUserLevel(userLevel);
@@ -255,12 +281,12 @@ public class LevelController {
                 }
 
             } else {
-                if (eventType.equals(1)) {
+                if (levelJump.getType().equals(1) || levelJump.getType().equals(2)) {
                     //目前levelJump = 1
-                    if (numberType.equals(1)) {
+                    if (levelJump.getNumberType().equals(1)) {
                         return ResultVOUtil.error(ResultEnum.PREVIOUS_LEVEL_NO_PASSED.getCode(), ResultEnum.PREVIOUS_LEVEL_NO_PASSED.getMessage());
 
-                    } else if (numberType.equals(2)) {
+                    } else if (levelJump.getNumberType().equals(2)) {
                         return ResultVOUtil.error(ResultEnum.ASSOCIATED_LEVEL_NO_UNLOCKED.getCode(), ResultEnum.ASSOCIATED_LEVEL_NO_UNLOCKED.getMessage(), _unlockMapList);
 
                     }
@@ -282,7 +308,6 @@ public class LevelController {
 
     /**
      * pk 关卡奖励
-     *
      */
     @GetMapping("/pkLevelReward")
     @Transactional(rollbackFor = Exception.class)
@@ -326,8 +351,8 @@ public class LevelController {
         Map map = new HashMap();
         String decFriendId = RSAUtils.privateDecrypt(friendRSA, RSAUtils.getPrivateKey(friendIdPrivateKey));
 
-        String curId = isMyWin?userId:decFriendId;
-        UserReward userReward = userRewardService.findByUserIdAndEventId(curId,eventId);
+        String curId = isMyWin ? userId : decFriendId;
+        UserReward userReward = userRewardService.findByUserIdAndEventId(curId, eventId);
         if (eventType.equals(1)) {
             LevelJump levelJump = levelJumpService.findById(eventId);
             LevelHonorDTO levelHonorDTO = levelHonorService.findByHonorType(levelJump.getRewardHonor());
@@ -340,9 +365,9 @@ public class LevelController {
                 userReward.setEventType(eventType);
                 userReward.setEventState(1);
                 userReward.setPlayCount(1);
-            }else{
+            } else {
                 //如果存在数据,+1次数
-                userReward.setPlayCount(userReward.getPlayCount()+1);
+                userReward.setPlayCount(userReward.getPlayCount() + 1);
             }
             userReward.setGold(levelJump.getRewardGold());
             userReward.setDiamond(levelJump.getRewardDiamond());
@@ -355,13 +380,13 @@ public class LevelController {
 
             //如果需要奖励
             //todo 奖励用户相应信息
-            UserWallets userWallets = userWalletsService.modifyGoldAndDiamondInUserWallets(curId, levelJump.getRewardGold(), levelJump.getRewardDiamond(),true);
+            UserWallets userWallets = userWalletsService.modifyGoldAndDiamondInUserWallets(curId, levelJump.getRewardGold(), levelJump.getRewardDiamond(), true);
 
-            map.put("rewardHonor",levelHonorDTO);
-            map.put("rewardGold",levelJump.getRewardGold());
-            map.put("rewardDiamond",levelJump.getRewardDiamond());
+            map.put("rewardHonor", levelHonorDTO);
+            map.put("rewardGold", levelJump.getRewardGold());
+            map.put("rewardDiamond", levelJump.getRewardDiamond());
             //如果是自己赢的,返回给当前客户端一个自己用户的钱包情况
-            if(isMyWin){
+            if (isMyWin) {
                 map.put("gold", userWallets.getGold());
                 map.put("diamond", userWallets.getDiamond());
             }

+ 4 - 0
src/main/java/com/YuyeTech/TPlat/dataobject/LevelJump.java

@@ -40,4 +40,8 @@ public class LevelJump {
     private Integer numberType;
     /** 顺序设计,和number type 一起使用。用于游戏排序 */
     private Integer sort;
+    /**
+     * 关卡类型,1代表 跳,2代表拳击
+     */
+    private Integer type;
 }

+ 8 - 1
src/main/java/com/YuyeTech/TPlat/dto/LevelJumpDTO.java

@@ -50,6 +50,11 @@ public class LevelJumpDTO {
      */
     private Boolean isUnlock;
 
+    /**
+     * 关卡条件区分
+     */
+    private Integer levelType;
+
     public LevelJumpDTO(Integer id,
                         String name,
                         String describe,
@@ -66,7 +71,8 @@ public class LevelJumpDTO {
                         String explain,
                         Integer numberType,
                         Boolean isPassed,
-                        Boolean isUnlock
+                        Boolean isUnlock,
+                        Integer levelType
 
     ) {
         this.id = id;
@@ -86,5 +92,6 @@ public class LevelJumpDTO {
         this.numberType = numberType;
         this.isPassed = isPassed;
         this.isUnlock = isUnlock;
+        this.levelType = levelType;
     }
 }

+ 1 - 0
src/main/java/com/YuyeTech/TPlat/enums/ResultEnum.java

@@ -47,6 +47,7 @@ public enum ResultEnum {
     ASSOCIATED_LEVEL_NO_UNLOCKED(803,"关联关卡没有解锁或者limitLevel未设置"),
     OTHER_LEVEL_NO_UNLOCKED(804,"todo其他关卡解锁失败操作"),
     MUST_PASS_FIRST_LEVEL(805,"先通过第一个关卡"),
+    LEVEL_ERROR(806,"关卡信息错误!"),
 
     //signIn
     SIGN_IN_REPEAT(901,"重复签到"),

+ 2 - 0
src/main/java/com/YuyeTech/TPlat/repository/UserLevelRepository.java

@@ -18,4 +18,6 @@ import java.util.Optional;
 public interface UserLevelRepository extends JpaRepository<UserLevel,Integer> {
 
     Optional<UserLevel> findByUserIdAndEventType(String userId,Integer eventType);
+
+    List<UserLevel> findByUserId(String userId);
 }

+ 3 - 1
src/main/java/com/YuyeTech/TPlat/service/LevelJumpService.java

@@ -21,7 +21,9 @@ public interface LevelJumpService {
 
     List<LevelJumpDTO> findLevelJumpDTOsByNumberType(Integer numberType, Sort.Direction direction);
 
-    Map  findLevelJumpsAll(String userId);
+    Map findLevelJumpsAll(String userId);
+
+    Map findLevels(String userId);
 
     List<LevelJump> findLevelJumpsAll();
 

+ 86 - 8
src/main/java/com/YuyeTech/TPlat/service/impl/LevelJumpServiceImpl.java

@@ -34,8 +34,8 @@ public class LevelJumpServiceImpl implements LevelJumpService {
     private UserLevelRepository userLevelRepository;
 
     @Override
-    public List<LevelJump> findLevelJumpsByNumberType(Integer numberType,Sort.Direction direction) {
-        return  levelJumpRepository.findAllByNumberType(numberType, Sort.by(direction,"sort"));
+    public List<LevelJump> findLevelJumpsByNumberType(Integer numberType, Sort.Direction direction) {
+        return levelJumpRepository.findAllByNumberType(numberType, Sort.by(direction, "sort"));
     }
 
     @Override
@@ -44,9 +44,9 @@ public class LevelJumpServiceImpl implements LevelJumpService {
     }
 
     @Override
-    public List<LevelJumpDTO> findLevelJumpDTOsByNumberType(Integer numberType,Sort.Direction direction) {
+    public List<LevelJumpDTO> findLevelJumpDTOsByNumberType(Integer numberType, Sort.Direction direction) {
 
-        List<LevelJump> levelJumpList = levelJumpRepository.findAllByNumberType(numberType, Sort.by(direction,"sort"));
+        List<LevelJump> levelJumpList = levelJumpRepository.findAllByNumberType(numberType, Sort.by(direction, "sort"));
         List<LevelJumpDTO> levelJumpDTOList = levelJumpList.stream().map(
                 e -> new LevelJumpDTO(
                         e.getId(),
@@ -66,7 +66,8 @@ public class LevelJumpServiceImpl implements LevelJumpService {
                         e.getExplain(),
                         e.getNumberType(),
                         false,
-                        false
+                        false,
+                        1
                 )
         ).collect(Collectors.toList());
 
@@ -81,7 +82,7 @@ public class LevelJumpServiceImpl implements LevelJumpService {
         List<Integer> unlockStateList = new ArrayList<>();
         List<Integer> passedStateList = new ArrayList<>();
 
-        if(userLevel !=null){
+        if (userLevel != null) {
             // 记录一个 id 数组。
             // 已经解锁的关卡id "0,1,2,3"
             unlockStateList = Pattern.compile(",").splitAsStream(userLevel.getUnlockState()).map((x) -> Integer.parseInt(x))
@@ -91,7 +92,7 @@ public class LevelJumpServiceImpl implements LevelJumpService {
                     .collect(Collectors.toList());
         }
 
-        List<LevelJump> levelJumpList = levelJumpRepository.findAll(Sort.by(Sort.Direction.ASC,"sort"));
+        List<LevelJump> levelJumpList = levelJumpRepository.findAll(Sort.by(Sort.Direction.ASC, "sort"));
         List<LevelJumpDTO> singlePerson = new ArrayList<>();
         List<LevelJumpDTO> multiPerson = new ArrayList<>();
 
@@ -121,7 +122,8 @@ public class LevelJumpServiceImpl implements LevelJumpService {
                     e.getExplain(),
                     e.getNumberType(),
                     _isPassed,
-                    _unlock || _hasUnlock
+                    _unlock || _hasUnlock,
+                    1
             );
 
             //单人,多人
@@ -138,6 +140,82 @@ public class LevelJumpServiceImpl implements LevelJumpService {
         return map;
     }
 
+    /**
+     * 返回全部关卡和类型
+     *
+     * @param userId
+     * @return
+     */
+    @Override
+    public Map findLevels(String userId) {
+
+        //关卡解锁数据读取,输出一个匹配的关卡数据
+        List<UserLevel> userLevelList = userLevelRepository.findByUserId(userId);
+        //当前是两组关卡来返回,1是跳,2是拳击
+        List<LevelJump> levelJumpList = levelJumpRepository.findAll(Sort.by(Sort.Direction.ASC, "sort"));
+        List<LevelJumpDTO> singlePerson = new ArrayList<>();
+        List<LevelJumpDTO> multiPerson = new ArrayList<>();
+
+        for (int i = 0; i < levelJumpList.size(); i++) {
+            LevelJump e = levelJumpList.get(i);
+            List<Integer> _limitTypes = Pattern.compile(",").splitAsStream(e.getConditionUnlock()).map((x) -> Integer.parseInt(x))
+                    .collect(Collectors.toList());
+            // 是否解锁,如果是 0 ,及存在自动解锁。
+            Boolean _unlock = _limitTypes.contains(0);
+
+            List<Integer> unlockStateList = new ArrayList<>();
+            List<Integer> passedStateList = new ArrayList<>();
+            for (int k = 0; k < userLevelList.size(); k++) {
+                UserLevel userLevel = userLevelList.get(k);
+                //根据记录关卡的type 和 当前关卡对应所属的type一样,
+                if (userLevel.getEventType().equals(e.getType())) {
+                    // 记录一个 id 数组。
+                    // 已经解锁的关卡id "0,1,2,3"
+                    unlockStateList = Pattern.compile(",").splitAsStream(userLevel.getUnlockState()).map((x) -> Integer.parseInt(x))
+                            .collect(Collectors.toList());
+                    // 已经通过关卡的关卡id "0,1,2"
+                    passedStateList = Pattern.compile(",").splitAsStream(userLevel.getPassedState()).map((x) -> Integer.parseInt(x))
+                            .collect(Collectors.toList());
+                }
+            }
+            // 如果存在解锁关卡,并且不是1也是可以的
+            Boolean _hasUnlock = unlockStateList.contains(e.getId());
+            Boolean _isPassed = passedStateList.contains(e.getId());
+            LevelJumpDTO _levelJumpDTO = new LevelJumpDTO(
+                    e.getId(),
+                    e.getName(),
+                    e.getDescribe(),
+                    e.getRewardGold(),
+                    e.getRewardDiamond(),
+                    levelHonorRepository.findByType(e.getRewardHonor()).orElse(null),
+                    e.getConsumeGold(),
+                    e.getConsumeDiamond(),
+                    e.getSignCount(),
+                    e.getSignType(),
+                    e.getLimitTime(),
+                    levelConditionRepository.findByTypeAndLimitTypeIn(0, _limitTypes),//解析关卡
+                    levelConditionRepository.findByTypeAndLimitType(1, e.getConditionPassed()),
+                    e.getExplain(),
+                    e.getNumberType(),
+                    _isPassed,
+                    _unlock || _hasUnlock,
+                    e.getType()
+            );
+            //单人,多人
+            if (e.getNumberType().equals(1)) {
+                singlePerson.add(_levelJumpDTO);
+            } else if (e.getNumberType().equals(2)) {
+                multiPerson.add(_levelJumpDTO);
+            }
+        }
+        //根据type再分组
+        Map<Integer, List<LevelJumpDTO>> singlePersonMap = singlePerson.stream().collect(Collectors.groupingBy(LevelJumpDTO::getLevelType));
+        Map<Integer, List<LevelJumpDTO>> multiPersonMap = multiPerson.stream().collect(Collectors.groupingBy(LevelJumpDTO::getLevelType));
+        Map map = new HashMap();
+        map.put("singlePersonMap",singlePersonMap.values().stream().collect(Collectors.toList()));
+        map.put("multiPersonMap",multiPersonMap.values().stream().collect(Collectors.toList()));
+        return map;
+    }
 
     @Override
     public LevelJump findById(Integer id) {