Codex Assistant
2025-11-06 375c18a6d2713ff19b22093eec57315992d8333f
backend/src/main/java/com/rongyichuang/review/resolver/ReviewResolver.java
@@ -4,13 +4,19 @@
import com.rongyichuang.review.dto.response.ReviewProjectPageResponse;
import com.rongyichuang.review.dto.response.ReviewProjectResponse;
import com.rongyichuang.review.dto.response.ReviewStatisticsResponse;
import com.rongyichuang.review.dto.response.ReviewExportResponse;
import com.rongyichuang.review.dto.response.ReviewExportJobStatus;
import com.rongyichuang.review.service.ReviewService;
import com.rongyichuang.review.service.ReviewExportService;
import com.rongyichuang.review.service.ReviewExportJobService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.graphql.data.method.annotation.Argument;
import org.springframework.graphql.data.method.annotation.MutationMapping;
import org.springframework.graphql.data.method.annotation.QueryMapping;
import org.springframework.stereotype.Controller;
import java.util.List;
/**
 * 评审管理GraphQL解析器
@@ -25,6 +31,12 @@
    @Autowired
    private UserContextUtil userContextUtil;
    @Autowired
    private ReviewExportService reviewExportService;
    @Autowired
    private ReviewExportJobService reviewExportJobService;
    /**
     * 查询我未评审的项目列表
@@ -94,4 +106,40 @@
        
        return reviewService.getReviewStatistics(currentJudgeId);
    }
    /**
     * 导出评审ZIP,返回下载链接
     */
    @MutationMapping
    public ReviewExportResponse exportReviewZip(@Argument Long activityId, @Argument List<Long> stageIds) {
        log.info("导出评审ZIP,activityId: {}, stageIds: {}", activityId, stageIds);
        // 权限校验:仅员工(管理员/主办方)可执行导出
        if (!userContextUtil.isCurrentUserEmployee()) {
            log.warn("导出评审ZIP被拒绝,当前用户无员工权限,activityId: {}", activityId);
            return new ReviewExportResponse(false, null, "当前用户无权限导出评审数据");
        }
        return reviewExportService.exportReviewZip(activityId, stageIds);
    }
    /**
     * 异步导出:启动评审导出任务,返回任务ID
     */
    @MutationMapping
    public String startReviewExportJob(@Argument Long activityId, @Argument List<Long> stageIds) {
        log.info("启动评审导出任务,activityId: {}, stageIds: {}", activityId, stageIds);
        if (!userContextUtil.isCurrentUserEmployee()) {
            log.warn("启动评审导出任务被拒绝,当前用户无员工权限,activityId: {}", activityId);
            return null;
        }
        return reviewExportJobService.startJob(activityId, stageIds);
    }
    /**
     * 查询导出任务状态
     */
    @QueryMapping
    public ReviewExportJobStatus getReviewExportJobStatus(@Argument String jobId) {
        return reviewExportJobService.getStatus(jobId);
    }
}