diff --git a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeCourseInfoService.java b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeCourseInfoService.java index 20caf51a..db91191d 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeCourseInfoService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeCourseInfoService.java @@ -61,6 +61,7 @@ import static com.ibeetl.admin.core.util.ExcelUtil.getCellFormatValue; import static com.ibeetl.jlw.enums.CopyFromEnum.FROM_OPEN_COURSE; import static com.ibeetl.jlw.enums.GlobalUpStatusEnum.UP; import static java.lang.Math.min; +import static java.math.BigDecimal.ROUND_HALF_UP; import static java.util.stream.Collectors.toSet; /** @@ -1289,13 +1290,19 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService * 拖动 - * 只传左元素,表示:拖动元素 在 左元素的左侧; - * 只传右元素,表示:拖动元素 在 右元素的右侧; - * 左右元素都传,则拖动元素放置在两个元素的中间。 + * 只传左元素ID,表示:拖动元素 在 左元素的左侧; + * 只传右元素ID,表示:拖动元素 在 右元素的右侧; + * 左右元素ID都传,则拖动元素放置在两个元素的中间。 * * @param id 拖动元素的ID - * @param leftId 左元素ID - * @param rightId 右元素ID + * @param leftId 左元素ID 偏小数值对应的元素ID + * @param rightId 右元素ID 偏大数值对应的元素ID + * + * 左侧(上) ==> 右侧(下) + * 小数值 ==> 大数值 + * + * 数值越小,越靠前 + * * @Author: 87966 * @Date: 2023/1/9 16:44 */ @@ -1311,23 +1318,60 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService item.getTeacherOpenCourseMergeCourseInfoId().equals(rightId)); + // 断言 Assert.isTrue(isHaveSelf, "未查询到要移动的元素!"); - Assert.isFalse(!isHaveLeft && !isHaveRight, "左右元素ID不能同时为空!"); + // 自身元素 + TeacherOpenCourseMergeCourseInfo selfElement = allElement.stream() + .filter(item -> item.getTeacherOpenCourseMergeCourseInfoId().equals(id)).findFirst().get(); + // 左侧元素 + TeacherOpenCourseMergeCourseInfo leftElement = allElement.stream() + .filter(item -> item.getTeacherOpenCourseMergeCourseInfoId().equals(leftId)).findFirst().orElse(null); + // 右侧元素 + TeacherOpenCourseMergeCourseInfo rightElement = allElement.stream() + .filter(item -> item.getTeacherOpenCourseMergeCourseInfoId().equals(rightId)).findFirst().orElse(null); + + // 定义排序值 + BigDecimal clacedOrder = null; + // 左移动,无法确定右侧边界,适用于置顶 if (isHaveLeft && !isHaveRight) { - + BigDecimal leftOrder = defaultIfNull(leftElement.getTeacherOpenCourseMergeCourseInfoOrder(), BigDecimal.ZERO); + // 数据库里存小数点后六位的排序值 + // 随机取值 0.0001 到 0.0005之间 + BigDecimal randomNum = RandomUtil.randomBigDecimal(new BigDecimal("0.0001"), new BigDecimal("0.0005")).setScale(6, ROUND_HALF_UP); + // 计算后的排序值 + clacedOrder = leftOrder.subtract(randomNum); } // 右移动,无法确定左侧边界,适用于置底 else if (!isHaveLeft && isHaveRight) { + BigDecimal rightOrder = defaultIfNull(rightElement.getTeacherOpenCourseMergeCourseInfoOrder(), BigDecimal.ZERO); + // 数据库里存小数点后六位的排序值 + // 随机取值 0.0001 到 0.0005之间 + BigDecimal randomNum = RandomUtil.randomBigDecimal(new BigDecimal("0.0001"), new BigDecimal("0.0005")).setScale(6, ROUND_HALF_UP); + // 计算后的排序值 + clacedOrder = rightOrder.add(randomNum); } // 可以确定左右两侧边界,移动的比较精准 else if (isHaveLeft && isHaveRight) { + BigDecimal leftOrder = defaultIfNull(leftElement.getTeacherOpenCourseMergeCourseInfoOrder(), BigDecimal.ZERO); + BigDecimal rightOrder = defaultIfNull(rightElement.getTeacherOpenCourseMergeCourseInfoOrder(), BigDecimal.ONE); + // 随机取值 + BigDecimal randomNum = RandomUtil.randomBigDecimal(leftOrder, rightOrder).setScale(6, ROUND_HALF_UP); + // 计算后的排序值 + clacedOrder = rightOrder.add(randomNum); + } + // 最后更新排序值 + if (clacedOrder != null) { + TeacherOpenCourseMergeCourseInfo updatePO = new TeacherOpenCourseMergeCourseInfo(); + updatePO.setTeacherOpenCourseMergeCourseInfoId(selfElement.getTeacherOpenCourseMergeCourseInfoId()); + updatePO.setTeacherOpenCourseMergeCourseInfoOrder(clacedOrder); + updateTemplate(updatePO); } } } diff --git a/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeCourseInfoController.java b/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeCourseInfoController.java index 57399db7..0c9c8122 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeCourseInfoController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeCourseInfoController.java @@ -593,9 +593,14 @@ public class TeacherOpenCourseMergeCourseInfoController{ * 只传右元素,表示:拖动元素 在 右元素的右侧; * 左右元素都传,则拖动元素放置在两个元素的中间。 * + * 左侧(上) ==> 右侧(下) + * 小数值 ==> 大数值 + * + * 数值越小,越靠前 + * * @param id 拖动元素的ID - * @param leftId 左元素ID - * @param rightId 右元素ID + * @param leftId 左元素ID 偏小数值对应的元素ID + * @param rightId 右元素ID 偏大数值对应的元素ID * @return {@link JsonResult} * @Author: 87966 * @Date: 2023/1/9 16:44