Java树形目录上下移动

387 字
2 分钟
Java树形目录上下移动

1、Controller层#

@PostMapping("/menuUpOrDown")
@ApiOperation(value = "菜单上下平移")
@ApiImplicitParam(name = "json", value = "{\"menuId\":\"菜单ID\",\"direct\":\"1-上移,2-下移\"}")
public ApiResult menuUpOrDown(@RequestBody String json) {
try {
CheckToolClass.assertIsJsonLegal(json,"请求参数不能为空!");
Long menuId = Long.valueOf(JSONObject.parseObject(json).get("menuId").toString());
Integer direct = Integer.valueOf(JSONObject.parseObject(json).get("menuId").toString());
return sysMenuService.menuUpOrDown(menuId,direct);
} catch (Exception e) {
log.error(e.getMessage(), e);
return ApiResult.error(ResultStatus.error.getCode(), MsgConstant.INQUIRE_FAILURE.getMsg());
}
}

2、interface层#

/**
* 菜单同级上下平移
* @param menuId 菜单id
* @param direct 方向
* @return 移动成功
*/
ApiResult menuUpOrDown(Long menuId, Integer direct);

3、实现层#

@Override
public ApiResult menuUpOrDown(Long menuId, Integer direct) {
if (direct == NumberConstants.ONE){
return moveUp(menuId);
}else {
return moveDown(menuId);
}
}
//菜单上移
private ApiResult moveUp(Long menuId) {
//获取上移的那条数据的信息
SysMenu upSysMenu = sysMenuMapper.selectById(menuId);
Integer temp = upSysMenu.getOrderNum();
//查询上一条记录
SysMenu downSysMenu = sysMenuMapper.moveUp(temp,upSysMenu.getMenuId());
//SysMenu ltMenu = sysMenuMapper.selectOne(Wrappers.lambdaQuery(SysMenu.class)
//.lt(SysMenu::getOrderNum, orderNum)
//.eq(SysMenu::getParentId, upSysMenu.getParentId()).orderByDesc(SysMenu::getOrderNum).last("limit 1"));
//如果上面已经没有记录了,返回
if (downSysMenu == null) {
return ApiResult.fail("已经平移至最上方,无法移动!");
}
upSysMenu.setOrderNum(downSysMenu.getOrderNum());
downSysMenu.setOrderNum(temp);
sysMenuMapper.updateById(upSysMenu);
sysMenuMapper.updateById(downSysMenu);
return ApiResult.success();
}
//菜单下移
private ApiResult moveDown(Long menuId) {
SysMenu downSysMenu = sysMenuMapper.selectById(menuId);
Integer temp = downSysMenu.getOrderNum();
//查询下一条记录
SysMenu upSysMenu = sysMenuMapper.moveDown(temp,downSysMenu.getMenuId());
//SysMenu gtMenu = sysMenuMapper.selectOne(Wrappers.lambdaQuery(SysMenu.class)
//.gt(SysMenu::getOrderNum, orderNum)
//.eq(SysMenu::getParentId, downSysMenu.getParentId()).orderByAsc(SysMenu::getOrderNum).last("limit 1"));
if (upSysMenu == null) {
return ApiResult.fail("已经平移至最下方,无法移动!");
}
downSysMenu.setOrderNum(upSysMenu.getOrderNum());
upSysMenu.setOrderNum(temp);
sysMenuMapper.updateById(upSysMenu);
sysMenuMapper.updateById(downSysMenu);
return ApiResult.success();
}

4、Mapper#

/**
* 查询上一条记录
* @param orderNum 排序字段
* @param menuId 菜单id
* @return 菜单对象
*/
SysMenu moveUp(@Param("orderNum") Integer orderNum, @Param("menuId") Long menuId);
/**
* 查询下一条记录
* @param orderNum 排序字段
* @param menuId 菜单id
* @return 菜单对象
*/
SysMenu moveDown(@Param("orderNum") Integer orderNum, @Param("menuId") Long menuId);

5、.XML#

<select id="moveUp" resultType="com.luban.system.entity.SysMenu">
select
<include refid="AllColumnlist"></include>
from sys_menu a
WHERE a.order_num &lt; #{orderNum} and menu_id &lt; #{menuId}
order by a.order_num desc limit 1
</select>
<select id="moveDown" resultType="com.luban.system.entity.SysMenu">
select
<include refid="AllColumnlist"></include>
from sys_menu a
WHERE a.order_num &gt; #{orderNum} and menu_id &gt; #{menuId}
order by a.order_num asc limit 1
</select>

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
Java树形目录上下移动
https://firefly.cuteleaf.cn/posts/obsidian/java树形目录上下移动/
作者
Firefly
发布于
2026-06-29
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Firefly
Hello, I'm Firefly.
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
85
分类
5
标签
11
总字数
50,344
运行时长
0
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.12.3
文章许可
CC BY-NC-SA 4.0

文章目录