CaseExtractDetailController.java 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package com.fdkankan.fusion.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.deepoove.poi.XWPFTemplate;
  4. import com.deepoove.poi.config.Configure;
  5. import com.deepoove.poi.data.TextRenderData;
  6. import com.deepoove.poi.data.style.Style;
  7. import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
  8. import com.deepoove.poi.util.PoitlIOUtils;
  9. import com.fdkankan.fusion.common.ResultCode;
  10. import com.fdkankan.fusion.common.ResultData;
  11. import com.fdkankan.fusion.entity.CaseExtractDetail;
  12. import com.fdkankan.fusion.entity.CaseInquest;
  13. import com.fdkankan.fusion.exception.BusinessException;
  14. import com.fdkankan.fusion.response.CaseInquestVo;
  15. import com.fdkankan.fusion.response.WitnessVo;
  16. import com.fdkankan.fusion.service.ICaseExtractDetailService;
  17. import org.springframework.beans.BeanUtils;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.web.bind.annotation.*;
  20. import javax.servlet.http.HttpServletRequest;
  21. import javax.servlet.http.HttpServletResponse;
  22. import java.io.BufferedOutputStream;
  23. import java.io.IOException;
  24. import java.io.InputStream;
  25. import java.io.OutputStream;
  26. /**
  27. * <p>
  28. * 前端控制器
  29. * </p>
  30. *
  31. * @author
  32. * @since 2024-07-05
  33. */
  34. @RestController
  35. @RequestMapping("/caseExtractDetail")
  36. public class CaseExtractDetailController {
  37. @Autowired
  38. ICaseExtractDetailService caseExtractDetailService;
  39. @GetMapping("/info")
  40. public ResultData info(@RequestParam(required = false) Integer caseId){
  41. return ResultData.ok(caseExtractDetailService.getByCaseId(caseId));
  42. }
  43. @PostMapping("/saveOrUpdate")
  44. public ResultData saveOrUpdate(@RequestBody CaseExtractDetail caseExtractDetail){
  45. caseExtractDetailService.saveByParam(caseExtractDetail);
  46. return ResultData.ok();
  47. }
  48. @GetMapping("/downDocx")
  49. public void downDocx(@RequestParam(required = false) Integer caseId,
  50. HttpServletResponse res, HttpServletRequest req) throws IOException {
  51. if(caseId == null){
  52. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  53. }
  54. CaseExtractDetail caseExtractDetail = caseExtractDetailService.getByCaseId(caseId);
  55. if(caseExtractDetail == null){
  56. throw new BusinessException(ResultCode.INQUEST_ERROR2);
  57. }
  58. InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("template/extract-template.docx");
  59. // 渲染模板
  60. // 定义行循环插件
  61. LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
  62. Configure config = Configure.builder()
  63. .bind("detail", policy).bind("extractUser", policy).bind("witnessInfo", policy).build();
  64. XWPFTemplate template = XWPFTemplate.compile(inputStream,config).render(caseExtractDetail);
  65. // 设置响应头,指定文件类型和内容长度
  66. res.setContentType("application/octet-stream");
  67. res.setHeader("Content-Disposition", "attachment; filename=output.docx");
  68. try {
  69. // 返回网络流
  70. OutputStream out = res.getOutputStream();
  71. BufferedOutputStream bos = new BufferedOutputStream(out);
  72. template.write(bos);
  73. bos.flush();
  74. out.flush();
  75. // 关闭流
  76. PoitlIOUtils.closeQuietlyMulti(template, bos, out);
  77. } catch (IOException e) {
  78. throw new RuntimeException(e);
  79. }
  80. }
  81. }