树形目录上下移动

项目中碰见了树形目录需要上下移动的需求,把代码整理出来,方便后续需要

上下移动,即上面的可以往下移动,下面的可以往上面移动,最上面的和最下面的不可移动,这里是同级移动,不包括跨级移动

    /*被controller层调用,传入参数被移动对象的id,以及是上移还是下移*/
    
    public ResultCode move(String id, Integer param) {
        if (param == 1) {
            return moveUp(id);
        } else {
        return moveDown(id);
        }
    }

    /*上移:先找到上移和要下移的实体,交换两者的sort值,进行数据库更新操作*/
    
    private ResultCode moveUp(String itemId) {
        //获取上移的那条数据的信息
        AssetItemEntity upEntity = assetItemMapper.selectById(itemId);
        Integer temp = upEntity.getSort();
        //查询上一条记录
        AssetItemEntity downEntity = assetItemMapper.moveUp(temp,upEntity.getPid());
        //如果上面已经没有记录了,返回
        if (downEntity == null) {
            return ResultCode.ALREADY_HIGHEST_LEVEL;
        }
        upEntity.setSort(downEntity.getSort());
        downEntity.setSort(temp);
        assetItemMapper.updateById(upEntity);
        assetItemMapper.updateById(downEntity);
        return ResultCode.SUCCESS;
    }
    调用dao层接口的sql语句:
    
    /*下移:先找到上移和要下移的实体,交换两者的sort值,进行数据库更新操作*/
    private ResultCode moveDown(String itemId) {
        AssetItemEntity downEntity = assetItemMapper.selectById(itemId);
        Integer temp = downEntity.getSort();
        AssetItemEntity upEntity = assetItemMapper.moveDown(temp,downEntity.getPid());
        if (upEntity == null) {
            return ResultCode.ALREADY_LOWEST_LEVEL;
        }
        downEntity.setSort(upEntity.getSort());
        upEntity.setSort(temp);
        assetItemMapper.updateById(upEntity);
        assetItemMapper.updateById(downEntity);
        return ResultCode.SUCCESS;
    }

    

    两个方法可以进行判断封装而不需要写两个方法,这里偷懒了一下,就没进行封装
另一种实现是拖拽实现
    /*拖拽排序,前端发过来排序后的集合,后台只进行存储即可,但有可能是危险操作,比如一个
    没用过的人不小心拖了一下位置就换了,但其也忘记了原来的顺,也不知道是否会有影响,因此最好前端
    进行一个确认的操作,确认后再请求后端重新存储*/
    public ResultCode move(MoveDTO moveDTO){
        List list = moveDTO.getList();
        Integer size = list.size();
        for (int i = 0; i < list.size(); i++){
            String id = list.get(i);
            UpdateWrapper wrapper = new UpdateWrapper<>();
            wrapper.lambda().eq(AssetItemEntity::getId,id)
                    .set(AssetItemEntity::getSort,size--);
            assetItemMapper.update(null,wrapper);
        }
        return ResultCode.SUCCESS;
    }

你可能感兴趣的:(html,spring,java-ee,intellij-idea)