|
|
@@ -821,6 +821,14 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
addReport1.setReportUrl(itemDO.getId());
|
|
|
//addReport1.setSort(index.getAndSet(index.get() + 1));
|
|
|
addReport1.setReportType(dynamicTbDO.getTbType());
|
|
|
+ addReport1.setProjectId(recordReportDO.getId());
|
|
|
+ if ("MAIN".equals(recordReportDO.getProjectType())) {
|
|
|
+ addReport1.setReportType(100);
|
|
|
+ } else if ("SUB".equals(recordReportDO.getProjectType())) {
|
|
|
+ addReport1.setReportType(200);
|
|
|
+ } else if ("STANDALONE".equals(recordReportDO.getProjectType())) {
|
|
|
+ addReport1.setReportType(300);
|
|
|
+ }
|
|
|
|
|
|
//使用配置的项目名称
|
|
|
//addReport1.setReportName(dynamicTbDO.getTbName());
|
|
|
@@ -848,6 +856,14 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
addReport1.setReportNo(reportNo);
|
|
|
//addReport1.setSort(index.getAndSet(index.get() + 1));
|
|
|
addReport1.setReportType(dynamicTbDO.getTbType());
|
|
|
+ addReport1.setProjectId(recordReportDO.getId());
|
|
|
+ if ("MAIN".equals(recordReportDO.getProjectType())) {
|
|
|
+ addReport1.setReportType(100);
|
|
|
+ } else if ("SUB".equals(recordReportDO.getProjectType())) {
|
|
|
+ addReport1.setReportType(200);
|
|
|
+ } else if ("STANDALONE".equals(recordReportDO.getProjectType())) {
|
|
|
+ addReport1.setReportType(300);
|
|
|
+ }
|
|
|
|
|
|
//使用配置的项目名称
|
|
|
//addReport1.setReportName(dynamicTbDO.getTbName());
|
|
|
@@ -858,6 +874,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
}else if (recordReportDO.getReportTemplateId() != null){
|
|
|
DynamicTbDO dynamicTbDO = dynamicTbMapper.selectById(recordReportDO.getReportTemplateId());
|
|
|
PipeTaskOrderItemReportDO addReport1 = new PipeTaskOrderItemReportDO();
|
|
|
+ addReport1.setProjectId(recordReportDO.getId());
|
|
|
// addReport1.setTemplateId(dynamicTbDO.getId());
|
|
|
addReport1.setReportTemplateId(dynamicTbDO.getId());
|
|
|
addReport1.setFee(item.getFee());
|
|
|
@@ -867,9 +884,16 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
addReport1.setTaskStatus(520);
|
|
|
addReport1.setReportNo(reportNo);
|
|
|
//addReport1.setSort(index.getAndSet(index.get() + 1));
|
|
|
- String isMainProject = recordReportDO.getIsMainProject();
|
|
|
- addReport1.setReportType("1".equals(isMainProject) ? 100 : 200);
|
|
|
-
|
|
|
+ // projectType为MAIN的为主报告
|
|
|
+ String projectType = recordReportDO.getProjectType();
|
|
|
+// addReport1.setReportType("MAIN".equals(projectType) ? 100 : 200);
|
|
|
+ if ("MAIN".equals(recordReportDO.getProjectType())) {
|
|
|
+ addReport1.setReportType(100);
|
|
|
+ } else if ("SUB".equals(recordReportDO.getProjectType())) {
|
|
|
+ addReport1.setReportType(200);
|
|
|
+ } else if ("STANDALONE".equals(recordReportDO.getProjectType())) {
|
|
|
+ addReport1.setReportType(300);
|
|
|
+ }
|
|
|
//使用配置的项目名称
|
|
|
//addReport1.setReportName(dynamicTbDO.getTbName());
|
|
|
addReport1.setReportName(recordReportDO.getProjectName());
|
|
|
@@ -1236,7 +1260,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
// 找到匹配的检验性质模版
|
|
|
repsVO.setUse("1".equals(natureTemplateDO.getIsDefault()));
|
|
|
});
|
|
|
- repsVO.setUse(repsVO.getUse() || "1".equals(templateDO.getIsMainProject()));
|
|
|
+ repsVO.setUse(repsVO.getUse() || "MAIN".equals(templateDO.getProjectType()));
|
|
|
|
|
|
return repsVO;
|
|
|
})
|
|
|
@@ -1258,7 +1282,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
// 找到匹配的检验性质模版
|
|
|
baseVO.setUse("1".equals(natureTemplateDO.getIsDefault()));
|
|
|
});
|
|
|
- baseVO.setUse(baseVO.getUse() || "1".equals(templateDO.getIsMainProject()));
|
|
|
+ baseVO.setUse(baseVO.getUse() || "MAIN".equals(templateDO.getProjectType()));
|
|
|
return baseVO;
|
|
|
})
|
|
|
.collect(Collectors.toCollection(ArrayList::new)); // 预分配空间
|
|
|
@@ -1303,7 +1327,8 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
repsVO.setFee(ConversionUtil.convert(connectRecordReportDO.getFee()));
|
|
|
repsVO.setReportType(dynamicTbDO.getTbType());
|
|
|
repsVO.setUse("1".equals(natureTemplateDO.getIsDefault())); // 默认值
|
|
|
- repsVO.setIsMainProject(connectRecordReportDO.getIsMainProject());
|
|
|
+ repsVO.setProjectType(connectRecordReportDO.getProjectType());
|
|
|
+ repsVO.setIsMainProject("MAIN".equals(connectRecordReportDO.getProjectType()) ? "1" : "0");
|
|
|
return repsVO;
|
|
|
}else {
|
|
|
return null;
|
|
|
@@ -1320,7 +1345,8 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
repsVO.setIsAutoAmount("0");
|
|
|
repsVO.setReportType(dynamicTbDO.getTbType());
|
|
|
repsVO.setUse("1".equals(natureTemplateDO.getIsDefault())); // 默认值
|
|
|
- repsVO.setIsMainProject(connectRecordReportDO.getIsMainProject());
|
|
|
+ repsVO.setProjectType(connectRecordReportDO.getProjectType());
|
|
|
+ repsVO.setIsMainProject("MAIN".equals(connectRecordReportDO.getProjectType()) ? "1" : "0");
|
|
|
return repsVO;
|
|
|
}else {
|
|
|
return null;
|
|
|
@@ -1354,7 +1380,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
vo.setReportType(recordDO.getTbType());
|
|
|
//vo.setRecordTemplateUrl(templateDO.getRecordTemplateUrl());
|
|
|
//vo.setReportTemplateUrl(templateDO.getReportTemplateUrl());
|
|
|
- vo.setIsMainProject(templateDO.getIsMainProject());
|
|
|
+ vo.setProjectType(templateDO.getProjectType());
|
|
|
// 将 String 类型的 fee 转换为 BigDecimal
|
|
|
if (StringUtils.isNotBlank(templateDO.getFee())) {
|
|
|
vo.setFee(new BigDecimal(templateDO.getFee()));
|
|
|
@@ -1369,7 +1395,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
vo.setTemplateId(recordDO.getId());
|
|
|
vo.setIsAutoAmount("0");
|
|
|
vo.setReportType(recordDO.getTbType());
|
|
|
- vo.setIsMainProject(templateDO.getIsMainProject());
|
|
|
+ vo.setProjectType(templateDO.getProjectType());
|
|
|
// 将 String 类型的 fee 转换为 BigDecimal
|
|
|
if (StringUtils.isNotBlank(templateDO.getFee())) {
|
|
|
vo.setFee(new BigDecimal(templateDO.getFee()));
|
|
|
@@ -1474,6 +1500,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
BoilerConnectRecordReportDO connectDO = boilerConnectRecordReportMapper.selectById(vo.getConnectId());
|
|
|
String baseReportName = "";
|
|
|
if (connectDO != null){
|
|
|
+ addReport.setProjectId(connectDO.getId());
|
|
|
baseReportName = connectDO.getProjectName();
|
|
|
if (vo.getFee() == null || vo.getFee().compareTo(BigDecimal.ZERO) == 0) {
|
|
|
addReport.setFee(ConversionUtil.convert(connectDO.getFee()));
|
|
|
@@ -1490,6 +1517,15 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
}
|
|
|
|
|
|
addReport.setReportType(reportTemplateDO.getTbType());
|
|
|
+ if (connectDO != null){
|
|
|
+ if ("MAIN".equals(connectDO.getProjectType())){
|
|
|
+ addReport.setReportType(100);
|
|
|
+ }else if ("SUB".equals(connectDO.getProjectType())){
|
|
|
+ addReport.setReportType(200);
|
|
|
+ }else if ("STANDALONE".equals(connectDO.getProjectType())){
|
|
|
+ addReport.setReportType(300);
|
|
|
+ }
|
|
|
+ }
|
|
|
if (Integer.valueOf(400).equals(reportTemplateDO.getTbType())) {
|
|
|
addReport.setConfirmationTime(calendarApi.getCalendarDateByParam(LocalDate.now(), 3).getCheckedData());
|
|
|
}
|
|
|
@@ -2877,13 +2913,15 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
if (taskOrderItemReport.getReportType() != null && taskOrderItemReport.getReportType() == 200) {
|
|
|
// 任务完成
|
|
|
taskOrderItemReportDO.setTaskStatus(TaskOrderStatusEnum.REPORT_FINISH.getStatus());
|
|
|
- } else if (taskOrderItemReport.getReportType() != null && (taskOrderItemReport.getReportType() == 300 || taskOrderItemReport.getReportType() == 400)) {
|
|
|
+ } else if (taskOrderItemReport.getReportType() != null && taskOrderItemReport.getReportType() == 400) {
|
|
|
boolean isApproval = taskOrderItemReport.getIsApproval() != null && taskOrderItemReport.getIsApproval();
|
|
|
boolean isRatify = taskOrderItemReport.getIsRatify() != null && taskOrderItemReport.getIsRatify();
|
|
|
if (!isApproval && !isRatify) {
|
|
|
// 任务完成
|
|
|
taskOrderItemReportDO.setTaskStatus(TaskOrderStatusEnum.REPORT_FINISH.getStatus());
|
|
|
}
|
|
|
+ } else if (taskOrderItemReport.getReportType() != null && taskOrderItemReport.getReportType() == 300) {
|
|
|
+ taskOrderItemReportDO.setTaskStatus(TaskOrderStatusEnum.REPORT_PREPARE.getStatus());
|
|
|
}
|
|
|
taskOrderItemReportMapper.updateById(taskOrderItemReportDO);
|
|
|
|
|
|
@@ -3095,22 +3133,22 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
|
|
|
// 报告编制更新
|
|
|
if (taskOrderItemReportDO.getReportType() != null && (taskOrderItemReportDO.getReportType() == 300 || taskOrderItemReportDO.getReportType() == 400)) {
|
|
|
- PipeTaskOrderItemReportDO oldReport = taskOrderItemReportMapper.selectById(orderItemPrepareVO.getId());
|
|
|
- boolean isApproval = oldReport.getIsApproval() != null && oldReport.getIsApproval();
|
|
|
- boolean isRatify = oldReport.getIsRatify() != null && oldReport.getIsRatify();
|
|
|
-
|
|
|
- if (!isApproval && isRatify) {
|
|
|
- updateObj.setTaskStatus(TaskOrderStatusEnum.REPORT_RATIFY.getStatus());
|
|
|
- updateObj.setRatifyId(orderItemPrepareVO.getApproveId());
|
|
|
- updateObj.setApprovalId(null);
|
|
|
- updateObj.setApprovalName(null);
|
|
|
- updateObj.setRatifyId(userId);
|
|
|
- if (approveUser != null) {
|
|
|
- updateObj.setRatifyName(approveUser.getNickname());
|
|
|
- }
|
|
|
- } else if (!isApproval && !isRatify) {
|
|
|
- updateObj.setTaskStatus(TaskOrderStatusEnum.REPORT_FINISH.getStatus());
|
|
|
- }
|
|
|
+// PipeTaskOrderItemReportDO oldReport = taskOrderItemReportMapper.selectById(orderItemPrepareVO.getId());
|
|
|
+// boolean isApproval = oldReport.getIsApproval() != null && oldReport.getIsApproval();
|
|
|
+// boolean isRatify = oldReport.getIsRatify() != null && oldReport.getIsRatify();
|
|
|
+//
|
|
|
+// if (!isApproval && isRatify) {
|
|
|
+// updateObj.setTaskStatus(TaskOrderStatusEnum.REPORT_RATIFY.getStatus());
|
|
|
+// updateObj.setRatifyId(orderItemPrepareVO.getApproveId());
|
|
|
+// updateObj.setApprovalId(null);
|
|
|
+// updateObj.setApprovalName(null);
|
|
|
+// updateObj.setRatifyId(userId);
|
|
|
+// if (approveUser != null) {
|
|
|
+// updateObj.setRatifyName(approveUser.getNickname());
|
|
|
+// }
|
|
|
+// } else if (!isApproval && !isRatify) {
|
|
|
+// updateObj.setTaskStatus(TaskOrderStatusEnum.REPORT_FINISH.getStatus());
|
|
|
+// }
|
|
|
}
|
|
|
|
|
|
taskOrderItemReportMapper.updateById(updateObj);
|
|
|
@@ -3146,6 +3184,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
log.error("发起oa审核异常,OA流程已发起但响应解析失败,不中断业务流程", e);
|
|
|
+ throw new RuntimeException("发起oa审核异常", e);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -4916,7 +4955,8 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
ByteArrayOutputStream mergeOutputStream = new ByteArrayOutputStream();
|
|
|
PDFMergerUtility mergerUtility = new PDFMergerUtility();
|
|
|
|
|
|
- taskOrderReportDOS.parallelStream().forEachOrdered(taskOrderReportDO -> {
|
|
|
+ // 使用普通循环替代parallelStream,避免并行处理导致内存溢出
|
|
|
+ for (PipeTaskOrderItemReportDO taskOrderReportDO : taskOrderReportDOS) {
|
|
|
try {
|
|
|
|
|
|
//存在结论报告则放在最前面
|
|
|
@@ -4925,6 +4965,8 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
if (insResultDO != null) {
|
|
|
byte[] pdf = pdfService.pdf(taskOrderReportDO.getResultTemplateId(), insResultDO.getId());
|
|
|
mergerUtility.addSource(new ByteArrayInputStream(pdf));
|
|
|
+ // 及时释放PDF字节数组引用
|
|
|
+ pdf = null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -4933,11 +4975,15 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
if (insDO != null) {
|
|
|
byte[] pdf = pdfService.pdf(taskOrderReportDO.getReportTemplateId(), insDO.getId());
|
|
|
mergerUtility.addSource(new ByteArrayInputStream(pdf));
|
|
|
+ // 及时释放PDF字节数组引用
|
|
|
+ pdf = null;
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
+ log.error("处理报告ID: {} 时发生错误", taskOrderReportDO.getId(), e);
|
|
|
throw new RuntimeException(e);
|
|
|
}
|
|
|
- });
|
|
|
+ }
|
|
|
+
|
|
|
// pdf 文件流合并
|
|
|
mergerUtility.setDestinationStream(mergeOutputStream);
|
|
|
mergerUtility.mergeDocuments(null);
|
|
|
@@ -4945,10 +4991,15 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
// 重新生成页码
|
|
|
byte[] mergedPdfBytes = mergeOutputStream.toByteArray();
|
|
|
byte[] pdfWithPageNumbers = pdfService.addPageNumbersToPdf(mergedPdfBytes);
|
|
|
+
|
|
|
+ // 及时释放大对象引用
|
|
|
+ mergedPdfBytes = null;
|
|
|
+ mergeOutputStream.close();
|
|
|
|
|
|
return pdfWithPageNumbers;
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
+ log.error("合并报告时发生错误, orderId: {}", orderId, e);
|
|
|
throw new RuntimeException(e);
|
|
|
}
|
|
|
|
|
|
@@ -4977,7 +5028,8 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
ByteArrayOutputStream mergeOutputStream = new ByteArrayOutputStream();
|
|
|
PDFMergerUtility mergerUtility = new PDFMergerUtility();
|
|
|
|
|
|
- taskOrderReportDOS.parallelStream().forEachOrdered(taskOrderReportDO -> {
|
|
|
+ // 使用普通循环替代parallelStream,避免并行处理导致内存溢出
|
|
|
+ for (PipeTaskOrderItemReportDO taskOrderReportDO : taskOrderReportDOS) {
|
|
|
try {
|
|
|
|
|
|
// 报告模板
|
|
|
@@ -4985,11 +5037,15 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
if (insDO != null) {
|
|
|
byte[] pdf = pdfService.pdf(taskOrderReportDO.getTemplateId(), insDO.getId());
|
|
|
mergerUtility.addSource(new ByteArrayInputStream(pdf));
|
|
|
+ // 及时释放PDF字节数组引用
|
|
|
+ pdf = null;
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
+ log.error("处理报告ID: {} 时发生错误", taskOrderReportDO.getId(), e);
|
|
|
throw new RuntimeException(e);
|
|
|
}
|
|
|
- });
|
|
|
+ }
|
|
|
+
|
|
|
// pdf 文件流合并
|
|
|
mergerUtility.setDestinationStream(mergeOutputStream);
|
|
|
mergerUtility.mergeDocuments(null);
|
|
|
@@ -4997,10 +5053,15 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
// 重新生成页码
|
|
|
byte[] mergedPdfBytes = mergeOutputStream.toByteArray();
|
|
|
byte[] pdfWithPageNumbers = pdfService.addPageNumbersToPdf(mergedPdfBytes);
|
|
|
+
|
|
|
+ // 及时释放大对象引用
|
|
|
+ mergedPdfBytes = null;
|
|
|
+ mergeOutputStream.close();
|
|
|
|
|
|
return pdfWithPageNumbers;
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
+ log.error("合并报告时发生错误, orderId: {}", orderId, e);
|
|
|
throw new RuntimeException(e);
|
|
|
}
|
|
|
|
|
|
@@ -5703,7 +5764,7 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
|
|
|
if (!checkIds.isEmpty()) {
|
|
|
List<BoilerConnectRecordReportDO> mainProjectList = boilerConnectRecordReportService.lambdaQuery()
|
|
|
.in(BoilerConnectRecordReportDO::getId, checkIds)
|
|
|
- .eq(BoilerConnectRecordReportDO::getIsMainProject, true)
|
|
|
+ .eq(BoilerConnectRecordReportDO::getProjectType, "MAIN")
|
|
|
.list();
|
|
|
|
|
|
if (!mainProjectList.isEmpty()) {
|