beetlsql3-dev
Mlxa0324 2 years ago
parent e011377a73
commit 833f6c8bb4

@ -8,6 +8,7 @@ import org.beetl.sql.annotation.entity.AutoID;
import org.beetl.sql.fetch.annotation.Fetch;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
/*
@ -101,6 +102,9 @@ public class TeacherOpenCourseMergeCourseInfo extends BaseEntity implements Comp
//实训题IDs和章对应
private String resourcesTrainingIds ;
//排序值
private BigDecimal teacherOpenCourseMergeCourseInfoOrder;
//组织机构ID
@ -347,6 +351,13 @@ public class TeacherOpenCourseMergeCourseInfo extends BaseEntity implements Comp
this.userId = userId;
}
public BigDecimal getTeacherOpenCourseMergeCourseInfoOrder() {
return teacherOpenCourseMergeCourseInfoOrder;
}
public void setTeacherOpenCourseMergeCourseInfoOrder(BigDecimal teacherOpenCourseMergeCourseInfoOrder) {
this.teacherOpenCourseMergeCourseInfoOrder = teacherOpenCourseMergeCourseInfoOrder;
}
public void putChildren(List<TeacherOpenCourseMergeCourseInfo> courseInfoList){
this.set("children", courseInfoList);

@ -295,6 +295,5 @@ public class StudentClientLinkService extends CoreBaseService<StudentClientLink>
log.error("不支持的移动类型!");
break;
}
}
}

@ -9,7 +9,9 @@ import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNodeConfig;
import cn.hutool.core.lang.tree.TreeUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.extra.spring.SpringUtil;
import cn.jlw.util.ToolUtils;
import cn.jlw.validate.ValidateConfig;
@ -23,6 +25,7 @@ import com.ibeetl.admin.core.web.JsonReturnCode;
import com.ibeetl.jlw.dao.TeacherOpenCourseMergeCourseInfoDao;
import com.ibeetl.jlw.entity.*;
import com.ibeetl.jlw.entity.dto.QuestionSettingDTO;
import com.ibeetl.jlw.enums.MoveEnum;
import com.ibeetl.jlw.web.query.TeacherOpenCourseMergeCourseInfoQuery;
import com.ibeetl.jlw.web.query.TeacherOpenCourseMergeResourcesInfoQuery;
import lombok.extern.slf4j.Slf4j;
@ -45,6 +48,8 @@ import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
@ -55,6 +60,7 @@ import static cn.hutool.core.util.ObjectUtil.defaultIfNull;
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.util.stream.Collectors.toSet;
/**
@ -124,12 +130,12 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
return ret;
}
/**
* Key
*
*
* @param key
*/
// /**
// * 指定Key刷新缓存
// * 异步刷新。不影响正常业务逻辑
// *
// * @param key
// */
// @SneakyThrows
// @Async
// public void invalidateCourseInfoTreeLocalCache(Long key) {
@ -1167,4 +1173,161 @@ public class TeacherOpenCourseMergeCourseInfoService extends CoreBaseService<Tea
}
}
/**
*
* 00
* @param id
* @param moveType
*/
public void move(@NotNull(message = "ID不能为空") Long id, @NotNull(message = "移动类型不能为空!") MoveEnum moveType) {
List<TeacherOpenCourseMergeCourseInfo> links = teacherOpenCourseMergeCourseInfoDao.getByIds(id.toString());
Assert.notEmpty(links, "未查询到要移动的元素!");
TeacherOpenCourseMergeCourseInfo mergeCourseInfo = links.get(0);
switch (moveType) {
case MOVE_TOP: {
List<TeacherOpenCourseMergeCourseInfo> result = teacherOpenCourseMergeCourseInfoDao.createLambdaQuery()
.andEq(TeacherOpenCourseMergeCourseInfo::getCourseInfoType, mergeCourseInfo.getCourseInfoType())
.andEq(TeacherOpenCourseMergeCourseInfo::getCourseInfoStatus, 1)
.andNotEq(TeacherOpenCourseMergeCourseInfo::getTeacherOpenCourseMergeCourseInfoId, id)
.asc(TeacherOpenCourseMergeCourseInfo::getTeacherOpenCourseMergeCourseInfoOrder)
.limit(1, 1)
.select(TeacherOpenCourseMergeCourseInfo::getTeacherOpenCourseMergeCourseInfoOrder);
if (CollectionUtil.isNotEmpty(result)) {
TeacherOpenCourseMergeCourseInfo minOrderClientLink = result.get(0);
// 最小的排序值
BigDecimal minLinkOrder = minOrderClientLink.getTeacherOpenCourseMergeCourseInfoOrder();
// 置顶就现有的最小值减1。但是需要确保结果小于0
BigDecimal calcedOrder = BigDecimal.valueOf(NumberUtil.sub(min(minLinkOrder.floatValue(), 0), 1));
// 改变排序记录值
TeacherOpenCourseMergeCourseInfo updatePO = new TeacherOpenCourseMergeCourseInfo();
updatePO.setTeacherOpenCourseMergeCourseInfoId(mergeCourseInfo.getTeacherOpenCourseMergeCourseInfoId());
updatePO.setTeacherOpenCourseMergeCourseInfoOrder(calcedOrder);
updateTemplate(updatePO);
}
} break;
case MOVE_LEFT: {
List<TeacherOpenCourseMergeCourseInfo> result = teacherOpenCourseMergeCourseInfoDao.createLambdaQuery()
.andEq(TeacherOpenCourseMergeCourseInfo::getCourseInfoType, mergeCourseInfo.getCourseInfoType())
.andLess(TeacherOpenCourseMergeCourseInfo::getTeacherOpenCourseMergeCourseInfoOrder, mergeCourseInfo.getTeacherOpenCourseMergeCourseInfoOrder())
.andEq(TeacherOpenCourseMergeCourseInfo::getCourseInfoStatus, 1)
.andNotEq(TeacherOpenCourseMergeCourseInfo::getTeacherOpenCourseMergeCourseInfoId, id)
.desc(TeacherOpenCourseMergeCourseInfo::getTeacherOpenCourseMergeCourseInfoOrder)
.limit(1, 2)
.select(TeacherOpenCourseMergeCourseInfo::getTeacherOpenCourseMergeCourseInfoOrder);
if (CollectionUtil.isNotEmpty(result)) {
// 找到应该安插的位置
BigDecimal LinkOrder0 = result.get(0).getTeacherOpenCourseMergeCourseInfoOrder();
BigDecimal LinkOrder1 = LinkOrder0.subtract(BigDecimal.ONE);
if (result.size() == 2) {
LinkOrder1 = result.get(1).getTeacherOpenCourseMergeCourseInfoOrder();
}
BigDecimal min = NumberUtil.min(LinkOrder0, LinkOrder1);
BigDecimal max = NumberUtil.max(LinkOrder0, LinkOrder1);
// 左移位后的值
double calcedOrder = RandomUtil.randomDouble(min.doubleValue(), max.doubleValue(), 6, RoundingMode.HALF_UP);
// 改变排序记录值
TeacherOpenCourseMergeCourseInfo updatePO = new TeacherOpenCourseMergeCourseInfo();
updatePO.setTeacherOpenCourseMergeCourseInfoId(mergeCourseInfo.getTeacherOpenCourseMergeCourseInfoId());
updatePO.setTeacherOpenCourseMergeCourseInfoOrder(BigDecimal.valueOf(calcedOrder));
updateTemplate(updatePO);
}
} break;
case MOVE_RIGHT: {
List<TeacherOpenCourseMergeCourseInfo> result = teacherOpenCourseMergeCourseInfoDao.createLambdaQuery()
.andEq(TeacherOpenCourseMergeCourseInfo::getCourseInfoType, mergeCourseInfo.getCourseInfoType())
.andGreat(TeacherOpenCourseMergeCourseInfo::getTeacherOpenCourseMergeCourseInfoOrder, mergeCourseInfo.getTeacherOpenCourseMergeCourseInfoOrder())
.andEq(TeacherOpenCourseMergeCourseInfo::getCourseInfoStatus, 1)
.andNotEq(TeacherOpenCourseMergeCourseInfo::getTeacherOpenCourseMergeCourseInfoId, id)
.asc(TeacherOpenCourseMergeCourseInfo::getTeacherOpenCourseMergeCourseInfoOrder)
.limit(1, 2)
.select(TeacherOpenCourseMergeCourseInfo::getTeacherOpenCourseMergeCourseInfoOrder);
if (CollectionUtil.isNotEmpty(result)) {
// 找到应该安插的位置
BigDecimal LinkOrder0 = result.get(0).getTeacherOpenCourseMergeCourseInfoOrder();
BigDecimal LinkOrder1 = LinkOrder0.add(BigDecimal.ONE);
if (result.size() == 2) {
LinkOrder1 = result.get(1).getTeacherOpenCourseMergeCourseInfoOrder();
}
BigDecimal min = NumberUtil.min(LinkOrder0, LinkOrder1);
BigDecimal max = NumberUtil.max(LinkOrder0, LinkOrder1);
// 右移位后的值
double calcedOrder = RandomUtil.randomDouble(min.doubleValue(), max.doubleValue(), 6, RoundingMode.HALF_UP);
// 改变排序记录值
TeacherOpenCourseMergeCourseInfo updatePO = new TeacherOpenCourseMergeCourseInfo();
updatePO.setTeacherOpenCourseMergeCourseInfoId(mergeCourseInfo.getTeacherOpenCourseMergeCourseInfoId());
updatePO.setTeacherOpenCourseMergeCourseInfoOrder(BigDecimal.valueOf(calcedOrder));
updateTemplate(updatePO);
}
} break;
default:
log.error("不支持的移动类型!");
break;
}
}
/**
* : <br>
*
*
*
*
*
* @param id ID
* @param leftId ID
* @param rightId ID
* @Author: 87966
* @Date: 2023/1/9 16:44
*/
public void drag(@NotNull(message = "要移动的元素 ID不能为空") final Long id, final Long leftId, final Long rightId) {
// 查询出来所有元素
List<TeacherOpenCourseMergeCourseInfo> allElement = teacherOpenCourseMergeCourseInfoDao.getByIds(join(new Long[]{ id, leftId, rightId }, ","));
// 自身ID是否存在
boolean isHaveSelf = allElement.stream().anyMatch(item -> item.getTeacherOpenCourseMergeCourseInfoId().equals(id));
// 是否有左元素
boolean isHaveLeft = allElement.stream().anyMatch(item -> item.getTeacherOpenCourseMergeCourseInfoId().equals(leftId));
// 是否有元素
boolean isHaveRight = allElement.stream().anyMatch(item -> item.getTeacherOpenCourseMergeCourseInfoId().equals(rightId));
Assert.isTrue(isHaveSelf, "未查询到要移动的元素!");
Assert.isFalse(!isHaveLeft && !isHaveRight, "左右元素ID不能同时为空");
// 左移动,无法确定右侧边界,适用于置顶
if (isHaveLeft && !isHaveRight) {
}
// 右移动,无法确定左侧边界,适用于置底
else if (!isHaveLeft && isHaveRight) {
}
// 可以确定左右两侧边界,移动的比较精准
else if (isHaveLeft && isHaveRight) {
}
}
}

@ -276,7 +276,7 @@ public class StudentClientLinkController{
* @Author: 87966
* @Date: 2023/1/9 16:17
*/
@GetMapping(MODEL + "/move.json")
@PostMapping(MODEL + "/move.json")
@ResponseBody
public JsonResult move(Long id, MoveEnum moveType) {
studentClientLinkService.move(id, moveType);

@ -14,6 +14,7 @@ import com.ibeetl.admin.core.util.TimeTool;
import com.ibeetl.admin.core.web.JsonResult;
import com.ibeetl.jlw.entity.FileEntity;
import com.ibeetl.jlw.entity.TeacherOpenCourseMergeCourseInfo;
import com.ibeetl.jlw.enums.MoveEnum;
import com.ibeetl.jlw.service.TeacherOpenCourseMergeCourseInfoService;
import com.ibeetl.jlw.web.query.TeacherOpenCourseMergeCourseInfoQuery;
import org.apache.commons.lang3.StringUtils;
@ -568,4 +569,41 @@ public class TeacherOpenCourseMergeCourseInfoController{
return JsonResult.success(teacherOpenCourseMergeCourseInfoService.getTreeLocalCacheByTeacherOpenCourseId(teacherOpenCourseId));
}
/**
* : <br>
*
*
* @param id ID
* @param moveType
* @return {@link JsonResult}
* @Author: 87966
* @Date: 2023/1/9 16:17
*/
@PostMapping(MODEL + "/move.json")
@ResponseBody
public JsonResult move(Long id, MoveEnum moveType) {
teacherOpenCourseMergeCourseInfoService.move(id, moveType);
return JsonResult.success();
}
/**
* : <br>
*
*
*
*
*
* @param id ID
* @param leftId ID
* @param rightId ID
* @return {@link JsonResult}
* @Author: 87966
* @Date: 2023/1/9 16:44
*/
@PostMapping(MODEL + "/drag.json")
@ResponseBody
public JsonResult drag(Long id, Long leftId, Long rightId) {
teacherOpenCourseMergeCourseInfoService.drag(id, leftId, rightId);
return JsonResult.success();
}
}

Loading…
Cancel
Save