移动判断

beetlsql3-dev
Mlxa0324 2 years ago
parent d72345f1e8
commit e011377a73

@ -1,6 +1,7 @@
package com.ibeetl.jlw.service; package com.ibeetl.jlw.service;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import cn.jlw.util.ToolUtils; import cn.jlw.util.ToolUtils;
@ -191,108 +192,109 @@ public class StudentClientLinkService extends CoreBaseService<StudentClientLink>
*/ */
public void move(@NotNull(message = "ID不能为空") Long id, @NotNull(message = "移动类型不能为空!") MoveEnum moveType) { public void move(@NotNull(message = "ID不能为空") Long id, @NotNull(message = "移动类型不能为空!") MoveEnum moveType) {
List<StudentClientLink> links = studentClientLinkDao.getByIds(id.toString()); List<StudentClientLink> links = studentClientLinkDao.getByIds(id.toString());
if (CollectionUtil.isNotEmpty(links)) {
StudentClientLink studentClientLink = links.get(0);
switch (moveType) {
case MOVE_TOP: {
List<StudentClientLink> result = studentClientLinkDao.createLambdaQuery()
.andEq(StudentClientLink::getStudentClientLinkType, studentClientLink.getStudentClientLinkType())
.andEq(StudentClientLink::getStudentClientLinkStatus, 1)
.andNotEq(StudentClientLink::getStudentClientLinkId, id)
.asc(StudentClientLink::getStudentClientLinkOrder)
.limit(1, 1)
.select(StudentClientLink::getStudentClientLinkOrder);
if (CollectionUtil.isNotEmpty(result)) {
StudentClientLink minOrderClientLink = result.get(0);
// 最小的排序值
BigDecimal minLinkOrder = minOrderClientLink.getStudentClientLinkOrder();
// 置顶就现有的最小值减1。但是需要确保结果小于0
BigDecimal calcedOrder = BigDecimal.valueOf(NumberUtil.sub(min(minLinkOrder.floatValue(), 0), 1));
// 改变排序记录值
StudentClientLink updatePO = new StudentClientLink();
updatePO.setStudentClientLinkId(studentClientLink.getStudentClientLinkId());
updatePO.setStudentClientLinkOrder(calcedOrder);
updateTemplate(updatePO);
}
} break;
case MOVE_LEFT: {
List<StudentClientLink> result = studentClientLinkDao.createLambdaQuery()
.andEq(StudentClientLink::getStudentClientLinkType, studentClientLink.getStudentClientLinkType())
.andLess(StudentClientLink::getStudentClientLinkOrder, studentClientLink.getStudentClientLinkOrder())
.andEq(StudentClientLink::getStudentClientLinkStatus, 1)
.andNotEq(StudentClientLink::getStudentClientLinkId, id)
.desc(StudentClientLink::getStudentClientLinkOrder)
.limit(1, 2)
.select(StudentClientLink::getStudentClientLinkOrder);
if (CollectionUtil.isNotEmpty(result)) {
// 找到应该安插的位置
BigDecimal LinkOrder0 = result.get(0).getStudentClientLinkOrder();
BigDecimal LinkOrder1 = LinkOrder0.subtract(BigDecimal.ONE);
if (result.size() == 2) {
LinkOrder1 = result.get(1).getStudentClientLinkOrder();
}
BigDecimal min = NumberUtil.min(LinkOrder0, LinkOrder1);
BigDecimal max = NumberUtil.max(LinkOrder0, LinkOrder1);
// 左移位后的值
double calcedOrder = RandomUtil.randomDouble(min.doubleValue(), max.doubleValue(), 6, RoundingMode.HALF_UP);
// 改变排序记录值
StudentClientLink updatePO = new StudentClientLink();
updatePO.setStudentClientLinkId(studentClientLink.getStudentClientLinkId());
updatePO.setStudentClientLinkOrder(BigDecimal.valueOf(calcedOrder));
updateTemplate(updatePO);
Assert.notEmpty(links, "未查询到要移动的元素!");
StudentClientLink studentClientLink = links.get(0);
switch (moveType) {
case MOVE_TOP: {
List<StudentClientLink> result = studentClientLinkDao.createLambdaQuery()
.andEq(StudentClientLink::getStudentClientLinkType, studentClientLink.getStudentClientLinkType())
.andEq(StudentClientLink::getStudentClientLinkStatus, 1)
.andNotEq(StudentClientLink::getStudentClientLinkId, id)
.asc(StudentClientLink::getStudentClientLinkOrder)
.limit(1, 1)
.select(StudentClientLink::getStudentClientLinkOrder);
if (CollectionUtil.isNotEmpty(result)) {
StudentClientLink minOrderClientLink = result.get(0);
// 最小的排序值
BigDecimal minLinkOrder = minOrderClientLink.getStudentClientLinkOrder();
// 置顶就现有的最小值减1。但是需要确保结果小于0
BigDecimal calcedOrder = BigDecimal.valueOf(NumberUtil.sub(min(minLinkOrder.floatValue(), 0), 1));
// 改变排序记录值
StudentClientLink updatePO = new StudentClientLink();
updatePO.setStudentClientLinkId(studentClientLink.getStudentClientLinkId());
updatePO.setStudentClientLinkOrder(calcedOrder);
updateTemplate(updatePO);
}
} break;
case MOVE_LEFT: {
List<StudentClientLink> result = studentClientLinkDao.createLambdaQuery()
.andEq(StudentClientLink::getStudentClientLinkType, studentClientLink.getStudentClientLinkType())
.andLess(StudentClientLink::getStudentClientLinkOrder, studentClientLink.getStudentClientLinkOrder())
.andEq(StudentClientLink::getStudentClientLinkStatus, 1)
.andNotEq(StudentClientLink::getStudentClientLinkId, id)
.desc(StudentClientLink::getStudentClientLinkOrder)
.limit(1, 2)
.select(StudentClientLink::getStudentClientLinkOrder);
if (CollectionUtil.isNotEmpty(result)) {
// 找到应该安插的位置
BigDecimal LinkOrder0 = result.get(0).getStudentClientLinkOrder();
BigDecimal LinkOrder1 = LinkOrder0.subtract(BigDecimal.ONE);
if (result.size() == 2) {
LinkOrder1 = result.get(1).getStudentClientLinkOrder();
} }
} break;
BigDecimal min = NumberUtil.min(LinkOrder0, LinkOrder1);
BigDecimal max = NumberUtil.max(LinkOrder0, LinkOrder1);
case MOVE_RIGHT: {
List<StudentClientLink> result = studentClientLinkDao.createLambdaQuery() // 左移位后的值
.andEq(StudentClientLink::getStudentClientLinkType, studentClientLink.getStudentClientLinkType()) double calcedOrder = RandomUtil.randomDouble(min.doubleValue(), max.doubleValue(), 6, RoundingMode.HALF_UP);
.andGreat(StudentClientLink::getStudentClientLinkOrder, studentClientLink.getStudentClientLinkOrder())
.andEq(StudentClientLink::getStudentClientLinkStatus, 1) // 改变排序记录值
.andNotEq(StudentClientLink::getStudentClientLinkId, id) StudentClientLink updatePO = new StudentClientLink();
.asc(StudentClientLink::getStudentClientLinkOrder) updatePO.setStudentClientLinkId(studentClientLink.getStudentClientLinkId());
.limit(1, 2) updatePO.setStudentClientLinkOrder(BigDecimal.valueOf(calcedOrder));
.select(StudentClientLink::getStudentClientLinkOrder); updateTemplate(updatePO);
if (CollectionUtil.isNotEmpty(result)) { }
// 找到应该安插的位置 } break;
BigDecimal LinkOrder0 = result.get(0).getStudentClientLinkOrder();
BigDecimal LinkOrder1 = LinkOrder0.add(BigDecimal.ONE);
if (result.size() == 2) { case MOVE_RIGHT: {
LinkOrder1 = result.get(1).getStudentClientLinkOrder(); List<StudentClientLink> result = studentClientLinkDao.createLambdaQuery()
} .andEq(StudentClientLink::getStudentClientLinkType, studentClientLink.getStudentClientLinkType())
.andGreat(StudentClientLink::getStudentClientLinkOrder, studentClientLink.getStudentClientLinkOrder())
BigDecimal min = NumberUtil.min(LinkOrder0, LinkOrder1); .andEq(StudentClientLink::getStudentClientLinkStatus, 1)
BigDecimal max = NumberUtil.max(LinkOrder0, LinkOrder1); .andNotEq(StudentClientLink::getStudentClientLinkId, id)
.asc(StudentClientLink::getStudentClientLinkOrder)
// 右移位后的值 .limit(1, 2)
double calcedOrder = RandomUtil.randomDouble(min.doubleValue(), max.doubleValue(), 6, RoundingMode.HALF_UP); .select(StudentClientLink::getStudentClientLinkOrder);
// 改变排序记录值 if (CollectionUtil.isNotEmpty(result)) {
StudentClientLink updatePO = new StudentClientLink(); // 找到应该安插的位置
updatePO.setStudentClientLinkId(studentClientLink.getStudentClientLinkId()); BigDecimal LinkOrder0 = result.get(0).getStudentClientLinkOrder();
updatePO.setStudentClientLinkOrder(BigDecimal.valueOf(calcedOrder)); BigDecimal LinkOrder1 = LinkOrder0.add(BigDecimal.ONE);
updateTemplate(updatePO); if (result.size() == 2) {
LinkOrder1 = result.get(1).getStudentClientLinkOrder();
} }
} break;
BigDecimal min = NumberUtil.min(LinkOrder0, LinkOrder1);
BigDecimal max = NumberUtil.max(LinkOrder0, LinkOrder1);
default: // 右移位后的值
log.error("不支持的移动类型!"); double calcedOrder = RandomUtil.randomDouble(min.doubleValue(), max.doubleValue(), 6, RoundingMode.HALF_UP);
break;
}
// 改变排序记录值
StudentClientLink updatePO = new StudentClientLink();
updatePO.setStudentClientLinkId(studentClientLink.getStudentClientLinkId());
updatePO.setStudentClientLinkOrder(BigDecimal.valueOf(calcedOrder));
updateTemplate(updatePO);
}
} break;
default:
log.error("不支持的移动类型!");
break;
} }
} }
} }

@ -266,6 +266,16 @@ public class StudentClientLinkController{
return JsonResult.success(); return JsonResult.success();
} }
/**
* : <br>
*
*
* @param id ID
* @param moveType
* @return {@link JsonResult}
* @Author: 87966
* @Date: 2023/1/9 16:17
*/
@GetMapping(MODEL + "/move.json") @GetMapping(MODEL + "/move.json")
@ResponseBody @ResponseBody
public JsonResult move(Long id, MoveEnum moveType) { public JsonResult move(Long id, MoveEnum moveType) {

Loading…
Cancel
Save