feat: 🎸 接口补充
This commit is contained in:
parent
40aa49a5ba
commit
5529646506
@ -365,4 +365,33 @@ public class AiolCommentController extends JeecgController<AiolComment, IAiolCom
|
|||||||
return Result.error("点赞失败: " + e.getMessage());
|
return Result.error("点赞失败: " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@AutoLog(value = "评论-置顶")
|
||||||
|
@Operation(summary = "置顶评论", description = "将指定评论置顶,设置iz_top字段为1")
|
||||||
|
@RequiresPermissions("aiol:aiol_comment:edit")
|
||||||
|
@GetMapping(value = "/top/{commentId}")
|
||||||
|
public Result<String> topComment(@PathVariable("commentId") String commentId) {
|
||||||
|
try {
|
||||||
|
// 1. 查询评论是否存在
|
||||||
|
AiolComment comment = aiolCommentService.getById(commentId);
|
||||||
|
if (comment == null) {
|
||||||
|
return Result.error("评论不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 设置置顶状态
|
||||||
|
comment.setIzTop(1);
|
||||||
|
|
||||||
|
boolean updated = aiolCommentService.updateById(comment);
|
||||||
|
if (!updated) {
|
||||||
|
return Result.error("置顶失败");
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("评论置顶成功: commentId={}", commentId);
|
||||||
|
return Result.OK("置顶成功!");
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("评论置顶失败: commentId={}, error={}", commentId, e.getMessage(), e);
|
||||||
|
return Result.error("置顶失败: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,8 +16,12 @@ import org.jeecg.common.system.query.QueryRuleEnum;
|
|||||||
import org.jeecg.common.util.oConvertUtils;
|
import org.jeecg.common.util.oConvertUtils;
|
||||||
import org.jeecg.config.shiro.IgnoreAuth;
|
import org.jeecg.config.shiro.IgnoreAuth;
|
||||||
import org.jeecg.modules.aiol.entity.AiolDiscussion;
|
import org.jeecg.modules.aiol.entity.AiolDiscussion;
|
||||||
|
import org.jeecg.modules.aiol.dto.DiscussionWithSectionDTO;
|
||||||
|
import org.jeecg.modules.aiol.dto.AiolDiscussionSaveDTO;
|
||||||
import org.jeecg.modules.aiol.service.IAiolDiscussionService;
|
import org.jeecg.modules.aiol.service.IAiolDiscussionService;
|
||||||
import org.jeecg.modules.aiol.service.IAiolEntityLinkService;
|
import org.jeecg.modules.aiol.service.IAiolEntityLinkService;
|
||||||
|
import org.jeecg.modules.aiol.service.IAiolCourseSectionService;
|
||||||
|
import org.jeecg.modules.aiol.entity.AiolCourseSection;
|
||||||
import org.jeecg.modules.aiol.constant.EntityLinkConst;
|
import org.jeecg.modules.aiol.constant.EntityLinkConst;
|
||||||
import org.jeecg.common.system.util.JwtUtil;
|
import org.jeecg.common.system.util.JwtUtil;
|
||||||
import org.jeecg.common.system.vo.LoginUser;
|
import org.jeecg.common.system.vo.LoginUser;
|
||||||
@ -61,6 +65,8 @@ public class AiolDiscussionController extends JeecgController<AiolDiscussion, IA
|
|||||||
@Autowired
|
@Autowired
|
||||||
private IAiolEntityLinkService aiolEntityLinkService;
|
private IAiolEntityLinkService aiolEntityLinkService;
|
||||||
@Autowired
|
@Autowired
|
||||||
|
private IAiolCourseSectionService aiolCourseSectionService;
|
||||||
|
@Autowired
|
||||||
private ISysBaseAPI sysBaseApi;
|
private ISysBaseAPI sysBaseApi;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -90,21 +96,26 @@ public class AiolDiscussionController extends JeecgController<AiolDiscussion, IA
|
|||||||
/**
|
/**
|
||||||
* 添加
|
* 添加
|
||||||
*
|
*
|
||||||
* @param aiolDiscussion
|
* @param aiolDiscussionSaveDTO 讨论保存DTO,包含章节ID
|
||||||
* @param sectionId 可选的章节ID,如果传入则创建与章节的关联关系
|
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@AutoLog(value = "讨论-添加")
|
@AutoLog(value = "讨论-添加")
|
||||||
@Operation(summary="讨论-添加", description="添加讨论,可选择关联到指定章节")
|
@Operation(summary="讨论-添加", description="添加讨论,可选择关联到指定章节")
|
||||||
@RequiresPermissions("aiol:aiol_discussion:add")
|
@RequiresPermissions("aiol:aiol_discussion:add")
|
||||||
@PostMapping(value = "/add")
|
@PostMapping(value = "/add")
|
||||||
public Result<String> add(@RequestBody AiolDiscussion aiolDiscussion,
|
public Result<String> add(@RequestBody AiolDiscussionSaveDTO aiolDiscussionSaveDTO) {
|
||||||
@RequestParam(value = "sectionId", required = false) String sectionId) {
|
|
||||||
try {
|
try {
|
||||||
|
// 创建讨论实体
|
||||||
|
AiolDiscussion aiolDiscussion = new AiolDiscussion();
|
||||||
|
aiolDiscussion.setTitle(aiolDiscussionSaveDTO.getTitle());
|
||||||
|
aiolDiscussion.setDescription(aiolDiscussionSaveDTO.getDescription());
|
||||||
|
aiolDiscussion.setCourseId(aiolDiscussionSaveDTO.getCourseId());
|
||||||
|
|
||||||
// 保存讨论记录
|
// 保存讨论记录
|
||||||
aiolDiscussionService.save(aiolDiscussion);
|
aiolDiscussionService.save(aiolDiscussion);
|
||||||
|
|
||||||
// 如果传入了sectionId,创建与章节的关联关系
|
// 如果传入了sectionId,创建与章节的关联关系
|
||||||
|
String sectionId = aiolDiscussionSaveDTO.getSectionId();
|
||||||
if (sectionId != null && !sectionId.trim().isEmpty()) {
|
if (sectionId != null && !sectionId.trim().isEmpty()) {
|
||||||
aiolEntityLinkService.save(
|
aiolEntityLinkService.save(
|
||||||
EntityLinkConst.SourceType.COURSE_SECTION,
|
EntityLinkConst.SourceType.COURSE_SECTION,
|
||||||
@ -115,7 +126,7 @@ public class AiolDiscussionController extends JeecgController<AiolDiscussion, IA
|
|||||||
log.info("讨论 {} 成功关联到章节 {}", aiolDiscussion.getId(), sectionId);
|
log.info("讨论 {} 成功关联到章节 {}", aiolDiscussion.getId(), sectionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Result.OK("添加成功!");
|
return Result.OK(aiolDiscussion.getId());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("添加讨论失败: {}", e.getMessage(), e);
|
log.error("添加讨论失败: {}", e.getMessage(), e);
|
||||||
return Result.error("添加讨论失败: " + e.getMessage());
|
return Result.error("添加讨论失败: " + e.getMessage());
|
||||||
@ -211,22 +222,71 @@ public class AiolDiscussionController extends JeecgController<AiolDiscussion, IA
|
|||||||
}
|
}
|
||||||
|
|
||||||
@AutoLog(value = "讨论-查询课程下的讨论列表")
|
@AutoLog(value = "讨论-查询课程下的讨论列表")
|
||||||
@Operation(summary = "查询课程讨论列表", description = "查询课程讨论列表")
|
@Operation(summary = "查询课程讨论列表", description = "查询课程讨论列表,包含关联的章节ID")
|
||||||
@GetMapping(value = "/teacher_list")
|
@GetMapping(value = "/teacher_list")
|
||||||
public Result<List<AiolDiscussion>> queryCourseDiscussions(HttpServletRequest request, @RequestParam(value = "courseId") String courseId) {
|
public Result<List<DiscussionWithSectionDTO>> queryCourseDiscussions(HttpServletRequest request, @RequestParam(value = "courseId") String courseId) {
|
||||||
try {
|
try {
|
||||||
// 2. 查询课程下的讨论列表
|
// 1. 查询课程下的讨论列表
|
||||||
QueryWrapper<AiolDiscussion> queryWrapper = new QueryWrapper<>();
|
QueryWrapper<AiolDiscussion> queryWrapper = new QueryWrapper<>();
|
||||||
queryWrapper.eq("course_id", courseId)
|
queryWrapper.eq("course_id", courseId)
|
||||||
.orderByDesc("create_time");
|
.orderByDesc("create_time");
|
||||||
|
|
||||||
List<AiolDiscussion> discussionList = aiolDiscussionService.list(queryWrapper);
|
List<AiolDiscussion> discussionList = aiolDiscussionService.list(queryWrapper);
|
||||||
|
|
||||||
return Result.OK(discussionList);
|
// 2. 转换为包含章节信息的DTO列表
|
||||||
|
List<DiscussionWithSectionDTO> resultList = discussionList.stream()
|
||||||
|
.map(this::convertToDiscussionWithSection)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
return Result.OK(resultList);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("查询用户讨论列表失败: error={}", e.getMessage(), e);
|
log.error("查询课程讨论列表失败: error={}", e.getMessage(), e);
|
||||||
return Result.error("查询用户讨论列表失败: " + e.getMessage());
|
return Result.error("查询课程讨论列表失败: " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将AiolDiscussion转换为包含章节信息的DTO
|
||||||
|
* @param discussion 讨论实体
|
||||||
|
* @return 包含章节ID的DTO
|
||||||
|
*/
|
||||||
|
private DiscussionWithSectionDTO convertToDiscussionWithSection(AiolDiscussion discussion) {
|
||||||
|
DiscussionWithSectionDTO dto = new DiscussionWithSectionDTO();
|
||||||
|
|
||||||
|
// 复制基本属性
|
||||||
|
dto.setId(discussion.getId());
|
||||||
|
dto.setTitle(discussion.getTitle());
|
||||||
|
dto.setDescription(discussion.getDescription());
|
||||||
|
dto.setCourseId(discussion.getCourseId());
|
||||||
|
dto.setCreateBy(discussion.getCreateBy());
|
||||||
|
dto.setCreateTime(discussion.getCreateTime());
|
||||||
|
dto.setUpdateBy(discussion.getUpdateBy());
|
||||||
|
dto.setUpdateTime(discussion.getUpdateTime());
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 查询关联的章节ID
|
||||||
|
String sectionId = aiolEntityLinkService.listSourceId(
|
||||||
|
EntityLinkConst.TargetType.DISCUSSION,
|
||||||
|
discussion.getId(),
|
||||||
|
EntityLinkConst.SourceType.COURSE_SECTION
|
||||||
|
);
|
||||||
|
|
||||||
|
if (sectionId != null) {
|
||||||
|
dto.setSectionId(sectionId);
|
||||||
|
|
||||||
|
// 查询章节名称
|
||||||
|
AiolCourseSection section = aiolCourseSectionService.getById(sectionId);
|
||||||
|
if (section != null && section.getName() != null) {
|
||||||
|
dto.setSectionName(section.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("查询讨论关联章节失败: discussionId={}, error={}", discussion.getId(), e.getMessage(), e);
|
||||||
|
// 即使查询失败,也返回基本的讨论信息
|
||||||
|
}
|
||||||
|
|
||||||
|
return dto;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -22,10 +22,15 @@ import org.jeecg.common.constant.CommonConstant;
|
|||||||
import org.jeecg.common.util.oConvertUtils;
|
import org.jeecg.common.util.oConvertUtils;
|
||||||
import org.jeecg.modules.aiol.dto.AiolHomeworkSaveDTO;
|
import org.jeecg.modules.aiol.dto.AiolHomeworkSaveDTO;
|
||||||
import org.jeecg.modules.aiol.dto.StudentSubmitHomework;
|
import org.jeecg.modules.aiol.dto.StudentSubmitHomework;
|
||||||
|
import org.jeecg.modules.aiol.dto.HomeworkWithDetailsDTO;
|
||||||
import org.jeecg.modules.aiol.entity.AiolHomework;
|
import org.jeecg.modules.aiol.entity.AiolHomework;
|
||||||
import org.jeecg.modules.aiol.entity.AiolHomeworkSubmit;
|
import org.jeecg.modules.aiol.entity.AiolHomeworkSubmit;
|
||||||
|
import org.jeecg.modules.aiol.entity.AiolClass;
|
||||||
|
import org.jeecg.modules.aiol.entity.AiolCourseSection;
|
||||||
import org.jeecg.modules.aiol.service.IAiolHomeworkService;
|
import org.jeecg.modules.aiol.service.IAiolHomeworkService;
|
||||||
import org.jeecg.modules.aiol.service.IAiolEntityLinkService;
|
import org.jeecg.modules.aiol.service.IAiolEntityLinkService;
|
||||||
|
import org.jeecg.modules.aiol.service.IAiolClassService;
|
||||||
|
import org.jeecg.modules.aiol.service.IAiolCourseSectionService;
|
||||||
import org.jeecg.modules.aiol.constant.EntityLinkConst;
|
import org.jeecg.modules.aiol.constant.EntityLinkConst;
|
||||||
import org.jeecg.modules.aiol.mapper.AiolClassStudentMapper;
|
import org.jeecg.modules.aiol.mapper.AiolClassStudentMapper;
|
||||||
import org.jeecg.modules.aiol.mapper.AiolCourseSignupMapper;
|
import org.jeecg.modules.aiol.mapper.AiolCourseSignupMapper;
|
||||||
@ -162,14 +167,17 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
//@AutoLog(value = "作业-通过id查询")
|
//@AutoLog(value = "作业-通过id查询")
|
||||||
@Operation(summary = "作业-通过id查询")
|
@Operation(summary = "作业-通过id查询", description = "根据ID查询作业详情,包含班级名和章节信息")
|
||||||
@GetMapping(value = "/queryById")
|
@GetMapping(value = "/queryById")
|
||||||
public Result<AiolHomework> queryById(@RequestParam(name = "id", required = true) String id) {
|
public Result<HomeworkWithDetailsDTO> queryById(@RequestParam(name = "id", required = true) String id) {
|
||||||
AiolHomework aiolHomework = aiolHomeworkService.getById(id);
|
AiolHomework aiolHomework = aiolHomeworkService.getById(id);
|
||||||
if (aiolHomework == null) {
|
if (aiolHomework == null) {
|
||||||
return Result.error("未找到对应数据");
|
return Result.error("未找到对应数据");
|
||||||
}
|
}
|
||||||
return Result.OK(aiolHomework);
|
|
||||||
|
// 转换为包含详情的DTO
|
||||||
|
HomeworkWithDetailsDTO result = convertToHomeworkWithDetails(aiolHomework);
|
||||||
|
return Result.OK(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -212,6 +220,12 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
|
|||||||
@Autowired
|
@Autowired
|
||||||
private ISysBaseAPI sysBaseApi;
|
private ISysBaseAPI sysBaseApi;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IAiolClassService aiolClassService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IAiolCourseSectionService aiolCourseSectionService;
|
||||||
|
|
||||||
@GetMapping("/course/{courseId}")
|
@GetMapping("/course/{courseId}")
|
||||||
@Operation(summary = "查询课程作业")
|
@Operation(summary = "查询课程作业")
|
||||||
public Result<List<AiolHomework>> list(@PathVariable String courseId) {
|
public Result<List<AiolHomework>> list(@PathVariable String courseId) {
|
||||||
@ -219,9 +233,9 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
|
|||||||
}
|
}
|
||||||
|
|
||||||
@AutoLog(value = "作业-教师端查询作业列表")
|
@AutoLog(value = "作业-教师端查询作业列表")
|
||||||
@Operation(summary = "查询课程作业列表", description = "查询当前登录教师创建的作业列表")
|
@Operation(summary = "查询课程作业列表", description = "查询当前登录教师创建的作业列表,包含班级名和章节信息")
|
||||||
@GetMapping(value = "/teacher_list")
|
@GetMapping(value = "/teacher_list")
|
||||||
public Result<List<AiolHomework>> teacherList(@RequestParam(value = "courseId") String courseId, HttpServletRequest request) {
|
public Result<List<HomeworkWithDetailsDTO>> teacherList(@RequestParam(value = "courseId") String courseId, HttpServletRequest request) {
|
||||||
try {
|
try {
|
||||||
QueryWrapper<AiolHomework> queryWrapper = new QueryWrapper<>();
|
QueryWrapper<AiolHomework> queryWrapper = new QueryWrapper<>();
|
||||||
queryWrapper.eq("course_id", courseId)
|
queryWrapper.eq("course_id", courseId)
|
||||||
@ -229,7 +243,12 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
|
|||||||
|
|
||||||
List<AiolHomework> homeworkList = aiolHomeworkService.list(queryWrapper);
|
List<AiolHomework> homeworkList = aiolHomeworkService.list(queryWrapper);
|
||||||
|
|
||||||
return Result.OK(homeworkList);
|
// 转换为包含详情的DTO列表
|
||||||
|
List<HomeworkWithDetailsDTO> resultList = homeworkList.stream()
|
||||||
|
.map(this::convertToHomeworkWithDetails)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
return Result.OK(resultList);
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("查询教师作业列表失败: error={}", e.getMessage(), e);
|
log.error("查询教师作业列表失败: error={}", e.getMessage(), e);
|
||||||
@ -422,4 +441,56 @@ public class AiolHomeworkController extends JeecgController<AiolHomework, IAiolH
|
|||||||
return Result.error("批阅失败: " + e.getMessage());
|
return Result.error("批阅失败: " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将AiolHomework转换为包含详情的DTO
|
||||||
|
* @param homework 作业实体
|
||||||
|
* @return 包含班级名和章节信息的DTO
|
||||||
|
*/
|
||||||
|
private HomeworkWithDetailsDTO convertToHomeworkWithDetails(AiolHomework homework) {
|
||||||
|
HomeworkWithDetailsDTO dto = new HomeworkWithDetailsDTO();
|
||||||
|
BeanUtils.copyProperties(homework, dto);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 1. 查询班级信息
|
||||||
|
List<String> classNames = new ArrayList<>();
|
||||||
|
String classId = homework.getClassId();
|
||||||
|
if (classId != null && !classId.trim().isEmpty()) {
|
||||||
|
String[] classIds = classId.split(",");
|
||||||
|
for (String singleClassId : classIds) {
|
||||||
|
if (singleClassId != null && !singleClassId.trim().isEmpty()) {
|
||||||
|
singleClassId = singleClassId.trim();
|
||||||
|
AiolClass aiolClass = aiolClassService.getById(singleClassId);
|
||||||
|
if (aiolClass != null && aiolClass.getName() != null) {
|
||||||
|
classNames.add(aiolClass.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dto.setClassNames(classNames);
|
||||||
|
|
||||||
|
// 2. 查询章节信息
|
||||||
|
List<String> sectionIds = entityLinkBizService.listSourceIds(
|
||||||
|
EntityLinkConst.TargetType.HOMEWORK,
|
||||||
|
homework.getId(),
|
||||||
|
EntityLinkConst.SourceType.COURSE_SECTION
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!sectionIds.isEmpty()) {
|
||||||
|
String sectionId = sectionIds.get(0); // 取第一个章节ID
|
||||||
|
dto.setSectionId(sectionId);
|
||||||
|
|
||||||
|
AiolCourseSection section = aiolCourseSectionService.getById(sectionId);
|
||||||
|
if (section != null && section.getName() != null) {
|
||||||
|
dto.setSectionTitle(section.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("转换作业详情失败: homeworkId={}, error={}", homework.getId(), e.getMessage(), e);
|
||||||
|
// 即使转换失败,也返回基本的作业信息
|
||||||
|
}
|
||||||
|
|
||||||
|
return dto;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,21 @@
|
|||||||
|
package org.jeecg.modules.aiol.dto;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import org.jeecg.modules.aiol.entity.AiolDiscussion;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description: 讨论保存DTO
|
||||||
|
* @Author: jeecg-boot
|
||||||
|
* @Date: 2025-01-16
|
||||||
|
* @Version: V1.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Schema(description = "讨论保存DTO")
|
||||||
|
public class AiolDiscussionSaveDTO extends AiolDiscussion {
|
||||||
|
|
||||||
|
@Schema(description = "关联的章节ID")
|
||||||
|
private String sectionId;
|
||||||
|
}
|
@ -11,10 +11,6 @@ import org.jeecg.modules.aiol.entity.AiolHomework;
|
|||||||
@Data
|
@Data
|
||||||
@Schema(description = "作业保存DTO")
|
@Schema(description = "作业保存DTO")
|
||||||
public class AiolHomeworkSaveDTO extends AiolHomework {
|
public class AiolHomeworkSaveDTO extends AiolHomework {
|
||||||
|
|
||||||
@Schema(description = "班级ID,多个用逗号分割")
|
|
||||||
private String classId;
|
|
||||||
|
|
||||||
@Schema(description = "章节ID")
|
@Schema(description = "章节ID")
|
||||||
private String sectionId;
|
private String sectionId;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
package org.jeecg.modules.aiol.dto;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import org.jeecg.modules.aiol.entity.AiolDiscussion;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description: 讨论详情DTO
|
||||||
|
* @Author: jeecg-boot
|
||||||
|
* @Date: 2025-01-16
|
||||||
|
* @Version: V1.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Schema(description = "讨论详情")
|
||||||
|
public class DiscussionWithSectionDTO extends AiolDiscussion {
|
||||||
|
|
||||||
|
@Schema(description = "关联的章节ID")
|
||||||
|
private String sectionId;
|
||||||
|
|
||||||
|
@Schema(description = "章节名称")
|
||||||
|
private String sectionName;
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package org.jeecg.modules.aiol.dto;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import org.jeecg.modules.aiol.entity.AiolHomework;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description: 作业详情DTO
|
||||||
|
* @Author: jeecg-boot
|
||||||
|
* @Date: 2025-01-16
|
||||||
|
* @Version: V1.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Schema(description = "作业详情")
|
||||||
|
public class HomeworkWithDetailsDTO extends AiolHomework {
|
||||||
|
|
||||||
|
@Schema(description = "班级名称列表")
|
||||||
|
private List<String> classNames;
|
||||||
|
|
||||||
|
@Schema(description = "章节ID")
|
||||||
|
private String sectionId;
|
||||||
|
|
||||||
|
@Schema(description = "章节标题")
|
||||||
|
private String sectionTitle;
|
||||||
|
}
|
@ -41,6 +41,10 @@ public class AiolHomework implements Serializable {
|
|||||||
@Excel(name = "所属课程id", width = 15)
|
@Excel(name = "所属课程id", width = 15)
|
||||||
@Schema(description = "所属课程id")
|
@Schema(description = "所属课程id")
|
||||||
private java.lang.String courseId;
|
private java.lang.String courseId;
|
||||||
|
/**班级id*/
|
||||||
|
@Excel(name = "班级id", width = 15)
|
||||||
|
@Schema(description = "班级id")
|
||||||
|
private java.lang.String classId;
|
||||||
/**标题*/
|
/**标题*/
|
||||||
@Excel(name = "标题", width = 15)
|
@Excel(name = "标题", width = 15)
|
||||||
@Schema(description = "标题")
|
@Schema(description = "标题")
|
||||||
|
@ -21,6 +21,15 @@ public interface IAiolEntityLinkService extends IService<AiolEntityLink> {
|
|||||||
*/
|
*/
|
||||||
List<String> listTargetIds(String sourceType, String sourceId, String targetType);
|
List<String> listTargetIds(String sourceType, String sourceId, String targetType);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据主体与内容类型查询绑定的 target_id
|
||||||
|
* @param sourceType 主体类型
|
||||||
|
* @param sourceId 主体ID
|
||||||
|
* @param targetType 内容类型
|
||||||
|
* @return target_id
|
||||||
|
*/
|
||||||
|
String listTargetId(String sourceType, String sourceId, String targetType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据内容与主体类型查询绑定的 source_id 列表
|
* 根据内容与主体类型查询绑定的 source_id 列表
|
||||||
* @param targetType 内容类型
|
* @param targetType 内容类型
|
||||||
@ -30,6 +39,16 @@ public interface IAiolEntityLinkService extends IService<AiolEntityLink> {
|
|||||||
*/
|
*/
|
||||||
List<String> listSourceIds(String targetType, String targetId, String sourceType);
|
List<String> listSourceIds(String targetType, String targetId, String sourceType);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据内容与主体类型查询绑定的 source_id
|
||||||
|
* @param targetType 内容类型
|
||||||
|
* @param targetId 内容ID
|
||||||
|
* @param sourceType 主体类型
|
||||||
|
* @return source_id
|
||||||
|
*/
|
||||||
|
String listSourceId(String targetType, String targetId, String sourceType);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 保存主体与内容类型的绑定关系
|
* 保存主体与内容类型的绑定关系
|
||||||
* @param sourceType 主体类型
|
* @param sourceType 主体类型
|
||||||
|
@ -54,4 +54,32 @@ public class AiolEntityLinkServiceImpl extends ServiceImpl<AiolEntityLinkMapper,
|
|||||||
entityLink.setTargetId(targetId);
|
entityLink.setTargetId(targetId);
|
||||||
this.save(entityLink);
|
this.save(entityLink);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String listSourceId(String targetType, String targetId, String sourceType) {
|
||||||
|
LambdaQueryWrapper<AiolEntityLink> qw = new LambdaQueryWrapper<>();
|
||||||
|
qw.eq(AiolEntityLink::getTargetType, targetType)
|
||||||
|
.eq(AiolEntityLink::getTargetId, targetId)
|
||||||
|
.eq(AiolEntityLink::getSourceType, sourceType)
|
||||||
|
.select(AiolEntityLink::getSourceId)
|
||||||
|
.last("LIMIT 1");
|
||||||
|
return this.list(qw).stream()
|
||||||
|
.map(AiolEntityLink::getSourceId)
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String listTargetId(String sourceType, String sourceId, String targetType) {
|
||||||
|
LambdaQueryWrapper<AiolEntityLink> qw = new LambdaQueryWrapper<>();
|
||||||
|
qw.eq(AiolEntityLink::getSourceType, sourceType)
|
||||||
|
.eq(AiolEntityLink::getSourceId, sourceId)
|
||||||
|
.eq(AiolEntityLink::getTargetType, targetType)
|
||||||
|
.select(AiolEntityLink::getTargetId)
|
||||||
|
.last("LIMIT 1");
|
||||||
|
return this.list(qw).stream()
|
||||||
|
.map(AiolEntityLink::getTargetId)
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,11 @@ export const columns: BasicColumn[] = [
|
|||||||
align:"center",
|
align:"center",
|
||||||
dataIndex: 'courseId'
|
dataIndex: 'courseId'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: '班级id',
|
||||||
|
align:"center",
|
||||||
|
dataIndex: 'classId'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: '标题',
|
title: '标题',
|
||||||
align:"center",
|
align:"center",
|
||||||
@ -76,6 +81,11 @@ export const formSchema: FormSchema[] = [
|
|||||||
field: 'courseId',
|
field: 'courseId',
|
||||||
component: 'Input',
|
component: 'Input',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: '班级id',
|
||||||
|
field: 'classId',
|
||||||
|
component: 'Input',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
label: '标题',
|
label: '标题',
|
||||||
field: 'title',
|
field: 'title',
|
||||||
@ -161,17 +171,18 @@ export const formSchema: FormSchema[] = [
|
|||||||
// 高级查询数据
|
// 高级查询数据
|
||||||
export const superQuerySchema = {
|
export const superQuerySchema = {
|
||||||
courseId: {title: '所属课程id',order: 0,view: 'text', type: 'string',},
|
courseId: {title: '所属课程id',order: 0,view: 'text', type: 'string',},
|
||||||
title: {title: '标题',order: 1,view: 'text', type: 'string',},
|
classId: {title: '班级id',order: 1,view: 'text', type: 'string',},
|
||||||
description: {title: '说明',order: 2,view: 'umeditor', type: 'string',},
|
title: {title: '标题',order: 2,view: 'text', type: 'string',},
|
||||||
attachment: {title: '附件',order: 3,view: 'file', type: 'string',},
|
description: {title: '说明',order: 3,view: 'umeditor', type: 'string',},
|
||||||
maxScore: {title: '满分',order: 4,view: 'number', type: 'number',},
|
attachment: {title: '附件',order: 4,view: 'file', type: 'string',},
|
||||||
passScore: {title: '及格分数',order: 5,view: 'number', type: 'number',},
|
maxScore: {title: '满分',order: 5,view: 'number', type: 'number',},
|
||||||
startTime: {title: '开始时间',order: 6,view: 'datetime', type: 'string',},
|
passScore: {title: '及格分数',order: 6,view: 'number', type: 'number',},
|
||||||
endTime: {title: '结束时间',order: 7,view: 'datetime', type: 'string',},
|
startTime: {title: '开始时间',order: 7,view: 'datetime', type: 'string',},
|
||||||
status: {title: '状态',order: 8,view: 'number', type: 'number',dictCode: 'course_status',},
|
endTime: {title: '结束时间',order: 8,view: 'datetime', type: 'string',},
|
||||||
allowMakeup: {title: '是否允许补交',order: 9,view: 'number', type: 'number',},
|
status: {title: '状态',order: 9,view: 'number', type: 'number',dictCode: 'course_status',},
|
||||||
makeupTime: {title: '补交截止时间',order: 10,view: 'datetime', type: 'string',},
|
allowMakeup: {title: '是否允许补交',order: 10,view: 'number', type: 'number',},
|
||||||
notifyTime: {title: '作业通知时间',order: 11,view: 'number', type: 'number',},
|
makeupTime: {title: '补交截止时间',order: 11,view: 'datetime', type: 'string',},
|
||||||
|
notifyTime: {title: '作业通知时间',order: 12,view: 'number', type: 'number',},
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user