• 简单的图片排序


    昨天工作的时候写了图片的排序接口,让后台自定义图片的位置.

    话不多说先上修改图片序号的实现原理:

         将5号移到2号,  此时区间 [ 2,5 ) 内的排序号都要加1.

     

          将2号移到5号,  此时区间 ( 2,5 ] 内的排序号都要减1.

    新增图片序号的实现原理:

     新增图片序号为3,那么区间 [ 3,∞ ) 内的序号均加1

    了解原理后上实现代码:

    id:图片ID;

    imgType:图片类型;

    orderId:图片序号.

    private void orderIdSort(AppImgBackVo appImg){
    Example exampleTwo = new Example(AppImg.class);
    Example.Criteria criteriaTwo = exampleTwo.createCriteria();
    criteriaTwo.andEqualTo("imgType", appImg.getImgType());
    //通过图片类型查找是否存在这个类型的图片
    List<AppImg> appImgList = appImgMapper.selectByExample(exampleTwo);
    //如果没有这个类型的图片
    if(appImgList.size() == 0){
    //排序号赋值为1
    appImg.setOrderId(1);
    }else {
    //如果不输入排序号
    if(appImg.getOrderId() == null){
    //已存在的数量
    Integer orderIdMax = appImgMapper.selectMaxOrderId(appImg.getImgType());
    //如果是新增,排序号默认为:数量+1
    if(appImg.getId() == null){
    appImg.setOrderId(orderIdMax+1);
    }else {//如果是修改:排序号默认为最大排序号
    appImg.setOrderId(orderIdMax);
    }
    }else {//自定义排序号
    //当排序号小于1时,默认为1
    if(appImg.getOrderId() < 1){
    appImg.setOrderId(1);
    }
    if(appImg.getId() == null){//添加
    //排序号大于原有数量+1时默认为最大数+1
    if(appImg.getOrderId() > appImgList.size()+1){
    appImg.setOrderId(appImgList.size()+1);
    }
                    //排序号大于原有数量+1时默认为原有数量+1
                    for (AppImg appImgTwo : appImgList){                    区间内排序号+1                    if(appImgTwo.getOrderId() >= appImg.getOrderId()){
    appImgTwo.setOrderId(appImgTwo.getOrderId()+1);
    appImgMapper.updateByPrimaryKey(appImgTwo);
    }
    }
    }else {//修改
    if(appImg.getOrderId() > appImgList.size()){
    //排序号大于原有数量+1时默认为原有数量
    appImg.setOrderId(appImgList.size());
    }
    AppImg appImgOld = appImgMapper.selectByPrimaryKey(appImg.getId());
    //原先的排序号
    Integer orderIdOld = appImgOld.getOrderId();
    //修改后的排序号
    Integer orderIdNew = appImg.getOrderId();
    //遍历所有同类型图片
    for (AppImg appImgTwo : appImgList){
    if(orderIdOld > orderIdNew){ //向前移动
    //改动区间内的排序号+1
    if(appImgTwo.getOrderId() >= orderIdNew && appImgTwo.getOrderId() < orderIdOld){
    appImgTwo.setOrderId(appImgTwo.getOrderId()+1);
    appImgMapper.updateByPrimaryKey(appImgTwo);
    }
    }else {//向后移动
    //改动区间内的排序号-1
    if(appImgTwo.getOrderId() <= orderIdNew && appImgTwo.getOrderId() > orderIdOld){
    appImgTwo.setOrderId(appImgTwo.getOrderId()-1);
    appImgMapper.updateByPrimaryKey(appImgTwo);
    }
    }
    }
    }
    }
    }
    }
    因为项目里在APP端需要展示的每个类型的图片量比较少,所以我写了个简单的排序.
    如果排序量成千上万,数量比较多的不建议使用我这个实现原理,因为区间内每个图片的序号都需要修改对数据的压力比较大.
    第一次写博客,手有点抖,大佬们随便看看就好
  • 相关阅读:
    Vue 2.x windows环境下安装
    VSCODE官网下载缓慢或下载失败 解决办法
    angular cli 降级
    Win10 VS2019 设置 以管理员身份运行
    XSHELL 连接 阿里云ECS实例
    Chrome浏览器跨域设置
    DBeaver 执行 mysql 多条语句报错
    DBeaver 连接MySql 8.0 报错 Public Key Retrieval is not allowed
    DBeaver 连接MySql 8.0报错 Unable to load authentication plugin 'caching_sha2_password'
    Linux系统分区
  • 原文地址:https://www.cnblogs.com/ONFE/p/12171107.html
Copyright © 2020-2023  润新知