|
@@ -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
|