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); }