Bläddra i källkod

档案文件调整排序

cr 3 dagar sedan
förälder
incheckning
7aa993551d

+ 3 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/ArchiveFileVO.java

@@ -74,6 +74,9 @@ public class ArchiveFileVO extends ArchiveFile {
     @ApiModelProperty("批量保存")
     private List<ArchiveFileVO> list;
 
+    @ApiModelProperty("调整排序 原顺序")
+    private List<ArchiveFileVO>oldList;
+
     private List<String> nodeIdArray;
 
     private List<String> ids;

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/feignClient/ArchiveFileClientImpl.java

@@ -65,7 +65,7 @@ public class ArchiveFileClientImpl implements ArchiveFileClient {
 
     @Override
     public void updateArchiveFileSort(ArchiveFileVO vo) {
-        this.iArchiveFileService.updateArchiveFileSort(vo.getList());
+        this.iArchiveFileService.updateArchiveFileSort(vo.getList(),vo.getOldList());
     }
 
     @Override

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/service/IArchiveFileService.java

@@ -57,7 +57,7 @@ public interface IArchiveFileService extends BaseService<ArchiveFile> {
 
     void saveArchiveFile(List<ArchiveFileVO> list);
 
-    void updateArchiveFileSort(List<ArchiveFileVO> list);
+    void updateArchiveFileSort(List<ArchiveFileVO> list,List<ArchiveFileVO> oldList);
 
     boolean updateArchiveFileByBoxName(Map<String, Object> jsons);
 

+ 26 - 15
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/ArchiveFileServiceImpl.java

@@ -133,7 +133,7 @@ public class ArchiveFileServiceImpl extends BaseServiceImpl<ArchiveFileMapper, A
 
 
     @Override
-    public void updateArchiveFileSort(List<ArchiveFileVO> list) {
+    public void updateArchiveFileSort(List<ArchiveFileVO> list, List<ArchiveFileVO> oldList) {
         List<Integer> listInt = new ArrayList<>();
         for (int i = 0; i < list.size(); i++) {
             listInt.add(list.get(i).getSort());
@@ -144,13 +144,27 @@ public class ArchiveFileServiceImpl extends BaseServiceImpl<ArchiveFileMapper, A
         Map<Long, Integer> mapkey = new HashMap<>();
         Collections.sort(listInt);
 
-        // 创建原始ID到原始nodeId的映射
+        // 创建原始ID到原始nodeId的映射(基于oldList)
         Map<Long, String> originalIdToNodeIdMap = new HashMap<>();
-        // 创建原始ID到原始排序的映射
+        // 创建原始ID到原始排序的映射(基于oldList)
         Map<Long, Integer> originalIdToSortMap = new HashMap<>();
-        for (ArchiveFileVO vo : list) {
+        // 创建原始排序位置到nodeId的映射(基于oldList)
+        Map<Integer, String> originalSortToNodeIdMap = new HashMap<>();
+
+        for (ArchiveFileVO vo : oldList) {
             originalIdToNodeIdMap.put(vo.getId(), vo.getNodeId());
             originalIdToSortMap.put(vo.getId(), vo.getSort());
+            originalSortToNodeIdMap.put(vo.getSort(), vo.getNodeId());
+        }
+
+        // 找出所有位置发生变化的文件ID
+        Set<Long> movedFileIds = new HashSet<>();
+        for (int i = 0; i < list.size(); i++) {
+            ArchiveFileVO currentVO = list.get(i);
+            Integer originalSort = originalIdToSortMap.get(currentVO.getId());
+            if (!listInt.get(i).equals(originalSort)) {
+                movedFileIds.add(currentVO.getId());
+            }
         }
 
         for (int i = 0; i < list.size(); i++) {
@@ -166,17 +180,14 @@ public class ArchiveFileServiceImpl extends BaseServiceImpl<ArchiveFileMapper, A
             currentVO.setArchiveSort(i);
 
             // 只有位置发生变化的文件才需要更新nodeId
-            if (!listInt.get(i).equals(originalSort)) {
-                // 获取下一个文件的nodeId(如果存在)
-                if (i < list.size() - 1) {
-                    ArchiveFileVO nextVO = list.get(i + 1);
-                    String nextNodeId = originalIdToNodeIdMap.get(nextVO.getId());
-
-                    // 将当前文件的nodeId设置为下一个文件的nodeId
-                    currentVO.setNodeId(nextNodeId);
-                } else {
-                    // 如果是最后一个文件且被移动了,保持原来的nodeId
-                    currentVO.setNodeId(originalNodeId);
+            if (movedFileIds.contains(currentVO.getId())) {
+                // 获取当前位置对应的原始nodeId(这个位置原来属于哪个nodeId)
+                Integer currentPositionOriginalSort = listInt.get(i);
+                String positionOriginalNodeId = originalSortToNodeIdMap.get(currentPositionOriginalSort);
+
+                // 如果当前位置的原始nodeId与当前文件的原始nodeId不同,则更新
+                if (positionOriginalNodeId != null && !positionOriginalNodeId.equals(originalNodeId)) {
+                    currentVO.setNodeId(positionOriginalNodeId);
                 }
             } else {
                 // 位置没有变化的文件保持原来的nodeId