|
@@ -3,23 +3,24 @@ package com.yaoyicloud.service.impl;
|
|
|
import java.io.File;
|
|
|
import java.io.FileInputStream;
|
|
|
import java.io.FileOutputStream;
|
|
|
-import java.time.LocalDate;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
-import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
+import java.util.concurrent.ConcurrentMap;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
|
|
import cn.hutool.core.util.IdUtil;
|
|
|
+import com.yaoyicloud.config.CommonDataCache;
|
|
|
import com.yaoyicloud.config.FilerepoProperties;
|
|
|
import com.yaoyicloud.config.ReportPathManager;
|
|
|
import com.yaoyicloud.constant.enums.ModuleType;
|
|
|
-import com.yaoyicloud.constant.enums.ReportType;
|
|
|
import com.yaoyicloud.entity.ReportGenerationResult;
|
|
|
import com.yaoyicloud.render.InterestConflictsRender;
|
|
|
import com.yaoyicloud.render.ProjectInfoRender;
|
|
|
import com.yaoyicloud.render.PublicRecordRender;
|
|
|
|
|
|
+import com.yaoyicloud.render.ServiceProviderInfoRender;
|
|
|
import com.yaoyicloud.render.association.AssociationAttachmentSectionRender;
|
|
|
import com.yaoyicloud.render.foundation.FoundationAttachmentSectionRender;
|
|
|
import com.yaoyicloud.render.foundation.FoundationfinancialInfoRender;
|
|
@@ -27,7 +28,6 @@ import com.yaoyicloud.render.platform.AntiBriberyRender;
|
|
|
import com.yaoyicloud.render.platform.AttachmentSectionRender;
|
|
|
import com.yaoyicloud.render.platform.BasicInfoRender;
|
|
|
import com.yaoyicloud.render.platform.FinancialInfoRender;
|
|
|
-import com.yaoyicloud.render.platform.ServiceProviderInfoRender;
|
|
|
import com.yaoyicloud.render.association.AssociationBasicInfoRender;
|
|
|
import com.yaoyicloud.render.foundation.FoundationBasicInfoRender;
|
|
|
import com.yaoyicloud.render.platform.update.AntiBriberyNewRender;
|
|
@@ -45,39 +45,24 @@ import org.springframework.stereotype.Service;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
-import javax.servlet.http.HttpServletRequest;
|
|
|
-
|
|
|
import static com.yaoyicloud.config.SessionInterceptor.SESSION_MAP;
|
|
|
|
|
|
@Slf4j
|
|
|
@Service
|
|
|
@RequiredArgsConstructor
|
|
|
public class ReportUpdateServiceImpl implements ReportUpdateService {
|
|
|
+ // 使用ConcurrentHashMap存储relationId与计数器的映射
|
|
|
+ private final ConcurrentMap<Long, AtomicInteger> moduleCounters = new ConcurrentHashMap<>();
|
|
|
|
|
|
private final FilerepoProperties filerepoProperties;
|
|
|
private final ReportPathManager reportPathManager;
|
|
|
+ private final CommonDataCache commonDataCache;
|
|
|
|
|
|
- /**
|
|
|
- * 按配置项模块
|
|
|
- *
|
|
|
- * @param reportType
|
|
|
- * @param data
|
|
|
- * @param templateBytes
|
|
|
- * @param outputBasePath
|
|
|
- * @param relationId
|
|
|
- * @param request
|
|
|
- * @param moduleType
|
|
|
- * @param name
|
|
|
- * @param level
|
|
|
- * @param tenantName
|
|
|
- * @return
|
|
|
- * @throws Exception
|
|
|
- */
|
|
|
@SuppressWarnings("checkstyle:ReturnCount")
|
|
|
@Override
|
|
|
public ReportGenerationResult createPlusVersionCheckReport(
|
|
|
- ReportType reportType, String data, byte[] templateBytes, String outputBasePath, Long relationId,
|
|
|
- HttpServletRequest request, ModuleType moduleType, String name, Integer level, String tenantName)
|
|
|
+ String data, byte[] templateBytes, Long relationId,
|
|
|
+ ModuleType moduleType)
|
|
|
throws Exception {
|
|
|
|
|
|
// 1. 将字节流模版写入临时文件
|
|
@@ -85,18 +70,18 @@ public class ReportUpdateServiceImpl implements ReportUpdateService {
|
|
|
try (FileOutputStream fos = new FileOutputStream(tempTemplateFile)) {
|
|
|
fos.write(templateBytes);
|
|
|
}
|
|
|
- Map<String, Object> processedData = new HashMap<>();
|
|
|
- processedData.put("reportDate", LocalDate.now().toString());
|
|
|
- processedData.put("type", reportType.getDesc());
|
|
|
- processedData.put("name", name);
|
|
|
- processedData.put("tenantName", tenantName);
|
|
|
- processedData.put("levelInteger", level);
|
|
|
|
|
|
+ // 获取或初始化计数器
|
|
|
+ AtomicInteger counter = moduleCounters.computeIfAbsent(
|
|
|
+ relationId,
|
|
|
+ k -> new AtomicInteger(1));
|
|
|
String sessionId = SESSION_MAP.get(relationId.toString());
|
|
|
+ String reportPath = null;
|
|
|
|
|
|
+ reportPath = processModule(moduleType, data, templateBytes, sessionId, relationId, counter);
|
|
|
// 处理指定模块
|
|
|
- String reportPath = processModule(moduleType, data, processedData, templateBytes, sessionId, relationId);
|
|
|
reportPathManager.addReportPath(sessionId, reportPath);
|
|
|
+ counter.incrementAndGet();
|
|
|
|
|
|
String mergedReportPath = null;
|
|
|
boolean isLastModule = reportPath.contains("attachmentSection");
|
|
@@ -117,6 +102,8 @@ public class ReportUpdateServiceImpl implements ReportUpdateService {
|
|
|
mergedReportPath = filerepoProperties.getBasePath() + "/" + label + ".docx";
|
|
|
// 调用合并方法
|
|
|
DocxUtil.mergeDocx(targetDoc, sourceDocs, mergedReportPath, relationId);
|
|
|
+ // 清除缓存
|
|
|
+ moduleCounters.remove(relationId);
|
|
|
}
|
|
|
|
|
|
return new ReportGenerationResult(reportPath, mergedReportPath, isLastModule);
|
|
@@ -126,81 +113,82 @@ public class ReportUpdateServiceImpl implements ReportUpdateService {
|
|
|
* 处理单个模块的报告生成
|
|
|
*/
|
|
|
@SuppressWarnings("checkstyle:ParameterNumber")
|
|
|
- private String processModule(ModuleType moduleType, String data, Map<String, Object> processedData,
|
|
|
- byte[] templateBytes, String sessionId, Long relationId) throws Exception {
|
|
|
+ private String processModule(ModuleType moduleType, String data,
|
|
|
+ byte[] templateBytes, String sessionId, Long relationId, AtomicInteger counter) throws Exception {
|
|
|
String reportPath;
|
|
|
+
|
|
|
switch (moduleType) {
|
|
|
case ANTIBRIBERY:
|
|
|
- reportPath = new AntiBriberyRender(sessionId, filerepoProperties)
|
|
|
- .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
|
|
|
+ reportPath = new AntiBriberyRender(sessionId, filerepoProperties, commonDataCache)
|
|
|
+ .renderDocx(data, templateBytes, String.valueOf(relationId));
|
|
|
break;
|
|
|
case ANTIBRIBERY_NEW:
|
|
|
- reportPath = new AntiBriberyNewRender(sessionId, filerepoProperties)
|
|
|
- .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
|
|
|
+ reportPath = new AntiBriberyNewRender(sessionId, filerepoProperties, commonDataCache)
|
|
|
+ .renderDocx(data, templateBytes, String.valueOf(relationId), counter);
|
|
|
break;
|
|
|
case PLATFORM_COMPANY_BASICINFO:
|
|
|
- reportPath = new BasicInfoRender(sessionId, filerepoProperties)
|
|
|
- .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
|
|
|
+ reportPath = new BasicInfoRender(sessionId, filerepoProperties, commonDataCache)
|
|
|
+ .renderDocx(data, templateBytes, String.valueOf(relationId));
|
|
|
break;
|
|
|
case PLATFORM_COMPANY_ATTACHMENTSECTION:
|
|
|
- reportPath = new AttachmentSectionRender(sessionId, filerepoProperties)
|
|
|
- .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
|
|
|
+ reportPath = new AttachmentSectionRender(sessionId, filerepoProperties, commonDataCache)
|
|
|
+ .renderDocx(data, templateBytes, String.valueOf(relationId), counter);
|
|
|
break;
|
|
|
case ASSOCIATION_ATTACHMENTSECTION:
|
|
|
- reportPath = new AssociationAttachmentSectionRender(sessionId, filerepoProperties)
|
|
|
- .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
|
|
|
+ reportPath = new AssociationAttachmentSectionRender(sessionId, filerepoProperties, commonDataCache)
|
|
|
+ .renderDocx(data, templateBytes, String.valueOf(relationId));
|
|
|
break;
|
|
|
case FOUNDATION_ATTACHMENTSECTION:
|
|
|
- reportPath = new FoundationAttachmentSectionRender(sessionId, filerepoProperties)
|
|
|
- .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
|
|
|
+ reportPath = new FoundationAttachmentSectionRender(sessionId, filerepoProperties, commonDataCache)
|
|
|
+ .renderDocx(data, templateBytes, String.valueOf(relationId));
|
|
|
break;
|
|
|
case COMMON:
|
|
|
- reportPath = new ServiceProviderInfoRender(sessionId, filerepoProperties)
|
|
|
- .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
|
|
|
+ reportPath = new ServiceProviderInfoRender(sessionId, filerepoProperties, commonDataCache)
|
|
|
+ .renderDocx(data, templateBytes, String.valueOf(relationId), counter);
|
|
|
break;
|
|
|
case PLATFORM_COMPANY_FINANCIALINFO:
|
|
|
- reportPath = new FinancialInfoRender(sessionId, filerepoProperties)
|
|
|
- .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
|
|
|
+ reportPath = new FinancialInfoRender(sessionId, filerepoProperties, commonDataCache)
|
|
|
+ .renderDocx(data, templateBytes, String.valueOf(relationId));
|
|
|
break;
|
|
|
case PLATFORM_COMPANY_FINANCIALINFO_NEW:
|
|
|
- reportPath = new FinancialInfoNewRender(sessionId, filerepoProperties)
|
|
|
- .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
|
|
|
+ reportPath = new FinancialInfoNewRender(sessionId, filerepoProperties, commonDataCache)
|
|
|
+ .renderDocx(data, templateBytes, String.valueOf(relationId), counter);
|
|
|
break;
|
|
|
case FOUNDATION_FINANCIALINFO:
|
|
|
- reportPath = new FoundationfinancialInfoRender(sessionId, filerepoProperties)
|
|
|
- .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
|
|
|
+ reportPath = new FoundationfinancialInfoRender(sessionId, filerepoProperties, commonDataCache)
|
|
|
+ .renderDocx(data, templateBytes, String.valueOf(relationId));
|
|
|
break;
|
|
|
case PUBLIC_RECORD:
|
|
|
- reportPath = new PublicRecordRender(sessionId, filerepoProperties)
|
|
|
- .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
|
|
|
+ reportPath = new PublicRecordRender(sessionId, filerepoProperties, commonDataCache)
|
|
|
+ .renderDocx(data, templateBytes, String.valueOf(relationId));
|
|
|
break;
|
|
|
case PUBLIC_RECORD_NEW:
|
|
|
- reportPath = new PublicRecordNewRender(sessionId, filerepoProperties)
|
|
|
- .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
|
|
|
+ reportPath = new PublicRecordNewRender(sessionId, filerepoProperties, commonDataCache)
|
|
|
+ .renderDocx(data, templateBytes, String.valueOf(relationId), counter);
|
|
|
break;
|
|
|
case PLATFORM_COMPANY_BASICINFO_NEW:
|
|
|
- reportPath = new BasicInfoNewRender(sessionId, filerepoProperties)
|
|
|
- .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
|
|
|
+ reportPath = new BasicInfoNewRender(sessionId, filerepoProperties, commonDataCache)
|
|
|
+ .renderDocx(data, templateBytes, String.valueOf(relationId), counter);
|
|
|
break;
|
|
|
case FOUNDATION_BASICINFO:
|
|
|
- reportPath = new FoundationBasicInfoRender(sessionId, filerepoProperties)
|
|
|
- .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
|
|
|
+ reportPath = new FoundationBasicInfoRender(sessionId, filerepoProperties, commonDataCache)
|
|
|
+ .renderDocx(data, templateBytes, String.valueOf(relationId));
|
|
|
break;
|
|
|
case ASSOCIATION_BASICINFO:
|
|
|
- reportPath = new AssociationBasicInfoRender(sessionId, filerepoProperties)
|
|
|
- .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
|
|
|
+ reportPath = new AssociationBasicInfoRender(sessionId, filerepoProperties, commonDataCache)
|
|
|
+ .renderDocx(data, templateBytes, String.valueOf(relationId));
|
|
|
break;
|
|
|
case PROJECT:
|
|
|
- reportPath = new ProjectInfoRender(sessionId, filerepoProperties)
|
|
|
- .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
|
|
|
+ reportPath = new ProjectInfoRender(sessionId, filerepoProperties, commonDataCache)
|
|
|
+ .renderDocx(data, templateBytes, String.valueOf(relationId));
|
|
|
break;
|
|
|
case INTERESTCONFLICTS:
|
|
|
- reportPath = new InterestConflictsRender(sessionId, filerepoProperties)
|
|
|
- .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
|
|
|
+ reportPath = new InterestConflictsRender(sessionId, filerepoProperties, commonDataCache)
|
|
|
+ .renderDocx(data, templateBytes, String.valueOf(relationId));
|
|
|
break;
|
|
|
case TAX_NEW:
|
|
|
- reportPath = new TaxNewRender(sessionId, filerepoProperties)
|
|
|
- .renderDocx(data, processedData, templateBytes, String.valueOf(relationId));
|
|
|
+ reportPath = new TaxNewRender(sessionId, filerepoProperties, commonDataCache)
|
|
|
+ .renderDocx(data, templateBytes, String.valueOf(relationId), counter);
|
|
|
break;
|
|
|
default:
|
|
|
throw new UnsupportedOperationException("Unsupported module type: " + moduleType);
|