Codex Assistant
2 天以前 58d9f460b2f8c34430285115e2557d18333c5cab
backend/src/main/java/com/rongyichuang/activity/service/ActivityService.java
@@ -60,11 +60,18 @@
    /**
     * 分页查询比赛列表
     */
    public PageResponse<ActivityResponse> findActivities(PageRequest pageRequest, String name) {
    public PageResponse<ActivityResponse> findActivities(PageRequest pageRequest, String name, Integer state) {
        Pageable pageable = pageRequest.toPageable();
        Page<Activity> page;
        if (StringUtils.hasText(name)) {
        boolean hasName = StringUtils.hasText(name);
        if (state != null) {
            if (hasName) {
                page = activityRepository.findByPidAndStateAndNameContainingOrderByCreateTimeDesc(0L, state, name, pageable);
            } else {
                page = activityRepository.findByPidAndStateOrderByCreateTimeDesc(0L, state, pageable);
            }
        } else if (hasName) {
            page = activityRepository.findByPidAndNameContainingOrderByCreateTimeDesc(0L, name, pageable);
        } else {
            // 查询所有主活动(pid = 0)
@@ -74,22 +81,31 @@
        List<ActivityResponse> content = page.getContent().stream()
            .map(activity -> {
                ActivityResponse response = new ActivityResponse(activity);
                // 设置参赛人数(只统计第一阶段的审核通过学员人数)
                // 设置参赛人数(统计第一阶段的待审核和审核通过学员人数)
                int playerCount = 0;
                Activity firstStage = activityRepository.findFirstStageByActivityId(activity.getId());
                if (firstStage != null) {
                    // 如果有第一阶段,统计第一阶段的审核通过人数
                    Long playerCountLong = activityPlayerRepository.countByStageIdAndState(firstStage.getId(), 1);
                    // 如果有第一阶段,统计第一阶段的待审核和审核通过人数
                    Long playerCountLong = activityPlayerRepository.countByStageId(firstStage.getId());
                    playerCount = playerCountLong != null ? playerCountLong.intValue() : 0;
                } else {
                    // 如果没有阶段,统计活动本身的审核通过人数
                    Long playerCountLong = activityPlayerRepository.countByActivityIdAndState(activity.getId(), 1);
                    // 如果没有阶段,统计活动本身的待审核和审核通过人数
                    Long playerCountLong = activityPlayerRepository.countByActivityId(activity.getId());
                    playerCount = playerCountLong != null ? playerCountLong.intValue() : 0;
                }
                response.setPlayerCount(playerCount);
                return response;
            })
            .collect(Collectors.toList());
        // 调试:打印返回给前端的响应对象中的报名截止
        try {
            content.stream().limit(10).forEach(r ->
                log.info("Response(id={}, name={}) signupDeadline={}, matchTime={}", r.getId(), r.getName(), r.getSignupDeadline(), r.getMatchTime())
            );
        } catch (Exception e) {
            log.warn("打印ActivityResponse日志失败: {}", e.getMessage());
        }
        
        return new PageResponse<>(content, page.getTotalElements(), page.getNumber(), page.getSize());
    }
@@ -353,6 +369,17 @@
        }
        return false;
    }
    public boolean updateActivityState(Long id, Integer state) {
        Optional<Activity> activityOpt = activityRepository.findById(id);
        if (activityOpt.isPresent()) {
            Activity activity = activityOpt.get();
            activity.setState(state);
            activityRepository.save(activity);
            return true;
        }
        return false;
    }
    
    /**
     * 获取所有有效主比赛(用于下拉选择)