Browse Source

档案-影响资料同步
1、只同步相册
2、在相册业务调整之后的才能实现同步功能

LHB 1 month ago
parent
commit
972d704544

+ 12 - 1
blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/ArchiveFile.java

@@ -304,6 +304,11 @@ public class ArchiveFile extends BaseEntity {
      */
     @ApiModelProperty("u_image_classification_file_id表中的主键id")
     private Long uImageClassificationFileId;
+    /**
+     * m_album表中的主键id
+     */
+    @ApiModelProperty("u_image_classification_file_id表中的主键id")
+    private Long mAlbumId;
 
     /**
      * 归档文件储存类型,可看代码枚举
@@ -331,6 +336,8 @@ public class ArchiveFile extends BaseEntity {
     private String outId;
 
     private String sortNum;
+
+    private String remark;
     @ApiModelProperty("是否锁定 1已锁定")
     private Integer isLock;
 
@@ -448,6 +455,10 @@ public class ArchiveFile extends BaseEntity {
             this.fileTime = "";
             return;
         }
-        this.fileTime = fileTime.replaceAll("[^0-9]", "");
+        if (fileTime.contains("~")) {
+            this.fileTime = fileTime;
+        } else {
+            this.fileTime = fileTime.replaceAll("[^0-9]", "");
+        }
     }
 }

+ 148 - 69
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ArchiveTreeContractSyncImpl.java

@@ -28,6 +28,7 @@ import org.springblade.manager.entity.*;
 import org.springblade.manager.enums.AssociationTypeEnum;
 import org.springblade.manager.enums.StorageTypeEnum;
 import org.springblade.manager.enums.TreeStructureEnum;
+import org.springblade.manager.mapper.AlbumMapper;
 import org.springblade.manager.mapper.ArchiveTreeContractMapper;
 import org.springblade.manager.service.*;
 import org.springblade.manager.utils.ForestNodeMerger;
@@ -84,6 +85,8 @@ public class ArchiveTreeContractSyncImpl {
 
     private final CommonFileClient commonFileClient;
 
+    private final AlbumMapper albumMapper;
+    private final AlbumImagesService albumImagesService;
 
 
     /**
@@ -1234,12 +1237,24 @@ public class ArchiveTreeContractSyncImpl {
             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("当前合同段下没有声像资料");
         }
-        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());
@@ -1252,75 +1267,86 @@ public class ArchiveTreeContractSyncImpl {
             ArchiveTreeContract imageNode = createTypeNode(imageType.getClassfName(),archiveTreeContract);
             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;
             }
 
+            //直接点转文件
+
+            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){
             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;
+    }
+
 
     /**
      * 质检影像资料 转换为 档案文件