|
@@ -1,11 +1,12 @@
|
|
|
package com.hotent.project.service;
|
|
package com.hotent.project.service;
|
|
|
|
|
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.hotent.base.util.StringUtil;
|
|
import com.hotent.base.util.StringUtil;
|
|
|
-import com.hotent.project.manager.CostProjectTaskMaterialSummaryDetailManager;
|
|
|
|
|
-import com.hotent.project.manager.CostProjectTaskMaterialSummaryManager;
|
|
|
|
|
-import com.hotent.project.model.CostProjectTask;
|
|
|
|
|
-import com.hotent.project.model.CostProjectTaskMaterialSummaryDetail;
|
|
|
|
|
-import com.hotent.project.model.CostProjectTaskMaterialSummary;
|
|
|
|
|
|
|
+import com.hotent.project.manager.*;
|
|
|
|
|
+import com.hotent.project.model.*;
|
|
|
|
|
+import com.hotent.surveyinfo.manager.CostSurveyTemplateUploadManager;
|
|
|
|
|
+import com.hotent.surveyinfo.model.CostSurveyTemplateUpload;
|
|
|
import org.apache.poi.xwpf.usermodel.XWPFDocument;
|
|
import org.apache.poi.xwpf.usermodel.XWPFDocument;
|
|
|
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
|
|
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
|
|
|
import org.apache.poi.xwpf.usermodel.XWPFRun;
|
|
import org.apache.poi.xwpf.usermodel.XWPFRun;
|
|
@@ -16,6 +17,7 @@ import org.springframework.stereotype.Service;
|
|
|
import java.io.FileOutputStream;
|
|
import java.io.FileOutputStream;
|
|
|
import java.util.Comparator;
|
|
import java.util.Comparator;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 异步资料归纳服务
|
|
* 异步资料归纳服务
|
|
@@ -33,14 +35,52 @@ public class AsyncMaterialSummaryService {
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private CostProjectTaskMaterialSummaryDetailManager costProjectTaskMaterialSummaryDetailManager;
|
|
private CostProjectTaskMaterialSummaryDetailManager costProjectTaskMaterialSummaryDetailManager;
|
|
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private CostProjectDocumentManager costProjectDocumentManager;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private CostProjectTaskManager costProjectTaskManager;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private CostSurveyTemplateUploadManager costSurveyTemplateUploadManager;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private CostProjectTaskMaterialManager costProjectTaskMaterialManager;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private CostProjectDeliberateManager costProjectDeliberateManager;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private CostProjectTaskAdjustmentRecordManager adjustmentRecordManager;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private CostProjectTaskEvidenceManager costProjectTaskEvidenceManager;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private CostProjectTaskPreliminaryOpinionManager preliminaryOpinionManager;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 生成资料归纳主表(13个基础资料类别)
|
|
* 生成资料归纳主表(13个基础资料类别)
|
|
|
*
|
|
*
|
|
|
* @param mainTask 主任务
|
|
* @param mainTask 主任务
|
|
|
* @param childTasks 子任务列表
|
|
* @param childTasks 子任务列表
|
|
|
*/
|
|
*/
|
|
|
- @Async
|
|
|
|
|
- public void generateMaterialSummaryAsync(CostProjectTask mainTask, List<CostProjectTask> childTasks) {
|
|
|
|
|
|
|
+ public void generateMaterialSummarySync(CostProjectTask mainTask, List<CostProjectTask> childTasks) {
|
|
|
|
|
+ generateMaterialSummary(mainTask, childTasks);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 生成资料归纳主表(13个基础资料类别)- 核心逻辑
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param mainTask 主任务
|
|
|
|
|
+ * @param childTasks 子任务列表
|
|
|
|
|
+ */
|
|
|
|
|
+ private void generateMaterialSummary(CostProjectTask mainTask, List<CostProjectTask> childTasks) {
|
|
|
try {
|
|
try {
|
|
|
// 定义13个基础资料类别
|
|
// 定义13个基础资料类别
|
|
|
String[] materialNames = {
|
|
String[] materialNames = {
|
|
@@ -89,127 +129,511 @@ public class AsyncMaterialSummaryService {
|
|
|
CostProjectTask mainTask,
|
|
CostProjectTask mainTask,
|
|
|
List<CostProjectTask> childTasks,
|
|
List<CostProjectTask> childTasks,
|
|
|
int materialType) {
|
|
int materialType) {
|
|
|
- switch (materialType) {
|
|
|
|
|
- case 1:
|
|
|
|
|
- // 成本监审报告(含成本监审报告签发稿、送达回证)
|
|
|
|
|
- generateDetail(summary, mainTask, "成本监审报告", 1);
|
|
|
|
|
- generateDetail(summary, mainTask, "成本监审报告签发稿", 2);
|
|
|
|
|
- generateDetail(summary, mainTask, "送达回证", 3);
|
|
|
|
|
- break;
|
|
|
|
|
- case 2:
|
|
|
|
|
- // 被监审单位申请定(调)价报告(复印件)
|
|
|
|
|
- for (int i = 0; i < childTasks.size(); i++) {
|
|
|
|
|
- CostProjectTask child = childTasks.get(i);
|
|
|
|
|
- generateDetail(summary, mainTask, child.getAuditedUnitName() + "申请定(调)价报告(复印件)", i + 1);
|
|
|
|
|
- }
|
|
|
|
|
- break;
|
|
|
|
|
- case 3:
|
|
|
|
|
- // 成本监审通知书(含送达回证)
|
|
|
|
|
- for (int i = 0; i < childTasks.size(); i++) {
|
|
|
|
|
- CostProjectTask child = childTasks.get(i);
|
|
|
|
|
- generateDetail(summary, mainTask, child.getAuditedUnitName() + "成本监审通知书", i * 2 + 1);
|
|
|
|
|
- generateDetail(summary, mainTask, child.getAuditedUnitName() + "送达回证", i * 2 + 2);
|
|
|
|
|
- }
|
|
|
|
|
- break;
|
|
|
|
|
- case 4:
|
|
|
|
|
- // 经营者需提供成本资料清单
|
|
|
|
|
- for (int i = 0; i < childTasks.size(); i++) {
|
|
|
|
|
- CostProjectTask child = childTasks.get(i);
|
|
|
|
|
- generateDetail(summary, mainTask, child.getAuditedUnitName() + "成本资料清单", i + 1);
|
|
|
|
|
- }
|
|
|
|
|
- break;
|
|
|
|
|
- case 5:
|
|
|
|
|
- // 《政府定价成本监审调查表》
|
|
|
|
|
- for (int i = 0; i < childTasks.size(); i++) {
|
|
|
|
|
- CostProjectTask child = childTasks.get(i);
|
|
|
|
|
- generateDetail(summary, mainTask, child.getAuditedUnitName() + "《政府定价成本监审调查表》", i + 1);
|
|
|
|
|
- }
|
|
|
|
|
- break;
|
|
|
|
|
- case 6:
|
|
|
|
|
- // 成本监审补充资料通知书(含送达回证)
|
|
|
|
|
- for (int i = 0; i < childTasks.size(); i++) {
|
|
|
|
|
- CostProjectTask child = childTasks.get(i);
|
|
|
|
|
- generateDetail(summary, mainTask, child.getAuditedUnitName() + "成本监审补充资料通知书", i * 2 + 1);
|
|
|
|
|
- generateDetail(summary, mainTask, child.getAuditedUnitName() + "送达回证", i * 2 + 2);
|
|
|
|
|
- }
|
|
|
|
|
- break;
|
|
|
|
|
- case 7:
|
|
|
|
|
- // 成本审核初步意见告知书(含送达回证)
|
|
|
|
|
- for (int i = 0; i < childTasks.size(); i++) {
|
|
|
|
|
- CostProjectTask child = childTasks.get(i);
|
|
|
|
|
- generateDetail(summary, mainTask, child.getAuditedUnitName() + "成本审核初步意见告知书", i * 2 + 1);
|
|
|
|
|
- generateDetail(summary, mainTask, child.getAuditedUnitName() + "送达回证", i * 2 + 2);
|
|
|
|
|
- }
|
|
|
|
|
- break;
|
|
|
|
|
- case 8:
|
|
|
|
|
- // 经营者书面反馈的材料
|
|
|
|
|
- for (int i = 0; i < childTasks.size(); i++) {
|
|
|
|
|
- CostProjectTask child = childTasks.get(i);
|
|
|
|
|
- generateDetail(summary, mainTask, child.getAuditedUnitName() + "书面反馈材料", i + 1);
|
|
|
|
|
- }
|
|
|
|
|
- break;
|
|
|
|
|
- case 9:
|
|
|
|
|
- // 成本审核初步意见表(集体审议用)
|
|
|
|
|
- for (int i = 0; i < childTasks.size(); i++) {
|
|
|
|
|
- CostProjectTask child = childTasks.get(i);
|
|
|
|
|
- generateDetail(summary, mainTask, child.getAuditedUnitName() + "成本审核初步意见表", i + 1);
|
|
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 查询项目下的所有文书
|
|
|
|
|
+ List<CostProjectDocument> documents = costProjectDocumentManager.getListByProjectId(mainTask.getProjectId());
|
|
|
|
|
+ if (documents == null) {
|
|
|
|
|
+ documents = new java.util.ArrayList<>();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ switch (materialType) {
|
|
|
|
|
+ case 1:
|
|
|
|
|
+ // 成本监审报告(含成本监审报告签发稿、送达回证)
|
|
|
|
|
+ generateType1Details(summary, mainTask, documents);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 2:
|
|
|
|
|
+ // 被监审单位申请定(调)价报告(复印件)
|
|
|
|
|
+ generateType2Details(summary, mainTask, childTasks, documents);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 3:
|
|
|
|
|
+ // 成本监审通知书(含送达回证)
|
|
|
|
|
+ generateType3Details(summary, mainTask, childTasks, documents);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 4:
|
|
|
|
|
+ // 经营者需提供成本资料清单
|
|
|
|
|
+ generateType4Details(summary, mainTask, childTasks, documents);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 5:
|
|
|
|
|
+ // 《政府定价成本监审调查表》
|
|
|
|
|
+ generateType5Details(summary, mainTask, childTasks, documents);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 6:
|
|
|
|
|
+ // 成本监审补充资料通知书(含送达回证)
|
|
|
|
|
+ generateType6Details(summary, mainTask, childTasks, documents);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 7:
|
|
|
|
|
+ // 成本审核初步意见告知书(含送达回证)
|
|
|
|
|
+ generateType7Details(summary, mainTask, childTasks, documents);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 8:
|
|
|
|
|
+ // 经营者书面反馈的材料
|
|
|
|
|
+ generateType8Details(summary, mainTask, childTasks, documents);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 9:
|
|
|
|
|
+ // 成本审核初步意见表(集体审议用)
|
|
|
|
|
+ generateType9Details(summary, mainTask, childTasks, documents);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 10:
|
|
|
|
|
+ // 成本监审集体审议记录
|
|
|
|
|
+ generateType10Details(summary, mainTask, documents);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 11:
|
|
|
|
|
+ // 成本监审工作底稿
|
|
|
|
|
+ generateType11Details(summary, mainTask, childTasks, documents);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 12:
|
|
|
|
|
+ // 成本监审提取资料登记表
|
|
|
|
|
+ generateType12Details(summary, mainTask, childTasks, documents);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 13:
|
|
|
|
|
+ // 提取的成本资料和会计凭证等复印件
|
|
|
|
|
+ generateType13Details(summary, mainTask, childTasks, documents);
|
|
|
|
|
+ break;
|
|
|
|
|
+ default:
|
|
|
|
|
+ throw new RuntimeException("未知的资料类型");
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ System.err.println("生成资料类型 " + materialType + " 的明细时出错:" + e.getMessage());
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ // 继续执行,不中断整个流程
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // ==================== 类型1:成本监审报告(含成本监审报告签发稿、送达回证) ====================
|
|
|
|
|
+ private void generateType1Details(CostProjectTaskMaterialSummary summary, CostProjectTask mainTask, List<CostProjectDocument> documents) {
|
|
|
|
|
+ int orderNum = 1;
|
|
|
|
|
+ // 获取"成本监审报告"、"成本监审报告签发稿"、"送达回证"
|
|
|
|
|
+ List<CostProjectDocument> matchedDocuments = documents.stream()
|
|
|
|
|
+ .filter(doc -> "政府定价成本监审结论报告".equals(doc.getDocumentName()))
|
|
|
|
|
+ .sorted(Comparator.comparing(doc -> doc.getOrderNum() != null ? doc.getOrderNum() : 0))
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ for (CostProjectDocument document : matchedDocuments) {
|
|
|
|
|
+ CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
|
|
|
|
|
+ detail.setMasterId(summary.getId());
|
|
|
|
|
+ detail.setTaskId(mainTask.getId());
|
|
|
|
|
+ detail.setDocumentName(document.getDocumentName());
|
|
|
|
|
+ detail.setDocumentNumber(document.getDocumentNumber() != null ? document.getDocumentNumber() : "");
|
|
|
|
|
+ detail.setAuditedUnitName("");
|
|
|
|
|
+ detail.setFileSource("系统生成电子文书");
|
|
|
|
|
+ detail.setPageCount(0);
|
|
|
|
|
+ detail.setAttachmentUrl(document.getElectronicDocumentUrl() != null ? document.getElectronicDocumentUrl() : "");
|
|
|
|
|
+ detail.setOrderNum(orderNum++);
|
|
|
|
|
+ detail.setIsDeleted("0");
|
|
|
|
|
+ costProjectTaskMaterialSummaryDetailManager.save(detail);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // ==================== 类型2:被监审单位申请定(调)价报告(复印件) ====================
|
|
|
|
|
+ private void generateType2Details(CostProjectTaskMaterialSummary summary, CostProjectTask mainTask, List<CostProjectTask> childTasks, List<CostProjectDocument> documents) {
|
|
|
|
|
+ int orderNum = 1;
|
|
|
|
|
+ // 获取"申请定(调)价报告"
|
|
|
|
|
+ List<CostProjectDocument> matchedDocuments = documents.stream()
|
|
|
|
|
+ .filter(doc -> "申请定(调)价报告".equals(doc.getDocumentName()))
|
|
|
|
|
+ .sorted(Comparator.comparing(doc -> doc.getOrderNum() != null ? doc.getOrderNum() : 0))
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ for (CostProjectDocument document : matchedDocuments) {
|
|
|
|
|
+ CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
|
|
|
|
|
+ detail.setMasterId(summary.getId());
|
|
|
|
|
+ detail.setTaskId(mainTask.getId());
|
|
|
|
|
+ detail.setDocumentName(document.getDocumentName());
|
|
|
|
|
+ detail.setDocumentNumber(document.getDocumentNumber() != null ? document.getDocumentNumber() : "");
|
|
|
|
|
+ detail.setAuditedUnitName("");
|
|
|
|
|
+ detail.setFileSource("监审主体上传文件");
|
|
|
|
|
+ detail.setPageCount(0);
|
|
|
|
|
+ detail.setAttachmentUrl(document.getScanDocumentUrl() != null ? document.getScanDocumentUrl() : "");
|
|
|
|
|
+ detail.setOrderNum(orderNum++);
|
|
|
|
|
+ detail.setIsDeleted("0");
|
|
|
|
|
+ costProjectTaskMaterialSummaryDetailManager.save(detail);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // ==================== 类型3:成本监审通知书(含送达回证) ====================
|
|
|
|
|
+ private void generateType3Details(CostProjectTaskMaterialSummary summary, CostProjectTask mainTask, List<CostProjectTask> childTasks, List<CostProjectDocument> documents) {
|
|
|
|
|
+ int orderNum = 1;
|
|
|
|
|
+ // "成本监审通知书"和"送达回证"
|
|
|
|
|
+ List<CostProjectDocument> matchedDocuments = documents.stream()
|
|
|
|
|
+ .filter(doc -> "成本监审通知书".equals(doc.getDocumentName())
|
|
|
|
|
+ || "送达回证".equals(doc.getDocumentName()))
|
|
|
|
|
+ .sorted(Comparator.comparing(doc -> doc.getOrderNum() != null ? doc.getOrderNum() : 0))
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ for (CostProjectDocument document : matchedDocuments) {
|
|
|
|
|
+ CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
|
|
|
|
|
+ detail.setMasterId(summary.getId());
|
|
|
|
|
+ detail.setTaskId(mainTask.getId());
|
|
|
|
|
+ detail.setDocumentName(document.getDocumentName());
|
|
|
|
|
+ detail.setDocumentNumber(document.getDocumentNumber() != null ? document.getDocumentNumber() : "");
|
|
|
|
|
+ detail.setAuditedUnitName("");
|
|
|
|
|
+ detail.setFileSource("系统生成电子文书");
|
|
|
|
|
+ detail.setPageCount(0);
|
|
|
|
|
+ detail.setAttachmentUrl(document.getElectronicDocumentUrl() != null ? document.getElectronicDocumentUrl() : "");
|
|
|
|
|
+ detail.setOrderNum(orderNum++);
|
|
|
|
|
+ detail.setIsDeleted("0");
|
|
|
|
|
+ costProjectTaskMaterialSummaryDetailManager.save(detail);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // ==================== 类型4:经营者需提供成本资料清单 ====================
|
|
|
|
|
+ private void generateType4Details(CostProjectTaskMaterialSummary summary, CostProjectTask mainTask, List<CostProjectTask> childTasks, List<CostProjectDocument> documents) {
|
|
|
|
|
+ int orderNum = 1;
|
|
|
|
|
+ // 获取"成本资料清单"
|
|
|
|
|
+ List<CostProjectDocument> matchedDocuments = documents.stream()
|
|
|
|
|
+ .filter(doc -> "成本资料清单".equals(doc.getDocumentName()))
|
|
|
|
|
+ .sorted(Comparator.comparing(doc -> doc.getOrderNum() != null ? doc.getOrderNum() : 0))
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ for (CostProjectDocument document : matchedDocuments) {
|
|
|
|
|
+ CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
|
|
|
|
|
+ detail.setMasterId(summary.getId());
|
|
|
|
|
+ detail.setTaskId(mainTask.getId());
|
|
|
|
|
+ detail.setDocumentName(document.getDocumentName());
|
|
|
|
|
+ detail.setDocumentNumber(document.getDocumentNumber() != null ? document.getDocumentNumber() : "");
|
|
|
|
|
+ detail.setAuditedUnitName("");
|
|
|
|
|
+ detail.setFileSource("系统生成电子文书");
|
|
|
|
|
+ detail.setPageCount(0);
|
|
|
|
|
+ detail.setAttachmentUrl(document.getElectronicDocumentUrl() != null ? document.getElectronicDocumentUrl() : "");
|
|
|
|
|
+ detail.setOrderNum(orderNum++);
|
|
|
|
|
+ detail.setIsDeleted("0");
|
|
|
|
|
+ costProjectTaskMaterialSummaryDetailManager.save(detail);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // ==================== 类型5:《政府定价成本监审调查表》 ====================
|
|
|
|
|
+ private void generateType5Details(CostProjectTaskMaterialSummary summary, CostProjectTask mainTask, List<CostProjectTask> childTasks, List<CostProjectDocument> documents) {
|
|
|
|
|
+ int orderNum = 1;
|
|
|
|
|
+ for (CostProjectTask childTask : childTasks) {
|
|
|
|
|
+ List<CostSurveyTemplateUpload> costSurveyTemplateUploads = costSurveyTemplateUploadManager.listByTaskId(childTask.getId());
|
|
|
|
|
+ for (CostSurveyTemplateUpload upload : costSurveyTemplateUploads) {
|
|
|
|
|
+ if ("1".equals(upload.getIsUpload()) && StringUtil.isNotEmpty(upload.getFileUrl())) {
|
|
|
|
|
+ CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
|
|
|
|
|
+ detail.setMasterId(summary.getId());
|
|
|
|
|
+ detail.setTaskId(mainTask.getId());
|
|
|
|
|
+ detail.setDocumentName(upload.getSurveyTemplateName() != null ? upload.getSurveyTemplateName() : "政府定价成本监审调查表");
|
|
|
|
|
+ detail.setDocumentNumber("");
|
|
|
|
|
+ detail.setAuditedUnitName(childTask.getAuditedUnitName() != null ? childTask.getAuditedUnitName() : "");
|
|
|
|
|
+ detail.setFileSource("监审单位反馈文件");
|
|
|
|
|
+ detail.setPageCount(0);
|
|
|
|
|
+ detail.setAttachmentUrl(upload.getFileUrl());
|
|
|
|
|
+ detail.setOrderNum(orderNum++);
|
|
|
|
|
+ detail.setIsDeleted("0");
|
|
|
|
|
+ costProjectTaskMaterialSummaryDetailManager.save(detail);
|
|
|
}
|
|
}
|
|
|
- break;
|
|
|
|
|
- case 10:
|
|
|
|
|
- // 成本监审集体审议记录
|
|
|
|
|
- generateDetail(summary, mainTask, "成本监审集体审议记录", 1);
|
|
|
|
|
- break;
|
|
|
|
|
- case 11:
|
|
|
|
|
- // 成本监审工作底稿
|
|
|
|
|
- for (int i = 0; i < childTasks.size(); i++) {
|
|
|
|
|
- CostProjectTask child = childTasks.get(i);
|
|
|
|
|
- generateDetail(summary, mainTask, child.getAuditedUnitName() + "成本监审工作底稿", i + 1);
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // ==================== 类型6:成本监审补充资料通知书(含送达回证) ====================
|
|
|
|
|
+ private void generateType6Details(CostProjectTaskMaterialSummary summary, CostProjectTask mainTask, List<CostProjectTask> childTasks, List<CostProjectDocument> documents) {
|
|
|
|
|
+ int orderNum = 1;
|
|
|
|
|
+ List<CostProjectDocument> matchedDocuments = documents.stream()
|
|
|
|
|
+ .filter(doc -> "成本监审补充资料通知书".equals(doc.getDocumentName())
|
|
|
|
|
+ || "成本监审补充资料通知书-送达回证".equals(doc.getDocumentName()))
|
|
|
|
|
+ .sorted(Comparator.comparing(doc -> doc.getOrderNum() != null ? doc.getOrderNum() : 0))
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ for (CostProjectDocument document : matchedDocuments) {
|
|
|
|
|
+ CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
|
|
|
|
|
+ detail.setMasterId(summary.getId());
|
|
|
|
|
+ detail.setTaskId(mainTask.getId());
|
|
|
|
|
+ detail.setDocumentName(document.getDocumentName());
|
|
|
|
|
+ detail.setDocumentNumber(document.getDocumentNumber() != null ? document.getDocumentNumber() : "");
|
|
|
|
|
+ detail.setAuditedUnitName("");
|
|
|
|
|
+ detail.setFileSource("系统生成电子文书");
|
|
|
|
|
+ detail.setPageCount(0);
|
|
|
|
|
+ detail.setAttachmentUrl(document.getElectronicDocumentUrl() != null ? document.getElectronicDocumentUrl() : "");
|
|
|
|
|
+ detail.setOrderNum(orderNum++);
|
|
|
|
|
+ detail.setIsDeleted("0");
|
|
|
|
|
+ costProjectTaskMaterialSummaryDetailManager.save(detail);
|
|
|
|
|
+ }
|
|
|
|
|
+ // 获取任务的报送资料要求(被监审单位提交的补充资料)
|
|
|
|
|
+ List<CostProjectTaskMaterial> list = costProjectTaskMaterialManager.list(
|
|
|
|
|
+ new LambdaQueryWrapper<>(CostProjectTaskMaterial.class)
|
|
|
|
|
+ .eq(CostProjectTaskMaterial::getTaskId, mainTask.getId())
|
|
|
|
|
+ );
|
|
|
|
|
+ for (CostProjectTaskMaterial material : list) {
|
|
|
|
|
+ // 只处理已上传的资料
|
|
|
|
|
+ if ("1".equals(material.getIsUpload()) && StringUtil.isNotEmpty(material.getFileUrl())) {
|
|
|
|
|
+ CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
|
|
|
|
|
+ detail.setMasterId(summary.getId());
|
|
|
|
|
+ detail.setTaskId(mainTask.getId());
|
|
|
|
|
+ detail.setDocumentName(material.getInformationName() != null ? material.getInformationName() : "补充资料");
|
|
|
|
|
+ detail.setDocumentNumber("");
|
|
|
|
|
+ detail.setAuditedUnitName("");
|
|
|
|
|
+ detail.setFileSource("监审单位反馈文件");
|
|
|
|
|
+ detail.setPageCount(0);
|
|
|
|
|
+ detail.setAttachmentUrl(material.getFileUrl());
|
|
|
|
|
+ detail.setOrderNum(orderNum++);
|
|
|
|
|
+ detail.setIsDeleted("0");
|
|
|
|
|
+ costProjectTaskMaterialSummaryDetailManager.save(detail);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // ==================== 类型7:成本审核初步意见告知书(含送达回证) ====================
|
|
|
|
|
+ private void generateType7Details(CostProjectTaskMaterialSummary summary, CostProjectTask mainTask, List<CostProjectTask> childTasks, List<CostProjectDocument> documents) {
|
|
|
|
|
+ int orderNum = 1;
|
|
|
|
|
+ // 获取"成本审核初步意见告知书"和"送达回证"
|
|
|
|
|
+ List<CostProjectDocument> matchedDocuments = documents.stream()
|
|
|
|
|
+ .filter(doc -> "成本审核初步意见告知书".equals(doc.getDocumentName())
|
|
|
|
|
+ || "送达回证".equals(doc.getDocumentName()))
|
|
|
|
|
+ .sorted(Comparator.comparing(doc -> doc.getOrderNum() != null ? doc.getOrderNum() : 0))
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ for (CostProjectDocument document : matchedDocuments) {
|
|
|
|
|
+ CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
|
|
|
|
|
+ detail.setMasterId(summary.getId());
|
|
|
|
|
+ detail.setTaskId(mainTask.getId());
|
|
|
|
|
+ detail.setDocumentName(document.getDocumentName());
|
|
|
|
|
+ detail.setDocumentNumber(document.getDocumentNumber() != null ? document.getDocumentNumber() : "");
|
|
|
|
|
+ detail.setAuditedUnitName("");
|
|
|
|
|
+ detail.setFileSource("系统生成电子文书");
|
|
|
|
|
+ detail.setPageCount(0);
|
|
|
|
|
+ detail.setAttachmentUrl(document.getElectronicDocumentUrl() != null ? document.getElectronicDocumentUrl() : "");
|
|
|
|
|
+ detail.setOrderNum(orderNum++);
|
|
|
|
|
+ detail.setIsDeleted("0");
|
|
|
|
|
+ costProjectTaskMaterialSummaryDetailManager.save(detail);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // ==================== 类型8:经营者书面反馈的材料 ====================
|
|
|
|
|
+ private void generateType8Details(CostProjectTaskMaterialSummary summary, CostProjectTask mainTask, List<CostProjectTask> childTasks, List<CostProjectDocument> documents) {
|
|
|
|
|
+ int orderNum = 1;
|
|
|
|
|
+ // 获取"书面反馈材料"(来源:监审单位反馈文件)
|
|
|
|
|
+ List<CostProjectDocument> matchedDocuments = documents.stream()
|
|
|
|
|
+ .filter(doc -> "书面反馈材料".equals(doc.getDocumentName()))
|
|
|
|
|
+ .sorted(Comparator.comparing(doc -> doc.getOrderNum() != null ? doc.getOrderNum() : 0))
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ for (CostProjectDocument document : matchedDocuments) {
|
|
|
|
|
+ CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
|
|
|
|
|
+ detail.setMasterId(summary.getId());
|
|
|
|
|
+ detail.setTaskId(mainTask.getId());
|
|
|
|
|
+ detail.setDocumentName(document.getDocumentName());
|
|
|
|
|
+ detail.setDocumentNumber(document.getDocumentNumber() != null ? document.getDocumentNumber() : "");
|
|
|
|
|
+ detail.setAuditedUnitName("");
|
|
|
|
|
+ detail.setFileSource("监审单位反馈文件");
|
|
|
|
|
+ detail.setPageCount(0);
|
|
|
|
|
+ detail.setAttachmentUrl(document.getFeedbackDocumentUrl() != null ? document.getFeedbackDocumentUrl() : "");
|
|
|
|
|
+ detail.setOrderNum(orderNum++);
|
|
|
|
|
+ detail.setIsDeleted("0");
|
|
|
|
|
+ costProjectTaskMaterialSummaryDetailManager.save(detail);
|
|
|
|
|
+ }
|
|
|
|
|
+ // 获取被监审单位的反馈意见和反馈资料
|
|
|
|
|
+ for (CostProjectTask childTask : childTasks) {
|
|
|
|
|
+ List<CostProjectTaskPreliminaryOpinion> list = preliminaryOpinionManager.list(
|
|
|
|
|
+ new LambdaQueryWrapper<>(CostProjectTaskPreliminaryOpinion.class)
|
|
|
|
|
+ .eq(CostProjectTaskPreliminaryOpinion::getTaskId, childTask.getId())
|
|
|
|
|
+ );
|
|
|
|
|
+ for (CostProjectTaskPreliminaryOpinion opinion : list) {
|
|
|
|
|
+ // 只处理有反馈资料的记录
|
|
|
|
|
+ if (StringUtil.isNotEmpty(opinion.getFeedbackMaterials())) {
|
|
|
|
|
+ CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
|
|
|
|
|
+ detail.setMasterId(summary.getId());
|
|
|
|
|
+ detail.setTaskId(mainTask.getId());
|
|
|
|
|
+ detail.setDocumentName("书面反馈材料");
|
|
|
|
|
+ detail.setDocumentNumber("");
|
|
|
|
|
+ detail.setAuditedUnitName(childTask.getAuditedUnitName() != null ? childTask.getAuditedUnitName() : "");
|
|
|
|
|
+ detail.setFileSource("监审单位反馈文件");
|
|
|
|
|
+ detail.setPageCount(0);
|
|
|
|
|
+ detail.setAttachmentUrl(opinion.getFeedbackMaterials());
|
|
|
|
|
+ detail.setOrderNum(orderNum++);
|
|
|
|
|
+ detail.setIsDeleted("0");
|
|
|
|
|
+ costProjectTaskMaterialSummaryDetailManager.save(detail);
|
|
|
}
|
|
}
|
|
|
- break;
|
|
|
|
|
- case 12:
|
|
|
|
|
- // 成本监审提取资料登记表
|
|
|
|
|
- for (int i = 0; i < childTasks.size(); i++) {
|
|
|
|
|
- CostProjectTask child = childTasks.get(i);
|
|
|
|
|
- generateDetail(summary, mainTask, child.getAuditedUnitName() + "提取资料登记表", i + 1);
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // ==================== 类型9:成本审核初步意见表(集体审议用) ====================
|
|
|
|
|
+ private void generateType9Details(CostProjectTaskMaterialSummary summary, CostProjectTask mainTask, List<CostProjectTask> childTasks, List<CostProjectDocument> documents) {
|
|
|
|
|
+ int orderNum = 1;
|
|
|
|
|
+ // 获取"成本审核初步意见表"
|
|
|
|
|
+ List<CostProjectDocument> matchedDocuments = documents.stream()
|
|
|
|
|
+ .filter(doc -> "成本审核初步意见表".equals(doc.getDocumentName()))
|
|
|
|
|
+ .sorted(Comparator.comparing(doc -> doc.getOrderNum() != null ? doc.getOrderNum() : 0))
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ for (CostProjectDocument document : matchedDocuments) {
|
|
|
|
|
+ CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
|
|
|
|
|
+ detail.setMasterId(summary.getId());
|
|
|
|
|
+ detail.setTaskId(mainTask.getId());
|
|
|
|
|
+ detail.setDocumentName(document.getDocumentName());
|
|
|
|
|
+ detail.setDocumentNumber(document.getDocumentNumber() != null ? document.getDocumentNumber() : "");
|
|
|
|
|
+ detail.setAuditedUnitName("");
|
|
|
|
|
+ detail.setFileSource("系统生成电子文书");
|
|
|
|
|
+ detail.setPageCount(0);
|
|
|
|
|
+ detail.setAttachmentUrl(document.getElectronicDocumentUrl() != null ? document.getElectronicDocumentUrl() : "");
|
|
|
|
|
+ detail.setOrderNum(orderNum++);
|
|
|
|
|
+ detail.setIsDeleted("0");
|
|
|
|
|
+ costProjectTaskMaterialSummaryDetailManager.save(detail);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // ==================== 类型10:成本监审集体审议记录 ====================
|
|
|
|
|
+ private void generateType10Details(CostProjectTaskMaterialSummary summary, CostProjectTask mainTask, List<CostProjectDocument> documents) {
|
|
|
|
|
+ int orderNum = 1;
|
|
|
|
|
+ // 获取"成本监审集体审议记录"
|
|
|
|
|
+ List<CostProjectDocument> matchedDocuments = documents.stream()
|
|
|
|
|
+ .filter(doc -> "成本监审集体审议记录".equals(doc.getDocumentName()))
|
|
|
|
|
+ .sorted(Comparator.comparing(doc -> doc.getOrderNum() != null ? doc.getOrderNum() : 0))
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ for (CostProjectDocument document : matchedDocuments) {
|
|
|
|
|
+ CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
|
|
|
|
|
+ detail.setMasterId(summary.getId());
|
|
|
|
|
+ detail.setTaskId(mainTask.getId());
|
|
|
|
|
+ detail.setDocumentName(document.getDocumentName());
|
|
|
|
|
+ detail.setDocumentNumber(document.getDocumentNumber() != null ? document.getDocumentNumber() : "");
|
|
|
|
|
+ detail.setAuditedUnitName("");
|
|
|
|
|
+ detail.setFileSource("系统生成电子文书");
|
|
|
|
|
+ detail.setPageCount(0);
|
|
|
|
|
+ detail.setAttachmentUrl(document.getElectronicDocumentUrl() != null ? document.getElectronicDocumentUrl() : "");
|
|
|
|
|
+ detail.setOrderNum(orderNum++);
|
|
|
|
|
+ detail.setIsDeleted("0");
|
|
|
|
|
+ costProjectTaskMaterialSummaryDetailManager.save(detail);
|
|
|
|
|
+ }
|
|
|
|
|
+ // 获取集体审议记录
|
|
|
|
|
+ List<CostProjectDeliberate> list = costProjectDeliberateManager.list(
|
|
|
|
|
+ new LambdaQueryWrapper<CostProjectDeliberate>().eq(CostProjectDeliberate::getTaskId, mainTask.getId())
|
|
|
|
|
+ );
|
|
|
|
|
+ for (CostProjectDeliberate deliberate : list) {
|
|
|
|
|
+ // 只处理有附件的审议记录
|
|
|
|
|
+ if (StringUtil.isNotEmpty(deliberate.getAttachmentIds())) {
|
|
|
|
|
+ CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
|
|
|
|
|
+ detail.setMasterId(summary.getId());
|
|
|
|
|
+ detail.setTaskId(mainTask.getId());
|
|
|
|
|
+ detail.setDocumentName("成本监审集体审议记录");
|
|
|
|
|
+ detail.setDocumentNumber("");
|
|
|
|
|
+ detail.setAuditedUnitName("");
|
|
|
|
|
+ detail.setFileSource("系统生成电子文书");
|
|
|
|
|
+ detail.setPageCount(0);
|
|
|
|
|
+ detail.setAttachmentUrl(deliberate.getAttachmentIds());
|
|
|
|
|
+ detail.setOrderNum(orderNum++);
|
|
|
|
|
+ detail.setIsDeleted("0");
|
|
|
|
|
+ costProjectTaskMaterialSummaryDetailManager.save(detail);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // ==================== 类型11:成本监审工作底稿 ====================
|
|
|
|
|
+ private void generateType11Details(CostProjectTaskMaterialSummary summary, CostProjectTask mainTask, List<CostProjectTask> childTasks, List<CostProjectDocument> documents) {
|
|
|
|
|
+ int orderNum = 1;
|
|
|
|
|
+ // 获取"成本监审工作底稿"
|
|
|
|
|
+ List<CostProjectDocument> matchedDocuments = documents.stream()
|
|
|
|
|
+ .filter(doc -> "成本监审工作底稿".equals(doc.getDocumentName()))
|
|
|
|
|
+ .sorted(Comparator.comparing(doc -> doc.getOrderNum() != null ? doc.getOrderNum() : 0))
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ for (CostProjectDocument document : matchedDocuments) {
|
|
|
|
|
+ CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
|
|
|
|
|
+ detail.setMasterId(summary.getId());
|
|
|
|
|
+ detail.setTaskId(mainTask.getId());
|
|
|
|
|
+ detail.setDocumentName(document.getDocumentName());
|
|
|
|
|
+ detail.setDocumentNumber(document.getDocumentNumber() != null ? document.getDocumentNumber() : "");
|
|
|
|
|
+ detail.setAuditedUnitName("");
|
|
|
|
|
+ detail.setFileSource("系统生成电子文书");
|
|
|
|
|
+ detail.setPageCount(0);
|
|
|
|
|
+ detail.setAttachmentUrl(document.getElectronicDocumentUrl() != null ? document.getElectronicDocumentUrl() : "");
|
|
|
|
|
+ detail.setOrderNum(orderNum++);
|
|
|
|
|
+ detail.setIsDeleted("0");
|
|
|
|
|
+ costProjectTaskMaterialSummaryDetailManager.save(detail);
|
|
|
|
|
+ }
|
|
|
|
|
+ // 获取核增核减记录(工作底稿的一部分)
|
|
|
|
|
+ for (CostProjectTask childTask : childTasks) {
|
|
|
|
|
+ List<CostProjectTaskAdjustmentRecord> costProjectTaskAdjustmentRecords = adjustmentRecordManager.listByTaskId(childTask.getId());
|
|
|
|
|
+ for (CostProjectTaskAdjustmentRecord record : costProjectTaskAdjustmentRecords) {
|
|
|
|
|
+ // 只处理有附件的记录
|
|
|
|
|
+ if (StringUtil.isNotEmpty(record.getAttachmentUrl())) {
|
|
|
|
|
+ CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
|
|
|
|
|
+ detail.setMasterId(summary.getId());
|
|
|
|
|
+ detail.setTaskId(mainTask.getId());
|
|
|
|
|
+ detail.setDocumentName(record.getSubject() != null ? record.getSubject() + "-工作底稿" : "成本监审工作底稿");
|
|
|
|
|
+ detail.setDocumentNumber("");
|
|
|
|
|
+ detail.setAuditedUnitName(childTask.getAuditedUnitName() != null ? childTask.getAuditedUnitName() : "");
|
|
|
|
|
+ detail.setFileSource("系统生成电子文书");
|
|
|
|
|
+ detail.setPageCount(0);
|
|
|
|
|
+ detail.setAttachmentUrl(record.getAttachmentUrl());
|
|
|
|
|
+ detail.setOrderNum(orderNum++);
|
|
|
|
|
+ detail.setIsDeleted("0");
|
|
|
|
|
+ costProjectTaskMaterialSummaryDetailManager.save(detail);
|
|
|
}
|
|
}
|
|
|
- break;
|
|
|
|
|
- case 13:
|
|
|
|
|
- // 提取的成本资料和会计凭证等复印件
|
|
|
|
|
- for (int i = 0; i < childTasks.size(); i++) {
|
|
|
|
|
- CostProjectTask child = childTasks.get(i);
|
|
|
|
|
- generateDetail(summary, mainTask, child.getAuditedUnitName() + "成本资料和会计凭证复印件", i + 1);
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // ==================== 类型12:成本监审提取资料登记表 ====================
|
|
|
|
|
+ private void generateType12Details(CostProjectTaskMaterialSummary summary, CostProjectTask mainTask, List<CostProjectTask> childTasks, List<CostProjectDocument> documents) {
|
|
|
|
|
+ int orderNum = 1;
|
|
|
|
|
+ // 获取"成本监审提取资料登记表"
|
|
|
|
|
+ List<CostProjectDocument> matchedDocuments = documents.stream()
|
|
|
|
|
+ .filter(doc -> "成本监审提取资料登记表".equals(doc.getDocumentName()))
|
|
|
|
|
+ .sorted(Comparator.comparing(doc -> doc.getOrderNum() != null ? doc.getOrderNum() : 0))
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ for (CostProjectDocument document : matchedDocuments) {
|
|
|
|
|
+ CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
|
|
|
|
|
+ detail.setMasterId(summary.getId());
|
|
|
|
|
+ detail.setTaskId(mainTask.getId());
|
|
|
|
|
+ detail.setDocumentName(document.getDocumentName());
|
|
|
|
|
+ detail.setDocumentNumber(document.getDocumentNumber() != null ? document.getDocumentNumber() : "");
|
|
|
|
|
+ detail.setAuditedUnitName("");
|
|
|
|
|
+ detail.setFileSource("系统生成电子文书");
|
|
|
|
|
+ detail.setPageCount(0);
|
|
|
|
|
+ detail.setAttachmentUrl(document.getElectronicDocumentUrl() != null ? document.getElectronicDocumentUrl() : "");
|
|
|
|
|
+ detail.setOrderNum(orderNum++);
|
|
|
|
|
+ detail.setIsDeleted("0");
|
|
|
|
|
+ costProjectTaskMaterialSummaryDetailManager.save(detail);
|
|
|
|
|
+ }
|
|
|
|
|
+ // 获取子任务的资料登记表
|
|
|
|
|
+ for (CostProjectTask childTask : childTasks) {
|
|
|
|
|
+ List<CostProjectTaskEvidence> list = costProjectTaskEvidenceManager.list(
|
|
|
|
|
+ new LambdaQueryWrapper<CostProjectTaskEvidence>().eq(CostProjectTaskEvidence::getTaskId, childTask.getId())
|
|
|
|
|
+ );
|
|
|
|
|
+ for (CostProjectTaskEvidence evidence : list) {
|
|
|
|
|
+ // 只处理有附件的资料登记
|
|
|
|
|
+ if (StringUtil.isNotEmpty(evidence.getAttachmentUrl())) {
|
|
|
|
|
+ CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
|
|
|
|
|
+ detail.setMasterId(summary.getId());
|
|
|
|
|
+ detail.setTaskId(mainTask.getId());
|
|
|
|
|
+ detail.setDocumentName(evidence.getMaterialName() != null ? evidence.getMaterialName() : "提取资料登记");
|
|
|
|
|
+ detail.setDocumentNumber("");
|
|
|
|
|
+ detail.setAuditedUnitName(childTask.getAuditedUnitName() != null ? childTask.getAuditedUnitName() : "");
|
|
|
|
|
+ detail.setFileSource("系统生成电子文书");
|
|
|
|
|
+ detail.setPageCount(evidence.getPageCount() != null ? evidence.getPageCount() : 0);
|
|
|
|
|
+ detail.setAttachmentUrl(evidence.getAttachmentUrl());
|
|
|
|
|
+ detail.setOrderNum(orderNum++);
|
|
|
|
|
+ detail.setIsDeleted("0");
|
|
|
|
|
+ costProjectTaskMaterialSummaryDetailManager.save(detail);
|
|
|
}
|
|
}
|
|
|
- break;
|
|
|
|
|
- default:
|
|
|
|
|
- generateDetail(summary, mainTask, "待补充", 1);
|
|
|
|
|
- break;
|
|
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
- * 生成单个明细记录
|
|
|
|
|
- *
|
|
|
|
|
- * @param summary 资料归纳主表
|
|
|
|
|
- * @param mainTask 主任务
|
|
|
|
|
- * @param documentName 文书名称
|
|
|
|
|
- * @param orderNum 序号
|
|
|
|
|
- */
|
|
|
|
|
- private void generateDetail(CostProjectTaskMaterialSummary summary,
|
|
|
|
|
- CostProjectTask mainTask,
|
|
|
|
|
- String documentName,
|
|
|
|
|
- int orderNum) {
|
|
|
|
|
- CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
|
|
|
|
|
- detail.setMasterId(summary.getId());
|
|
|
|
|
- detail.setTaskId(mainTask.getId());
|
|
|
|
|
- detail.setDocumentName(documentName);
|
|
|
|
|
- detail.setDocumentNumber("");
|
|
|
|
|
- detail.setAuditedUnitName("");
|
|
|
|
|
- detail.setFileSource("系统生成");
|
|
|
|
|
- detail.setPageCount(0);
|
|
|
|
|
- detail.setAttachmentUrl(""); // 初始为空,等待用户上传
|
|
|
|
|
- detail.setOrderNum(orderNum);
|
|
|
|
|
- detail.setIsDeleted("0");
|
|
|
|
|
- costProjectTaskMaterialSummaryDetailManager.save(detail);
|
|
|
|
|
|
|
+ // ==================== 类型13:提取的成本资料和会计凭证等复印件 ====================
|
|
|
|
|
+ private void generateType13Details(CostProjectTaskMaterialSummary summary, CostProjectTask mainTask, List<CostProjectTask> childTasks, List<CostProjectDocument> documents) {
|
|
|
|
|
+ int orderNum = 1;
|
|
|
|
|
+ // 获取"成本资料和会计凭证"(来源:被监审单位提交的资料)
|
|
|
|
|
+ List<CostProjectDocument> matchedDocuments = documents.stream()
|
|
|
|
|
+ .filter(doc -> "成本资料和会计凭证".equals(doc.getDocumentName()))
|
|
|
|
|
+ .sorted(Comparator.comparing(doc -> doc.getOrderNum() != null ? doc.getOrderNum() : 0))
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ for (CostProjectDocument document : matchedDocuments) {
|
|
|
|
|
+ CostProjectTaskMaterialSummaryDetail detail = new CostProjectTaskMaterialSummaryDetail();
|
|
|
|
|
+ detail.setMasterId(summary.getId());
|
|
|
|
|
+ detail.setTaskId(mainTask.getId());
|
|
|
|
|
+ detail.setDocumentName(document.getDocumentName());
|
|
|
|
|
+ detail.setDocumentNumber(document.getDocumentNumber() != null ? document.getDocumentNumber() : "");
|
|
|
|
|
+ detail.setAuditedUnitName("");
|
|
|
|
|
+ detail.setFileSource("监审单位反馈文件");
|
|
|
|
|
+ detail.setPageCount(0);
|
|
|
|
|
+ detail.setAttachmentUrl(document.getFeedbackDocumentUrl() != null ? document.getFeedbackDocumentUrl() : "");
|
|
|
|
|
+ detail.setOrderNum(orderNum++);
|
|
|
|
|
+ detail.setIsDeleted("0");
|
|
|
|
|
+ costProjectTaskMaterialSummaryDetailManager.save(detail);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -255,8 +679,28 @@ public class AsyncMaterialSummaryService {
|
|
|
|
|
|
|
|
// 合并段落
|
|
// 合并段落
|
|
|
for (XWPFParagraph srcPara : sourceDoc.getParagraphs()) {
|
|
for (XWPFParagraph srcPara : sourceDoc.getParagraphs()) {
|
|
|
- XWPFParagraph newPara = document.createParagraph();
|
|
|
|
|
- copyParagraph(srcPara, newPara);
|
|
|
|
|
|
|
+ XWPFParagraph destPara = document.createParagraph();
|
|
|
|
|
+ // 复制段落样式
|
|
|
|
|
+ destPara.setAlignment(srcPara.getAlignment());
|
|
|
|
|
+ destPara.setIndentationLeft(srcPara.getIndentationLeft());
|
|
|
|
|
+ destPara.setIndentationRight(srcPara.getIndentationRight());
|
|
|
|
|
+ destPara.setSpacingBefore(srcPara.getSpacingBefore());
|
|
|
|
|
+ destPara.setSpacingAfter(srcPara.getSpacingAfter());
|
|
|
|
|
+ for (XWPFRun srcRun : srcPara.getRuns()) {
|
|
|
|
|
+ XWPFRun destRun = destPara.createRun();
|
|
|
|
|
+ destRun.setText(srcRun.getText(0));
|
|
|
|
|
+ destRun.setBold(srcRun.isBold());
|
|
|
|
|
+ destRun.setItalic(srcRun.isItalic());
|
|
|
|
|
+ destRun.setUnderline(srcRun.getUnderline());
|
|
|
|
|
+ destRun.setStrikeThrough(srcRun.isStrikeThrough());
|
|
|
|
|
+ destRun.setFontSize(srcRun.getFontSize());
|
|
|
|
|
+ if (srcRun.getFontFamily() != null) {
|
|
|
|
|
+ destRun.setFontFamily(srcRun.getFontFamily());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (srcRun.getColor() != null) {
|
|
|
|
|
+ destRun.setColor(srcRun.getColor());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 添加分页符(每个文档之间分页)
|
|
// 添加分页符(每个文档之间分页)
|
|
@@ -284,6 +728,14 @@ public class AsyncMaterialSummaryService {
|
|
|
|
|
|
|
|
System.out.println("Word卷宗生成完成,任务ID:" + taskId);
|
|
System.out.println("Word卷宗生成完成,任务ID:" + taskId);
|
|
|
|
|
|
|
|
|
|
+ // 更新任务的归档状态
|
|
|
|
|
+ CostProjectTask task = costProjectTaskManager.getById(taskId);
|
|
|
|
|
+ if (task != null) {
|
|
|
|
|
+ task.setIsGd("1");
|
|
|
|
|
+ costProjectTaskManager.updateById(task);
|
|
|
|
|
+ System.out.println("任务归档状态已更新,任务ID:" + taskId);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
|
System.err.println("生成Word卷宗失败,任务ID:" + taskId + ",错误:" + e.getMessage());
|
|
System.err.println("生成Word卷宗失败,任务ID:" + taskId + ",错误:" + e.getMessage());
|
|
@@ -291,44 +743,122 @@ public class AsyncMaterialSummaryService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * 复制段落内容
|
|
|
|
|
|
|
+ * 异步统计每个资料归纳主表的总页数(所有明细的页数之和)
|
|
|
*
|
|
*
|
|
|
- * @param srcPara 源段落
|
|
|
|
|
- * @param destPara 目标段落
|
|
|
|
|
|
|
+ * @param taskId 任务ID
|
|
|
*/
|
|
*/
|
|
|
- private void copyParagraph(XWPFParagraph srcPara, XWPFParagraph destPara) {
|
|
|
|
|
- // 复制段落样式
|
|
|
|
|
- destPara.setAlignment(srcPara.getAlignment());
|
|
|
|
|
- destPara.setIndentationLeft(srcPara.getIndentationLeft());
|
|
|
|
|
- destPara.setIndentationRight(srcPara.getIndentationRight());
|
|
|
|
|
- destPara.setSpacingBefore(srcPara.getSpacingBefore());
|
|
|
|
|
- destPara.setSpacingAfter(srcPara.getSpacingAfter());
|
|
|
|
|
-
|
|
|
|
|
- // 复制段落中的所有Run
|
|
|
|
|
- for (XWPFRun srcRun : srcPara.getRuns()) {
|
|
|
|
|
- XWPFRun destRun = destPara.createRun();
|
|
|
|
|
- copyRun(srcRun, destRun);
|
|
|
|
|
|
|
+ @Async
|
|
|
|
|
+ public void calculatePageCountAsync(String taskId) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ System.out.println("开始异步统计页数,任务ID:" + taskId);
|
|
|
|
|
+
|
|
|
|
|
+ // 查询任务的所有资料归纳主表
|
|
|
|
|
+ List<CostProjectTaskMaterialSummary> summaryList = costProjectTaskMaterialSummaryManager.listByTaskId(taskId);
|
|
|
|
|
+
|
|
|
|
|
+ for (CostProjectTaskMaterialSummary summary : summaryList) {
|
|
|
|
|
+ int totalPageCount = 0;
|
|
|
|
|
+
|
|
|
|
|
+ // 获取该主表的所有明细
|
|
|
|
|
+ if (summary.getDetailList() != null && !summary.getDetailList().isEmpty()) {
|
|
|
|
|
+ for (CostProjectTaskMaterialSummaryDetail detail : summary.getDetailList()) {
|
|
|
|
|
+ if (StringUtil.isNotEmpty(detail.getAttachmentUrl())) {
|
|
|
|
|
+ // 统计该明细的页数
|
|
|
|
|
+ int pageCount = calculateFilePageCount(detail.getAttachmentUrl());
|
|
|
|
|
+ detail.setPageCount(pageCount);
|
|
|
|
|
+ costProjectTaskMaterialSummaryDetailManager.updateById(detail);
|
|
|
|
|
+ // 累加到总页数
|
|
|
|
|
+ totalPageCount += pageCount;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 更新主表的总页数
|
|
|
|
|
+ summary.setTotalPageCount(String.valueOf(totalPageCount));
|
|
|
|
|
+ costProjectTaskMaterialSummaryManager.updateById(summary);
|
|
|
|
|
+
|
|
|
|
|
+ System.out.println("资料归纳【" + summary.getMaterialName() + "】统计完成,总页数:" + totalPageCount);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ System.out.println("页数统计完成,任务ID:" + taskId);
|
|
|
|
|
+
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ System.err.println("统计页数失败,任务ID:" + taskId + ",错误:" + e.getMessage());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * 复制Run内容
|
|
|
|
|
|
|
+ * 计算文件页数
|
|
|
*
|
|
*
|
|
|
- * @param srcRun 源Run
|
|
|
|
|
- * @param destRun 目标Run
|
|
|
|
|
|
|
+ * @param fileUrl 文件URL或路径
|
|
|
|
|
+ * @return 页数
|
|
|
*/
|
|
*/
|
|
|
- private void copyRun(XWPFRun srcRun, XWPFRun destRun) {
|
|
|
|
|
- destRun.setText(srcRun.getText(0));
|
|
|
|
|
- destRun.setBold(srcRun.isBold());
|
|
|
|
|
- destRun.setItalic(srcRun.isItalic());
|
|
|
|
|
- destRun.setUnderline(srcRun.getUnderline());
|
|
|
|
|
- destRun.setStrikeThrough(srcRun.isStrikeThrough());
|
|
|
|
|
- destRun.setFontSize(srcRun.getFontSize());
|
|
|
|
|
- if (srcRun.getFontFamily() != null) {
|
|
|
|
|
- destRun.setFontFamily(srcRun.getFontFamily());
|
|
|
|
|
|
|
+ private int calculateFilePageCount(String fileUrl) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ if (StringUtil.isEmpty(fileUrl)) {
|
|
|
|
|
+ return 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 判断文件类型
|
|
|
|
|
+ String lowerCaseUrl = fileUrl.toLowerCase();
|
|
|
|
|
+
|
|
|
|
|
+ if (lowerCaseUrl.endsWith(".xls") || lowerCaseUrl.endsWith(".xlsx")) {
|
|
|
|
|
+ // Excel文件算1页
|
|
|
|
|
+ return 1;
|
|
|
|
|
+ } else if (lowerCaseUrl.endsWith(".doc") || lowerCaseUrl.endsWith(".docx")) {
|
|
|
|
|
+ // Word文件需要读取实际页数
|
|
|
|
|
+ return getWordPageCount(fileUrl);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 其他格式默认1页
|
|
|
|
|
+ return 1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ System.err.println("计算文件页数失败,文件:" + fileUrl + ",错误:" + e.getMessage());
|
|
|
|
|
+ return 0;
|
|
|
}
|
|
}
|
|
|
- if (srcRun.getColor() != null) {
|
|
|
|
|
- destRun.setColor(srcRun.getColor());
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 获取Word文档的页数
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param fileUrl 文件URL或路径(如:/profile/upload/20251116/xxx.docx)
|
|
|
|
|
+ * @return 页数
|
|
|
|
|
+ */
|
|
|
|
|
+ private int getWordPageCount(String fileUrl) {
|
|
|
|
|
+ java.io.FileInputStream fis = null;
|
|
|
|
|
+ XWPFDocument document = null;
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ String filePath = fileUrl;
|
|
|
|
|
+ if (filePath.startsWith("/profile")) {
|
|
|
|
|
+ filePath = com.hotent.config.EipConfig.getProfile() + filePath.substring(8);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ fis = new java.io.FileInputStream(filePath);
|
|
|
|
|
+ document = new XWPFDocument(fis);
|
|
|
|
|
+
|
|
|
|
|
+ // 获取页数
|
|
|
|
|
+ int pageCount = document.getProperties().getExtendedProperties().getUnderlyingProperties().getPages();
|
|
|
|
|
+
|
|
|
|
|
+ return pageCount > 0 ? pageCount : 1;
|
|
|
|
|
+
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ System.err.println("读取Word页数失败,文件:" + fileUrl + ",错误:" + e.getMessage());
|
|
|
|
|
+ // 读取失败默认返回1页
|
|
|
|
|
+ return 1;
|
|
|
|
|
+ } finally {
|
|
|
|
|
+ // 关闭资源
|
|
|
|
|
+ try {
|
|
|
|
|
+ if (document != null) {
|
|
|
|
|
+ document.close();
|
|
|
|
|
+ }
|
|
|
|
|
+ if (fis != null) {
|
|
|
|
|
+ fis.close();
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ System.err.println("关闭文件流失败:" + e.getMessage());
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|