package cn.cslg.pas.service.business; import cn.cslg.pas.common.dto.business.ReportAffairDTO; import cn.cslg.pas.common.dto.invalidDTO.AddInvalidDecisionFileDTO; import cn.cslg.pas.common.dto.invalidDTO.UpdateInvalidDecisionFileDTO; import cn.cslg.pas.common.model.report.ExtraEmailDTO; import cn.cslg.pas.common.model.report.MailMessageDTO; import cn.cslg.pas.common.vo.invalidVO.InvalidDecisionFileVO; import cn.cslg.pas.common.vo.invalidVO.OralTrailVO; import cn.cslg.pas.domain.business.*; import cn.cslg.pas.exception.XiaoShiException; import cn.cslg.pas.mapper.InvalidDecisionFileMapper; import cn.cslg.pas.mapper.ReportProjectMapper; import cn.cslg.pas.service.MailSendService; import cn.cslg.pas.service.report.SendReportMailService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * @Author xiexiang * @Date 2023/12/28 */ @Slf4j @Service public class InvalidDecisionFileService extends ServiceImpl { @Autowired private ReportAffairService reportAffairService; @Autowired private AssoReportAffairFileService assoReportAffairFileService; @Autowired private SendReportMailService sendReportMailService; @Autowired private AssoInvalidDecisionCronService assoInvalidDecisionCronService; @Autowired private ReportProjectMapper reportProjectMapper; @Autowired private AssoReportCronService assoReportCronService; @Autowired private InvalidRequestFileService invalidRequestFileService; public Integer add(AddInvalidDecisionFileDTO addInvalidDecisionFileDTO){ if (addInvalidDecisionFileDTO == null) { throw new XiaoShiException("入参为空"); } Integer projectId = addInvalidDecisionFileDTO.getProjectId(); if (projectId == null) { throw new XiaoShiException("报告id为空"); } if (ObjectUtils.isEmpty(addInvalidDecisionFileDTO.getAssoCasePhaseId())) { throw new XiaoShiException("案件流程阶段id为空"); } //1. 首先上传报告事务,拿到报告事务id ReportAffairDTO reportAffairDTO = new ReportAffairDTO(); reportAffairDTO.setProjectId(projectId); //发生时间是口审时间 reportAffairDTO.setOccurredTime(addInvalidDecisionFileDTO.getInvalidDecisionTime()); //备注 reportAffairDTO.setDescription(addInvalidDecisionFileDTO.getDescription()); reportAffairDTO.setAssoCasePhaseId(addInvalidDecisionFileDTO.getAssoCasePhaseId()); Integer reportAffairId = reportAffairService.addReportAffair(reportAffairDTO); if (reportAffairId == null) { throw new XiaoShiException("上传报告事务失败"); } //2. 上传无效决定书 InvalidDecisionFile invalidDecisionFile = new InvalidDecisionFile(); invalidDecisionFile.setFileNo(addInvalidDecisionFileDTO.getFileNo()); invalidDecisionFile.setDecisionKey(addInvalidDecisionFileDTO.getDecisionKey()); invalidDecisionFile.setConclusion(addInvalidDecisionFileDTO.getConclusion()); invalidDecisionFile.setLegalBase(addInvalidDecisionFileDTO.getLegalBase()); invalidDecisionFile.setInvalidStageReason(addInvalidDecisionFileDTO.getInvalidStageReason()); invalidDecisionFile.setReportAffairId(reportAffairId); invalidDecisionFile.insert(); //同步无效决定号 this.updateReportIssueNum(projectId, addInvalidDecisionFileDTO.getFileNo()); //同步报告官限 invalidRequestFileService.getCommonMethod(projectId, addInvalidDecisionFileDTO.getAssoCasePhaseId()); //3. 添加报告事务与文件关联 List fileGuids = addInvalidDecisionFileDTO.getFileGuids(); if (fileGuids != null && !fileGuids.isEmpty()) { List assoReportAffairFiles = new ArrayList<>(); fileGuids.forEach(item -> { AssoReportAffairFile assoReportAffairFile = new AssoReportAffairFile(); assoReportAffairFile.setReportAffairId(reportAffairId); assoReportAffairFile.setFileGuid(item); assoReportAffairFiles.add(assoReportAffairFile); }); assoReportAffairFileService.saveBatch(assoReportAffairFiles); } //4. 添加无效决定书与无效结果关联 List cronIds = addInvalidDecisionFileDTO.getCronIds(); List assoInvalidDecisionCrons = new ArrayList<>(); if (!CollectionUtils.isEmpty(cronIds)) { cronIds.forEach(item -> { AssoInvalidDecisionCron assoInvalidDecisionCron = new AssoInvalidDecisionCron(); assoInvalidDecisionCron.setInvalidDecisionId(invalidDecisionFile.getId()); assoInvalidDecisionCron.setCronId(item); assoInvalidDecisionCrons.add(assoInvalidDecisionCron); }); assoInvalidDecisionCronService.saveBatch(assoInvalidDecisionCrons); } //5.把无效结果同步到报告的核心结论 if (!CollectionUtils.isEmpty(cronIds) && ObjectUtils.isNotEmpty(projectId)) { this.updateReportCron(cronIds, projectId); } if (addInvalidDecisionFileDTO.getIfSendEmail()) { sendReportMailService.finalSendEmail(projectId, fileGuids, addInvalidDecisionFileDTO.getExtraEmailDTOS()); } return reportAffairId; } //同步修改报告中发文序号和无效决定书号码保持一致 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class) public void updateReportIssueNum(Integer projectId, String num) { if (StringUtils.isNotEmpty(num)) { reportProjectMapper.updateReportField(projectId, "issue_number", num); } else { reportProjectMapper.updateReportField(projectId, "issue_number", null); } } //把无效结果同步到报告的核心结论 public void updateReportCron(List cronIds, Integer projectId) { LambdaQueryWrapper reportCronWrapper = new LambdaQueryWrapper<>(); reportCronWrapper.eq(AssoReportCron::getProjectId, projectId); assoReportCronService.remove(reportCronWrapper); List assoReportCrons = new ArrayList<>(); cronIds.forEach(item -> { AssoReportCron assoReportCron = new AssoReportCron(); assoReportCron.setProjectId(projectId); assoReportCron.setCronId(item); assoReportCrons.add(assoReportCron); }); assoReportCronService.saveBatch(assoReportCrons); } /** * 修改无效决定书 * @param updateInvalidDecisionFileDTO * @return */ public Integer update(UpdateInvalidDecisionFileDTO updateInvalidDecisionFileDTO){ if (updateInvalidDecisionFileDTO == null) { throw new XiaoShiException("入参为空"); } Integer projectId = updateInvalidDecisionFileDTO.getProjectId(); Integer id = updateInvalidDecisionFileDTO.getInvalidDecisionFileId(); if (id == null) { throw new XiaoShiException("id为空"); } if (projectId == null) { throw new XiaoShiException("报告id为空"); } if (ObjectUtils.isEmpty(updateInvalidDecisionFileDTO.getAssoCasePhaseId())) { throw new XiaoShiException("案件流程阶段id为空"); } //1. 根据id查出无效决定书 InvalidDecisionFile invalidDecisionFile = this.getById(id); if (invalidDecisionFile == null) { throw new XiaoShiException("invalidDecisionFile查询错误"); } BeanUtils.copyProperties(updateInvalidDecisionFileDTO, invalidDecisionFile); invalidDecisionFile.updateById(); //同步无效决定号 this.updateReportIssueNum(projectId, updateInvalidDecisionFileDTO.getFileNo()); Integer reportAffairId = invalidDecisionFile.getReportAffairId(); //2. 拿到报告事务id,获取报告事务 ReportAffair reportAffair = reportAffairService.getById(reportAffairId); reportAffair.setProjectId(projectId); //发生时间是无效请求日 reportAffair.setOccurredTime(updateInvalidDecisionFileDTO.getInvalidDecisionTime()); //备注 reportAffair.setDescription(updateInvalidDecisionFileDTO.getDescription()); reportAffair.setAssoCasePhaseId(updateInvalidDecisionFileDTO.getAssoCasePhaseId()); reportAffair.updateById(); //同步报告官限 invalidRequestFileService.getCommonMethod(projectId, updateInvalidDecisionFileDTO.getAssoCasePhaseId()); //3. 更新报告事务与文件关联 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(AssoReportAffairFile::getReportAffairId, reportAffairId); assoReportAffairFileService.remove(queryWrapper); List fileGuids = updateInvalidDecisionFileDTO.getFileGuids(); if (fileGuids != null && !fileGuids.isEmpty()) { List assoReportAffairFiles = new ArrayList<>(); fileGuids.forEach(item -> { AssoReportAffairFile assoReportAffairFile = new AssoReportAffairFile(); assoReportAffairFile.setReportAffairId(reportAffairId); assoReportAffairFile.setFileGuid(item); assoReportAffairFiles.add(assoReportAffairFile); }); assoReportAffairFileService.saveBatch(assoReportAffairFiles); } //4.更新无效书与无效结果关联 List cronIds = updateInvalidDecisionFileDTO.getCronIds(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(AssoInvalidDecisionCron::getInvalidDecisionId, invalidDecisionFile.getId()); assoInvalidDecisionCronService.remove(wrapper); List decisionCrons = new ArrayList<>(); if (!CollectionUtils.isEmpty(cronIds)) { cronIds.forEach(item -> { AssoInvalidDecisionCron decisionCron = new AssoInvalidDecisionCron(); decisionCron.setInvalidDecisionId(invalidDecisionFile.getId()); decisionCron.setCronId(item); decisionCrons.add(decisionCron); }); assoInvalidDecisionCronService.saveBatch(decisionCrons); } //5.把无效结果同步到报告的核心结论 if (!CollectionUtils.isEmpty(cronIds) && ObjectUtils.isNotEmpty(projectId)) { this.updateReportCron(cronIds, projectId); } if (updateInvalidDecisionFileDTO.getIfSendEmail()) { sendReportMailService.finalSendEmail(projectId, fileGuids, updateInvalidDecisionFileDTO.getExtraEmailDTOS()); } return reportAffairId; } public InvalidDecisionFileVO getInvalidDecisionFile(Integer reportAffairId) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(InvalidDecisionFile::getReportAffairId, reportAffairId); InvalidDecisionFile invalidDecisionFile = this.getOne(queryWrapper, false); InvalidDecisionFileVO invalidDecisionFileVO = new InvalidDecisionFileVO(); if (invalidDecisionFile != null) { BeanUtils.copyProperties(invalidDecisionFile, invalidDecisionFileVO); invalidDecisionFileVO.setInvalidDecisionFileId(invalidDecisionFile.getId()); } ReportAffair reportAffair = reportAffairService.getById(reportAffairId); invalidDecisionFileVO.setInvalidDecisionTime(reportAffair.getOccurredTime()); return invalidDecisionFileVO; } }