列表拖拽,上下移动 java 接口实现

2023-05-16

列表拖拽实现

上下移动实现


 列表拖拽实现

拖拽的逻辑 :按住某一个id 拖拽到需要移动的某个后面

如:1。2。3。4。5。

把 1 放到5的后面

列表改变顺序后变成

     2、3、4、5、1、

所以目前的代码实现逻辑为 把1 挨个往后面替换 直到需要移动到的5 的排序号相同了进行交换完成

实现:

 /**
     * 交换
     * 方法描述: 交换顺序
     *
     * @param   目标id
     * @return {@link Object}
     * @author tarzan
     * @date  
     */
    public Object swap(User user) {
        AssertUtil.notEmpty(user.getSourceId(), "需要移动id不能为空");
        AssertUtil.notEmpty(user.getTargetId(), "需要移动到的目标id不能为空");
 
        User source = lambdaQuery() 
                .eq(User::getId, user.getSourceId()).one();

        User target = lambdaQuery() 
                .eq(User::getId, user.getTargetId()).one(); 
        if (Objects.isNull(target) || Objects.isNull(source)) {
            throw new BusinessException("数据未找到");
        }

        Integer targetOrderNum = target.getOrderNum();
        Integer sourceOrderNum = source.getOrderNum();
        LambdaQueryChainWrapper<User> lambdaquery;
        if (targetOrderNum > sourceOrderNum) {
            lambdaquery = lambdaQuery() 
                    .ge(User::getOrderNum, source.getOrderNum())
                    .le(User::getOrderNum, target.getOrderNum());
        } else {
            lambdaquery = lambdaQuery() 
                    .le(User::getOrderNum, source.getOrderNum())
                    .ge(User::getOrderNum, target.getOrderNum());
        }

        List<User> list = lambdaquery.list();

        //重新排序
        List<User> updateList = swapOrder(list, source, target);
        if (CollectionUtils.isNotEmpty(updateList)) {
            baseMapper.updateBatch(updateList);
        }
        return true;
    }
 /**
     * 方法描述: 拖动排序
     *
     * @param list
     * @param source
     * @param target 
     * @date 2021年11月27日 18:13:56
     */
    public List<User> swapOrder(List<User> list, User source, User target) {
        if (source.getOrderNum() < target.getOrderNum()) {
            return downSwap(list, source, target);
        }
        if (source.getOrderNum() > target.getOrderNum()) {
            return upSwap(list, source, target);
        }
        return null;
    }
 /**
     * 方法描述: 向下拖动排序
     *
     * @param list
     * @param source
     * @param target
     * @throws
     * @Return {@link List< InspectQuotaOrg>}
     * @author tarzan Liu
     * @date 2020年08月10日 18:14:14
     */
    public List<User> downSwap(List<User> list, User source, User target) {
        int sourceSort = source.getOrderNum();
        int targetSort = target.getOrderNum();
        list.sort(Comparator.comparing(User::getOrderNum));
        for (User user : list) {
            if (user.getId().equals(source.getId())) {
                source = user;
            }
        }
        for (User e : list) {
            if (sourceSort < e.getOrderNum() && e.getOrderNum() <= targetSort) {
                exchange(source, e);
            }
        }

        return list;
    }
 /**
     * 方法描述: 向上拖动排序
     *
     * @param list
     * @param source
     * @param target
     * @throws
     * @Return {@link List< InspectQuotaOrg>}
     * @author tarzan Liu
     * @date 2020年08月10日 18:14:14
     */
    public List<Uesr> upSwap(List<Uesr> list, Uesr source, Uesr target) {
        int sourceSort = source.getOrderNum();
        int targetSort = target.getOrderNum();
        list.sort(Comparator.comparing(Uesr::getOrderNum));
        for (Uesr user : list) {
            if (user.getId().equals(source.getId())) {
                source = user;
            }
        }
        for (int i = list.size(); i > 0; i--) {
            Uesr e = list.get(i - 1);
            if (sourceSort > e.getOrderNum() && e.getOrderNum() >= targetSort) {
                exchange(source, e);
            }
        }
        return list;
    }

上下移动实现

上移下移其实比较简单,就是通过俩个时间的排序值交换 

向上移动获取上一条的排序值

        select
        <include refid="Base_Column_List" />
        from  user u

        WHERE   u.order_num  &gt;
        <!--     当前数据的排序规则比较去除上移数据的排序 进行位置互换       -->
        (select order_num from user where  id=#{id,jdbcType=VARCHAR} and  is_delete=0)
         
        order by  order_num asc limit 0,1

 向下移动获取下面的第一条数据

        select
        <include refid="Base_Column_List" />
        from  user u

        WHERE   u.order_num  &lt;
        <!--     当前数据的排序规则比较去除上移数据的排序 进行位置互换       -->
        (select order_num from user where   id=#{id,jdbcType=VARCHAR}  and  is_delete=0) 
        order by  order_num desc  limit 0,1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

列表拖拽,上下移动 java 接口实现 的相关文章

  • STM32F103C8T6基础开发教程(HAL库)—点亮第一颗LED灯

    STM32F103C8T6基础开发教程目录 STM32F103C8T6基础开发教程 xff08 HAL库 xff09 开发环境配置STM32F103C8T6基础开发教程 xff08 HAL库 xff09 Keil添加注释的快捷键STM32F
  • C++实现插入排序算法(直接插入排序、折半插入排序、希尔排序)

    排序算法分为五大类 xff0c 一共是有九种 xff0c 如下 xff1a 插入类 xff1a 直接插入排序 折半插入排序 希尔排序 交换类 xff1a 冒泡排序 快速排序 选择类 xff1a 简单选择排序 堆排序 归并类 xff1a 二路
  • C++实现二路归并排序算法

    排序算法分为五大类 xff0c 一共是有九种 xff0c 如下 xff1a 插入类 xff1a 直接插入排序 折半插入排序 希尔排序 交换类 xff1a 冒泡排序 快速排序 选择类 xff1a 简单选择排序 堆排序 归并类 xff1a 二路
  • C语言实现-学生信息管理系统

    通过C语言实现一个学生信息管理系统 xff0c 要求如下 xff1a xff08 1 xff09 用户采用自己账号和密码登录系统 xff1b xff08 2 xff09 学生信息和账号密码通过文件的形式存储 xff1b xff08 3 xf
  • 通过python画矢量图(matplotlib,有代码)

    python画矢量图 xff08 有代码 xff09 python的matplotlib可以保存的文件格式word可以插入哪些图片格式呢代码中文乱码问题 有些同学因为文章的要求 xff0c 图片插入到word里的时候需要足够清晰 xff0c
  • Java实现LRU

    首先看看什么是LRU LRU是Least Recently Used的缩写 xff0c 即最近最少使用 xff0c 是一种常用的页面置换算法 xff0c 选择最近最久未使用的页面予以淘汰 该算法赋予每个页面一个访问字段 xff0c 用来记录
  • 域名cdn加速(apache与nginx)

    一 xff1a 由于公司业务属于请求量比较大的吧 xff0c 每个月几亿条 xff0c 考虑到安全性 xff0c 所以需要域名由http改为https cdn加速才可以支成撑业务 二 xff1a 之前的系统是使用lamp配置的 xff0c
  • ubuntu系统安装完nvidia显卡驱动后黑屏,不能进入系统

    我之前安装了系统里建议安装的nvidia 380显卡驱动 xff0c 为了安装更高版本的CUDA xff0c 我将nvidia显卡驱动升级到了430 xff0c 但是重启电脑进入Ubuntu系统时黑屏 xff0c 进不去系统界面 xff0c
  • 黑盒模糊测试之AFL++

    git clone depth 1 https github com AFLplusplus AFLplusplus cd AFLplusplus make Build Summary 43 afl fuzz and supporting
  • centos7安装MySQL5.7

    一 下载mysql5 7 1 下载地址 mysql 5 7 28 1 el7 x86 64 rpm bundle tar 2 上传至服务器 3 解压压缩包 解压命令 tar xvf mysql 5 7 28 1 el7 x86 64 rpm
  • 打包VSCode源码为安装程序(.exe)

    参考博客 GitHub vscode里的Packaging部分 xff1a https github com microsoft vscode wiki How to Contribute 这里提供了vscode打包后可以发布的平台代码 x
  • Ubuntu的安装卡在安装界面 (解决方法记录)

    安装过程 在 Install Ubuntu 的grub 选项上点击e 在 Linux 系统的启动参数 倒数第二行 中加入 nomodset 安装界面分辨率会有问题 xff0c 但这个之后再解决 安装过程中 xff0c 如果需要拖拽窗口 Al
  • 树莓派ubuntuMATE 安装xrdp来进行显示图形的远程调试

    树莓派ubuntuMATE 安装xrdp来进行显示图形的远程调试 引 在树莓派上调试显示图形界面的项目 xff0c 纠结配显示器的问题 pi本身有hdmi的接口 xff0c 如果有多余的显示器直接连接的那最好 xff0c 倘若接口不合适也可
  • C与C++源文件的拼接

    C 43 43 与C处理函数名 如果C 43 43 两个cpp源文件中函数名称相同 xff0c 会出现如下错误 xff08 ave就是函数名 xff09 34 int cdecl ave void 34 ave 64 64 YAHXZ 已经
  • 【Android-Socket】Socket通信笔记(单例模式,线程管理,AsyncTask)

    扉 本作学习视频来源 https www bilibili com video BV1Nx411r7Pr t 61 940 amp p 61 11界面参考 https blog csdn net fszeng2011 article det
  • 明明安装了anaconda,conda命令一直无效

    添加路径到bashrc里 export PATH 61 34 home xxx anaconda3 bin PATH 34 source 一下bashrc source bashrc
  • 云计算ACP练习题(一)

    阿里云计算绿网是云盾体系内的业务防护模块 xff0c 它的作用是保护网站内容的安全 xff0c 提前发现不符合政策规定的信息 以下对绿网功能的描述最准确的是 A 自动判别文本内容和图片是否合规 xff0c 支持API批量检测图片 B 只支持
  • 解决Linux字符界面中文变方框的问题

    图形界面控制台中输入init 3可以跳转到字符界面 xff0c 如果遇到含有中文目录且中文变成方框的问题 xff0c 可以尝试安装zhcon xff0c 然后做一下设置 xff0c 具体步骤如下 xff1a 终端下输入 xff1a sudo
  • 【报错解决方案】W: GPG error: http://dl.google.com/linux/chrome/deb stable InRelease

    0x00 问题描述 今天用apt update 更新apt源的时候 xff0c 曝出了 xff1a W GPG error http dl google com linux chrome deb stable InRelease The f
  • 磁盘满载导致的ubuntu远程连接xrdp失效问题

    远程连接断开主要三大原因 xff1a sshd服务和Xrdp服务未打开 防火墙拦截 电脑故障 SSHD网络服务和XRDP服务检测可以通过端口号监听查看service sshd status service xrdp status 也可以直接

随机推荐

  • MySQL入门指南3(常用函数)

    目录 一 常用函数 1 合计 统计函数 2 字符串相关函数 3 数学相关函数 4 加密和系统函数 5 流程控制函数 二 最后的话 一 常用函数 1 合计 统计函数 1 1 COUNT 用于统计表中记录 xff08 行 xff09 的数量 x
  • PAT A1153

    题目 xff1a https pintia cn problem sets 994805342720868352 problems 1071785190929788928 这道题我很久才AC xff0c 主要是不知道原来它的输入可以乱来 我
  • 在anaconda中新建和配置开发环境

    在anaconda中新建和配置开发环境 1 打开anaconda xff0c 来到主界面 2 单击Environment xff0c 进入开发环境列表 3 单击Open Terminal 进入命令行 4 在命令行中输入conda creat
  • 深度学习安装libmr\win10安装visual studio C++ build tools 提示安装包丢失或毁坏

    首先是做深度学习需要安装libMR xff0c 但苦于windos安装需要下载包导入而不能直接pip xff1a 这部分参考 35条消息 Python 在Windows环境安装libMR SuGarSJL的博客 CSDN博客 https b
  • 树莓派Raspberry Pi 3B+ 安装OpenWrt及配置(有线、无线联网,AP)

    OpenWrt官方介绍 OpenWrt项目是一个针对嵌入式设备的Linux操作系统 OpenWrt不是一个单一且不可更改的固件 xff0c 而是提供了具有软件包管理功能的完全可写的文件系统 这使您可以不使用供应商提供的应用程序选择和配置 x
  • 最大公约数(greatest common divisor)

    题目描述 有n个数字a1 a2 a3 an 求max gcd ai aj i 61 j gcd x y 表示x与y的最大公约数 输入格式 第一行一个整数n 之后一行n个数 xff0c 表示a1 a2 a3 an 输出格式 输出一个整数表示答
  • 尝试解读resize-observer-polyfill源码(1)

    00本人前端菜鸡一只 xff0c 这是我的第一个源码解读文章 xff0c 持续更新中 首先 xff0c 从获取源码 由工程根目录下的rollup config js可知 xff0c 这个工程是使用rollup打包的 打开之后可以看到具体配置
  • Spring cloud Gateway 指定执行过滤器 (在配置文件中配置所需要过滤器)

    gateway 相关文章 Spring cloud gateway 处理跨域问题 Spring cloud gateway 拦截请求404 等HTTP 状态码 Spring cloud gateway 修改response 截断问题 xff
  • spring cloud gateway 处理跨域问题

    Spring cloud gateway 设置https 和http同时支持 Spring cloud gateway 拦截请求404 等HTTP 状态码 Spring cloud gateway 修改response 截断问题 xff0c
  • IntelliJ IDEA 15款 神级超级牛逼插件推荐(自用,真的超级牛逼)

    目录 满满的都是干货 所有插件都是在 ctrl 43 alt 43 s 里的plugins 里进行搜索安装 1 CodeGlance 代码迷你缩放图插件 2 Codota 安装 xff1a 3 Material Theme UI 4 Ali
  • elasticsearch 安装常见问题解决办法

    本文章记录安装es过程中碰到的各种常见问题及解决方案 目录 本文章记录安装es过程中碰到的各种常见问题及解决方案 1 elasticsearch 7 6 1 bin elasticsearch 启动报以杀死 这个问题 没有生成其他日志 只有
  • mysql my.ini

    Mysql my ini client 设置mysql客户端默认字符集 default character set 61 utf8 mysql 设置mysql客户端默认字符集 default character set 61 utf8 us
  • 看了这篇文!你就知道是选 elasticsearch 还是 solr

    什么是全文搜索引擎 本词条由 科普中国 科学百科词条编写与应用工作项目 审核 全文搜索引擎就是通过从互联网上提取的各个网站的信息 xff08 以网页文字为主 xff09 而建立的数据库中 xff0c 检索与用户查询条件匹配的相关记录 xff
  • GitHub宣布现在对团队免费

    原文 xff1a GitHub宣布对所有人私有仓库免费 https github blog 2020 04 14 github is now free for teams 我们很高兴地宣布 xff0c 我们正在为所有GitHub帐户提供不受
  • 知道什么是CAP吗?不知道还敢称程序员?搞笑呢?

    分布式系统 xff08 distributed system xff09 正变得越来越重要 xff0c 大型网站几乎都是分布式的 分布式系统的最大难点 xff0c 就是各个节点的状态如何同步 CAP 定理是这方面的基本定理 xff0c 也是
  • 面试官问:你讲讲分布式事务问题的几种方案?

    本文转自 芋道源码 https mp weixin qq com s 9KKY3pCKNkz1VOVEzdXp5g 面试题 面试官心理分析 面试题剖析 两阶段提交方案 XA方案 TCC 方案 本地消息表 可靠消息最终一致性方案 最大努力通知
  • spring 事务不生效的几种情况

    在这里就不接受spring 事务的ACID特性 事务的传播行为等等 xff0c 相信看到这篇的大佬们应该也对事务有所了解了不过多阐述 直接分析事务不生效的原因 开喽 xff01 情况 xff08 一 xff09 xff1a 64 Descr
  • Spring cloud gateway 设置https 和http同时支持

    Spring cloud gateway 处理跨域问题 Spring cloud gateway 拦截请求404 等HTTP 状态码 Spring cloud gateway 修改response 截断问题 xff0c 乱码问题解决 Spr
  • 一场HttpClient调用流未关闭引发的java 程序假死

    生成环境突然假死 xff0c nginx 也打不过去 xff0c nnnnnnnn 以为是启动时间久了 xff0c 随手在启动 xff0c 没过几分钟 程序继续假死 xff0c 查看nginx 日志 有很多请求 xff0c 所以问题无法进行
  • 列表拖拽,上下移动 java 接口实现

    列表拖拽实现 上下移动实现 列表拖拽实现 拖拽的逻辑 xff1a 按住某一个id 拖拽到需要移动的某个后面 如 xff1a 1 2 3 4 5 把 1 放到5的后面 列表改变顺序后变成 2 3 4 5 1 所以目前的代码实现逻辑为 把1 挨