1. 程式人生 > >Java——點選上下箭頭實現商品排序

Java——點選上下箭頭實現商品排序

在專案中有時候難免會遇上這種商品排序的需求,當然,別的排序也是一樣的原理,如下圖

現在給我的要求是做到點選↑就把商品網上移動,點選↓就把商品往下移動,其實原理就是互換位置了,每個商品對應一個sortNum(排序碼),展示這個列表的時候是在SQL語句中根據sortNum進行排序,正序或者倒序,思路就是點↑的時候把上下的排序碼互換位置,點選↓的原理也是如此

如果僅僅是想實現這樣最簡單的上下排序那麼非常的容易,按照上面這個思路進行操作就行,但是我這個還有別的要求,還需要考慮到刪除商品的情況

刪除商品會讓那個商品對應的sortNum也變成空,這樣會在後期的排序中出現問題,所以在你的程式碼中得做些判斷,即使某個排序碼後面一位不見了,比如第一個商品排序碼是1,後面的商品是2,這個時候如果刪除了第二個商品,那麼第一個商品後面就變成3了,所以需要加個遞迴的查詢,他後面如果是空,在後面還是空,就需要遞迴查詢直到不為空的時候!

還有注意的地方是第一個商品肯定不能繼續網上移動了,最後一個肯定也不能繼續往下!

我的程式碼如下

 @ResponseBody
    @RequestMapping("/sortUp")
    public AjaxResult sortUp(Integer id) {//獲取到點選排序的那個商品id
        Goods goods = service.findById(id);//根據id查詢到對應的商品
        Integer sortNum = goods.getSortNum();//獲取對應的排序碼
        Integer integer = Md.selectOne(FIND_SORTFIRST, null, Integer.class);//==select sortNum from t_goods where deleteKey=1 and sortNum is not null order by sortNum
        if(sortNum<=integer){
            return  null;
        }
        if (sortNum > 1) {
            Integer upNum = 1;
            List<Goods> goodsList = this.getList(sortNum-1, false);
            for (Goods g : goodsList) {
                upNum = g.getSortNum();
                g.setSortNum(goods.getSortNum() );
                service.update(g);
            }
            goods.setSortNum(upNum);
            boolean flag = service.update(goods);
            if (flag) {
                return success("操作成功");
            } else {
                return error("操作失敗");
            }
        } else {
            return error("此商品不能往上移動!");
        }
    }
    @ResponseBody
    @RequestMapping("/sortDown")
    public AjaxResult sortDown(Integer id) {//獲取到點選排序的那個商品id
        Goods goods = service.findById(id);
        Integer integer = Md.selectOne(FIND_SORT, null, Integer.class);//==select sortNum from t_goods where deleteKey=1 and sortNum is not null order by sortNum desc
        Integer sortNum = goods.getSortNum();
        if (sortNum < 0) {
            return null;
        }
        if(sortNum>=integer){
            return null;
        }
        Integer dowmSortNum = 1;
        List<Goods> goodsList = this.getList(sortNum + 1, true);
        for (Goods g : goodsList) {
            dowmSortNum = g.getSortNum();
            g.setSortNum(goods.getSortNum());
            service.update(g);
        }
        goods.setSortNum(dowmSortNum);
        boolean flag = service.update(goods);
        if (flag) {
            return success("操作成功");
        } else {
            return error("操作失敗");
        }
    }
    public List<Goods> getList(Integer dowmSortNum, boolean f) {
        List<Goods> goodsList = service.findBy("sortNum=#{sortNum} and deleteKey=1", getData("sortNum", dowmSortNum));//deletKey=1代表有效的資料,sortNum是排序的號碼
        if (dowmSortNum == 0) {
            return null;
        }
        if (goodsList == null || goodsList.size() == 0) {
            if (f) {
                dowmSortNum = dowmSortNum + 1;
            } else {
                dowmSortNum = dowmSortNum - 1;
            }
            return this.getList(dowmSortNum, f);
        }
        return goodsList;
    }

具體的還是要根據實際情況來判斷!