package com.yaoyicloud.controller; import com.yaoyicloud.annotation.EasierLog; import com.yaoyicloud.dto.ReportDTO; import com.yaoyicloud.service.ReportService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.ArrayList; import java.util.Base64; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 报告控制器 * * @author snows * @date 2024/10/14 */ @RestController @RequiredArgsConstructor @Slf4j public class ReportController { private final ReportService reportService; /** * 创建Plus版本审核报告 * * @param resource 请求参数 * @return {@link Boolean } 结果 */ @EasierLog("创建Plus版本审核报告") @PostMapping("/report/create-report") public Map createPlusVersionCheckReport(@Validated @RequestBody ReportDTO.OnCreatePlusVersionReport resource, HttpServletRequest request) throws IOException { byte[] fileBytes = Base64.getDecoder().decode(resource.getReportTempFile()); synchronized (this) { String reportPath = reportService.createPlusVersionCheckReport( resource.getReportType(), resource.getData(), fileBytes, resource.getReportBastPath(), resource.getRelationId() ); //把结果保存到session中 一个relationId一个session 这样就把多个结果都保存到一个session中,可以获取路径做拼接 //后续 session.removeAttribute清理数据。 HttpSession session = request.getSession(); String relationId = String.valueOf(resource.getRelationId()); List reportPaths = (List) session.getAttribute(relationId); if (reportPaths == null) { reportPaths = new ArrayList<>(); session.setAttribute(relationId, reportPaths); } Map response = new HashMap<>(); response.put("reportResult", reportPath); response.put("sessionId", request.getSession().getId()); // Use the provided session ID return response; } } }