CaseInquestCriminalServiceImpl.java 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package com.fdkankan.fusion.service.impl;
  2. import cn.dev33.satoken.stp.StpUtil;
  3. import cn.hutool.core.date.DatePattern;
  4. import cn.hutool.core.date.DateUtil;
  5. import com.alibaba.fastjson.JSONArray;
  6. import com.alibaba.fastjson.JSONObject;
  7. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  8. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  9. import com.deepoove.poi.XWPFTemplate;
  10. import com.deepoove.poi.config.Configure;
  11. import com.deepoove.poi.config.ConfigureBuilder;
  12. import com.deepoove.poi.data.TextRenderData;
  13. import com.deepoove.poi.data.style.Style;
  14. import com.deepoove.poi.xwpf.NiceXWPFDocument;
  15. import com.fdkankan.fusion.common.FilePath;
  16. import com.fdkankan.fusion.common.ResultCode;
  17. import com.fdkankan.fusion.common.util.DateUtils;
  18. import com.fdkankan.fusion.common.util.ShellUtil;
  19. import com.fdkankan.fusion.common.util.XwpTemplateUtils;
  20. import com.fdkankan.fusion.entity.*;
  21. import com.fdkankan.fusion.exception.BusinessException;
  22. import com.fdkankan.fusion.mapper.ICaseInquestCriminalMapper;
  23. import com.fdkankan.fusion.response.CaseInquestCriminalVo;
  24. import com.fdkankan.fusion.response.CaseInquestVo;
  25. import com.fdkankan.fusion.response.WitnessVo;
  26. import com.fdkankan.fusion.service.*;
  27. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  28. import lombok.extern.slf4j.Slf4j;
  29. import org.apache.commons.lang3.StringUtils;
  30. import org.apache.poi.xwpf.usermodel.UnderlinePatterns;
  31. import org.springframework.beans.BeanUtils;
  32. import org.springframework.beans.factory.annotation.Autowired;
  33. import org.springframework.stereotype.Service;
  34. import java.io.InputStream;
  35. import java.util.Date;
  36. import java.util.List;
  37. /**
  38. * <p>
  39. * 服务实现类
  40. * </p>
  41. *
  42. * @author
  43. * @since 2024-10-18
  44. */
  45. @Service
  46. @Slf4j
  47. public class CaseInquestCriminalServiceImpl extends ServiceImpl<ICaseInquestCriminalMapper, CaseInquestCriminal> implements ICaseInquestCriminalService {
  48. @Autowired
  49. ITmUserService tmUserService;
  50. @Autowired
  51. ICaseService caseService;
  52. @Autowired
  53. ITmDepartmentService tmDepartmentService;
  54. @Autowired
  55. ICaseNumService caseNumService;
  56. @Autowired
  57. IScenePlusService scenePlusService;
  58. @Autowired
  59. ICaseFilesService caseFilesService;
  60. @Override
  61. public CaseInquestCriminal getByInquestFileId(Integer caseId) {
  62. LambdaQueryWrapper<CaseInquestCriminal> wrapper = new LambdaQueryWrapper<>();
  63. wrapper.eq(CaseInquestCriminal::getInquestFileId,caseId);
  64. CaseInquestCriminal caseInquestCriminal = this.getOne(wrapper);
  65. return caseInquestCriminal;
  66. }
  67. @Override
  68. public void saveByParam(CaseInquestCriminal caseInquestCriminal) {
  69. if(caseInquestCriminal.getInquestFileId() == null){
  70. CaseFiles caseFiles = caseFilesService.addByInquest(caseInquestCriminal);
  71. caseInquestCriminal.setInquestFileId(caseFiles.getFilesId());
  72. }else {
  73. CaseInquestCriminal byInquestFileId = getByInquestFileId(caseInquestCriminal.getInquestFileId());
  74. caseInquestCriminal.setId(byInquestFileId.getId());
  75. }
  76. this.saveOrUpdate(caseInquestCriminal);
  77. //生产doc文档
  78. try {
  79. Integer inquestFileId = caseInquestCriminal.getInquestFileId();
  80. CaseFiles caseFiles = caseFilesService.getById(inquestFileId);
  81. XWPFTemplate template = this.getWordByTemplate(caseInquestCriminal);
  82. String localPath = String.format(FilePath.MNTPATH+FilePath.DOC_OSS_PATH,caseFiles.getFilesId(),caseFiles.getFilesTitle()+".docx");
  83. template.writeToFile(localPath );
  84. ShellUtil.yunUpload(localPath,localPath.replace(FilePath.MNTPATH,""));
  85. }catch (Exception e){
  86. log.info("caseInquestCriminal-保存生成doc文档出错:error",e);
  87. }
  88. }
  89. @Override
  90. public XWPFTemplate getWordByTemplate(CaseInquestCriminal caseInquest) {
  91. InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("template/inquest_criminal-template.docx");
  92. // 渲染模板
  93. CaseInquestCriminalVo vo = new CaseInquestCriminalVo();
  94. BeanUtils.copyProperties(caseInquest,vo);
  95. //[{"unit":"四维","name":"张三","typeLabel":"笔录人","type":0,"job":"植物一"}]
  96. String recorderInfo = "%s:姓名 %s 单位 %s 职务 %s\n";
  97. StringBuilder recorderInfoMsg = new StringBuilder();
  98. for (Object object : vo.getRecorderInfo()) {
  99. JSONObject obj = (JSONObject) object;
  100. String format = String.format(recorderInfo,obj.getString("typeLabel"), obj.getString("name"), obj.getString("unit"), obj.getString("job"));
  101. recorderInfoMsg.append(format);
  102. }
  103. TextRenderData text = new TextRenderData("000000",recorderInfoMsg.toString());
  104. Style style = text.getStyle();
  105. style.setUnderlinePatterns(UnderlinePatterns.SINGLE);
  106. vo.setRecorderInfoText(text);
  107. //[{"unit":"四维","job":"植物一"}]
  108. String signatureInfo = "本人签名: 单位 %s 职务 %s\n";
  109. StringBuilder signatureInfoMsg = new StringBuilder();
  110. for (Object object : vo.getSignatureInfo()) {
  111. JSONObject obj = (JSONObject) object;
  112. String format = String.format(signatureInfo, obj.getString("unit"), obj.getString("job"));
  113. signatureInfoMsg.append(format);
  114. }
  115. TextRenderData text2 = new TextRenderData("000000",signatureInfoMsg.toString());
  116. Style style2 = text2.getStyle();
  117. style2.setUnderlinePatterns(UnderlinePatterns.SINGLE);
  118. vo.setSignatureInfoText(text2);
  119. //[{"birthday":"2024-10-15T16:00:00.000Z","address":"dfsdfdsdsdsdsds","sex":0}]
  120. //[{"sex":0,"birthday":"","address":""},{"sex":0,"birthday":"","address":""}]
  121. String witnessInfo = "本人签名: 性别 %s 出生日期 %s 住址 %s\n";
  122. StringBuilder witnessInfoMsg = new StringBuilder();
  123. for (Object object : vo.getWitnessInfo()) {
  124. JSONObject obj = (JSONObject) object;
  125. String birthday = DateUtil.format(obj.getDate("birthday"), DatePattern.CHINESE_DATE_FORMAT) == null?"":DateUtil.format(obj.getDate("birthday"), DatePattern.CHINESE_DATE_FORMAT);
  126. String format = String.format(witnessInfo, XwpTemplateUtils.getSexStr(obj.getInteger("sex")), birthday,obj.getString("address"));
  127. witnessInfoMsg.append(format);
  128. }
  129. TextRenderData text3 = new TextRenderData("000000",witnessInfoMsg.toString());
  130. Style style3 = text3.getStyle();
  131. style3.setUnderlinePatterns(UnderlinePatterns.SINGLE);
  132. vo.setWitnessInfoText(text3);
  133. ConfigureBuilder builder = Configure.builder();
  134. builder.useSpringEL(false);
  135. //builder.setValidErrorHandler(new Configure.DiscardHandler());
  136. XWPFTemplate compile = XWPFTemplate.compile(inputStream, builder.build());
  137. compile.render(vo);
  138. return compile;
  139. }
  140. }