列表拖拽,上下移动 java 接口实现
程序员文章站
2022-07-14 16:46:28
...
列表拖拽实现
上下移动实现
列表拖拽实现
拖拽的逻辑 :按住某一个id 拖拽到需要移动的某个后面
如:1。2。3。4。5。
把 1 放到5的后面
列表改变顺序后变成
2、3、4、5、1、
所以目前的代码实现逻辑为 把1 挨个往后面替换 直到需要移动到的5 的排序号相同了进行交换完成
实现:
/**
* 交换
* 方法描述: 交换顺序
*
* @param 目标id
* @return {@link Object}
* @author tarzan
* @date
*/
public Object swap(User user) {
AssertUtil.notEmpty(user.getSourceId(), "需要移动id不能为空");
AssertUtil.notEmpty(user.getTargetId(), "需要移动到的目标id不能为空");
User source = lambdaQuery()
.eq(User::getId, user.getSourceId()).one();
User target = lambdaQuery()
.eq(User::getId, user.getTargetId()).one();
if (Objects.isNull(target) || Objects.isNull(source)) {
throw new BusinessException("数据未找到");
}
Integer targetOrderNum = target.getOrderNum();
Integer sourceOrderNum = source.getOrderNum();
LambdaQueryChainWrapper<User> lambdaquery;
if (targetOrderNum > sourceOrderNum) {
lambdaquery = lambdaQuery()
.ge(User::getOrderNum, source.getOrderNum())
.le(User::getOrderNum, target.getOrderNum());
} else {
lambdaquery = lambdaQuery()
.le(User::getOrderNum, source.getOrderNum())
.ge(User::getOrderNum, target.getOrderNum());
}
List<User> list = lambdaquery.list();
//重新排序
List<User> updateList = swapOrder(list, source, target);
if (CollectionUtils.isNotEmpty(updateList)) {
baseMapper.updateBatch(updateList);
}
return true;
}
/**
* 方法描述: 拖动排序
*
* @param list
* @param source
* @param target
* @date 2021年11月27日 18:13:56
*/
public List<User> swapOrder(List<User> list, User source, User target) {
if (source.getOrderNum() < target.getOrderNum()) {
return downSwap(list, source, target);
}
if (source.getOrderNum() > target.getOrderNum()) {
return upSwap(list, source, target);
}
return null;
}
/**
* 方法描述: 向下拖动排序
*
* @param list
* @param source
* @param target
* @throws
* @Return {@link List< InspectQuotaOrg>}
* @author tarzan Liu
* @date 2020年08月10日 18:14:14
*/
public List<User> downSwap(List<User> list, User source, User target) {
int sourceSort = source.getOrderNum();
int targetSort = target.getOrderNum();
list.sort(Comparator.comparing(User::getOrderNum));
for (User user : list) {
if (user.getId().equals(source.getId())) {
source = user;
}
}
for (User e : list) {
if (sourceSort < e.getOrderNum() && e.getOrderNum() <= targetSort) {
exchange(source, e);
}
}
return list;
}
/**
* 方法描述: 向上拖动排序
*
* @param list
* @param source
* @param target
* @throws
* @Return {@link List< InspectQuotaOrg>}
* @author tarzan Liu
* @date 2020年08月10日 18:14:14
*/
public List<Uesr> upSwap(List<Uesr> list, Uesr source, Uesr target) {
int sourceSort = source.getOrderNum();
int targetSort = target.getOrderNum();
list.sort(Comparator.comparing(Uesr::getOrderNum));
for (Uesr user : list) {
if (user.getId().equals(source.getId())) {
source = user;
}
}
for (int i = list.size(); i > 0; i--) {
Uesr e = list.get(i - 1);
if (sourceSort > e.getOrderNum() && e.getOrderNum() >= targetSort) {
exchange(source, e);
}
}
return list;
}
上下移动实现
上移下移其实比较简单,就是通过俩个时间的排序值交换
向上移动获取上一条的排序值
select
<include refid="Base_Column_List" />
from user u
WHERE u.order_num >
<!-- 当前数据的排序规则比较去除上移数据的排序 进行位置互换 -->
(select order_num from user where id=#{id,jdbcType=VARCHAR} and is_delete=0)
order by order_num asc limit 0,1
向下移动获取下面的第一条数据
select
<include refid="Base_Column_List" />
from user u
WHERE u.order_num <
<!-- 当前数据的排序规则比较去除上移数据的排序 进行位置互换 -->
(select order_num from user where id=#{id,jdbcType=VARCHAR} and is_delete=0)
order by order_num desc limit 0,1
下一篇: java 列表数据上下移动或置顶