diff --git a/doc/sql/mysql/tianze-pro.sql b/doc/sql/mysql/tianze-pro.sql index c050887c..381fff59 100644 --- a/doc/sql/mysql/tianze-pro.sql +++ b/doc/sql/mysql/tianze-pro.sql @@ -28814,17 +28814,18 @@ alter table teacher_open_course_merge_student comment '课程开课-关联-学 -- Table structure for teacher_open_course_merge_teacher -- ---------------------------- DROP TABLE IF EXISTS `teacher_open_course_merge_teacher`; -CREATE TABLE `teacher_open_course_merge_teacher` ( +CREATE TABLE `teacher_open_course_merge_teacher` ( `teacher_open_course_merge_teacher_id` bigint(20) NOT NULL COMMENT '课程开课教师关联ID', - `teacher_open_course_id` bigint(20) NULL DEFAULT NULL COMMENT '课程开课ID', - `teacher_id` bigint(20) NULL DEFAULT NULL COMMENT '教师ID', - `teacher_open_course_merge_teacher_status` int(11) NULL DEFAULT NULL COMMENT '状态(1启用 2禁用)', - `teacher_open_course_merge_teacher_add_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `teacher_open_course_id` bigint(20) DEFAULT NULL COMMENT '课程开课ID', + `teacher_id` bigint(20) DEFAULT NULL COMMENT '教师ID', + `teacher_open_course_merge_teacher_status` int(11) DEFAULT NULL COMMENT '状态(1启用 2禁用)', + `teacher_open_course_merge_teacher_add_time` datetime DEFAULT NULL COMMENT '创建时间', + `teacher_open_course_merge_teacher_order_index` bigint(20) DEFAULT NULL COMMENT '排序', `teacher_open_course_merge_teacher_auth_code` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '教师开课授权码', - `org_id` bigint(20) NULL DEFAULT NULL COMMENT '组织ID', - `user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户ID', + `org_id` bigint(20) DEFAULT NULL COMMENT '组织ID', + `user_id` bigint(20) DEFAULT NULL COMMENT '用户ID', PRIMARY KEY (`teacher_open_course_merge_teacher_id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '教师-课程开课-关联教师' ROW_FORMAT = DYNAMIC; +) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='教师-课程开课-关联教师'; -- ---------------------------- -- Records of teacher_open_course_merge_teacher diff --git a/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeTeacherDao.java b/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeTeacherDao.java index bfb92030..b4cdbb1f 100644 --- a/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeTeacherDao.java +++ b/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeTeacherDao.java @@ -2,6 +2,7 @@ package com.ibeetl.jlw.dao; import com.ibeetl.jlw.entity.TeacherOpenCourseMergeTeacher; import com.ibeetl.jlw.web.query.TeacherOpenCourseMergeTeacherQuery; +import com.sun.istack.internal.NotNull; import org.beetl.sql.core.engine.PageQuery; import org.beetl.sql.mapper.BaseMapper; import org.beetl.sql.mapper.annotation.SqlResource; @@ -23,4 +24,55 @@ public interface TeacherOpenCourseMergeTeacherDao extends BaseMapper getByIds(String ids); public List getValuesByQuery(TeacherOpenCourseMergeTeacherQuery teacherOpenCourseMergeTeacherQuery); + + /** + * 通过教师ID集合查询关联信息 + * @param teacherId + * @return + */ + default List getListByTeacherId(@NotNull Long teacherId) { + return createLambdaQuery().andEq(TeacherOpenCourseMergeTeacher::getTeacherId, teacherId) + .andEq(TeacherOpenCourseMergeTeacher::getTeacherOpenCourseMergeTeacherStatus, 1) + .appendSql("order by teacher_open_course_merge_teacher_order_index desc ") + .select(); + } + + /** + * 通过教师ID集合查询关联信息 + * @param teacherId + * @return + */ + default TeacherOpenCourseMergeTeacher getOneByTeacherId(@NotNull Long teacherId) { + return createLambdaQuery().andEq(TeacherOpenCourseMergeTeacher::getTeacherId, teacherId) + .andEq(TeacherOpenCourseMergeTeacher::getTeacherOpenCourseMergeTeacherStatus, 1) + .appendSql("order by teacher_open_course_merge_teacher_order_index desc limit 1 ") + .unique(); + } + + /** + * 通过开课ID集合查询关联信息 + * @param teacherOpenCourseId + * @return + */ + default TeacherOpenCourseMergeTeacher getValueByTeacherOpenCourseId(@NotNull Long teacherOpenCourseId) { + return createLambdaQuery().andEq(TeacherOpenCourseMergeTeacher::getTeacherOpenCourseId, teacherOpenCourseId) + .andEq(TeacherOpenCourseMergeTeacher::getTeacherOpenCourseMergeTeacherStatus, 1) + .appendSql("order by teacher_open_course_merge_teacher_order_index desc limit 1 ") + .unique(); + } + + /** + * 通过老师ID查询最大的排序值 + * @param teacherId + * @return + */ + default TeacherOpenCourseMergeTeacher getMaxOrderIndexByTeacherId(@NotNull Long teacherId) { + return createLambdaQuery().andEq(TeacherOpenCourseMergeTeacher::getTeacherId, teacherId) + .andEq(TeacherOpenCourseMergeTeacher::getTeacherOpenCourseMergeTeacherStatus, 1) + .groupBy(TeacherOpenCourseMergeTeacher::getTeacherOpenCourseMergeTeacherId) + .unique("max(teacher_open_course_merge_teacher_order_index) as maxOrderIndex, teacher_open_course_merge_teacher_id"); + } + + + } diff --git a/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseMergeTeacher.java b/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseMergeTeacher.java index d915cedb..a75d4987 100644 --- a/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseMergeTeacher.java +++ b/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseMergeTeacher.java @@ -36,6 +36,14 @@ public class TeacherOpenCourseMergeTeacher extends BaseEntity{ "from teacher_open_course where teacher_open_course_status = 1 and teacher_open_course_id = #teacherOpenCourseId# ") private TeacherOpenCourseInfo teacherOpenCourse; + public Long getTeacherOpenCourseMergeTeacherOrderIndex() { + return teacherOpenCourseMergeTeacherOrderIndex; + } + + public void setTeacherOpenCourseMergeTeacherOrderIndex(Long teacherOpenCourseMergeTeacherOrderIndex) { + this.teacherOpenCourseMergeTeacherOrderIndex = teacherOpenCourseMergeTeacherOrderIndex; + } + @Data @Accessors(chain = true) public static class TeacherOpenCourseInfo { @@ -62,7 +70,11 @@ public class TeacherOpenCourseMergeTeacher extends BaseEntity{ //教师开课授权码 private String teacherOpenCourseMergeTeacherAuthCode ; - + + // 排序 + + private Long teacherOpenCourseMergeTeacherOrderIndex ; + //创建时间 private Date teacherOpenCourseMergeTeacherAddTime ; diff --git a/web/src/main/java/com/ibeetl/jlw/enums/MoveEnum.java b/web/src/main/java/com/ibeetl/jlw/enums/MoveEnum.java new file mode 100644 index 00000000..21795021 --- /dev/null +++ b/web/src/main/java/com/ibeetl/jlw/enums/MoveEnum.java @@ -0,0 +1,34 @@ +package com.ibeetl.jlw.enums; + +import cn.jlw.util.EnumUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.beetl.sql.annotation.entity.EnumMapping; + +/** + * 排序移动类型 + */ + +@Getter +@AllArgsConstructor +@EnumMapping("text") +public enum MoveEnum { + // 进行中 + MOVE_TOP(10, "置顶"), + // 已结束 + MOVE_LEFT(20, "前移"), + // 未开始 + MOVE_RIGHT(30, "后移"); + + private Integer code; + + // 可以转换成中文 +// @JsonValue + + private String text; + + + public static MoveEnum getByCode(Integer code) { + return EnumUtil.getByFieldWithValue(MoveEnum.class, "code", code); + } +} \ No newline at end of file diff --git a/web/src/main/java/com/ibeetl/jlw/enums/StartStatusEnum.java b/web/src/main/java/com/ibeetl/jlw/enums/StartStatusEnum.java index 3bef7a10..e1c75446 100644 --- a/web/src/main/java/com/ibeetl/jlw/enums/StartStatusEnum.java +++ b/web/src/main/java/com/ibeetl/jlw/enums/StartStatusEnum.java @@ -13,7 +13,7 @@ import org.beetl.sql.annotation.entity.EnumMapping; @Getter @AllArgsConstructor -@EnumMapping("text") +@EnumMapping("name") public enum StartStatusEnum { // 进行中 ING(0, "进行中"), diff --git a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeTeacherService.java b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeTeacherService.java index 8cb243e7..8bbddccd 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeTeacherService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseMergeTeacherService.java @@ -1,5 +1,6 @@ package com.ibeetl.jlw.service; +import cn.hutool.core.lang.Assert; import cn.jlw.util.ToolUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; @@ -9,14 +10,17 @@ import com.ibeetl.admin.core.web.JsonResult; import com.ibeetl.admin.core.web.JsonReturnCode; import com.ibeetl.jlw.dao.TeacherOpenCourseMergeTeacherDao; import com.ibeetl.jlw.entity.TeacherOpenCourseMergeTeacher; +import com.ibeetl.jlw.enums.MoveEnum; import com.ibeetl.jlw.web.query.TeacherOpenCourseMergeTeacherQuery; import org.apache.commons.lang3.StringUtils; import org.beetl.sql.core.SqlId; import org.beetl.sql.core.engine.PageQuery; +import org.beetl.sql.core.query.LambdaQuery; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import javax.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; @@ -145,4 +149,82 @@ public class TeacherOpenCourseMergeTeacherService extends CoreBaseService lambdaQuery = teacherOpenCourseMergeTeacherDao.createLambdaQuery() + .andEq(TeacherOpenCourseMergeTeacher::getTeacherId, teacherId) + .andEq(TeacherOpenCourseMergeTeacher::getTeacherOpenCourseMergeTeacherStatus, 1) + // 大于等于当前排序值 + .andGreatEq(TeacherOpenCourseMergeTeacher::getTeacherOpenCourseMergeTeacherOrderIndex, orderIndex); + + switch (moveType) { + case MOVE_TOP: { + List moveTopList = lambdaQuery + .appendSql("order by teacher_open_course_merge_teacher_order_index desc limit 2") + .select(TeacherOpenCourseMergeTeacher::getTeacherOpenCourseMergeTeacherId + , TeacherOpenCourseMergeTeacher::getTeacherOpenCourseMergeTeacherOrderIndex); + // 这个教师最大的排序值 + TeacherOpenCourseMergeTeacher maxOrderIndexEntity = teacherOpenCourseMergeTeacherDao.getMaxOrderIndexByTeacherId(teacherId); + + Assert.notEmpty(moveTopList, "未查询到开课信息,请检查开课ID是否正确!"); + Assert.isTrue(moveTopList.size() == 2, "您已经是置顶状态!"); + + // 第二个,必然是他自己。 + Long selfOrderIndex = moveTopList.get(1).getTeacherOpenCourseMergeTeacherOrderIndex(); + + // 交换位置 + Long maxOrderIndex = maxOrderIndexEntity.getTeacherOpenCourseMergeTeacherOrderIndex(); + moveTopList.get(1).setTeacherOpenCourseMergeTeacherOrderIndex(maxOrderIndex); + update(moveTopList.get(1)); + + TeacherOpenCourseMergeTeacher changedCourseMergeTeacher = new TeacherOpenCourseMergeTeacher(); + changedCourseMergeTeacher.setTeacherOpenCourseMergeTeacherOrderIndex(selfOrderIndex); + changedCourseMergeTeacher.setTeacherOpenCourseMergeTeacherId(teacherOpenCourseMergeTeacherId); + update(changedCourseMergeTeacher); + } break; + case MOVE_LEFT:{ + List moveLeftList = lambdaQuery + .appendSql("order by teacher_open_course_merge_teacher_order_index desc limit 2") + .select(TeacherOpenCourseMergeTeacher::getTeacherOpenCourseMergeTeacherId + , TeacherOpenCourseMergeTeacher::getTeacherOpenCourseMergeTeacherOrderIndex); + + Assert.notEmpty(moveLeftList, "未查询到开课信息,请检查开课ID是否正确!"); + Assert.isTrue(moveLeftList.size() == 2, "您已经是置顶状态!"); + + // 交换位置 + Long orderIndex0 = moveLeftList.get(0).getTeacherOpenCourseMergeTeacherOrderIndex(); + Long orderIndex1 = moveLeftList.get(1).getTeacherOpenCourseMergeTeacherOrderIndex(); + + moveLeftList.get(0).setTeacherOpenCourseMergeTeacherOrderIndex(orderIndex1); + moveLeftList.get(1).setTeacherOpenCourseMergeTeacherOrderIndex(orderIndex0); + + updateBatch(moveLeftList); + } break; + case MOVE_RIGHT:{ + List moveLeftList = lambdaQuery + .appendSql("order by teacher_open_course_merge_teacher_order_index limit 2") + .select(TeacherOpenCourseMergeTeacher::getTeacherOpenCourseMergeTeacherId + , TeacherOpenCourseMergeTeacher::getTeacherOpenCourseMergeTeacherOrderIndex); + + Assert.notEmpty(moveLeftList, "未查询到开课信息,请检查开课ID是否正确!"); + Assert.isTrue(moveLeftList.size() == 2, "您已经是置顶状态!"); + + Long orderIndex0 = moveLeftList.get(0).getTeacherOpenCourseMergeTeacherOrderIndex(); + Long orderIndex1 = moveLeftList.get(1).getTeacherOpenCourseMergeTeacherOrderIndex(); + + // 交换位置 + moveLeftList.get(0).setTeacherOpenCourseMergeTeacherOrderIndex(orderIndex1); + moveLeftList.get(1).setTeacherOpenCourseMergeTeacherOrderIndex(orderIndex0); + + updateBatch(moveLeftList); + } break; + } + + } } diff --git a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseService.java b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseService.java index 23dfe18b..d196c4a4 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseService.java @@ -103,12 +103,23 @@ public class TeacherOpenCourseService extends CoreBaseService teacherOpenCourseDao.insert(teacherOpenCourse); // 开课和教师关联数据 - if (ObjectUtil.isNotEmpty(teacherOpenCourse.getTeacherInfo().getTeacherId())) { + Long teacherId = teacherOpenCourse.getTeacherInfo().getTeacherId(); + if (ObjectUtil.isNotEmpty(teacherId)) { + // 新建排序值,则默认是1 + Long newOrderIndex = 1L; + TeacherOpenCourseMergeTeacher courseMergeTeacherList = teacherOpenCourseMergeTeacherDao.getOneByTeacherId(teacherId); + + // 如果没有查询到这个老师创建的开课信息, 则不会递增 + if(courseMergeTeacherList != null) { + newOrderIndex = courseMergeTeacherList.getTeacherOpenCourseMergeTeacherOrderIndex() + 1L; + } + TeacherOpenCourseMergeTeacher teacherOpenCourseMergeTeacher = new TeacherOpenCourseMergeTeacher(); - teacherOpenCourseMergeTeacher.setTeacherId(teacherOpenCourse.getTeacherInfo().getTeacherId()); + teacherOpenCourseMergeTeacher.setTeacherId(teacherId); teacherOpenCourseMergeTeacher.setTeacherOpenCourseId(teacherOpenCourse.getTeacherOpenCourseId()); teacherOpenCourseMergeTeacher.setTeacherOpenCourseMergeTeacherAddTime(new Date()); teacherOpenCourseMergeTeacher.setTeacherOpenCourseMergeTeacherStatus(1); + teacherOpenCourseMergeTeacher.setTeacherOpenCourseMergeTeacherOrderIndex(newOrderIndex); // 生成的授权码, 库里唯一 String tempCode = generateCodeWithVerify(RandomUtil.randomString(6)); diff --git a/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeTeacherController.java b/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeTeacherController.java index d55ab201..cc1184bd 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeTeacherController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeTeacherController.java @@ -7,6 +7,7 @@ import com.ibeetl.admin.core.entity.CoreUser; import com.ibeetl.admin.core.file.FileService; import com.ibeetl.admin.core.web.JsonResult; import com.ibeetl.jlw.entity.TeacherOpenCourseMergeTeacher; +import com.ibeetl.jlw.enums.MoveEnum; import com.ibeetl.jlw.service.TeacherOpenCourseMergeTeacherService; import com.ibeetl.jlw.web.query.TeacherOpenCourseMergeTeacherQuery; import org.apache.commons.lang3.StringUtils; @@ -202,5 +203,19 @@ public class TeacherOpenCourseMergeTeacherController{ return JsonResult.success(); } + /** + * 教师端-开课 排序移动方法 + * @param teacherOpenCourseId + * @param moveType + * @return + */ + @PostMapping(MODEL + "/move.json") + @Function("teacherOpenCourseMergeTeacher.edit") + @ResponseBody + public JsonResult move(Long teacherOpenCourseId, MoveEnum moveType) { + teacherOpenCourseMergeTeacherService.move(teacherOpenCourseId, moveType); + return JsonResult.success(); + } + } diff --git a/web/src/main/java/com/ibeetl/jlw/web/query/TeacherOpenCourseMergeTeacherQuery.java b/web/src/main/java/com/ibeetl/jlw/web/query/TeacherOpenCourseMergeTeacherQuery.java index 3a45d544..2fa5980d 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/query/TeacherOpenCourseMergeTeacherQuery.java +++ b/web/src/main/java/com/ibeetl/jlw/web/query/TeacherOpenCourseMergeTeacherQuery.java @@ -24,6 +24,8 @@ public class TeacherOpenCourseMergeTeacherQuery extends PageParam { private Integer teacherOpenCourseMergeTeacherStatus; @Query(name = "教师开课授权码", display = true) private String teacherOpenCourseMergeTeacherAuthCode; + @Query(name = "排序", display = false) + private Long teacherOpenCourseMergeTeacherOrderIndex ; @Query(name = "创建时间", display = false) private Date teacherOpenCourseMergeTeacherAddTime; @Query(name = "组织ID", display = false) @@ -153,4 +155,12 @@ public class TeacherOpenCourseMergeTeacherQuery extends PageParam { public void setTeacherOpenCourseMergeTeacherAuthCode(String teacherOpenCourseMergeTeacherAuthCode) { this.teacherOpenCourseMergeTeacherAuthCode = teacherOpenCourseMergeTeacherAuthCode; } + + public Long getTeacherOpenCourseMergeTeacherOrderIndex() { + return teacherOpenCourseMergeTeacherOrderIndex; + } + + public void setTeacherOpenCourseMergeTeacherOrderIndex(Long teacherOpenCourseMergeTeacherOrderIndex) { + this.teacherOpenCourseMergeTeacherOrderIndex = teacherOpenCourseMergeTeacherOrderIndex; + } } diff --git a/web/src/main/resources/sql/jlw/teacherOpenCourseMergeTeacher.md b/web/src/main/resources/sql/jlw/teacherOpenCourseMergeTeacher.md index 2c38f1ca..6e6b683e 100644 --- a/web/src/main/resources/sql/jlw/teacherOpenCourseMergeTeacher.md +++ b/web/src/main/resources/sql/jlw/teacherOpenCourseMergeTeacher.md @@ -51,6 +51,7 @@ queryByCondition @if(!isEmpty(userIdPlural)){ and find_in_set(t.user_id,#userIdPlural#) @} + order by t.teacher_open_course_merge_teacher_order_index desc queryByConditionQuery @@ -104,7 +105,7 @@ queryByConditionQuery @if(!isEmpty(userIdPlural)){ and find_in_set(t.user_id,#userIdPlural#) @} - + order by t.teacher_open_course_merge_teacher_order_index desc deleteTeacherOpenCourseMergeTeacherByIds @@ -204,7 +205,7 @@ getTeacherOpenCourseMergeTeacherValues @if(!isEmpty(userId)){ and t.user_id =#userId# @} - + order by t.teacher_open_course_merge_teacher_order_index desc getValuesByQuery === @@ -253,4 +254,5 @@ getValuesByQuery @} @if(!isEmpty(userIdPlural)){ and find_in_set(t.user_id,#userIdPlural#) - @} \ No newline at end of file + @} + order by t.teacher_open_course_merge_teacher_order_index desc \ No newline at end of file diff --git a/web/src/test/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeTeacherControllerTest.java b/web/src/test/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeTeacherControllerTest.java new file mode 100644 index 00000000..49438330 --- /dev/null +++ b/web/src/test/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeTeacherControllerTest.java @@ -0,0 +1,46 @@ +package com.ibeetl.jlw.web; + +import base.BaseTest; +import org.junit.jupiter.api.Test; +import org.springframework.test.web.servlet.RequestBuilder; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; + +import java.nio.charset.Charset; + +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +/** + *

+ * + *

+ * + * @author mlx + * @date 2022/10/24 + * @modified + */ +class TeacherOpenCourseMergeTeacherControllerTest extends BaseTest { + + private static final String MODEL = "/jlw/teacherOpenCourseMergeTeacher"; + private static final String API = "/api/teacherOpenCourseMergeTeacher"; + + @Test + void move() throws Exception { + //构造请求参数 + RequestBuilder rb = MockMvcRequestBuilders.post(MODEL + "/move.json") + .param("teacherOpenCourseId", "1569699103338831872") + .param("moveType", "MOVE_TOP"); + + // 测试账号,佟老师 + putLoginInfoToEnv("102", "26"); + + //发送请求,验证返回结果 + String result = mvc.perform(rb) + .andExpect(status().isOk()) + .andExpect(MockMvcResultMatchers.jsonPath("$.code").value("0")) + .andReturn().getResponse().getContentAsString(Charset.defaultCharset()); + + System.out.println(result); + clearEnvLoginInfo(); + } +} \ No newline at end of file