package com.ycwl.basic.controller; import com.github.pagehelper.PageInfo; import com.ycwl.basic.model.pc.videoreview.dto.VideoReviewAddReqDTO; import com.ycwl.basic.model.pc.videoreview.dto.VideoReviewListReqDTO; import com.ycwl.basic.model.pc.videoreview.dto.VideoReviewRespDTO; import com.ycwl.basic.model.pc.videoreview.dto.VideoReviewStatisticsRespDTO; import com.ycwl.basic.service.VideoReviewService; import com.ycwl.basic.utils.ApiResponse; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.net.URLEncoder; /** * 视频评价Controller * 管理端使用,通过token角色控制权限 */ @Slf4j @RestController @RequestMapping("/api/video-review/v1") public class VideoReviewController { @Autowired private VideoReviewService videoReviewService; /** * 新增视频评价 * * @param reqDTO 评价信息 * @return 评价ID */ @PostMapping("/add") public ApiResponse addReview(@RequestBody VideoReviewAddReqDTO reqDTO) { log.info("新增视频评价,videoId: {}", reqDTO.getVideoId()); Long reviewId = videoReviewService.addReview(reqDTO); return ApiResponse.success(reviewId); } /** * 分页查询评价列表 * * @param reqDTO 查询条件 * @return 分页结果 */ @GetMapping("/list") public ApiResponse> getReviewList(VideoReviewListReqDTO reqDTO) { log.info("查询视频评价列表,pageNum: {}, pageSize: {}", reqDTO.getPageNum(), reqDTO.getPageSize()); PageInfo pageInfo = videoReviewService.getReviewList(reqDTO); return ApiResponse.success(pageInfo); } /** * 获取评价统计数据 * * @return 统计结果 */ @GetMapping("/statistics") public ApiResponse getStatistics() { log.info("获取视频评价统计数据"); VideoReviewStatisticsRespDTO statistics = videoReviewService.getStatistics(); return ApiResponse.success(statistics); } /** * 导出评价数据到Excel * * @param reqDTO 查询条件 * @param response HTTP响应 */ @GetMapping("/export") public void exportReviews(VideoReviewListReqDTO reqDTO, HttpServletResponse response) { log.info("导出视频评价数据"); try { // 设置响应头 String fileName = "video_reviews_" + System.currentTimeMillis() + ".xlsx"; response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); // 导出数据 videoReviewService.exportReviews(reqDTO, response.getOutputStream()); response.getOutputStream().flush(); } catch (IOException e) { log.error("导出视频评价数据失败", e); throw new RuntimeException("导出失败: " + e.getMessage()); } } }