| | |
| | | private MessageService messageService; |
| | | |
| | | |
| | | |
| | | public ActivityPlayer getMyActivityPlayer(Long activityId) { |
| | | Long userId = userContextUtil.getCurrentUserId(); |
| | | if (userId == null) { |
| | | return null; |
| | | } |
| | | Optional<Player> playerOpt = playerRepository.findByUserId(userId); |
| | | if (playerOpt.isEmpty()) { |
| | | return null; |
| | | } |
| | | Player player = playerOpt.get(); |
| | | List<ActivityPlayer> activityPlayers = activityPlayerRepository.findByActivityIdAndPlayerIdOrderByCreateTimeDesc(activityId, player.getId()); |
| | | if (activityPlayers.isEmpty()) { |
| | | return null; |
| | | } |
| | | return activityPlayers.get(0); |
| | | } |
| | | /** |
| | | * 提交活动报名 |
| | | * @param input 报名输入信息 |
| | |
| | | } |
| | | log.info("选手记录处理成功,选手ID: {}", player.getId()); |
| | | |
| | | // 3. 检查是否已经报名 |
| | | log.info("检查是否已经报名,活动ID: {}, 选手ID: {}", input.getActivityId(), player.getId()); |
| | | Optional<ActivityPlayer> existingRegistration = activityPlayerRepository |
| | | .findByActivityIdAndPlayerId(input.getActivityId(), player.getId()); |
| | | if (existingRegistration.isPresent()) { |
| | | log.warn("选手已经报名过此活动"); |
| | | return ActivityRegistrationResponse.error("您已经报名过此活动"); |
| | | // 3. 检查是否已经报名(严格限定同一活动+同一选手) |
| | | log.info("检查是否存在有效报名(state IN 0,1),活动ID: {}, 选手ID: {}", input.getActivityId(), player.getId()); |
| | | Long activeOrPendingCount = activityPlayerRepository.countActiveOrPendingByActivityAndPlayer(input.getActivityId(), player.getId()); |
| | | if (activeOrPendingCount != null && activeOrPendingCount > 0) { |
| | | log.warn("同一活动与选手存在待审核或已通过的报名记录,禁止重复提交。count={}", activeOrPendingCount); |
| | | return ActivityRegistrationResponse.error("您在该活动已有待审核或已通过的报名,请勿重复提交"); |
| | | } |
| | | log.info("未发现重复报名"); |
| | | log.info("未发现有效报名,允许创建新的报名记录。"); |
| | | |
| | | // 4. 查找第一阶段,如果没有则使用活动本身 |
| | | // 4. 查找第一阶段(严格:pid=活动ID 且 sort_order=1),未配置则拒绝报名 |
| | | log.info("查找活动的第一阶段,活动ID: {}", input.getActivityId()); |
| | | Activity firstStage = activityRepository.findFirstStageByActivityId(input.getActivityId()); |
| | | Long stageId; |
| | | if (firstStage != null) { |
| | | stageId = firstStage.getId(); |
| | | log.info("找到第一阶段,阶段ID: {}, 阶段名称: {}", firstStage.getId(), firstStage.getName()); |
| | | } else { |
| | | // 如果没有找到第一阶段,使用活动本身作为阶段 |
| | | stageId = input.getActivityId(); |
| | | log.info("未找到第一阶段,使用活动本身作为阶段,活动ID: {}", input.getActivityId()); |
| | | if (firstStage == null) { |
| | | log.warn("未找到第一阶段(pid={}, sort_order=1),拒绝报名。活动ID: {}", input.getActivityId(), input.getActivityId()); |
| | | return ActivityRegistrationResponse.error("活动未配置第一阶段,无法报名"); |
| | | } |
| | | Long stageId = firstStage.getId(); |
| | | log.info("找到第一阶段,阶段ID: {}, 阶段名称: {}", firstStage.getId(), firstStage.getName()); |
| | | |
| | | // 5. 创建报名记录 |
| | | log.info("开始创建报名记录"); |
| | |
| | | |
| | | Player player = playerOpt.get(); |
| | | |
| | | // 查找该玩家在指定活动中的报名记录 |
| | | Optional<ActivityPlayer> activityPlayerOpt = activityPlayerRepository |
| | | .findByActivityIdAndPlayerId(activityId, player.getId()); |
| | | // 查找该玩家在指定活动中的报名记录(获取最新的) |
| | | List<ActivityPlayer> activityPlayers = activityPlayerRepository |
| | | .findByActivityIdAndPlayerIdOrderByCreateTimeDesc(activityId, player.getId()); |
| | | |
| | | if (!activityPlayerOpt.isPresent()) { |
| | | if (activityPlayers.isEmpty()) { |
| | | log.info("玩家 {} 未在活动 {} 中报名", player.getId(), activityId); |
| | | return null; |
| | | } |
| | | |
| | | ActivityPlayer activityPlayer = activityPlayerOpt.get(); |
| | | // 获取最新的报名记录 |
| | | ActivityPlayer activityPlayer = activityPlayers.get(0); |
| | | |
| | | // 构建响应对象 |
| | | PlayerRegistrationResponse response = new PlayerRegistrationResponse(); |