CaseInquestCriminalServiceImpl.java 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. package com.fdkankan.fusion.service.impl;
  2. import cn.hutool.core.date.DatePattern;
  3. import cn.hutool.core.date.DateUtil;
  4. import cn.hutool.core.io.FileUtil;
  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.beans.factory.annotation.Value;
  34. import org.springframework.stereotype.Service;
  35. import java.io.File;
  36. import java.io.InputStream;
  37. import java.util.Date;
  38. import java.util.List;
  39. /**
  40. * <p>
  41. * 服务实现类
  42. * </p>
  43. *
  44. * @author
  45. * @since 2024-10-18
  46. */
  47. @Service
  48. @Slf4j
  49. public class CaseInquestCriminalServiceImpl extends ServiceImpl<ICaseInquestCriminalMapper, CaseInquestCriminal> implements ICaseInquestCriminalService {
  50. @Autowired
  51. ITmUserService tmUserService;
  52. @Autowired
  53. ICaseService caseService;
  54. @Autowired
  55. ITmDepartmentService tmDepartmentService;
  56. @Autowired
  57. ICaseNumService caseNumService;
  58. @Autowired
  59. IScenePlusService scenePlusService;
  60. @Autowired
  61. ICaseFilesService caseFilesService;
  62. @Override
  63. public CaseInquestCriminal getByInquestFileId(Integer caseId) {
  64. LambdaQueryWrapper<CaseInquestCriminal> wrapper = new LambdaQueryWrapper<>();
  65. wrapper.eq(CaseInquestCriminal::getInquestFileId,caseId);
  66. CaseInquestCriminal caseInquestCriminal = this.getOne(wrapper);
  67. return caseInquestCriminal;
  68. }
  69. @Value("${upload.query-path}")
  70. private String queryPath;
  71. @Value("${spring.profiles.active}")
  72. private String environment;
  73. @Override
  74. public CaseInquestCriminal saveByParam(CaseInquestCriminal caseInquestCriminal) {
  75. if(caseInquestCriminal.getInquestFileId() == null){
  76. CaseFiles caseFiles = caseFilesService.addByInquest(caseInquestCriminal);
  77. caseInquestCriminal.setInquestFileId(caseFiles.getFilesId());
  78. }else {
  79. CaseInquestCriminal byInquestFileId = getByInquestFileId(caseInquestCriminal.getInquestFileId());
  80. if(byInquestFileId == null){
  81. throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS);
  82. }
  83. caseInquestCriminal.setId(byInquestFileId.getId());
  84. }
  85. this.saveOrUpdate(caseInquestCriminal);
  86. //生产doc文档
  87. try {
  88. Integer inquestFileId = caseInquestCriminal.getInquestFileId();
  89. CaseFiles caseFiles = caseFilesService.getById(inquestFileId);
  90. XWPFTemplate template = this.getWordByTemplate(caseInquestCriminal);
  91. String localPath = String.format(FilePath.MNTPATH+FilePath.DOC_OSS_PATH,environment,caseFiles.getFilesId()+".docx");
  92. if(!new File(localPath).getParentFile().exists()){
  93. new File(localPath).getParentFile().mkdirs();
  94. }
  95. template.writeToFile(localPath );
  96. template.close();
  97. ShellUtil.yunUpload(localPath,localPath.replace(FilePath.MNTPATH,""));
  98. FileUtil.del(localPath);
  99. caseFiles.setFilesUrl( queryPath +localPath.replace(FilePath.MNTPATH,""));
  100. caseFilesService.updateById(caseFiles);
  101. }catch (Exception e){
  102. log.info("caseInquestCriminal-保存生成doc文档出错:error",e);
  103. }
  104. return caseInquestCriminal;
  105. }
  106. @Override
  107. public XWPFTemplate getWordByTemplate(CaseInquestCriminal caseInquest) {
  108. InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("template/inquest_criminal-template.docx");
  109. // 渲染模板
  110. CaseInquestCriminalVo vo = new CaseInquestCriminalVo();
  111. BeanUtils.copyProperties(caseInquest,vo);
  112. //[{"unit":"四维","name":"张三","typeLabel":"笔录人","type":0,"job":"植物一"}]
  113. String recorderInfo = "%s:姓名 %s 单位 %s 职务 %s\n";
  114. StringBuilder recorderInfoMsg = new StringBuilder();
  115. for (Object object : vo.getRecorderInfo()) {
  116. JSONObject obj = JSONObject.parseObject(JSONObject.toJSONString(object));
  117. String format = String.format(recorderInfo,obj.getString("typeLabel"), obj.getString("name"), obj.getString("unit"), obj.getString("job"));
  118. recorderInfoMsg.append(format);
  119. }
  120. TextRenderData text = new TextRenderData("000000",recorderInfoMsg.toString());
  121. Style style = text.getStyle();
  122. style.setUnderlinePatterns(UnderlinePatterns.SINGLE);
  123. vo.setRecorderInfoText(text);
  124. //[{"unit":"四维","job":"植物一"}]
  125. String signatureInfo = "本人签名: 单位 %s 职务 %s\n";
  126. StringBuilder signatureInfoMsg = new StringBuilder();
  127. for (Object object : vo.getSignatureInfo()) {
  128. JSONObject obj = JSONObject.parseObject(JSONObject.toJSONString(object));
  129. String format = String.format(signatureInfo, obj.getString("unit"), obj.getString("job"));
  130. signatureInfoMsg.append(format);
  131. }
  132. TextRenderData text2 = new TextRenderData("000000",signatureInfoMsg.toString());
  133. Style style2 = text2.getStyle();
  134. style2.setUnderlinePatterns(UnderlinePatterns.SINGLE);
  135. vo.setSignatureInfoText(text2);
  136. //[{"birthday":"2024-10-15T16:00:00.000Z","address":"dfsdfdsdsdsdsds","sex":0}]
  137. //[{"sex":0,"birthday":"","address":""},{"sex":0,"birthday":"","address":""}]
  138. String witnessInfo = "本人签名: 性别 %s 出生日期 %s 住址 %s\n";
  139. StringBuilder witnessInfoMsg = new StringBuilder();
  140. for (Object object : vo.getWitnessInfo()) {
  141. JSONObject obj = JSONObject.parseObject(JSONObject.toJSONString(object));
  142. String birthday = DateUtil.format(obj.getDate("birthday"), DatePattern.CHINESE_DATE_FORMAT) == null?"":DateUtil.format(obj.getDate("birthday"), DatePattern.CHINESE_DATE_FORMAT);
  143. String format = String.format(witnessInfo, XwpTemplateUtils.getSexStr(obj.getInteger("sex")), birthday,obj.getString("address"));
  144. witnessInfoMsg.append(format);
  145. }
  146. TextRenderData text3 = new TextRenderData("000000",witnessInfoMsg.toString());
  147. Style style3 = text3.getStyle();
  148. style3.setUnderlinePatterns(UnderlinePatterns.SINGLE);
  149. vo.setWitnessInfoText(text3);
  150. ConfigureBuilder builder = Configure.builder();
  151. builder.useSpringEL(false);
  152. //builder.setValidErrorHandler(new Configure.DiscardHandler());
  153. XWPFTemplate compile = XWPFTemplate.compile(inputStream, builder.build());
  154. compile.render(vo);
  155. return compile;
  156. }
  157. }