|
@@ -28,6 +28,7 @@ import org.springblade.manager.entity.*;
|
|
import org.springblade.manager.enums.AssociationTypeEnum;
|
|
import org.springblade.manager.enums.AssociationTypeEnum;
|
|
import org.springblade.manager.enums.StorageTypeEnum;
|
|
import org.springblade.manager.enums.StorageTypeEnum;
|
|
import org.springblade.manager.enums.TreeStructureEnum;
|
|
import org.springblade.manager.enums.TreeStructureEnum;
|
|
|
|
+import org.springblade.manager.mapper.AlbumMapper;
|
|
import org.springblade.manager.mapper.ArchiveTreeContractMapper;
|
|
import org.springblade.manager.mapper.ArchiveTreeContractMapper;
|
|
import org.springblade.manager.service.*;
|
|
import org.springblade.manager.service.*;
|
|
import org.springblade.manager.utils.ForestNodeMerger;
|
|
import org.springblade.manager.utils.ForestNodeMerger;
|
|
@@ -84,6 +85,8 @@ public class ArchiveTreeContractSyncImpl {
|
|
|
|
|
|
private final CommonFileClient commonFileClient;
|
|
private final CommonFileClient commonFileClient;
|
|
|
|
|
|
|
|
+ private final AlbumMapper albumMapper;
|
|
|
|
+ private final AlbumImagesService albumImagesService;
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -1234,12 +1237,24 @@ public class ArchiveTreeContractSyncImpl {
|
|
keyMap.put(vo.getPKeyId(),vo);
|
|
keyMap.put(vo.getPKeyId(),vo);
|
|
}
|
|
}
|
|
|
|
|
|
- //获取合同下声像资料所有文件
|
|
|
|
- List<ImageClassificationFileDTO> imageClassificationFileList = imageClassificationFileClient.getImageClassificationFileListByContractId(contractId);
|
|
|
|
- if (CollectionUtil.isEmpty(imageClassificationFileList)){
|
|
|
|
|
|
+
|
|
|
|
+ //调整为查询相册
|
|
|
|
+ List<Album> albumsList = albumMapper.selectList(Wrappers.<Album>lambdaQuery()
|
|
|
|
+ .eq(Album::getContractId, contractId)
|
|
|
|
+ .isNotNull(Album::getImagesPdf));
|
|
|
|
+ if (CollectionUtil.isEmpty(albumsList)){
|
|
throw new ServiceException("当前合同段下没有声像资料");
|
|
throw new ServiceException("当前合同段下没有声像资料");
|
|
}
|
|
}
|
|
- Map<Long, List<ImageClassificationFileDTO>> imageMap = imageClassificationFileList.stream().collect(Collectors.groupingBy(l -> l.getClassifyId()));
|
|
|
|
|
|
+ Map<Long, List<Album>> albumMap = albumsList.stream().collect(Collectors.groupingBy(Album::getClassifyId));
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //获取合同下声像资料所有文件
|
|
|
|
+// List<ImageClassificationFileDTO> imageClassificationFileList = imageClassificationFileClient.getImageClassificationFileListByContractId(contractId);
|
|
|
|
+// if (CollectionUtil.isEmpty(imageClassificationFileList)){
|
|
|
|
+// throw new ServiceException("当前合同段下没有声像资料");
|
|
|
|
+// }
|
|
|
|
+// Map<Long, List<ImageClassificationFileDTO>> imageMap = imageClassificationFileList.stream().collect(Collectors.groupingBy(l -> l.getClassifyId()));
|
|
|
|
+
|
|
|
|
|
|
//获取声像资料分类,生成声像资料下级节点
|
|
//获取声像资料分类,生成声像资料下级节点
|
|
List<ImageClassificationConfig> imageTypes = imageClassificationConfigService.selectByContractType(contractId,contractInfo.getContractType());
|
|
List<ImageClassificationConfig> imageTypes = imageClassificationConfigService.selectByContractType(contractId,contractInfo.getContractType());
|
|
@@ -1252,75 +1267,86 @@ public class ArchiveTreeContractSyncImpl {
|
|
ArchiveTreeContract imageNode = createTypeNode(imageType.getClassfName(),archiveTreeContract);
|
|
ArchiveTreeContract imageNode = createTypeNode(imageType.getClassfName(),archiveTreeContract);
|
|
addNode.add(imageNode);
|
|
addNode.add(imageNode);
|
|
//如果当前分类下存在文件,则根据类型生成树,还是日期
|
|
//如果当前分类下存在文件,则根据类型生成树,还是日期
|
|
- List<ImageClassificationFileDTO> files = imageMap.get(imageType.getId());
|
|
|
|
- if (CollectionUtil.isEmpty(files)){
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- if (imageType.getStorageDirectoryFormat() == 1){
|
|
|
|
- /**部位存储,获取分类下面的文件,只生成必要的树,没有则跳过 */
|
|
|
|
- //获取出文件对应的WBS节点,查询出所有节点
|
|
|
|
- List<Long> wbsPIds = files.stream().filter(l-> l.getWbsId() != null).map(l -> l.getWbsId()).distinct().collect(Collectors.toList());
|
|
|
|
- Set<Long> wbsIds = new HashSet<>();
|
|
|
|
- for (Long wbsId : wbsPIds) {
|
|
|
|
- ArchiveSyncWbsVO vo = keyMap.get(wbsId);
|
|
|
|
- if (vo != null){
|
|
|
|
- wbsIds.add(vo.getId());
|
|
|
|
- String[] ids = vo.getAncestors().split(",");
|
|
|
|
- for (String id : ids) {
|
|
|
|
- wbsIds.add(Long.valueOf(id));
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- List<ArchiveSyncWbsVO> currentNodes = new ArrayList<>();
|
|
|
|
- for (Long wbsId : wbsIds) {
|
|
|
|
- ArchiveSyncWbsVO vo = keyMap.get(wbsId);
|
|
|
|
- if (vo != null) {
|
|
|
|
- vo.setChildren(null);
|
|
|
|
- currentNodes.add(vo);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- ArchiveSyncWbsVO root = ForestNodeMerger.merge(currentNodes).stream()
|
|
|
|
- .filter(f -> f.getParentId() == 0L).collect(Collectors.toList()).get(0);
|
|
|
|
- //从根节点递归,递归过程中,同步生成档案树, 并且生成档案树id和wbsPid的映射,后面单独为文件设置
|
|
|
|
- List<ArchiveTreeContract> currentTypeAdd = new ArrayList<>();
|
|
|
|
- recursionCreateArchiveTree(root,currentTypeAdd,imageNode);
|
|
|
|
- //转换影像文件为档案文件,并挂到档案树下面
|
|
|
|
- Map<Long, Long> wbsPidMapArchiveId = currentTypeAdd.stream().collect(Collectors.toMap(l -> l.getExtKeyId(), l -> l.getId()));
|
|
|
|
- addNode.addAll(currentTypeAdd);
|
|
|
|
- List<ArchiveFile> newArchiveFileList = files.stream().map(file -> {
|
|
|
|
- ArchiveFile archiveFile = imageFileCovertArchiveFile(file, wbsPidMapArchiveId);
|
|
|
|
- return archiveFile;
|
|
|
|
- }).collect(Collectors.toList());
|
|
|
|
- addFile.addAll(newArchiveFileList);
|
|
|
|
- log.info("同步声像文件树-"+imageType.getClassfName()+": 节点"+currentNodes.size()+"个,节点下文件"+files.size()+"个");
|
|
|
|
-
|
|
|
|
- }else if (imageType.getStorageDirectoryFormat() == 2){
|
|
|
|
- /**日期存储,获取分类下面的文件,获取出所有的年,生成年节点,文件归到年节点下 */
|
|
|
|
- //文件按照年份分组
|
|
|
|
- Map<Integer, List<ImageClassificationFileDTO>> yearMap = files.stream().collect(Collectors.groupingBy(l -> l.getShootingTime().getYear()));
|
|
|
|
- List<Integer> years = yearMap.keySet().stream().sorted().collect(Collectors.toList());
|
|
|
|
- for (Integer year : years) {
|
|
|
|
- //生成年份节点,并添加进集合
|
|
|
|
- ArchiveTreeContract dateNode = createImageDateNode(imageNode, year);
|
|
|
|
- addNode.add(dateNode);
|
|
|
|
- //把文件设置进指定年份下
|
|
|
|
- List<ImageClassificationFileDTO> fileDTOS = yearMap.get(year);
|
|
|
|
- Map<Long, Long> wbsPidMapArchiveId = new HashMap<>();
|
|
|
|
- for (ImageClassificationFileDTO fileDTO : fileDTOS) {
|
|
|
|
- wbsPidMapArchiveId.put(fileDTO.getWbsId(),dateNode.getId());
|
|
|
|
- }
|
|
|
|
- List<ArchiveFile> newArchiveFileList = fileDTOS.stream().map(file -> {
|
|
|
|
- ArchiveFile archiveFile = imageFileCovertArchiveFile(file, wbsPidMapArchiveId);
|
|
|
|
- return archiveFile;
|
|
|
|
- }).collect(Collectors.toList());
|
|
|
|
- addFile.addAll(newArchiveFileList);
|
|
|
|
|
|
+// List<ImageClassificationFileDTO> files = imageMap.get(imageType.getId());
|
|
|
|
|
|
- }
|
|
|
|
- }else {
|
|
|
|
- log.error("同步声像文件:影像资料存储类型不在范围中");
|
|
|
|
|
|
+ List<Album> albums = albumMap.get(imageType.getId());
|
|
|
|
+
|
|
|
|
+ if (CollectionUtil.isEmpty(albums)){
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ //直接点转文件
|
|
|
|
+
|
|
|
|
+ List<ArchiveFile> newArchiveFileList = albums.stream().map(album -> {
|
|
|
|
+ ArchiveFile archiveFile = albumCovertArchiveFile(album, imageNode.getId());
|
|
|
|
+ return archiveFile;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ addFile.addAll(newArchiveFileList);
|
|
|
|
+// if (imageType.getStorageDirectoryFormat() == 1){
|
|
|
|
+// /**部位存储,获取分类下面的文件,只生成必要的树,没有则跳过 */
|
|
|
|
+// //获取出文件对应的WBS节点,查询出所有节点
|
|
|
|
+// List<Long> wbsPIds = files.stream().filter(l-> l.getWbsId() != null).map(l -> l.getWbsId()).distinct().collect(Collectors.toList());
|
|
|
|
+// Set<Long> wbsIds = new HashSet<>();
|
|
|
|
+// for (Long wbsId : wbsPIds) {
|
|
|
|
+// ArchiveSyncWbsVO vo = keyMap.get(wbsId);
|
|
|
|
+// if (vo != null){
|
|
|
|
+// wbsIds.add(vo.getId());
|
|
|
|
+// String[] ids = vo.getAncestors().split(",");
|
|
|
|
+// for (String id : ids) {
|
|
|
|
+// wbsIds.add(Long.valueOf(id));
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// List<ArchiveSyncWbsVO> currentNodes = new ArrayList<>();
|
|
|
|
+// for (Long wbsId : wbsIds) {
|
|
|
|
+// ArchiveSyncWbsVO vo = keyMap.get(wbsId);
|
|
|
|
+// if (vo != null) {
|
|
|
|
+// vo.setChildren(null);
|
|
|
|
+// currentNodes.add(vo);
|
|
|
|
+// }
|
|
|
|
+// }
|
|
|
|
+// ArchiveSyncWbsVO root = ForestNodeMerger.merge(currentNodes).stream()
|
|
|
|
+// .filter(f -> f.getParentId() == 0L).collect(Collectors.toList()).get(0);
|
|
|
|
+// //从根节点递归,递归过程中,同步生成档案树, 并且生成档案树id和wbsPid的映射,后面单独为文件设置
|
|
|
|
+// List<ArchiveTreeContract> currentTypeAdd = new ArrayList<>();
|
|
|
|
+// recursionCreateArchiveTree(root,currentTypeAdd,imageNode);
|
|
|
|
+// //转换影像文件为档案文件,并挂到档案树下面
|
|
|
|
+// Map<Long, Long> wbsPidMapArchiveId = currentTypeAdd.stream().collect(Collectors.toMap(l -> l.getExtKeyId(), l -> l.getId()));
|
|
|
|
+// addNode.addAll(currentTypeAdd);
|
|
|
|
+// List<ArchiveFile> newArchiveFileList = files.stream().map(file -> {
|
|
|
|
+// ArchiveFile archiveFile = imageFileCovertArchiveFile(file, wbsPidMapArchiveId);
|
|
|
|
+// return archiveFile;
|
|
|
|
+// }).collect(Collectors.toList());
|
|
|
|
+// addFile.addAll(newArchiveFileList);
|
|
|
|
+// log.info("同步声像文件树-"+imageType.getClassfName()+": 节点"+currentNodes.size()+"个,节点下文件"+files.size()+"个");
|
|
|
|
+//
|
|
|
|
+// }else if (imageType.getStorageDirectoryFormat() == 2){
|
|
|
|
+// /**日期存储,获取分类下面的文件,获取出所有的年,生成年节点,文件归到年节点下 */
|
|
|
|
+// //文件按照年份分组
|
|
|
|
+// Map<Integer, List<ImageClassificationFileDTO>> yearMap = files.stream().collect(Collectors.groupingBy(l -> l.getShootingTime().getYear()));
|
|
|
|
+// List<Integer> years = yearMap.keySet().stream().sorted().collect(Collectors.toList());
|
|
|
|
+// for (Integer year : years) {
|
|
|
|
+// //生成年份节点,并添加进集合
|
|
|
|
+// ArchiveTreeContract dateNode = createImageDateNode(imageNode, year);
|
|
|
|
+// addNode.add(dateNode);
|
|
|
|
+// //把文件设置进指定年份下
|
|
|
|
+// List<ImageClassificationFileDTO> fileDTOS = yearMap.get(year);
|
|
|
|
+// Map<Long, Long> wbsPidMapArchiveId = new HashMap<>();
|
|
|
|
+// for (ImageClassificationFileDTO fileDTO : fileDTOS) {
|
|
|
|
+// wbsPidMapArchiveId.put(fileDTO.getWbsId(),dateNode.getId());
|
|
|
|
+// }
|
|
|
|
+// List<ArchiveFile> newArchiveFileList = fileDTOS.stream().map(file -> {
|
|
|
|
+// ArchiveFile archiveFile = imageFileCovertArchiveFile(file, wbsPidMapArchiveId);
|
|
|
|
+// return archiveFile;
|
|
|
|
+// }).collect(Collectors.toList());
|
|
|
|
+// addFile.addAll(newArchiveFileList);
|
|
|
|
+//
|
|
|
|
+// }
|
|
|
|
+// }else {
|
|
|
|
+// log.error("同步声像文件:影像资料存储类型不在范围中");
|
|
|
|
+// continue;
|
|
|
|
+// }
|
|
}
|
|
}
|
|
if (addNode.size() > 0){
|
|
if (addNode.size() > 0){
|
|
addNode.stream().forEach(l->l.setTenantId(tenantId));
|
|
addNode.stream().forEach(l->l.setTenantId(tenantId));
|
|
@@ -1332,6 +1358,59 @@ public class ArchiveTreeContractSyncImpl {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private ArchiveFile albumCovertArchiveFile(Album file, Long id) {
|
|
|
|
+ ArchiveFile archiveFile = new ArchiveFile();
|
|
|
|
+ archiveFile.setId(SnowFlakeUtil.getId());
|
|
|
|
+ archiveFile.setProjectId(String.valueOf(file.getProjectId()));
|
|
|
|
+ archiveFile.setContractId(String.valueOf(file.getContractId()));
|
|
|
|
+ archiveFile.setNodeId(String.valueOf(id));
|
|
|
|
+ //标题
|
|
|
|
+ archiveFile.setFileName(file.getImagesName());
|
|
|
|
+ //时间
|
|
|
|
+ archiveFile.setFileTime(file.getStartDate().replaceAll("-","") + "~" + file.getEndDate().replaceAll("-",""));
|
|
|
|
+ archiveFile.setFileUrl(file.getImagesPdf());
|
|
|
|
+ archiveFile.setPdfFileUrl(file.getImagesPdf());
|
|
|
|
+ //文件页数 根据关联照片判断
|
|
|
|
+ long count = albumImagesService.count(Wrappers.<AlbumImages>lambdaQuery().eq(AlbumImages::getAlbumId, file.getId()));
|
|
|
|
+ //2张照片为一页
|
|
|
|
+ archiveFile.setFilePage((int) Math.ceil((double) count / 2));
|
|
|
|
+ archiveFile.setIsApproval(0);
|
|
|
|
+ archiveFile.setIsCertification(1);
|
|
|
|
+ archiveFile.setIsNeedCertification(0);
|
|
|
|
+ //责任者-主要拍摄者
|
|
|
|
+ archiveFile.setDutyUser(file.getPhotographer());
|
|
|
|
+ archiveFile.setCreateUser(file.getCreateUser());
|
|
|
|
+ archiveFile.setCreateDept(file.getCreateDept());
|
|
|
|
+ archiveFile.setCreateTime(file.getCreateTime());
|
|
|
|
+ archiveFile.setUpdateUser(file.getUpdateUser());
|
|
|
|
+ archiveFile.setUpdateTime(file.getUpdateTime());
|
|
|
|
+ archiveFile.setStatus(0);
|
|
|
|
+ archiveFile.setIsDeleted(0);
|
|
|
|
+ //文件类型 1 视频 2 照片
|
|
|
|
+ archiveFile.setFileType(2L);
|
|
|
|
+ //文件编号-分组号
|
|
|
|
+ archiveFile.setFileNumber(file.getGroupNumber());
|
|
|
|
+ //备注-起止编号
|
|
|
|
+ archiveFile.setRemark(file.getCodes());
|
|
|
|
+
|
|
|
|
+ // 创建 LocalDateTime 时间爱你
|
|
|
|
+ LocalDateTime localDateTime = new Date().toInstant()
|
|
|
|
+ .atZone(ZoneId.systemDefault())
|
|
|
|
+ .toLocalDateTime();
|
|
|
|
+ archiveFile.setFtime(localDateTime);
|
|
|
|
+ archiveFile.setUtime(localDateTime);
|
|
|
|
+ archiveFile.setSort(0);
|
|
|
|
+
|
|
|
|
+ archiveFile.setSourceType(1);
|
|
|
|
+ archiveFile.setIsElement(0);
|
|
|
|
+ archiveFile.setRectification(0);
|
|
|
|
+ //关联id
|
|
|
|
+ archiveFile.setMAlbumId(file.getId());
|
|
|
|
+ archiveFile.setArchiveFileStorageType(StorageTypeEnum.SOUND_IMAGE.getCode());
|
|
|
|
+ archiveFile.setDateName(DateFormatUtils.format(file.getCreateTime(), "yyyyMMdd"));
|
|
|
|
+ return archiveFile;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
|
|
/**
|
|
/**
|
|
* 质检影像资料 转换为 档案文件
|
|
* 质检影像资料 转换为 档案文件
|