|
|
@@ -41,6 +41,7 @@ import cn.start.tz.module.pressure2.dal.dataobject.opinionnotificationfollowreco
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorder.PipeTaskOrderDO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderitem.PipeTaskOrderItemDO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderitemreport.PipeTaskOrderItemReportDO;
|
|
|
+import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderitemreportuser.PipeTaskOrderItemReportUserDO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderuser.PipeTaskOrderUserDO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.taskordernontaxrecord.TaskOrderNonTaxRecordDO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.taskordernontaxrecorditem.TaskOrderNonTaxRecordItemDO;
|
|
|
@@ -858,7 +859,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
if (!checkDOList.isEmpty()){
|
|
|
|
|
|
String projectCode = getProjectCodeByTaskOrderId(taskOrderDO.getId());
|
|
|
- String reportNo = generateOrderItemSubReportNo(taskOrderDO.getDeptId(),taskOrderDO.getCheckDate(),projectCode);
|
|
|
+ final String[] reportNo = {generateOrderItemSubReportNo(taskOrderDO.getDeptId(), taskOrderDO.getCheckDate(), projectCode)};
|
|
|
|
|
|
checkDOList.forEach(item -> {
|
|
|
//生成检验项目
|
|
|
@@ -883,7 +884,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
addReport1.setFeeCalculateJson(item.getFeeCalculateJson());
|
|
|
addReport1.setOrderId(taskOrderDO.getId());
|
|
|
addReport1.setTaskStatus(500);
|
|
|
- addReport1.setReportNo(reportNo);
|
|
|
+ addReport1.setReportNo(reportNo[0]);
|
|
|
//addReport1.setSort(index.getAndSet(index.get() + 1));
|
|
|
addReport1.setReportType(dynamicTbDO.getTbType());
|
|
|
if ("MAIN".equals(recordReportDO.getProjectType())) {
|
|
|
@@ -892,6 +893,26 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
addReport1.setReportType(200);
|
|
|
} else if ("STANDALONE".equals(recordReportDO.getProjectType())) {
|
|
|
addReport1.setReportType(300);
|
|
|
+
|
|
|
+ // 独审报告自动带出操作指导书
|
|
|
+ BoilerTaskOrderItemReportDO addInstructionReport = new BoilerTaskOrderItemReportDO();
|
|
|
+ addInstructionReport.setTemplateId(recordReportDO.getOperationInstruction());
|
|
|
+ addInstructionReport.setOrderId(taskOrderDO.getId());
|
|
|
+ addInstructionReport.setOrderItemId(id);
|
|
|
+ addInstructionReport.setTaskStatus(TaskOrderStatusEnum.ENTER.getStatus());
|
|
|
+ addInstructionReport.setFeeType(item.getType());
|
|
|
+ addInstructionReport.setProjectId(recordReportDO.getId());
|
|
|
+ addInstructionReport.setFee(item.getFee());
|
|
|
+ DynamicTbDO dynamicTbDO1 = dynamicTbMapper.selectById(recordReportDO.getOperationInstruction());
|
|
|
+ addInstructionReport.setReportName(dynamicTbDO1.getTbName());
|
|
|
+ addInstructionReport.setReportType(700);
|
|
|
+
|
|
|
+
|
|
|
+ BoilerTaskOrderItemReportDO mainReport = taskOrderItemReportMapper.selectOne(new LambdaQueryWrapperX<BoilerTaskOrderItemReportDO>().
|
|
|
+ eq(BoilerTaskOrderItemReportDO::getOrderId, taskOrderDO.getId()), false);
|
|
|
+ addInstructionReport.setReportNo(reportNo[0]);
|
|
|
+ insertList.add(addInstructionReport);
|
|
|
+
|
|
|
}
|
|
|
addReport1.setReportUrl(id);
|
|
|
//使用配置的项目名称
|
|
|
@@ -914,7 +935,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
addReport1.setFeeCalculateJson(item.getFeeCalculateJson());
|
|
|
addReport1.setOrderId(taskOrderDO.getId());
|
|
|
addReport1.setTaskStatus(520);
|
|
|
- addReport1.setReportNo(reportNo);
|
|
|
+ addReport1.setReportNo(reportNo[0]);
|
|
|
//addReport1.setSort(index.getAndSet(index.get() + 1));
|
|
|
addReport1.setReportType(dynamicTbDO.getTbType());
|
|
|
if ("MAIN".equals(recordReportDO.getProjectType())) {
|
|
|
@@ -923,6 +944,30 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
addReport1.setReportType(200);
|
|
|
} else if ("STANDALONE".equals(recordReportDO.getProjectType())) {
|
|
|
addReport1.setReportType(300);
|
|
|
+
|
|
|
+ // 独审报告自动带出操作指导书
|
|
|
+ BoilerTaskOrderItemReportDO addInstructionReport = new BoilerTaskOrderItemReportDO();
|
|
|
+ addInstructionReport.setTemplateId(recordReportDO.getOperationInstruction());
|
|
|
+ addInstructionReport.setOrderId(taskOrderDO.getId());
|
|
|
+ addInstructionReport.setOrderItemId(id);
|
|
|
+ addInstructionReport.setTaskStatus(TaskOrderStatusEnum.ENTER.getStatus());
|
|
|
+ addInstructionReport.setFeeType(item.getType());
|
|
|
+ addInstructionReport.setProjectId(recordReportDO.getId());
|
|
|
+ addInstructionReport.setFee(item.getFee());
|
|
|
+ DynamicTbDO dynamicTbDO1 = dynamicTbMapper.selectById(recordReportDO.getOperationInstruction());
|
|
|
+ addInstructionReport.setReportName(dynamicTbDO1.getTbName());
|
|
|
+ addInstructionReport.setReportType(700);
|
|
|
+
|
|
|
+
|
|
|
+ BoilerTaskOrderItemReportDO mainReport = taskOrderItemReportMapper.selectOne(new LambdaQueryWrapperX<BoilerTaskOrderItemReportDO>().
|
|
|
+ eq(BoilerTaskOrderItemReportDO::getOrderId, taskOrderDO.getId()), false);
|
|
|
+ if (mainReport != null) {
|
|
|
+ reportNo[0] = mainReport.getReportNo();
|
|
|
+ }
|
|
|
+
|
|
|
+ addInstructionReport.setReportNo(reportNo[0]);
|
|
|
+ insertList.add(addInstructionReport);
|
|
|
+
|
|
|
}
|
|
|
addReport1.setReportUrl(id);
|
|
|
//使用配置的项目名称
|
|
|
@@ -2464,6 +2509,63 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
addReport.setReportType(200);
|
|
|
}else if ("STANDALONE".equals(connectDO.getProjectType())){
|
|
|
addReport.setReportType(300);
|
|
|
+
|
|
|
+ // 独审报告自动带出操作指导书
|
|
|
+ BoilerTaskOrderItemReportDO addInstructionReport = new BoilerTaskOrderItemReportDO();
|
|
|
+ addInstructionReport.setTemplateId(connectDO.getOperationInstruction());
|
|
|
+ addInstructionReport.setOrderId(orderItemDOS.get(0).getOrderId());
|
|
|
+ addInstructionReport.setOrderItemId(vo.getOrderItemId());
|
|
|
+ addInstructionReport.setTaskStatus(TaskOrderStatusEnum.ENTER.getStatus());
|
|
|
+ addInstructionReport.setSort(count + 1);
|
|
|
+ addInstructionReport.setFeeType(vo.getType());
|
|
|
+
|
|
|
+ addInstructionReport.setProjectId(connectDO.getId());
|
|
|
+ if (vo.getFee() == null || vo.getFee().compareTo(BigDecimal.ZERO) == 0) {
|
|
|
+ addInstructionReport.setFee(ConversionUtil.convert(connectDO.getFee()));
|
|
|
+ } else {
|
|
|
+ addInstructionReport.setFee(vo.getFee());
|
|
|
+ }
|
|
|
+ DynamicTbDO dynamicTbDO = dynamicTbMapper.selectById(connectDO.getOperationInstruction());
|
|
|
+ addInstructionReport.setReportName(dynamicTbDO.getTbName());
|
|
|
+ addInstructionReport.setReportType(700);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ String reportNo = "";
|
|
|
+ BoilerTaskOrderItemReportDO mainReport = taskOrderItemReportMapper.selectOne(new LambdaQueryWrapperX<BoilerTaskOrderItemReportDO>().
|
|
|
+ eq(BoilerTaskOrderItemReportDO::getOrderId, orderItemDOS.get(0).getOrderId()), false);
|
|
|
+ if (mainReport != null) {
|
|
|
+ reportNo = mainReport.getReportNo();
|
|
|
+ }
|
|
|
+
|
|
|
+ addInstructionReport.setReportNo(reportNo);
|
|
|
+
|
|
|
+ // 新增报告
|
|
|
+ taskOrderItemReportMapper.insert(addInstructionReport);
|
|
|
+ //生成 报表数据
|
|
|
+ BoilerTaskOrderSyncReportVO syncReportVO = new BoilerTaskOrderSyncReportVO();
|
|
|
+ syncReportVO.setRefId(addInstructionReport.getId());
|
|
|
+ syncReportVO.setReportType("record");
|
|
|
+ BoilerTaskOrderDO taskOrderDO = boilerTaskOrderMapper.selectById(orderItemDOS.get(0).getOrderId());
|
|
|
+ com.alibaba.fastjson2.JSONObject params = new com.alibaba.fastjson2.JSONObject();
|
|
|
+ params.put("checkUserId", orderItemEnterVO.getCheckId());
|
|
|
+ syncReportVO.setParams(params);
|
|
|
+ syncReportData(syncReportVO);
|
|
|
+ addReport.setInstructionId(addInstructionReport.getId());
|
|
|
+
|
|
|
+ if (taskOrderDO != null){
|
|
|
+ BoilerTaskOrderItemReportUserDO taskOrderItemReportUserDO = new BoilerTaskOrderItemReportUserDO();
|
|
|
+ taskOrderItemReportUserDO.setReportId(addInstructionReport.getId());
|
|
|
+
|
|
|
+ taskOrderItemReportUserDO.setType(orderItemEnterVO.getType());
|
|
|
+ taskOrderItemReportUserDO.setUserId(orderItemEnterVO.getCheckId());
|
|
|
+ taskOrderItemReportUserDO.setGroupTeamId(orderItemEnterVO.getGroupTeamId());
|
|
|
+
|
|
|
+ if (StringUtils.isBlank(orderItemEnterVO.getCheckId())) {
|
|
|
+ taskOrderItemReportUserDO.setUserId(taskOrderDO.getManagerId());
|
|
|
+ }
|
|
|
+ taskOrderItemReportUserMapper.insert(taskOrderItemReportUserDO);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
if (Integer.valueOf(400).equals(reportTemplateDO.getTbType())) {
|
|
|
@@ -4161,9 +4263,9 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
// 记录模板
|
|
|
DynamicTbInsDO dynamicTbInsDO = dynamicTbInsService.getDynamicRefId(id);
|
|
|
// byte[] pdf1 = pdfService.pdf(dynamicTbInsDO.getTbId(), dynamicTbInsDO.getId());
|
|
|
- byte[] pdf1 = getRecordOutputStreamMerge2(taskOrderItemReportDO.getOrderItemId());
|
|
|
+ byte[] pdf1 = getRecordOutputStreamMerge(taskOrderItemReportDO.getOrderItemId());
|
|
|
// 报告
|
|
|
- byte[] pdf2 = getRecordOutputStreamMerge(taskOrderItemReportDO.getOrderItemId());
|
|
|
+ byte[] pdf2 = getReportOutputStreamMerge(taskOrderItemReportDO.getOrderItemId());
|
|
|
ExternalOAUploadAttachmentRes externalOAUploadAttachmentRes1 = externalOAService.externalOAUploadAttachment(new ByteArrayInputStream(pdf1), "检验记录_" + boilerTaskOrderDO.getOrderNo() + ".pdf");
|
|
|
ExternalOAUploadAttachmentRes externalOAUploadAttachmentRes2 = externalOAService.externalOAUploadAttachment(new ByteArrayInputStream(pdf2), "检验报告_" + boilerTaskOrderDO.getOrderNo() + ".pdf");
|
|
|
List<ExternalOAUploadAttachmentRes.Attachment> atts1 = externalOAUploadAttachmentRes1.getAtts();
|
|
|
@@ -5821,7 +5923,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
private PdfService pdfService;
|
|
|
|
|
|
@Override
|
|
|
- public byte[] getRecordOutputStreamMerge(String orderItemId) {
|
|
|
+ public byte[] getReportOutputStreamMerge(String orderItemId) {
|
|
|
|
|
|
// List<BoilerTaskOrderItemReportDO> taskOrderReportDOS = taskOrderItemReportMapper.selectList(new LambdaQueryWrapperX<BoilerTaskOrderItemReportDO>().
|
|
|
// eq(BoilerTaskOrderItemReportDO::getOrderItemId, orderItemId).
|
|
|
@@ -5853,34 +5955,31 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
try {
|
|
|
ByteArrayOutputStream mergeOutputStream = new ByteArrayOutputStream();
|
|
|
PDFMergerUtility mergerUtility = new PDFMergerUtility();
|
|
|
-
|
|
|
- // 使用普通stream替代parallelStream,避免并行处理导致内存溢出
|
|
|
- for (BoilerTaskOrderItemReportDO taskOrderReportDO : taskOrderReportDOS) {
|
|
|
+
|
|
|
+ taskOrderReportDOS.parallelStream().forEachOrdered(taskOrderReportDO -> {
|
|
|
try {
|
|
|
- //存在结论报告则放在最前面
|
|
|
- if (StringUtil.isNotEmpty(taskOrderReportDO.getResultTemplateId())){
|
|
|
- DynamicTbInsDO insResultDO = dynamicTbInsService.getDynamicRefId("result_" + taskOrderReportDO.getId());
|
|
|
- if (insResultDO != null) {
|
|
|
- byte[] pdf = pdfService.pdf(taskOrderReportDO.getResultTemplateId(), insResultDO.getId());
|
|
|
+ // 报告模板
|
|
|
+ if (taskOrderReportDO.getIssueUrl() == null){
|
|
|
+ DynamicTbInsDO insDO = dynamicTbInsService.getDynamicRefId("report_" + taskOrderReportDO.getId());
|
|
|
+ if (insDO != null) {
|
|
|
+ byte[] pdf = pdfService.pdf(taskOrderReportDO.getReportTemplateId(), insDO.getId());
|
|
|
+ CompletableFuture.runAsync(() -> {
|
|
|
+ BoilerTaskOrderItemReportDO boilerTaskOrderItemReportDO = boilerTaskOrderItemReportService.getById(taskOrderReportDO.getId());
|
|
|
+ String file = fileApi.createFile(pdf);
|
|
|
+ boilerTaskOrderItemReportDO.setIssueUrl(file);
|
|
|
+ boilerTaskOrderItemReportService.updateById(boilerTaskOrderItemReportDO);
|
|
|
+ });
|
|
|
mergerUtility.addSource(new ByteArrayInputStream(pdf));
|
|
|
- // 及时释放PDF字节数组引用
|
|
|
- pdf = null;
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- // 报告模板
|
|
|
- DynamicTbInsDO insDO = dynamicTbInsService.getDynamicRefId("report_" + taskOrderReportDO.getId());
|
|
|
- if (insDO != null) {
|
|
|
- byte[] pdf = pdfService.pdf(taskOrderReportDO.getReportTemplateId(), insDO.getId());
|
|
|
- mergerUtility.addSource(new ByteArrayInputStream(pdf));
|
|
|
- // 及时释放PDF字节数组引用
|
|
|
- pdf = null;
|
|
|
+ }else {
|
|
|
+ byte[] bytes = fileApi.getFileByPath(taskOrderReportDO.getIssueUrl()).getCheckedData();
|
|
|
+ mergerUtility.addSource(new ByteArrayInputStream(bytes));
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
log.error("处理报告ID: {} 时发生错误", taskOrderReportDO.getId(), e);
|
|
|
throw new RuntimeException(e);
|
|
|
}
|
|
|
- }
|
|
|
+ });
|
|
|
|
|
|
// pdf 文件流合并
|
|
|
mergerUtility.setDestinationStream(mergeOutputStream);
|
|
|
@@ -5924,7 +6023,7 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
* 记录合并
|
|
|
* @return
|
|
|
*/
|
|
|
- public byte[] getRecordOutputStreamMerge2(String orderItemId) {
|
|
|
+ public byte[] getRecordOutputStreamMerge(String orderItemId) {
|
|
|
|
|
|
// List<BoilerTaskOrderItemReportDO> taskOrderReportDOS = taskOrderItemReportMapper.selectList(new LambdaQueryWrapperX<BoilerTaskOrderItemReportDO>().
|
|
|
// eq(BoilerTaskOrderItemReportDO::getOrderItemId, orderItemId).
|
|
|
@@ -5941,23 +6040,37 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
try {
|
|
|
ByteArrayOutputStream mergeOutputStream = new ByteArrayOutputStream();
|
|
|
PDFMergerUtility mergerUtility = new PDFMergerUtility();
|
|
|
-
|
|
|
+
|
|
|
// 使用普通循环替代parallelStream,避免并行处理导致内存溢出
|
|
|
- for (BoilerTaskOrderItemReportDO taskOrderReportDO : taskOrderReportDOS) {
|
|
|
+ taskOrderReportDOS.parallelStream().forEachOrdered(taskOrderReportDO -> {
|
|
|
try {
|
|
|
- // 报告模板
|
|
|
- DynamicTbInsDO insDO = dynamicTbInsService.getDynamicRefId(taskOrderReportDO.getId());
|
|
|
- if (insDO != null) {
|
|
|
- byte[] pdf = pdfService.pdf(taskOrderReportDO.getTemplateId(), insDO.getId());
|
|
|
- mergerUtility.addSource(new ByteArrayInputStream(pdf));
|
|
|
- // 及时释放PDF字节数组引用
|
|
|
- pdf = null;
|
|
|
+ if (taskOrderReportDO.getEnterPdfUrl() == null) {
|
|
|
+ // 报告模板
|
|
|
+ DynamicTbInsDO insDO = dynamicTbInsService.getDynamicRefId(taskOrderReportDO.getId());
|
|
|
+ if (insDO != null) {
|
|
|
+ byte[] pdf = pdfService.pdf(taskOrderReportDO.getTemplateId(), insDO.getId());
|
|
|
+ byte[] finalPdf = pdf;
|
|
|
+ CompletableFuture.runAsync(() -> {
|
|
|
+ BoilerTaskOrderItemReportDO boilerTaskOrderItemReportDO = boilerTaskOrderItemReportService.getById(taskOrderReportDO.getId());
|
|
|
+ String file = fileApi.createFile(finalPdf);
|
|
|
+ boilerTaskOrderItemReportDO.setEnterPdfUrl(file);
|
|
|
+ boilerTaskOrderItemReportService.updateById(boilerTaskOrderItemReportDO);
|
|
|
+ });
|
|
|
+ mergerUtility.addSource(new ByteArrayInputStream(pdf));
|
|
|
+ // 及时释放PDF字节数组引用
|
|
|
+ pdf = null;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ byte[] bytes = fileApi.getFileByPath(taskOrderReportDO.getEnterPdfUrl()).getCheckedData();
|
|
|
+ mergerUtility.addSource(new ByteArrayInputStream(bytes));
|
|
|
+ // 及时释放PDF字节数组引用
|
|
|
+ bytes = null;
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
log.error("处理报告ID: {} 时发生错误", taskOrderReportDO.getId(), e);
|
|
|
throw new RuntimeException(e);
|
|
|
}
|
|
|
- }
|
|
|
+ });
|
|
|
|
|
|
// pdf 文件流合并
|
|
|
mergerUtility.setDestinationStream(mergeOutputStream);
|