InvalidDecisionFileService.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. package cn.cslg.pas.service.business;
  2. import cn.cslg.pas.common.dto.business.ReportAffairDTO;
  3. import cn.cslg.pas.common.dto.invalidDTO.AddInvalidDecisionFileDTO;
  4. import cn.cslg.pas.common.dto.invalidDTO.UpdateInvalidDecisionFileDTO;
  5. import cn.cslg.pas.common.model.report.ExtraEmailDTO;
  6. import cn.cslg.pas.common.model.report.MailMessageDTO;
  7. import cn.cslg.pas.common.vo.invalidVO.InvalidDecisionFileVO;
  8. import cn.cslg.pas.common.vo.invalidVO.OralTrailVO;
  9. import cn.cslg.pas.domain.business.*;
  10. import cn.cslg.pas.exception.XiaoShiException;
  11. import cn.cslg.pas.mapper.InvalidDecisionFileMapper;
  12. import cn.cslg.pas.mapper.ReportProjectMapper;
  13. import cn.cslg.pas.service.MailSendService;
  14. import cn.cslg.pas.service.report.SendReportMailService;
  15. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  16. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.apache.commons.lang3.ObjectUtils;
  19. import org.apache.commons.lang3.StringUtils;
  20. import org.springframework.beans.BeanUtils;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.stereotype.Service;
  23. import org.springframework.transaction.annotation.Propagation;
  24. import org.springframework.transaction.annotation.Transactional;
  25. import org.springframework.util.CollectionUtils;
  26. import java.util.ArrayList;
  27. import java.util.List;
  28. import java.util.stream.Collectors;
  29. /**
  30. * @Author xiexiang
  31. * @Date 2023/12/28
  32. */
  33. @Slf4j
  34. @Service
  35. public class InvalidDecisionFileService extends ServiceImpl<InvalidDecisionFileMapper, InvalidDecisionFile> {
  36. @Autowired
  37. private ReportAffairService reportAffairService;
  38. @Autowired
  39. private AssoReportAffairFileService assoReportAffairFileService;
  40. @Autowired
  41. private SendReportMailService sendReportMailService;
  42. @Autowired
  43. private AssoInvalidDecisionCronService assoInvalidDecisionCronService;
  44. @Autowired
  45. private ReportProjectMapper reportProjectMapper;
  46. @Autowired
  47. private AssoReportCronService assoReportCronService;
  48. @Autowired
  49. private InvalidRequestFileService invalidRequestFileService;
  50. public Integer add(AddInvalidDecisionFileDTO addInvalidDecisionFileDTO){
  51. if (addInvalidDecisionFileDTO == null) {
  52. throw new XiaoShiException("入参为空");
  53. }
  54. Integer projectId = addInvalidDecisionFileDTO.getProjectId();
  55. if (projectId == null) {
  56. throw new XiaoShiException("报告id为空");
  57. }
  58. if (ObjectUtils.isEmpty(addInvalidDecisionFileDTO.getAssoCasePhaseId())) {
  59. throw new XiaoShiException("案件流程阶段id为空");
  60. }
  61. //1. 首先上传报告事务,拿到报告事务id
  62. ReportAffairDTO reportAffairDTO = new ReportAffairDTO();
  63. reportAffairDTO.setProjectId(projectId);
  64. //发生时间是口审时间
  65. reportAffairDTO.setOccurredTime(addInvalidDecisionFileDTO.getInvalidDecisionTime());
  66. //备注
  67. reportAffairDTO.setDescription(addInvalidDecisionFileDTO.getDescription());
  68. reportAffairDTO.setAssoCasePhaseId(addInvalidDecisionFileDTO.getAssoCasePhaseId());
  69. Integer reportAffairId = reportAffairService.addReportAffair(reportAffairDTO);
  70. if (reportAffairId == null) {
  71. throw new XiaoShiException("上传报告事务失败");
  72. }
  73. //2. 上传无效决定书
  74. InvalidDecisionFile invalidDecisionFile = new InvalidDecisionFile();
  75. invalidDecisionFile.setFileNo(addInvalidDecisionFileDTO.getFileNo());
  76. invalidDecisionFile.setDecisionKey(addInvalidDecisionFileDTO.getDecisionKey());
  77. invalidDecisionFile.setConclusion(addInvalidDecisionFileDTO.getConclusion());
  78. invalidDecisionFile.setLegalBase(addInvalidDecisionFileDTO.getLegalBase());
  79. invalidDecisionFile.setInvalidStageReason(addInvalidDecisionFileDTO.getInvalidStageReason());
  80. invalidDecisionFile.setReportAffairId(reportAffairId);
  81. invalidDecisionFile.insert();
  82. //同步无效决定号
  83. this.updateReportIssueNum(projectId, addInvalidDecisionFileDTO.getFileNo());
  84. //同步报告官限
  85. invalidRequestFileService.getCommonMethod(projectId, addInvalidDecisionFileDTO.getAssoCasePhaseId());
  86. //3. 添加报告事务与文件关联
  87. List<String> fileGuids = addInvalidDecisionFileDTO.getFileGuids();
  88. if (fileGuids != null && !fileGuids.isEmpty()) {
  89. List<AssoReportAffairFile> assoReportAffairFiles = new ArrayList<>();
  90. fileGuids.forEach(item -> {
  91. AssoReportAffairFile assoReportAffairFile = new AssoReportAffairFile();
  92. assoReportAffairFile.setReportAffairId(reportAffairId);
  93. assoReportAffairFile.setFileGuid(item);
  94. assoReportAffairFiles.add(assoReportAffairFile);
  95. });
  96. assoReportAffairFileService.saveBatch(assoReportAffairFiles);
  97. }
  98. //4. 添加无效决定书与无效结果关联
  99. List<Integer> cronIds = addInvalidDecisionFileDTO.getCronIds();
  100. List<AssoInvalidDecisionCron> assoInvalidDecisionCrons = new ArrayList<>();
  101. if (!CollectionUtils.isEmpty(cronIds)) {
  102. cronIds.forEach(item -> {
  103. AssoInvalidDecisionCron assoInvalidDecisionCron = new AssoInvalidDecisionCron();
  104. assoInvalidDecisionCron.setInvalidDecisionId(invalidDecisionFile.getId());
  105. assoInvalidDecisionCron.setCronId(item);
  106. assoInvalidDecisionCrons.add(assoInvalidDecisionCron);
  107. });
  108. assoInvalidDecisionCronService.saveBatch(assoInvalidDecisionCrons);
  109. }
  110. //5.把无效结果同步到报告的核心结论
  111. if (!CollectionUtils.isEmpty(cronIds) && ObjectUtils.isNotEmpty(projectId)) {
  112. this.updateReportCron(cronIds, projectId);
  113. }
  114. if (addInvalidDecisionFileDTO.getIfSendEmail()) {
  115. sendReportMailService.finalSendEmail(projectId, fileGuids, addInvalidDecisionFileDTO.getExtraEmailDTOS());
  116. }
  117. return reportAffairId;
  118. }
  119. //同步修改报告中发文序号和无效决定书号码保持一致
  120. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
  121. public void updateReportIssueNum(Integer projectId, String num) {
  122. if (StringUtils.isNotEmpty(num)) {
  123. reportProjectMapper.updateReportField(projectId, "issue_number", num);
  124. } else {
  125. reportProjectMapper.updateReportField(projectId, "issue_number", null);
  126. }
  127. }
  128. //把无效结果同步到报告的核心结论
  129. public void updateReportCron(List<Integer> cronIds, Integer projectId) {
  130. LambdaQueryWrapper<AssoReportCron> reportCronWrapper = new LambdaQueryWrapper<>();
  131. reportCronWrapper.eq(AssoReportCron::getProjectId, projectId);
  132. assoReportCronService.remove(reportCronWrapper);
  133. List<AssoReportCron> assoReportCrons = new ArrayList<>();
  134. cronIds.forEach(item -> {
  135. AssoReportCron assoReportCron = new AssoReportCron();
  136. assoReportCron.setProjectId(projectId);
  137. assoReportCron.setCronId(item);
  138. assoReportCrons.add(assoReportCron);
  139. });
  140. assoReportCronService.saveBatch(assoReportCrons);
  141. }
  142. /**
  143. * 修改无效决定书
  144. * @param updateInvalidDecisionFileDTO
  145. * @return
  146. */
  147. public Integer update(UpdateInvalidDecisionFileDTO updateInvalidDecisionFileDTO){
  148. if (updateInvalidDecisionFileDTO == null) {
  149. throw new XiaoShiException("入参为空");
  150. }
  151. Integer projectId = updateInvalidDecisionFileDTO.getProjectId();
  152. Integer id = updateInvalidDecisionFileDTO.getInvalidDecisionFileId();
  153. if (id == null) {
  154. throw new XiaoShiException("id为空");
  155. }
  156. if (projectId == null) {
  157. throw new XiaoShiException("报告id为空");
  158. }
  159. if (ObjectUtils.isEmpty(updateInvalidDecisionFileDTO.getAssoCasePhaseId())) {
  160. throw new XiaoShiException("案件流程阶段id为空");
  161. }
  162. //1. 根据id查出无效决定书
  163. InvalidDecisionFile invalidDecisionFile = this.getById(id);
  164. if (invalidDecisionFile == null) {
  165. throw new XiaoShiException("invalidDecisionFile查询错误");
  166. }
  167. BeanUtils.copyProperties(updateInvalidDecisionFileDTO, invalidDecisionFile);
  168. invalidDecisionFile.updateById();
  169. //同步无效决定号
  170. this.updateReportIssueNum(projectId, updateInvalidDecisionFileDTO.getFileNo());
  171. Integer reportAffairId = invalidDecisionFile.getReportAffairId();
  172. //2. 拿到报告事务id,获取报告事务
  173. ReportAffair reportAffair = reportAffairService.getById(reportAffairId);
  174. reportAffair.setProjectId(projectId);
  175. //发生时间是无效请求日
  176. reportAffair.setOccurredTime(updateInvalidDecisionFileDTO.getInvalidDecisionTime());
  177. //备注
  178. reportAffair.setDescription(updateInvalidDecisionFileDTO.getDescription());
  179. reportAffair.setAssoCasePhaseId(updateInvalidDecisionFileDTO.getAssoCasePhaseId());
  180. reportAffair.updateById();
  181. //同步报告官限
  182. invalidRequestFileService.getCommonMethod(projectId, updateInvalidDecisionFileDTO.getAssoCasePhaseId());
  183. //3. 更新报告事务与文件关联
  184. LambdaQueryWrapper<AssoReportAffairFile> queryWrapper = new LambdaQueryWrapper<>();
  185. queryWrapper.eq(AssoReportAffairFile::getReportAffairId, reportAffairId);
  186. assoReportAffairFileService.remove(queryWrapper);
  187. List<String> fileGuids = updateInvalidDecisionFileDTO.getFileGuids();
  188. if (fileGuids != null && !fileGuids.isEmpty()) {
  189. List<AssoReportAffairFile> assoReportAffairFiles = new ArrayList<>();
  190. fileGuids.forEach(item -> {
  191. AssoReportAffairFile assoReportAffairFile = new AssoReportAffairFile();
  192. assoReportAffairFile.setReportAffairId(reportAffairId);
  193. assoReportAffairFile.setFileGuid(item);
  194. assoReportAffairFiles.add(assoReportAffairFile);
  195. });
  196. assoReportAffairFileService.saveBatch(assoReportAffairFiles);
  197. }
  198. //4.更新无效书与无效结果关联
  199. List<Integer> cronIds = updateInvalidDecisionFileDTO.getCronIds();
  200. LambdaQueryWrapper<AssoInvalidDecisionCron> wrapper = new LambdaQueryWrapper<>();
  201. wrapper.eq(AssoInvalidDecisionCron::getInvalidDecisionId, invalidDecisionFile.getId());
  202. assoInvalidDecisionCronService.remove(wrapper);
  203. List<AssoInvalidDecisionCron> decisionCrons = new ArrayList<>();
  204. if (!CollectionUtils.isEmpty(cronIds)) {
  205. cronIds.forEach(item -> {
  206. AssoInvalidDecisionCron decisionCron = new AssoInvalidDecisionCron();
  207. decisionCron.setInvalidDecisionId(invalidDecisionFile.getId());
  208. decisionCron.setCronId(item);
  209. decisionCrons.add(decisionCron);
  210. });
  211. assoInvalidDecisionCronService.saveBatch(decisionCrons);
  212. }
  213. //5.把无效结果同步到报告的核心结论
  214. if (!CollectionUtils.isEmpty(cronIds) && ObjectUtils.isNotEmpty(projectId)) {
  215. this.updateReportCron(cronIds, projectId);
  216. }
  217. if (updateInvalidDecisionFileDTO.getIfSendEmail()) {
  218. sendReportMailService.finalSendEmail(projectId, fileGuids, updateInvalidDecisionFileDTO.getExtraEmailDTOS());
  219. }
  220. return reportAffairId;
  221. }
  222. public InvalidDecisionFileVO getInvalidDecisionFile(Integer reportAffairId) {
  223. LambdaQueryWrapper<InvalidDecisionFile> queryWrapper = new LambdaQueryWrapper<>();
  224. queryWrapper.eq(InvalidDecisionFile::getReportAffairId, reportAffairId);
  225. InvalidDecisionFile invalidDecisionFile = this.getOne(queryWrapper, false);
  226. InvalidDecisionFileVO invalidDecisionFileVO = new InvalidDecisionFileVO();
  227. if (invalidDecisionFile != null) {
  228. BeanUtils.copyProperties(invalidDecisionFile, invalidDecisionFileVO);
  229. invalidDecisionFileVO.setInvalidDecisionFileId(invalidDecisionFile.getId());
  230. }
  231. ReportAffair reportAffair = reportAffairService.getById(reportAffairId);
  232. invalidDecisionFileVO.setInvalidDecisionTime(reportAffair.getOccurredTime());
  233. return invalidDecisionFileVO;
  234. }
  235. }