簡單的圖片排序

昨天工做的時候寫了圖片的排序接口,讓後臺自定義圖片的位置.app

話很少說先上修改圖片序號的實現原理:blog

 

 

     將5號移到2號,  此時區間 [ 2,5 ) 內的排序號都要加1.排序

 

 

 

 

      將2號移到5號,  此時區間 ( 2,5 ] 內的排序號都要減1.接口

新增圖片序號的實現原理:圖片

 

 新增圖片序號爲3,那麼區間 [ 3,∞ ) 內的序號均加1get

 

瞭解原理後上實現代碼:博客

id:圖片ID;it

imgType:圖片類型;class

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端須要展現的每一個類型的圖片量比較少,因此我寫了個簡單的排序.若是排序量成千上萬,數量比較多的不建議使用我這個實現原理,由於區間內每一個圖片的序號都須要修改對數據的壓力比較大.第一次寫博客,手有點抖,大佬們隨便看看就好
相關文章
相關標籤/搜索