Java——點選上下箭頭實現商品排序
阿新 • • 發佈:2018-12-03
在專案中有時候難免會遇上這種商品排序的需求,當然,別的排序也是一樣的原理,如下圖
現在給我的要求是做到點選↑就把商品網上移動,點選↓就把商品往下移動,其實原理就是互換位置了,每個商品對應一個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; }
具體的還是要根據實際情況來判斷!