Java后端实现拖拽排序
后端代码实现:
public void moveToPosition(Long currentId, Long targetId) {
// 得到当前数据 获取sort
Video currentS = videoService.getById(currentId);
Integer currSort = currentS.getOrder();
// 得到目标数据 获取目标sort
Video targetS = videoService.getById(targetId);
Integer targetSort = targetS.getOrder();
// 获取当前和目标之间的数据
QueryWrapper<Video> queryWrapper = new QueryWrapper<>();
if (targetSort < currSort) {
queryWrapper.between("`order`", targetSort, currSort);
} else {
queryWrapper.between("`order`", currSort, targetSort);
}
List<Video> videoListByTarget = videoService.list(queryWrapper);
ArrayList<Integer> notList = new ArrayList<>();
notList.add(currSort);
videoListByTarget = videoListByTarget.stream().filter(model -> {
return !notList.contains(model.getOrder());
}).map(model -> {
if (targetSort < currSort) {
model.setOrder(model.getOrder() + 1);
} else {
model.setOrder(model.getOrder() - 1);
}
return model;
}).collect(Collectors.toList());
// 目标位置sort 给 当前数据sort
currentS.setOrder(targetS.getOrder());
targetS.setOrder(currentS.getOrder());
videoListByTarget.add(currentS);
boolean flag = videoService.updateBatchById(videoListByTarget);
}
