首页 > 其他分享 >SpringBoot简易任务栏示例

SpringBoot简易任务栏示例

时间:2023-10-08 16:36:37浏览次数:44  
标签:sort SpringBoot 示例 startMoveSort user getSort 任务栏 图标

一、概述

  现有这样一个需求:前端要求实现类似任务栏的东西(windows电脑的任务栏)。要求:可以向任务栏增加图标、删除图标、给任务栏中的图标排序以及加载任务栏图标列表

参考样例图:

规律图:

 

  思路:(这里假设任务栏图标列表本身就是一个有序的集合,排序规则按照sort正向排序)

    新增:

      增加一个图标可能会在任务栏的任意位置,有可能是空任务栏第一次加入,也可能是任务栏中已经有了,从中间插入,也可能是直接将图标放到任务栏的最后。

      此处有一个通用的做法:假如在第2个位置插入一个新的图标。1.那么此时需要把第二个位置的图标的排序值传给后台,后台拿到排序值之后,把数据库中这个用户关联的图标的sort>传递过来的sort都+1 

                                 2.把传递过来的图标信息插入数据库,此图标的sort值=原始位置图标的sort值

                                 3.update 表名 set sort=sort+1 where sort>=orgSort

    删除:

      1.删除的做法和上面是相反的,因为删除了一个图标,被删除图标的位置需要向前补一位,即需要被删除图标后面的sort值都-1

      2.update 表名 set sort=sort-1 where sort>=orgSort

    

    给状态栏排序

      1.如上所示,如果第二个图标和第三个图标交换,或者第三个图标和第二个图标交换。第一个和第四个是不动的,只有二三发生了变动。所以只需要更改2,3的sort值即可。

      2.假设用户选中的图标中的sort为startSort,要替换图标位置的sort为targetSort。下面又分两种情况 1.startSort>targetSort 2.targetSort>startSort

      3.startSort>targetSort

List<User> users = userMapper.selectList(wrapper);
        if (startMoveSort > targetMoveSort) {//说明是从右向左拖拽(比目标位置大,需要减)
            int diff = startMoveSort - targetMoveSort;
            //startSort后面的值,都+1
            for (User user : users) {
                if (user.getSort() == startMoveSort) {
                    user.setSort(user.getSort() - diff);
                } else {
                    user.setSort(user.getSort() + 1);
                }
            }
        }

 

      4.targetSort>startSort

else if (startMoveSort < targetMoveSort) {//从左向右拖拽(比目标位置小,需要加)
            int diff = targetMoveSort - startMoveSort;//相差多少
            //和目标target之间的sort,逐一往上-1
            for (User user : users) {
                if (user.getSort() == startMoveSort) {
                    user.setSort(user.getSort() + diff);
                } else {
                    user.setSort(user.getSort() - 1);
                }
            }
        }

      5.更改sort的值以后,把变动区域的sort逐一进行update即可

 //如果没有用户id就说明是一个插入操作
        users.forEach(user -> {
            if (user.getId() != null) {
                userMapper.updateById(user);//更新
            } else {
                userMapper.insert(user);
            }
        });

 

二、代码示例

  1.新增

@Transactional
    @Override
    public ResultOk addUser(UserAddSortRequest request) {
        //批量更新sort的值,往后+1
        userMapper.sortBatchPlusOne(request.getLocationOfSort());
        //把插入的值,嵌入插入位置
        int rows = userMapper.insert(request.getUser());//先把这个位置插入
        System.out.println("插入用户数据:" + (rows > 0));
        return ResultOk.ok(200, "插入成功", rows>0);
    }

 

  2.删除

@Transactional
    @Override
    public ResultOk deleteUser(UserDeleteRequest request) {
        //因为要删除,需要批量更新sort的值
        userMapper.sortBatchMinusOne(request.getDeleteLocationOfSort());
        //执行删除操作
        int rows = userMapper.deleteById(request.getId());
        System.out.println("删除数据:"+(rows>0));
        return ResultOk.ok(200, "删除成功", rows>0);
    }

 

  3.排序

 @Override
    public ResultOk userSort(UserSortRequest request) {
        int startMoveSort = request.getStartMoveSort();
        int targetMoveSort = request.getTargetMoveSort();
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        wrapper.between(User::getSort,startMoveSort,targetMoveSort);
        List<User> users = userMapper.selectList(wrapper);
        if (startMoveSort > targetMoveSort) {//说明是从右向左拖拽(比目标位置大,需要减)
            int diff = startMoveSort - targetMoveSort;
            //startSort后面的值,都+1
            for (User user : users) {
                if (user.getSort() == startMoveSort) {
                    user.setSort(user.getSort() - diff);
                } else {
                    user.setSort(user.getSort() + 1);
                }
            }
        } else if (startMoveSort < targetMoveSort) {//从左向右拖拽(比目标位置小,需要加)
            int diff = targetMoveSort - startMoveSort;//相差多少
            //和目标target之间的sort,逐一往上-1
            for (User user : users) {
                if (user.getSort() == startMoveSort) {
                    user.setSort(user.getSort() + diff);
                } else {
                    user.setSort(user.getSort() - 1);
                }
            }
        }
        //如果没有用户id就说明是一个插入操作
        users.forEach(user -> {
            if (user.getId() != null) {
                userMapper.updateById(user);//更新
            } else {
                userMapper.insert(user);
            }
        });

        return ResultOk.ok(200, "排序成功", null);
    }

 

  4.查询列表

  @Override
    public ResultOk getUsers() {
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        wrapper.orderByAsc(User::getSort);
        List<User> users = userMapper.selectList(wrapper);
        return ResultOk.ok(200,"查询列表成功",users);
    }

 

标签:sort,SpringBoot,示例,startMoveSort,user,getSort,任务栏,图标
From: https://www.cnblogs.com/tony-yang-flutter/p/17749514.html

相关文章

  • Python入门示例系列20 函数
     函数function函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数built-in,比如print()。也可以自己创建函数,叫做用户自定义函数。 函数的定义(define)和调用(call)掌握函数的定义和调用。定义一个函......
  • Python入门示例系列18 条件控制 Conditional Statements
    Python提供了bool类型来表示真(对)或假(错),比如常见的5>3比较算式,这个是正确的,在程序世界里称之为真(对),Python使用True来代表;再比如4>20比较算式,这个是错误的,在程序世界里称之为假(错),Python使用False来代表。True和False是Python中的关键字,当作为Python代码输入时,一......
  • Python入门示例系列19 循环语句
    Python中的循环语句有for和while。 while语句Python中while语句的一般形式:while判断条件condition:执行语句statements同样需要注意冒号和缩进。另外,在Python中没有do..while循环。以下实例使用了while来计算1到100的总和:sum=0counter=1whilecounte......
  • Python入门示例系列17 输入与输出( 格式化输出 )
    Python入门示例系列17输入与输出 读取键盘输入(input)Python提供了input()内置函数从标准输入(键盘)读入一行文本,默认的标准输入是键盘。返回结果是字符串。>>>astr=input("请输入:");##input('提示的内容')请输入:123>>>print(astr)123 如果从键盘输入两个数字,并求这......
  • Python入门示例系列16 集合
    Python入门示例系列16集合 集合 集合(set)是一个无序的不重复元素序列。可以使用大括号{}或者set()函数创建集合,注意:创建一个空集合必须用set()而不是{},因为{}是用来创建一个空字典。集合是由不同元素组成,所以即便里面的值重复了,也会自动去重。示例:>>>s=set()#创......
  • Python入门示例系列14 元组
    Python入门示例系列14元组 Python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号(),列表使用方括号[]。元组创建只需要在括号中添加元素,并使用逗号隔开即可。示例:>>>t4=(1,2,3,4)#四个整数的元组>>>t4(1,2,3,4)>>>t1=()#空元祖>>>t1()>>......
  • Python入门示例系列15 字典
    Python入门示例系列15字典 字典的每个键值对用冒号:分隔,每个键值对之间用逗号(,)分隔,整个字典包括在花括号{}d={key1:value1,key2:value2,key3:value3}键必须是唯一的,但值则不必唯一。值可以取任何数据类型,但键必须是不可变的(immutable)数据类型,如字符串,数字。......
  • Python入门示例系列13 列表
    Python入门示例系列13列表 序列序列是Python中最基本的数据结构。Python包含6中内建的序列,即列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。序列通用的操作包括:索引([])、长度(len)、组合(序列相加)、重复(乘法)、分片(切片[:])、检查成员(in,notin)、遍历、最小值(mi......
  • Python入门示例系列 目录
    系列目录对应的B站视频:https://www.bilibili.com/video/BV1UL411c71d 入门*Python入门示例系列01为什么学Python-Python入门示例系列02Python语言的特点Python入门示例系列03安装Python开发工具(IDE)-Python入门示例系列04使用IDLEShellPython入门示例系列05使用PyChar......
  • Python入门示例系列11 数据类型
    Python入门示例系列11数据类型标准数据类型Python3中有六个标准的数据类型:   Number(数字)   String(字符串)   List(列表)   Tuple(元组)   Set(集合)   Dictionary(字典)Python3的六个标准数据类型中:   不可变数据immutable(3个):Number(数字)、String(字符串)、......