欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-14 16:46:28
...

列表拖拽实现

上下移动实现


 列表拖拽实现

拖拽的逻辑 :按住某一个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