|
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import org.springblade.business.entity.ArchiveFile;
|
|
|
import org.springblade.business.entity.InformationQuery;
|
|
|
+import org.springblade.business.feign.ArchiveFileClient;
|
|
|
import org.springblade.core.secure.utils.AuthUtil;
|
|
|
import org.springblade.manager.entity.ArchiveTreeContract;
|
|
|
import org.springblade.manager.entity.ContractInfo;
|
|
@@ -36,6 +37,8 @@ public class ArchiveTreeContractSyncImpl {
|
|
|
|
|
|
private final IContractInfoService contractInfoService;
|
|
|
|
|
|
+ private final ArchiveFileClient archiveFileClient;
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
@@ -227,6 +230,11 @@ public class ArchiveTreeContractSyncImpl {
|
|
|
}
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
+ * 同步某个合同段的质检资料到归档
|
|
|
+ * @param projectId
|
|
|
+ * @param contractId
|
|
|
+ */
|
|
|
public void syncBusinessData(Long projectId,Long contractId) {
|
|
|
|
|
|
//检查是否有配置关联质检的节点
|
|
@@ -277,17 +285,45 @@ public class ArchiveTreeContractSyncImpl {
|
|
|
archiveTreeContractIdMap.put(ar.getExtKeyId(),ar.getId());
|
|
|
}
|
|
|
|
|
|
+ //获取合同段wbs划分树,用来组织树
|
|
|
+ List<WbsTreeContractVO6> wbsTrees = contractInfoService.tree8(lWbsId.toString(), projectId.toString(), contractId.toString());
|
|
|
+ if (wbsTrees == null || wbsTrees.size() == 0) {
|
|
|
+ return ;
|
|
|
+ }
|
|
|
+
|
|
|
+ //将树转换成list
|
|
|
+ List<WbsTreeContractVO6> wbsTreeContractVO6s = new ArrayList<>();
|
|
|
+ ForestNodeMerger.getTreeList(wbsTrees.get(0), wbsTreeContractVO6s);
|
|
|
+
|
|
|
+ Integer i = 0;
|
|
|
+ //id 到 wbs节点的映射
|
|
|
+ Map<Long,WbsTreeContractVO6> wbsTreeContractVO6Map = new HashMap<>();
|
|
|
+ // keyid 到id的映射
|
|
|
+ Map<Long,Long> wbsTreeKeyToIdMap = new HashMap<>();
|
|
|
+ Map<Long,Integer> wbsTreeKeyToSortMap = new HashMap<>();
|
|
|
+ for (WbsTreeContractVO6 wbsTreeContractVO6 : wbsTreeContractVO6s) {
|
|
|
+ i++;
|
|
|
+ wbsTreeKeyToSortMap.put(wbsTreeContractVO6.getPKeyId(),i);
|
|
|
+ wbsTreeContractVO6Map.put(wbsTreeContractVO6.getId(),wbsTreeContractVO6);
|
|
|
+ wbsTreeKeyToIdMap.put(wbsTreeContractVO6.getPKeyId(),wbsTreeContractVO6.getId());
|
|
|
+ }
|
|
|
+
|
|
|
//遍历,所有已归档文件
|
|
|
for (InformationQuery info: informationQueryList) {
|
|
|
|
|
|
if (info.getWbsId() != null) {
|
|
|
ArchiveFile archiveFile = archiveKeyIdMap.get(info.getWbsId());
|
|
|
+ Integer sort = wbsTreeKeyToSortMap.get(info.getWbsId());
|
|
|
|
|
|
//归档文件里没有则新增
|
|
|
if ( archiveFile == null) {
|
|
|
+ if (sort!= null) {
|
|
|
+ info.setSort(sort);
|
|
|
+ }
|
|
|
newInformationQueryList.add(info);
|
|
|
- }//文件不同,则说明重签过,需要更新
|
|
|
- else if (!archiveFile.getPdfFileUrl().equals(info.getEVisaPdfUrl())) {
|
|
|
+ }//文件不同,则说明重签过,需要更新,顺序不同也更新
|
|
|
+ else if (!archiveFile.getPdfFileUrl().equals(info.getEVisaPdfUrl())
|
|
|
+ || (sort!= null && sort != archiveFile.getSort()) ) {
|
|
|
|
|
|
//需要更新的
|
|
|
//todo 后续需增加判断已组件或者锁定的不要更新?
|
|
@@ -295,32 +331,12 @@ public class ArchiveTreeContractSyncImpl {
|
|
|
archiveFile.setEVisaFile(info.getEVisaPdfUrl());
|
|
|
archiveFile.setFilePage(info.getEVisaPdfPage());
|
|
|
archiveFile.setFileSize(info.getEVisaPdfSize());
|
|
|
+ archiveFile.setSort(sort);
|
|
|
updateArchiveFiles.add(archiveFile);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- //获取合同段wbs划分树,用来组织树
|
|
|
- List<WbsTreeContractVO6> wbsTrees = contractInfoService.tree8(lWbsId.toString(), projectId.toString(), contractId.toString());
|
|
|
- if (wbsTrees == null || wbsTrees.size() == 0) {
|
|
|
- return ;
|
|
|
- }
|
|
|
-
|
|
|
- //将树转换成list
|
|
|
- List<WbsTreeContractVO6> wbsTreeContractVO6s = new ArrayList<>();
|
|
|
- ForestNodeMerger.getTreeList(wbsTrees.get(0), wbsTreeContractVO6s);
|
|
|
-
|
|
|
- //id 到 wbs节点的映射
|
|
|
- Map<Long,WbsTreeContractVO6> wbsTreeContractVO6Map = new HashMap<>();
|
|
|
- // keyid 到id的映射
|
|
|
- Map<Long,Long> wbsTreeKeyToIdMap = new HashMap<>();
|
|
|
- for (WbsTreeContractVO6 wbsTreeContractVO6 : wbsTreeContractVO6s) {
|
|
|
- wbsTreeContractVO6Map.put(wbsTreeContractVO6.getId(),wbsTreeContractVO6);
|
|
|
- wbsTreeKeyToIdMap.put(wbsTreeContractVO6.getPKeyId(),wbsTreeContractVO6.getId());
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
for (InformationQuery info: newInformationQueryList) {
|
|
|
|
|
|
Long keyId = info.getWbsId();
|
|
@@ -339,16 +355,37 @@ public class ArchiveTreeContractSyncImpl {
|
|
|
newArchiveFiles.add(archiveFile);
|
|
|
}
|
|
|
|
|
|
- //生成map,对于对于newInformationQueryList,递归找nodeId,找到则设置到archiveFileList
|
|
|
+ //刷新文件
|
|
|
+ handleAddandUpdateFiles(newArchiveFiles,updateArchiveFiles);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 刷新文件
|
|
|
+ * @param newArchiveFiles
|
|
|
+ * @param updateArchiveFiles
|
|
|
+ */
|
|
|
+ void handleAddandUpdateFiles(List<ArchiveFile> newArchiveFiles,List<ArchiveFile> updateArchiveFiles) {
|
|
|
+ if (newArchiveFiles.size() > 0) {
|
|
|
+ List<List<ArchiveFile>> files = groupFiles(newArchiveFiles);
|
|
|
+ for (List<ArchiveFile> fileList: files) {
|
|
|
+ archiveFileClient.addArchiveFile(fileList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (updateArchiveFiles.size() > 0) {
|
|
|
+ List<List<ArchiveFile>> files = groupFiles(updateArchiveFiles);
|
|
|
+ for (List<ArchiveFile> fileList: files) {
|
|
|
+ archiveTreeContractMapper.updateBatchFileSortById(fileList);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- //对于updateInformationQueryList,需要找出更新文件和文件大小
|
|
|
|
|
|
- //根据归档树,刷新排序
|
|
|
}
|
|
|
|
|
|
+
|
|
|
public List<InformationQuery> getInformationQuerys(Long contractId) {
|
|
|
//获取某个合同段所有的电签完成的文件题名,取 id wbsid name,eVisaPdfUrl
|
|
|
- List<InformationQuery> informationQueryList = new ArrayList<>();
|
|
|
+ List<InformationQuery> informationQueryList = archiveTreeContractMapper.getInformationByContractId(contractId);
|
|
|
return informationQueryList;
|
|
|
|
|
|
//互殴去
|
|
@@ -356,10 +393,8 @@ public class ArchiveTreeContractSyncImpl {
|
|
|
|
|
|
public List<ArchiveFile> getArchiveFiles(Long contractId) {
|
|
|
|
|
|
- List<ArchiveFile> archiveFiles = new ArrayList<>();
|
|
|
+ List<ArchiveFile> archiveFiles = archiveTreeContractMapper.getListByContractId(contractId);
|
|
|
return archiveFiles;
|
|
|
-
|
|
|
- //互殴去
|
|
|
}
|
|
|
|
|
|
public List<ArchiveTreeContract> getArchiveTreeContractsWbs(Long contractId) {
|
|
@@ -390,6 +425,8 @@ public class ArchiveTreeContractSyncImpl {
|
|
|
ArchiveFile archiveFile = new ArchiveFile();
|
|
|
archiveFile.setNodeId(nodeId.toString());
|
|
|
archiveFile.setNodeExtId(keyId);
|
|
|
+
|
|
|
+ archiveFile.setProjectId(query.getProjectId() == null?"":query.getProjectId().toString());
|
|
|
archiveFile.setContractId(query.getContractId().toString());
|
|
|
archiveFile.setStatus(2); // 这里是新增归档文件,所以状态为1(已完成)
|
|
|
//TODO 文件题名规则,待补充
|
|
@@ -397,6 +434,7 @@ public class ArchiveTreeContractSyncImpl {
|
|
|
archiveFile.setFileTime(query.getBusinessTime());
|
|
|
|
|
|
archiveFile.setSourceType(1);
|
|
|
+ archiveFile.setIsArchive(0);
|
|
|
|
|
|
//责任人怎么取
|
|
|
archiveFile.setDutyUser(unit);
|
|
@@ -408,6 +446,7 @@ public class ArchiveTreeContractSyncImpl {
|
|
|
//
|
|
|
archiveFile.setEVisaFile(query.getEVisaPdfUrl());
|
|
|
archiveFile.setPdfFileUrl(query.getEVisaPdfUrl());
|
|
|
+ archiveFile.setSort(query.getSort());
|
|
|
return archiveFile;
|
|
|
}
|
|
|
|
|
@@ -418,4 +457,25 @@ public class ArchiveTreeContractSyncImpl {
|
|
|
.eq(ArchiveTreeContract::getContractId, contractId)
|
|
|
.eq(ArchiveTreeContract::getStorageType, 4));
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 分组
|
|
|
+ * @param newArchiveFiles
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<List<ArchiveFile>> groupFiles(List<ArchiveFile> newArchiveFiles) {
|
|
|
+ List<List<ArchiveFile>> groupedFiles = new ArrayList<>();
|
|
|
+ int size = newArchiveFiles.size();
|
|
|
+ int index = 0;
|
|
|
+
|
|
|
+ while (index < size) {
|
|
|
+ int endIndex = Math.min(index + 100, size);
|
|
|
+ List<ArchiveFile> group = newArchiveFiles.subList(index, endIndex);
|
|
|
+ groupedFiles.add(group);
|
|
|
+ index += 100;
|
|
|
+ }
|
|
|
+ return groupedFiles;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|