20240112
ccnaive 2024/1/10
# 1 上移、下移、置顶逻辑
倒序逻辑:
使用一个sort_order字段来排序
新增:当新增第一个时初始化100000
新增第N个:max(sort_order) -1 ,放在下面
上移:当前sort_order和大于当前sort_order替换(已经最顶不能上移
下移:当前sort_order和小于当前sort_order替换(已经最低不能下移
置顶:当前sort_order和max(sort_order)替换
# mybatis
<!-- 读取上一条记录-->
<select id="selectPreviousOrder" resultType="java.lang.Integer" parameterType="java.util.Map">
SELECT ifnull(iorder, 1) previousOrder
FROM goods
WHERE iorder <![CDATA[ < ]]> #{iorder}
order by iorder desc limit 0,1
</select>
<!-- 读取下一条记录-->
<select id="selectNextOrder" resultType="java.lang.Integer" parameterType="java.util.Map">
SELECT ifnull(iorder, 1) nextOrder
FROM goods
WHERE iorder > #{iorder}
order by iorder limit 0,1
</select>
<!-- 修改当前的排序-->
<update id="updateSelfOrder" parameterType="java.util.Map">
UPDATE goods SET iorder = #{iorder} WHERE au_id = #{auId}
</update>
<!--修改当前的上一个或者下一个的排序 -->
<update id="updateOtherOrder" parameterType="java.util.Map">
UPDATE goods SET iorder = #{iorder} WHERE iorder = #{originalOrder}
</update>
# service
@Transactional
public int movelOrder(Goods goods, String operateType) {
try {
//当前移动的分类
Map<String, Object> selfMap = new HashMap<>();
selfMap.put("auId", goods.getAuId());
//当前移动分类的上一个或者下一个
Map<String, Object> otherMap = new HashMap<>();
otherMap.put("iorder", goods.getIorder());
//获取最大排序值
Map<String, Object> order = goodsMapper.selectMaxOrder();
if ("top".equals(operateType)) { //置顶
//获取最大排序值
int maxOrder = order == null ? 1 : Integer.valueOf(order.get("maxOrder").toString()) + 1;
selfMap.put("iorder", maxOrder);
//修改当前排序值为最大排序值+1
goodsMapper.updateSelfOrder(selfMap);
}
if ("up".equals(operateType)) { //上移
//获取下一条记录iorder
int nextOrder = goodsMapper.selectNextOrder(paramMap);
//修改下一条的为当前值
otherMap.put("originalOrder", nextOrder );
goodsMapper.updateOtherOrder(otherMap);
//修改自己的排序为下一条
selfMap.put("iorder", nextOrder);
goodsMapper.updateSelfOrder(selfMap);
}
if ("down".equals(operateType)) { //下移
//获取上一条记录iorder
int previousOrder = goodsMapper.selectPreviousOrder(paramMap);
otherMap.put("originalOrder", previousOrder );
//修改上一条的为当前值
goodsMapper.updateOtherOrder(otherMap);
//修改自己的排序为上一条
selfMap.put("iorder", previousOrder );
goodsMapper.updateSelfOrder(selfMap);
}
} catch (Exception e) {
logger.error("移动异常" + e.getMessage() );
return 0;
}
return 1;
}