|
|
@@ -1,45 +1,55 @@
|
|
|
package org.springblade.archive.service.impl;
|
|
|
|
|
|
-import com.alibaba.fastjson.JSON;
|
|
|
-import com.aliyun.oss.OSSClient;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.itextpdf.text.*;
|
|
|
import com.itextpdf.text.pdf.BaseFont;
|
|
|
import com.itextpdf.text.pdf.PdfPCell;
|
|
|
import com.itextpdf.text.pdf.PdfPTable;
|
|
|
import com.itextpdf.text.pdf.PdfWriter;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
+import lombok.var;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
+import org.apache.http.client.config.RequestConfig;
|
|
|
+import org.apache.http.client.methods.HttpHead;
|
|
|
+import org.apache.http.impl.client.CloseableHttpClient;
|
|
|
+import org.apache.http.impl.client.HttpClients;
|
|
|
import org.springblade.archive.entity.ArchiveExaminingReport;
|
|
|
import org.springblade.archive.entity.ArchiveExaminingReportDetail;
|
|
|
import org.springblade.archive.mapper.ArchiveExaminingReportMapper;
|
|
|
import org.springblade.archive.service.IArchiveExaminingReportDetailService;
|
|
|
import org.springblade.archive.service.IArchiveExaminingReportService;
|
|
|
import org.springblade.archive.socket.WebSocketServer;
|
|
|
+import org.springblade.archive.utils.ClamAVClientScanner;
|
|
|
import org.springblade.archive.utils.FileUtils;
|
|
|
+import org.springblade.archive.utils.RemoteFileExtension;
|
|
|
+import org.springblade.archive.utils.RemoteFileMD5Calculator;
|
|
|
import org.springblade.archive.vo.ArchiveExaminingSocketVo;
|
|
|
import org.springblade.archive.vo.ArchiveExaminingVo;
|
|
|
+import org.springblade.archive.vo.ArchivesAutoVO;
|
|
|
import org.springblade.business.entity.ArchiveFile;
|
|
|
+import org.springblade.business.entity.MetadataClassification;
|
|
|
import org.springblade.business.feign.ArchiveFileClient;
|
|
|
+import org.springblade.business.feign.MetadataClassificationClient;
|
|
|
import org.springblade.common.constant.ArchiveConstant;
|
|
|
import org.springblade.core.mp.base.BaseServiceImpl;
|
|
|
import org.springblade.core.oss.model.BladeFile;
|
|
|
-import org.springblade.core.secure.BladeUser;
|
|
|
-import org.springblade.core.secure.utils.AuthUtil;
|
|
|
-import org.springblade.core.secure.utils.SecureUtil;
|
|
|
+import org.springblade.core.tool.utils.CollectionUtil;
|
|
|
import org.springblade.core.tool.utils.StringUtil;
|
|
|
import org.springblade.evisa.feign.EVisaClient;
|
|
|
import org.springblade.evisa.vo.CertBeanVO;
|
|
|
+import org.springblade.manager.entity.ArchiveTreeContract;
|
|
|
+import org.springblade.manager.feign.ArchiveTreeContractClient;
|
|
|
import org.springblade.resource.feign.NewIOSSClient;
|
|
|
-import org.springblade.resource.feign.NewISmsClient;
|
|
|
import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import xyz.capybara.clamav.commands.scan.result.ScanResult;
|
|
|
|
|
|
-import java.io.FileNotFoundException;
|
|
|
import java.io.FileOutputStream;
|
|
|
import java.io.IOException;
|
|
|
import java.util.*;
|
|
|
import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @Param
|
|
|
@@ -59,6 +69,11 @@ public class ArchiveExaminingReportImpl extends BaseServiceImpl<ArchiveExamining
|
|
|
|
|
|
private final EVisaClient eVisaClient;
|
|
|
|
|
|
+ private final ArchivesAutoServiceImpl archivesAutoService;
|
|
|
+
|
|
|
+ private final ArchiveTreeContractClient archiveTreeContractClient;
|
|
|
+ private final MetadataClassificationClient metadataClassificationClient;
|
|
|
+
|
|
|
/**
|
|
|
* 推送状态到前端
|
|
|
*
|
|
|
@@ -99,112 +114,329 @@ public class ArchiveExaminingReportImpl extends BaseServiceImpl<ArchiveExamining
|
|
|
report.setId(id);
|
|
|
report.setStatus(2);
|
|
|
this.updateById(report);
|
|
|
- //获取项目中所有档案文件的工序资料pdfUrl
|
|
|
- List<ArchiveFile> files = archiveFileClient.getAllPdfFileUrlByProjectIdAndFileType(vo.getProjectId());
|
|
|
+
|
|
|
+ //优化 获取权限表示码
|
|
|
+ String authCode = archiveTreeContractClient.getAuthCode(vo.getContractId());
|
|
|
+ //封装查询参数查询
|
|
|
+ ArchivesAutoVO queryVo = new ArchivesAutoVO();
|
|
|
+ queryVo.setProjectId(vo.getProjectId());
|
|
|
+ queryVo.setContractId(vo.getContractId());
|
|
|
+ queryVo.setCurrent(1);
|
|
|
+ queryVo.setSize(999999999);
|
|
|
+ queryVo.setIsArchive(1);
|
|
|
+ queryVo.setAuthCode(authCode);
|
|
|
+ //多个节点查询数据
|
|
|
+ String nodeIds = vo.getNodeIds();
|
|
|
+ Set<String> collect = new HashSet<>();
|
|
|
+ if(StringUtils.isNotEmpty(nodeIds)){
|
|
|
+ for (String s : nodeIds.split(",")) {
|
|
|
+ queryVo.setNodeIds(s);
|
|
|
+ //封装参数查询组卷列表
|
|
|
+ IPage<ArchivesAutoVO> page = archivesAutoService.selectArchivesAutoFilePage(queryVo);
|
|
|
+ List<ArchivesAutoVO> records = page.getRecords();
|
|
|
+ if(CollectionUtil.isNotEmpty(records)){
|
|
|
+ collect.addAll(records.stream().map(ArchivesAutoVO::getId).map(String::valueOf).collect(Collectors.toSet()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //选中的指定文件也加入进来
|
|
|
+ if(StringUtils.isNotEmpty(vo.getFileIds())){
|
|
|
+ Set<String> collect1 = Arrays.stream(vo.getFileIds().split(",")).collect(Collectors.toSet());
|
|
|
+ collect.addAll(collect1);
|
|
|
+ }
|
|
|
+ List<ArchiveFile> files = new ArrayList<>();
|
|
|
+ if(CollectionUtil.isNotEmpty(collect)){
|
|
|
+ //类型转换
|
|
|
+ List<String> strings = new ArrayList<>(collect);
|
|
|
+ //根据组件id查询文件数据
|
|
|
+ files = archiveFileClient.getAllArchiveFileByArchiveIds(strings);
|
|
|
+ }
|
|
|
+ //文件类型范围
|
|
|
+ List<String> strings = new ArrayList<>();
|
|
|
+ strings.add("pdf");
|
|
|
+ strings.add("dwg");
|
|
|
+ strings.add("jpg");
|
|
|
+ strings.add("png");
|
|
|
//不合格对象
|
|
|
List<Map<String, String>> mapList = new ArrayList<>();
|
|
|
+ //1-1 电签验证
|
|
|
int unqualifiedCount = 0;
|
|
|
- //检测中
|
|
|
- //真实性
|
|
|
- if (StringUtils.isNotBlank(vo.getAuthenticity()) && "1".equals(vo.getAuthenticity())) {
|
|
|
- //检测项目下所有工序资料PDF签章有效性
|
|
|
+ //1-2 一致性检测
|
|
|
+ int consistency = 0;
|
|
|
+ //1-5 对设定值域的元数据项值域符合度检测
|
|
|
+ int metadataCompliance = 0;
|
|
|
+ //1-6 对元数据项数据重复性检测
|
|
|
+ int metadataRepeat = 0;
|
|
|
+ //2-3 对元数据项完整性检测
|
|
|
+ int metadataComplete = 0;
|
|
|
+ //2-4 对元数据项必填项
|
|
|
+ int metadataRequiredField = 0;
|
|
|
+
|
|
|
+ //3-1 文件格式
|
|
|
+ int fileType = 0;
|
|
|
+ //3-2 文件是否能够访问
|
|
|
+ int fileIsAccess = 0;
|
|
|
+ //4-1 病毒检测
|
|
|
+ int virusDetection = 0;
|
|
|
+ //4-3 病毒安装
|
|
|
+ int virusInstall = 0;
|
|
|
+
|
|
|
+ //检测中 文件为空,不允许检测
|
|
|
+ if(CollectionUtil.isNotEmpty(files)){
|
|
|
+ Map<Integer,String> storageTypeMap = new HashMap<>();
|
|
|
+ storageTypeMap.put(1,"a");
|
|
|
+ storageTypeMap.put(2,"b");
|
|
|
+ storageTypeMap.put(3,"c");
|
|
|
+ storageTypeMap.put(4,"d");
|
|
|
+ storageTypeMap.put(5,"e");
|
|
|
+ storageTypeMap.put(7,"f");
|
|
|
+ storageTypeMap.put(6,"g");
|
|
|
+ storageTypeMap.put(8,"h");
|
|
|
+ storageTypeMap.put(9,"i");
|
|
|
+ //获取nodeId 查询节点信息
|
|
|
+ Map<String, List<ArchiveFile>> collect2 = files.stream().collect(Collectors.groupingBy(ArchiveFile::getNodeId));
|
|
|
+ List<Long> collect11 = collect2.keySet().stream().map(String::trim).filter(s -> !s.isEmpty()).map(Long::valueOf).collect(Collectors.toList());
|
|
|
+ List<ArchiveTreeContract> archiveTreeContractListByList = archiveTreeContractClient.getArchiveTreeContractListByList(collect11);
|
|
|
+ //获取所有的元数据配置项
|
|
|
+ List<MetadataClassification> metadataClassification = metadataClassificationClient.getMetadataClassification();
|
|
|
+ //组装数据,节点与元数据配置型的映射关系
|
|
|
+ HashMap<Long, List<MetadataClassification>> longStringHashMap = new HashMap<>();
|
|
|
+ archiveTreeContractListByList.forEach(f -> {
|
|
|
+ List<MetadataClassification> collect1 = metadataClassification.stream().filter(e -> e.getFileStorageType().contains(storageTypeMap.get(f.getStorageType()))).collect(Collectors.toList());
|
|
|
+ longStringHashMap.put(f.getId(),collect1);
|
|
|
+ });
|
|
|
for (ArchiveFile file : files) {
|
|
|
- if (StringUtils.isNotBlank(file.getPdfFileUrl())) {
|
|
|
- CertBeanVO cb = eVisaClient.onlineCheckSeal(file.getPdfFileUrl());
|
|
|
- if (cb == null) {
|
|
|
- Map<String, String> map = new HashMap<>();
|
|
|
- map.put("examiningItem", ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对固化信息有效性检测");
|
|
|
- map.put("unqualifiedObject", file.getFileName());
|
|
|
- mapList.add(map);
|
|
|
- unqualifiedCount++;
|
|
|
+ //当前文件父节点对应的元数据配置项
|
|
|
+ List<MetadataClassification> metadataClassifications = longStringHashMap.get(Long.valueOf(file.getNodeId()));
|
|
|
+ //获取文件元数据项
|
|
|
+ List<HashMap<String, Object>> list = metadataClassificationClient.getMetadaFileByFileId(file.getId());
|
|
|
+ //优先检查文件是否可读
|
|
|
+ if(StringUtils.isEmpty(file.getPdfFileUrl()) || !validateWithHead(file.getPdfFileUrl())){
|
|
|
+ Map<String, String> map = new HashMap<>();
|
|
|
+ map.put("examiningItem", ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对电子档案内容数据的可读性检测");
|
|
|
+ map.put("unqualifiedObject", file.getFileName());
|
|
|
+ mapList.add(map);
|
|
|
+ fileIsAccess++;
|
|
|
+ detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_USABILITY,
|
|
|
+ ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对电子档案内容数据的可读性检测", fileIsAccess, fileIsAccess == 0 ? "无" : "详见附件", fileIsAccess == 0 ? 0 : 1));
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //真实性
|
|
|
+ if (StringUtils.isNotBlank(vo.getAuthenticity()) && "1".equals(vo.getAuthenticity())) {
|
|
|
+ //获取文件数字摘要
|
|
|
+ RemoteFileMD5Calculator.MD5Result remoteFileMD5FromHeaders = RemoteFileMD5Calculator.getRemoteFileMD5FromHeaders(file.getPdfFileUrl());
|
|
|
+ String md5Hash = remoteFileMD5FromHeaders.getMd5Hash();
|
|
|
+ if(vo.getAuthenticityList().contains("1")){
|
|
|
+ //检测项目下所有工序资料PDF签章有效性
|
|
|
+ CertBeanVO cb = eVisaClient.onlineCheckSeal(file.getPdfFileUrl());
|
|
|
+ //数字摘要判断和电签
|
|
|
+ if (cb == null || !file.getFileName().equals(md5Hash)) {
|
|
|
+ Map<String, String> map = new HashMap<>();
|
|
|
+ map.put("examiningItem", ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对固化信息有效性检测");
|
|
|
+ map.put("unqualifiedObject", file.getFileName());
|
|
|
+ mapList.add(map);
|
|
|
+ unqualifiedCount++;
|
|
|
+ }
|
|
|
+ detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_AUTHENTICITY,
|
|
|
+ ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对固化信息有效性检测", unqualifiedCount, unqualifiedCount == 0 ? "无" : "详见附件", unqualifiedCount == 0 ? 0 : 1));
|
|
|
+ }
|
|
|
+ if(vo.getAuthenticityList().contains("2")){
|
|
|
+ if (!file.getFileName().equals(md5Hash)) {
|
|
|
+ Map<String, String> map = new HashMap<>();
|
|
|
+ map.put("examiningItem", ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对固化信息有效性检测");
|
|
|
+ map.put("unqualifiedObject", file.getFileName());
|
|
|
+ mapList.add(map);
|
|
|
+ consistency++;
|
|
|
+ }
|
|
|
+ detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_AUTHENTICITY,
|
|
|
+ ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对电子文件内容一致性检测", consistency, consistency == 0 ? "无" : "详见附件", consistency == 0 ? 0 : 1));
|
|
|
+ }
|
|
|
+ if(vo.getAuthenticityList().contains("3")){}
|
|
|
+ if(vo.getAuthenticityList().contains("4")){}
|
|
|
+ if(vo.getAuthenticityList().contains("5")){
|
|
|
+ //获取元数据
|
|
|
+ if(CollectionUtil.isEmpty(list) ){
|
|
|
+ Map<String, String> map = new HashMap<>();
|
|
|
+ map.put("examiningItem", ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对设定值域的元数据项值域符合度检测");
|
|
|
+ map.put("unqualifiedObject", file.getFileName());
|
|
|
+ mapList.add(map);
|
|
|
+ metadataCompliance++;
|
|
|
+ }
|
|
|
+ detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_AUTHENTICITY,
|
|
|
+ ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对设定值域的元数据项值域符合度检测", metadataCompliance, metadataCompliance == 0 ? "无" : "详见附件", metadataCompliance == 0 ? 0 : 1));
|
|
|
+ }
|
|
|
+ if(vo.getAuthenticityList().contains("6")){
|
|
|
+ //获取元数据
|
|
|
+ if(CollectionUtil.isEmpty(list)){
|
|
|
+ Map<String, String> map = new HashMap<>();
|
|
|
+ map.put("examiningItem", ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对元数据项数据重复性检测");
|
|
|
+ map.put("unqualifiedObject", file.getFileName());
|
|
|
+ mapList.add(map);
|
|
|
+ metadataRepeat++;
|
|
|
+ }else{
|
|
|
+ List<String> data = new ArrayList<>();
|
|
|
+ HashMap<String, Object> stringObjectHashMap = list.get(0);
|
|
|
+ for (MetadataClassification classification : metadataClassifications) {
|
|
|
+ String fieldKey = classification.getFieldKey();
|
|
|
+ data.add(stringObjectHashMap.get(fieldKey).toString());
|
|
|
+ }
|
|
|
+ HashSet<String> strings1 = new HashSet<>(data);
|
|
|
+ //存在重复数据
|
|
|
+ if(data.size() != strings1.size()){
|
|
|
+ Map<String, String> map = new HashMap<>();
|
|
|
+ map.put("examiningItem", ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对元数据项数据重复性检测");
|
|
|
+ map.put("unqualifiedObject", file.getFileName());
|
|
|
+ mapList.add(map);
|
|
|
+ metadataRepeat++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_AUTHENTICITY,
|
|
|
+ ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对元数据项数据重复性检测", metadataRepeat, metadataRepeat == 0 ? "无" : "详见附件", metadataRepeat == 0 ? 0 : 1));
|
|
|
+ }
|
|
|
+ if(vo.getAuthenticityList().contains("7")){}
|
|
|
+ if(vo.getAuthenticityList().contains("8")){
|
|
|
+ //TODO
|
|
|
+ detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_AUTHENTICITY,
|
|
|
+ ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对信息包一致性检测", 0, "无", 0));
|
|
|
+ }
|
|
|
+ if(vo.getAuthenticityList().contains("9")){}
|
|
|
+ if(vo.getAuthenticityList().contains("10")){}
|
|
|
+ report.setReportDetailStatus(1);
|
|
|
+ this.updateById(report);
|
|
|
+ }
|
|
|
+ //完整性
|
|
|
+ if (StringUtils.isNotBlank(vo.getIntegrality()) && "1".equals(vo.getIntegrality())) {
|
|
|
+ Thread.sleep(5000L);
|
|
|
+ if(vo.getAuthenticityList().contains("1")){}
|
|
|
+ if(vo.getAuthenticityList().contains("2")){}
|
|
|
+ if(vo.getAuthenticityList().contains("3")){
|
|
|
+ //获取元数据
|
|
|
+ if(CollectionUtil.isEmpty(list)){
|
|
|
+ Map<String, String> map = new HashMap<>();
|
|
|
+ map.put("examiningItem", ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对元数据项完整性检测");
|
|
|
+ map.put("unqualifiedObject", file.getFileName());
|
|
|
+ mapList.add(map);
|
|
|
+ metadataComplete++;
|
|
|
+ }else{
|
|
|
+ //元数据
|
|
|
+ HashMap<String, Object> stringObjectHashMap = list.get(0);
|
|
|
+ //元数据项
|
|
|
+ List<String> collect1 = metadataClassifications.stream().map(MetadataClassification::getFieldKey).collect(Collectors.toList());
|
|
|
+ Set<String> strings2 = stringObjectHashMap.keySet();
|
|
|
+ //元数据项是否缺失
|
|
|
+ if(!strings2.containsAll(collect1)){
|
|
|
+ Map<String, String> map = new HashMap<>();
|
|
|
+ map.put("examiningItem", ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对元数据项完整性检测");
|
|
|
+ map.put("unqualifiedObject", file.getFileName());
|
|
|
+ mapList.add(map);
|
|
|
+ metadataComplete++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_INTEGRALITY,
|
|
|
+ ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对元数据项完整性检测", metadataComplete, metadataComplete == 0 ? "无" : "详见附件", metadataComplete == 0 ? 0 : 1));
|
|
|
+ }
|
|
|
+ if(vo.getAuthenticityList().contains("4")){
|
|
|
+ //获取元数据
|
|
|
+ if(CollectionUtil.isEmpty(list)){
|
|
|
+ Map<String, String> map = new HashMap<>();
|
|
|
+ map.put("examiningItem", ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对元数据必填项检测");
|
|
|
+ map.put("unqualifiedObject", file.getFileName());
|
|
|
+ mapList.add(map);
|
|
|
+ metadataRequiredField++;
|
|
|
+ }else{
|
|
|
+ //元数据
|
|
|
+ HashMap<String, Object> stringObjectHashMap = list.get(0);
|
|
|
+ //元数据项-必选项
|
|
|
+ List<String> collect1 = metadataClassifications.stream().filter(f -> f.getMandatoryType() == 1).map(MetadataClassification::getFieldKey).collect(Collectors.toList());
|
|
|
+ for (String s : collect1) {
|
|
|
+ Object o = stringObjectHashMap.get(s);
|
|
|
+ //必选项没有值
|
|
|
+ if(o == null){
|
|
|
+ Map<String, String> map = new HashMap<>();
|
|
|
+ map.put("examiningItem", ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对元数据必填项检测");
|
|
|
+ map.put("unqualifiedObject", file.getFileName());
|
|
|
+ mapList.add(map);
|
|
|
+ metadataRequiredField++;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_INTEGRALITY,
|
|
|
+ ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对元数据必填项检测", metadataRequiredField, metadataRequiredField == 0 ? "无" : "详见附件", metadataRequiredField == 0 ? 0 : 1));
|
|
|
}
|
|
|
+ if(vo.getAuthenticityList().contains("5")){}
|
|
|
+ if(vo.getAuthenticityList().contains("6")){}
|
|
|
+ if(vo.getAuthenticityList().contains("7")){}
|
|
|
+ if(vo.getAuthenticityList().contains("8")){}
|
|
|
+ report.setReportDetailStatus(2);
|
|
|
+ this.updateById(report);
|
|
|
+ }
|
|
|
+ //可用性
|
|
|
+ if (StringUtils.isNotBlank(vo.getUsability()) && "1".equals(vo.getUsability())) {
|
|
|
+ Thread.sleep(5000L);
|
|
|
+ if(vo.getAuthenticityList().contains("1")){
|
|
|
+ //获取文件后缀,后缀为
|
|
|
+ String fileExtensionFromUrl = RemoteFileExtension.getFileExtensionFromUrl(file.getPdfFileUrl());
|
|
|
+ if(StringUtils.isEmpty(fileExtensionFromUrl) || !strings.contains(fileExtensionFromUrl)){
|
|
|
+ Map<String, String> map = new HashMap<>();
|
|
|
+ map.put("examiningItem", ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对电子文件格式检测");
|
|
|
+ map.put("unqualifiedObject", file.getFileName());
|
|
|
+ mapList.add(map);
|
|
|
+ fileType++;
|
|
|
+ }
|
|
|
+ detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_USABILITY,
|
|
|
+ ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对电子文件格式检测", fileType, fileType == 0 ? "无" : "详见附件", fileType == 0 ? 0 : 1));
|
|
|
+ }
|
|
|
+ //3-2 放在最开始
|
|
|
+ if(vo.getAuthenticityList().contains("3")){
|
|
|
+ detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_USABILITY,
|
|
|
+ ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对目标数据库中的元数据可访问性检测", 0, "无", 0));
|
|
|
+ }
|
|
|
+ if(vo.getAuthenticityList().contains("4")){
|
|
|
+ detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_USABILITY,
|
|
|
+ ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对信息包中元数据可读性检测", 0, "无", 0));
|
|
|
+ }
|
|
|
+ if(vo.getAuthenticityList().contains("5")){
|
|
|
+ //TODO
|
|
|
+ detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_USABILITY,
|
|
|
+ ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对信息包中包含的内容数据合规性检测", 0, "无", 0));
|
|
|
+ }
|
|
|
+ if(vo.getAuthenticityList().contains("6")){}
|
|
|
+ report.setReportDetailStatus(3);
|
|
|
+ this.updateById(report);
|
|
|
+ }
|
|
|
+ //安全性
|
|
|
+ if (StringUtils.isNotBlank(vo.getSecurity()) && "1".equals(vo.getSecurity())) {
|
|
|
+ if(vo.getAuthenticityList().contains("1")){
|
|
|
+ ClamAVClientScanner clamAVClientScanner = new ClamAVClientScanner();
|
|
|
+ if(!clamAVClientScanner.checkHealth() || !ClamAVClientScanner.scanRemoteFile(file.getPdfFileUrl())){
|
|
|
+ Map<String, String> map = new HashMap<>();
|
|
|
+ map.put("examiningItem", ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对电子文件格式检测");
|
|
|
+ map.put("unqualifiedObject", file.getFileName());
|
|
|
+ mapList.add(map);
|
|
|
+ virusDetection++;
|
|
|
+ }
|
|
|
+ detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_SECURITY,
|
|
|
+ ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对病毒感染检测", virusDetection, virusDetection == 0 ? "无" : "详见附件", virusDetection == 0 ? 0 : 1));
|
|
|
+ }
|
|
|
+ if(vo.getAuthenticityList().contains("2")){}
|
|
|
+ if(vo.getAuthenticityList().contains("3")){
|
|
|
+ ClamAVClientScanner clamAVClientScanner = new ClamAVClientScanner();
|
|
|
+ if(!clamAVClientScanner.checkHealth()){
|
|
|
+ Map<String, String> map = new HashMap<>();
|
|
|
+ map.put("examiningItem", ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对电子文件格式检测");
|
|
|
+ map.put("unqualifiedObject", file.getFileName());
|
|
|
+ mapList.add(map);
|
|
|
+ virusInstall++;
|
|
|
+ }
|
|
|
+ detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_SECURITY,
|
|
|
+ ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对系统环境中是否安装杀毒软件检测", virusInstall, virusInstall == 0 ? "无" : "详见附件", virusInstall == 0 ? 0 : 1));
|
|
|
+ }
|
|
|
+ if(vo.getAuthenticityList().contains("4")){}
|
|
|
+ report.setReportDetailStatus(4);
|
|
|
+ this.updateById(report);
|
|
|
}
|
|
|
}
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_AUTHENTICITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对固化信息有效性检测", unqualifiedCount, unqualifiedCount == 0 ? "无" : "详见附件", unqualifiedCount == 0 ? 0 : 1));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_AUTHENTICITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对元数据项数据长度检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_AUTHENTICITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对元数据项数据类型、格式检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_AUTHENTICITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对设定值域的元数据项值域符合度检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_AUTHENTICITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对档号规范性检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_AUTHENTICITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对内容数据的电子属性一致性检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_AUTHENTICITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对元数据项数据重复性检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_AUTHENTICITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对元数据是否关联内容数据检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_AUTHENTICITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对信息包目录结构规范性检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_AUTHENTICITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对信息包一致性检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_AUTHENTICITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对电子档案封装包规范性检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_AUTHENTICITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对电子档案封装包电子前面有效性检测", 0, "无", 0));
|
|
|
- report.setReportDetailStatus(1);
|
|
|
- this.updateById(report);
|
|
|
- }
|
|
|
- if (StringUtils.isNotBlank(vo.getIntegrality()) && "1".equals(vo.getIntegrality())) {
|
|
|
- Thread.sleep(5000L);
|
|
|
- //完整性
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_INTEGRALITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对总件数相符性检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_INTEGRALITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对总字节数相符性检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_INTEGRALITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对元数据项完整性检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_INTEGRALITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对元数据必填著录项目检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_INTEGRALITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对过程信息完整性检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_INTEGRALITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对连续性元数据项检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_INTEGRALITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对内容数据完整性检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_INTEGRALITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对附件数据完整性检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_INTEGRALITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对归档范围检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_INTEGRALITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对信息包元数据完整性检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_INTEGRALITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对信息包内容数据完整性检测", 0, "无", 0));
|
|
|
- report.setReportDetailStatus(2);
|
|
|
- this.updateById(report);
|
|
|
- }
|
|
|
- //可用性
|
|
|
- if (StringUtils.isNotBlank(vo.getUsability()) && "1".equals(vo.getUsability())) {
|
|
|
- Thread.sleep(5000L);
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_USABILITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对信息包中元数据的可读性检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_USABILITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对目标数据库中的元数据可访问下检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_USABILITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对内容数据格式检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_USABILITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对内容数据的可读性检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_USABILITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对内容数据格式长期可用性检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_USABILITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对软硬件环境合规性检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_USABILITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对信息包中包含的内容数据格式合规性检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_USABILITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对备份数据可恢复性检测", 0, "无", 0));
|
|
|
- report.setReportDetailStatus(3);
|
|
|
- this.updateById(report);
|
|
|
- }
|
|
|
- //安全性
|
|
|
- if (StringUtils.isNotBlank(vo.getSecurity()) && "1".equals(vo.getSecurity())) {
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_SECURITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对系统环境中是否安装杀毒软件检测", 0, "无", 0));
|
|
|
- detailService.save(new ArchiveExaminingReportDetail(vo.getProjectId(), id, ArchiveConstant.ARCHIVE_EXAMINING_SECURITY,
|
|
|
- ArchiveConstant.ARCHIVE_EXAMINING_STANDARD + "对病毒感染检测", 0, "无", 0));
|
|
|
- report.setReportDetailStatus(4);
|
|
|
- this.updateById(report);
|
|
|
}
|
|
|
Thread.sleep(3000L);
|
|
|
//生成报告,生成PDF
|
|
|
@@ -217,8 +449,8 @@ public class ArchiveExaminingReportImpl extends BaseServiceImpl<ArchiveExamining
|
|
|
List<String> PdfUrls = new ArrayList<>();
|
|
|
PdfUrls.add(url);
|
|
|
PdfUrls.add(detailPdf);
|
|
|
- String localUrl = "/www/wwwroot/Users/hongchuangyanfa/Desktop/archiveExaminingPdf/123.pdf";
|
|
|
-// String localUrl = "D:\\develop\\test\\123.pdf";
|
|
|
+// String localUrl = "/www/wwwroot/Users/hongchuangyanfa/Desktop/archiveExaminingPdf/123.pdf";
|
|
|
+ String localUrl = "D:\\tools\\html\\123.pdf";
|
|
|
//合并pdf
|
|
|
FileUtils.mergePdfPublicMethods(PdfUrls, localUrl);
|
|
|
BladeFile bladeFile = iossClient.uploadFile("123.pdf", localUrl);
|
|
|
@@ -422,4 +654,25 @@ public class ArchiveExaminingReportImpl extends BaseServiceImpl<ArchiveExamining
|
|
|
}
|
|
|
return pdfPCell;
|
|
|
}
|
|
|
+
|
|
|
+ public static boolean validateWithHead(String fileUrl) {
|
|
|
+ try (CloseableHttpClient client = HttpClients.createDefault()) {
|
|
|
+ HttpHead request = new HttpHead(fileUrl);
|
|
|
+
|
|
|
+ // 设置超时配置
|
|
|
+ RequestConfig config = RequestConfig.custom()
|
|
|
+ .setConnectTimeout(5000)
|
|
|
+ .setSocketTimeout(5000)
|
|
|
+ .build();
|
|
|
+ request.setConfig(config);
|
|
|
+
|
|
|
+ try (var response = client.execute(request)) {
|
|
|
+ int statusCode = response.getStatusLine().getStatusCode();
|
|
|
+ return statusCode >= 200 && statusCode < 300;
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ System.out.println("验证失败: " + e.getMessage());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|