|
@@ -55,6 +55,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
|
|
|
private ArchiveFileClient archiveFileClient;
|
|
|
private ArchiveTreeContractClient archiveTreeContractClient;
|
|
|
|
|
|
+ private Map<String,Integer> indexMap; //按立卷位区分和生成流水号
|
|
|
|
|
|
@Override
|
|
|
public IPage<ArchivesAutoVO> selectArchivesAutoPage(IPage<ArchivesAutoVO> page, ArchivesAutoVO archivesAuto) {
|
|
@@ -143,7 +144,7 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
|
|
|
}
|
|
|
//步骤四:按照单独,分类,默认的顺序执行组卷流程。
|
|
|
archiveAutoMethod3(list3);//单独组卷
|
|
|
- archiveAutoMethod2(list2);//分类组卷
|
|
|
+ archiveAutoMethod2(list2,projectId);//分类组卷
|
|
|
archiveAutoMethod1(list1);//默认组卷
|
|
|
}
|
|
|
|
|
@@ -184,27 +185,45 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
- private ArchivesAuto builtArchives(ArchiveTreeContract node,int pageN,int fileN){
|
|
|
+ private ArchivesAuto builtArchives(ArchiveTreeContract node,int pageN,int fileN,String startDate,String endDate,String archiveName){
|
|
|
ArchivesAuto archivesAuto = new ArchivesAuto();
|
|
|
archivesAuto.setProjectId(node.getProjectId());
|
|
|
archivesAuto.setContractId(node.getContractId());
|
|
|
- archivesAuto.setName("");//TODO 案卷题名
|
|
|
- archivesAuto.setFileNumber("");//TODO 档号
|
|
|
+ archivesAuto.setName(archiveName);//案卷题名
|
|
|
+ if(indexMap==null){
|
|
|
+ indexMap=new HashMap<>();
|
|
|
+ }
|
|
|
+ //TODO 获取立卷单位
|
|
|
+ String unit="";
|
|
|
+ //获取档号
|
|
|
+ String fileNumberPrefix=node.getFileNumberPrefix(); //档号前缀在节点设置
|
|
|
+ Integer fileNumberSuffix = null;//档号后缀按立卷单位生成流水号
|
|
|
+ if(indexMap.containsKey(unit)){
|
|
|
+ fileNumberSuffix = indexMap.get(unit);
|
|
|
+ indexMap.put(unit,fileNumberSuffix+1);
|
|
|
+ }else{
|
|
|
+ fileNumberSuffix=1;
|
|
|
+ indexMap.put(unit,fileNumberSuffix+1);
|
|
|
+ }
|
|
|
+
|
|
|
+ archivesAuto.setFileNumber(fileNumberPrefix+fileNumberSuffix);//档号
|
|
|
//archivesAuto.setMicron();//微缩号
|
|
|
- archivesAuto.setUnit("");//TODO 单位
|
|
|
+ archivesAuto.setUnit(unit);//立卷单位
|
|
|
//archivesAuto.setQuantity();//数量/单位
|
|
|
- archivesAuto.setSpecification("");//TODO 规格 从节点规格获取
|
|
|
- archivesAuto.setStartDate(null);//TODO 文件开始时间
|
|
|
- archivesAuto.setEndDate(null);//TODO 文件结束时间
|
|
|
- archivesAuto.setStorageTime("");//TODO 保管时间 从节点规格获取
|
|
|
- archivesAuto.setSecretLevel("");//TODO 保密级别 从节点规格获取
|
|
|
+
|
|
|
+ archivesAuto.setSpecification(node.getSpecification());//案卷规格 从节点规格获取
|
|
|
+ archivesAuto.setStartDate(LocalDateTime.parse(startDate));//文件开始时间
|
|
|
+ archivesAuto.setEndDate(LocalDateTime.parse(endDate));//文件结束时间
|
|
|
+ archivesAuto.setStorageTime(node.getStorageTime());//保管期限 从节点规格获取
|
|
|
+ archivesAuto.setSecretLevel("");//保密级别 没地方设置 暂留
|
|
|
//archivesAuto.setCarrierType();//载体类型
|
|
|
//archivesAuto.setKeywords();//主题词
|
|
|
//archivesAuto.setStorageLocation();//存放位置
|
|
|
archivesAuto.setIsArchive(1);//已归档
|
|
|
//archivesAuto.setRemark();//备注
|
|
|
- archivesAuto.setRollDate(null);// TODO 立卷日期
|
|
|
- archivesAuto.setRollor("自动");//立卷人
|
|
|
+ archivesAuto.setRollDate(LocalDateTime.now());//立卷日期
|
|
|
+ archivesAuto.setRollor(node.getRollor());//立卷人 从节点规格获取
|
|
|
+ archivesAuto.setReviewer(node.getReviewer());//审核人 从节点规格获取
|
|
|
archivesAuto.setNodeId(node.getId());//归档树节点
|
|
|
archivesAuto.setOutUrl("");//TODO 生成案卷的封面 目录 备考表,背级
|
|
|
archivesAuto.setFileN(fileN);//文件数量
|
|
@@ -214,28 +233,143 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
|
|
|
//archivesAuto.setSize();
|
|
|
archivesAuto.setTreeSort(node.getTreeSort());
|
|
|
//archivesAuto.setIsOpen();
|
|
|
- archivesAuto.setIscheck(0);
|
|
|
+ //archivesAuto.setIscheck(0);
|
|
|
archivesAuto.setIsAutoFile(0);//是否案卷收集上传的案卷
|
|
|
archivesAuto.setIsLock(0);//案卷锁定状态
|
|
|
baseMapper.insert(archivesAuto);
|
|
|
return archivesAuto;
|
|
|
}
|
|
|
|
|
|
+ private String getArchiveStartDateAndEndDate(List<ArchiveFile> waitArchiveFiles){
|
|
|
+ //找出文件集合中的最大最小时间
|
|
|
+ List<String> fileTimeList = new ArrayList<>();
|
|
|
+ for(ArchiveFile file:waitArchiveFiles){
|
|
|
+ fileTimeList.add(file.getFileTime());
|
|
|
+ }
|
|
|
+ Collections.sort(fileTimeList);
|
|
|
+ String startDate=fileTimeList.get(0);
|
|
|
+ String endDate=fileTimeList.get(fileTimeList.size()-1);
|
|
|
+ return startDate+","+endDate;
|
|
|
+ }
|
|
|
+
|
|
|
+ private String builtArchiveName(List<ArchiveFile> waitArchiveFiles, ArchiveTreeContract node,boolean isCrossNode){
|
|
|
+ //TODO 获取案卷题名
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ private String builtFilePageNo(List<ArchiveFile> waitArchiveFiles){
|
|
|
+ //TODO 生成文件对应的页码,返回url
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 单独组卷规则组卷
|
|
|
* @param waitArchiveFiles
|
|
|
- * @param node
|
|
|
+ * @param node 规格参数所在节点
|
|
|
+ * @param pageN
|
|
|
*/
|
|
|
private void createArchive3(List<ArchiveFile> waitArchiveFiles, ArchiveTreeContract node,int pageN){
|
|
|
|
|
|
+ String archiveStartDateAndEndDate = getArchiveStartDateAndEndDate(waitArchiveFiles);
|
|
|
+ String[] split = archiveStartDateAndEndDate.split(",");
|
|
|
+ String startDate=split[0];
|
|
|
+ String endDate=split[1];
|
|
|
+ int fileN =waitArchiveFiles.size();
|
|
|
+
|
|
|
+ String archiveName=builtArchiveName(waitArchiveFiles,node,false);//获取案卷题名
|
|
|
//1.创建新案卷
|
|
|
- ArchivesAuto archivesAuto = builtArchives(node, pageN, waitArchiveFiles.size());
|
|
|
+ ArchivesAuto archivesAuto = builtArchives(node, pageN, fileN,startDate,endDate,archiveName);
|
|
|
//2.设置文件所属案卷,组卷状态
|
|
|
Long archivesAutoId = archivesAuto.getId();
|
|
|
+
|
|
|
+ builtFilePageNo(waitArchiveFiles);//生成文件页码
|
|
|
+
|
|
|
+ for(ArchiveFile file:waitArchiveFiles){
|
|
|
+ file.setArchiveId(archivesAutoId);//设置文件所属案卷
|
|
|
+ file.setIsArchive(1);
|
|
|
+
|
|
|
+ }
|
|
|
+ archiveFileClient.updateArchiveFileForCreateArchive(waitArchiveFiles);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 分类并卷组卷
|
|
|
+ * @param waitArchiveFiles
|
|
|
+ * @param archiveAutoGroupId 分类并卷分组ID
|
|
|
+ */
|
|
|
+ private void createArchive2(List<ArchiveFile> waitArchiveFiles, Long archiveAutoGroupId,Long projectId){
|
|
|
+
|
|
|
+ //获取同一分类archiveAutoGroupId下设置的(设置规则时选中的)节点,排好序
|
|
|
+ List<ArchiveTreeContract> selectList=archiveTreeContractClient.getSelectNodeByGroupId(projectId,archiveAutoGroupId);
|
|
|
+ //分类并卷节点默认采用设置节点的第一个节点为案卷归属节点。
|
|
|
+ ArchiveTreeContract node = selectList.get(0);
|
|
|
+ //获取案卷文件起止时间
|
|
|
+ String archiveStartDateAndEndDate = getArchiveStartDateAndEndDate(waitArchiveFiles);
|
|
|
+ String[] split = archiveStartDateAndEndDate.split(",");
|
|
|
+ String startDate=split[0];
|
|
|
+ String endDate=split[1];
|
|
|
+ int fileN =waitArchiveFiles.size();
|
|
|
+ //获取案卷内文件总页数
|
|
|
+ int pageN=0;
|
|
|
+ for(ArchiveFile file:waitArchiveFiles){
|
|
|
+ pageN=pageN+file.getFilePage();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //默认组卷存在跨节点组卷 注意案卷归属节点,案卷命名方式
|
|
|
+ //获取案卷题名
|
|
|
+ String archiveName=builtArchiveName(waitArchiveFiles,node,true);//获取案卷题名
|
|
|
+
|
|
|
+ //1.创建新案卷
|
|
|
+ ArchivesAuto archivesAuto = builtArchives(node,pageN,fileN,startDate,endDate,archiveName);
|
|
|
+
|
|
|
+ //2.生成文件页码
|
|
|
+ builtFilePageNo(waitArchiveFiles);
|
|
|
+
|
|
|
+ //3.设置文件所属案卷,组卷状态
|
|
|
+ Long archivesAutoId = archivesAuto.getId();
|
|
|
+ for(ArchiveFile file:waitArchiveFiles){
|
|
|
+ file.setArchiveId(archivesAutoId);//设置文件所属案卷
|
|
|
+ file.setIsArchive(1);
|
|
|
+ }
|
|
|
+ archiveFileClient.updateArchiveFileForCreateArchive(waitArchiveFiles);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 默认规则组卷
|
|
|
+ * @param waitArchiveFiles
|
|
|
+ * @param pageN
|
|
|
+ */
|
|
|
+ private void createArchive1(List<ArchiveFile> waitArchiveFiles,int pageN){
|
|
|
+
|
|
|
+ //获取案卷文件起止时间
|
|
|
+ String archiveStartDateAndEndDate = getArchiveStartDateAndEndDate(waitArchiveFiles);
|
|
|
+ String[] split = archiveStartDateAndEndDate.split(",");
|
|
|
+ String startDate=split[0];
|
|
|
+ String endDate=split[1];
|
|
|
+ int fileN =waitArchiveFiles.size();
|
|
|
+
|
|
|
+
|
|
|
+ //默认组卷存在跨节点组卷 注意案卷归属节点,案卷命名方式
|
|
|
+ //案卷归属节点为 排第一的文件所属节点
|
|
|
+ ArchiveFile firstFile = waitArchiveFiles.get(0);
|
|
|
+ Long nodeId = Long.parseLong(firstFile.getNodeId());
|
|
|
+ ArchiveTreeContract node = archiveTreeContractClient.getArchiveTreeContractById(nodeId);
|
|
|
+
|
|
|
+ //获取案卷题名
|
|
|
+ String archiveName=builtArchiveName(waitArchiveFiles,node,true);//获取案卷题名
|
|
|
+
|
|
|
+ //1.创建新案卷
|
|
|
+ ArchivesAuto archivesAuto = builtArchives(node,pageN,fileN,startDate,endDate,archiveName);
|
|
|
+
|
|
|
+ //2.生成文件页码
|
|
|
+ builtFilePageNo(waitArchiveFiles);
|
|
|
+
|
|
|
+ //3.设置文件所属案卷,组卷状态
|
|
|
+ Long archivesAutoId = archivesAuto.getId();
|
|
|
for(ArchiveFile file:waitArchiveFiles){
|
|
|
file.setArchiveId(archivesAutoId);//设置文件所属案卷
|
|
|
file.setIsArchive(1);
|
|
|
- //TODO 重新打页码文件
|
|
|
}
|
|
|
archiveFileClient.updateArchiveFileForCreateArchive(waitArchiveFiles);
|
|
|
}
|
|
@@ -248,7 +382,9 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
|
|
|
//步骤1:遍历节点集合
|
|
|
for(ArchiveTreeContract node:list){
|
|
|
//步骤2:获取当前节点的案卷规格
|
|
|
- int specificationSize=300;//TODO
|
|
|
+ String specificationStr = node.getSpecification();
|
|
|
+ int specification = Integer.parseInt(specificationStr);
|
|
|
+ int specificationSize=specification*10;
|
|
|
//步骤3:查询节点下的未组卷文件
|
|
|
List<ArchiveFile> archiveFiles = archiveFileClient.listWrappers(Wrappers.<ArchiveFile>lambdaQuery()
|
|
|
.eq(ArchiveFile::getNodeId, node)
|
|
@@ -331,16 +467,12 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
|
|
|
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 分类并卷组卷 设置分类的节点下只有一个案卷,节点下的所有文件都组成这个案卷。如果设置分类节点(select=1的)多个,案卷归属排序第一个节点。
|
|
|
*/
|
|
|
- private void archiveAutoMethod2(List<ArchiveTreeContract> list){
|
|
|
+ private void archiveAutoMethod2(List<ArchiveTreeContract> list,Long projectId){
|
|
|
|
|
|
//分类并卷集合<groupId,List<文件>>
|
|
|
Map<Long,List<ArchiveFile>> archiveMap = new HashMap<>();
|
|
@@ -383,10 +515,10 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
|
|
|
//步骤6:按集合创建案卷,每个group类的案卷归属顺序排第一个节点
|
|
|
Set<Map.Entry<Long, List<ArchiveFile>>> entries = archiveMap.entrySet();
|
|
|
for(Map.Entry<Long, List<ArchiveFile>> entry:entries){
|
|
|
- Long key = entry.getKey();
|
|
|
+ Long archiveAutoGroupId = entry.getKey();
|
|
|
List<ArchiveFile> archiveFiles = entry.getValue();
|
|
|
- //TODO 一个key 组成一个案卷 案卷归属同个key的归档树节点select=1的第一个groupId2NodeIdMap
|
|
|
-
|
|
|
+ //一个archiveAutoGroupId组成一个案卷 案卷归属同个key的归档树节点select=1的第一个groupId2NodeIdMap
|
|
|
+ createArchive2(archiveFiles,archiveAutoGroupId,projectId);
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -420,7 +552,8 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
|
|
|
if(!archiveAutoNodeId.equals(archiveAutoNodeId_current)) {
|
|
|
//超过最高并卷节点(节点是排序好的,只要不相等就超过了)
|
|
|
if(waitArchiveFiles.size()>0){
|
|
|
- //TODO 将待组卷集合里的文件组卷
|
|
|
+ //将待组卷集合里的文件组卷
|
|
|
+ createArchive1(waitArchiveFiles,archivesSize);
|
|
|
}
|
|
|
waitArchiveFiles.clear();
|
|
|
archivesSize=0;
|
|
@@ -430,7 +563,9 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
|
|
|
//步骤3.1:获取节点规格
|
|
|
if(waitArchiveFiles.size()==0){
|
|
|
//waitArchiveFiles待组卷文件为空时,按当前节点的规格
|
|
|
- specificationSize=300;//TODO
|
|
|
+ String specificationStr = node.getSpecification();
|
|
|
+ int specification = Integer.parseInt(specificationStr);
|
|
|
+ specificationSize=specification*10;
|
|
|
}
|
|
|
|
|
|
//步骤3.2:查询出当前节点未组卷的文件
|
|
@@ -447,7 +582,8 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
|
|
|
if(file.getBoxNumber()!=null) {
|
|
|
//TODO 走分盒组卷流程
|
|
|
if(nodeSize==list.size() && archiveFilesSize==archiveFiles.size()){
|
|
|
- //TODO 如果当前是最后一个文件直接将waitArchiveFiles组卷
|
|
|
+ //如果当前是最后一个文件直接将waitArchiveFiles组卷
|
|
|
+ createArchive1(waitArchiveFiles,archivesSize);
|
|
|
}
|
|
|
}else{
|
|
|
//步骤3.5 计算和判断待组卷文件集合是否达到组卷要求,达到要求创建案卷,案卷归属当前节点,案卷下文件改为已组卷
|
|
@@ -459,7 +595,8 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
|
|
|
waitArchiveFiles.add(file);
|
|
|
//判断是否最后一个节点,最后一个文件
|
|
|
if(nodeSize==list.size() && archiveFilesSize==archiveFiles.size()){
|
|
|
- //TODO 直接将waitArchiveFiles待组卷集合组卷,归属集合第一个文件所在节点
|
|
|
+ //直接将waitArchiveFiles待组卷集合组卷,归属集合第一个文件所在节点
|
|
|
+ createArchive1(waitArchiveFiles,archivesSize);
|
|
|
//将待组卷文件集合,总页数还原初始值,
|
|
|
waitArchiveFiles.clear();
|
|
|
archivesSize=0;
|
|
@@ -470,35 +607,45 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
|
|
|
//步骤3.7达到规格 可以组一卷
|
|
|
if(checkStatus==1){
|
|
|
waitArchiveFiles.add(file);
|
|
|
- //TODO 将waitArchiveFiles待组卷集合组卷,归属集合第一个文件所在节点
|
|
|
+ //将waitArchiveFiles待组卷集合组卷,归属集合第一个文件所在节点
|
|
|
+ createArchive1(waitArchiveFiles,archivesSize);
|
|
|
//将待组卷文件集合,总页数还原初始值,
|
|
|
waitArchiveFiles.clear();
|
|
|
archivesSize=0;
|
|
|
- specificationSize=300;//TODO 更新specificationSize待组卷规格为 当前节点的组卷规格
|
|
|
+
|
|
|
+ String specificationStr = node.getSpecification();
|
|
|
+ int specification = Integer.parseInt(specificationStr);
|
|
|
+ specificationSize=specification*10;//更新specificationSize待组卷规格为 当前节点的组卷规格
|
|
|
}
|
|
|
//步骤3.8超出规格
|
|
|
if(checkStatus==-1){
|
|
|
//步骤3.9如果waitArchiveFiles集合size>0,先将集合中文件组卷。再将当前文件加入集合
|
|
|
if(waitArchiveFiles.size()>0){
|
|
|
- //3.9.1 TODO 将waitArchiveFiles组卷,归属集合第一个文件所在节点
|
|
|
+ //3.9.1 将waitArchiveFiles组卷,归属集合第一个文件所在节点
|
|
|
+ createArchive1(waitArchiveFiles,archivesSize);
|
|
|
//将待组卷文件集合,总页数还原初始值,
|
|
|
waitArchiveFiles.clear();
|
|
|
//3.9.2保存当前文件进入待组卷集合,
|
|
|
waitArchiveFiles.add(file);
|
|
|
//3.9.3待组卷页数=当前文件页数
|
|
|
archivesSize=filePage;
|
|
|
- specificationSize=300;//TODO 更新specificationSize待组卷规格为 当前节点的组卷规格
|
|
|
+
|
|
|
+ String specificationStr = node.getSpecification();
|
|
|
+ int specification = Integer.parseInt(specificationStr);
|
|
|
+ specificationSize=specification*10;//更新specificationSize待组卷规格为 当前节点的组卷规格
|
|
|
+
|
|
|
//3.9.4 判断当前文件是不是最后一个节点,最后一个文件
|
|
|
if(nodeSize==list.size() && archiveFilesSize==archiveFiles.size()){
|
|
|
- //TODO 最后一个文件再将waitArchiveFiles组卷
|
|
|
+ //最后一个文件再将waitArchiveFiles组卷
|
|
|
+ createArchive1(waitArchiveFiles,archivesSize);
|
|
|
}
|
|
|
}else{
|
|
|
//步骤3.10 如果waitArchiveFiles集合size=0,说明当前文件已经超过规格,直接将当前文件组卷
|
|
|
waitArchiveFiles.add(file);
|
|
|
- //TODO 直接将waitArchiveFiles组卷
|
|
|
+ //直接将waitArchiveFiles组卷
|
|
|
+ createArchive1(waitArchiveFiles,archivesSize);
|
|
|
waitArchiveFiles.clear();
|
|
|
archivesSize=0;
|
|
|
- specificationSize=300;//TODO 更新specificationSize待组卷规格为 当前节点的组卷规格
|
|
|
}
|
|
|
}
|
|
|
|