init jc
This commit is contained in:
parent
30a37d3c0d
commit
f96163582b
@ -23,7 +23,7 @@ import xyz.playedu.common.types.JsonResponse;
|
||||
@Slf4j
|
||||
public class ExceptionController {
|
||||
|
||||
@ExceptionHandler(Exception.class)
|
||||
// @ExceptionHandler(Exception.class)
|
||||
public JsonResponse exceptionHandler(Exception e) {
|
||||
log.error(e.getMessage());
|
||||
return JsonResponse.error(e.getMessage(), 500);
|
||||
|
||||
@ -0,0 +1,60 @@
|
||||
package xyz.playedu.api.controller.backend.jc;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import xyz.playedu.common.types.JsonResponse;
|
||||
import xyz.playedu.jc.domain.BookChapter;
|
||||
import xyz.playedu.jc.service.IBookChapterService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* 教材章节 后台管理接口
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/textbook/chapter")
|
||||
public class BookChapterController {
|
||||
|
||||
@Autowired
|
||||
private IBookChapterService bookChapterService;
|
||||
|
||||
/**
|
||||
* 根据教材ID获取章节列表(平铺 + 已排序)
|
||||
* 你可以在前端把它组装成树,也可以后面在后端加树形 VO。
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public JsonResponse list(@RequestParam("bookId") Integer bookId) {
|
||||
List<BookChapter> chapters = bookChapterService.getByBookId(bookId);
|
||||
List<BookChapter> safeList = Optional.ofNullable(chapters).orElseGet(java.util.Collections::emptyList);
|
||||
return JsonResponse.data(safeList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增章节
|
||||
*/
|
||||
@PostMapping
|
||||
public JsonResponse create(@RequestBody BookChapter chapter) {
|
||||
// 可在这里补充 creator / tenantId 等信息
|
||||
bookChapterService.save(chapter);
|
||||
return JsonResponse.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改章节
|
||||
*/
|
||||
@PutMapping
|
||||
public JsonResponse update(@RequestBody BookChapter chapter) {
|
||||
bookChapterService.updateById(chapter);
|
||||
return JsonResponse.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除章节
|
||||
*/
|
||||
@DeleteMapping("/{id}")
|
||||
public JsonResponse delete(@PathVariable("id") Integer id) {
|
||||
bookChapterService.removeById(id);
|
||||
return JsonResponse.success();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,46 @@
|
||||
package xyz.playedu.api.controller.backend.jc;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import xyz.playedu.common.types.JsonResponse;
|
||||
import xyz.playedu.textbook.domain.BookPaper;
|
||||
import xyz.playedu.textbook.service.IBookPaperService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/textbook/paper")
|
||||
public class BookPaperController {
|
||||
|
||||
@Autowired
|
||||
private IBookPaperService bookPaperService;
|
||||
|
||||
@GetMapping("/list")
|
||||
public JsonResponse list(@RequestParam("bookId") Integer bookId) {
|
||||
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<BookPaper> wrapper =
|
||||
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<>();
|
||||
wrapper.eq(BookPaper::getBookId, bookId)
|
||||
.orderByAsc(BookPaper::getSort)
|
||||
.orderByAsc(BookPaper::getId);
|
||||
List<BookPaper> list = bookPaperService.list(wrapper);
|
||||
return JsonResponse.data(list);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
public JsonResponse create(@RequestBody BookPaper bookPaper) {
|
||||
bookPaperService.save(bookPaper);
|
||||
return JsonResponse.success();
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
public JsonResponse update(@RequestBody BookPaper bookPaper) {
|
||||
bookPaperService.updateById(bookPaper);
|
||||
return JsonResponse.success();
|
||||
}
|
||||
|
||||
@DeleteMapping("/{id}")
|
||||
public JsonResponse delete(@PathVariable("id") Integer id) {
|
||||
bookPaperService.removeById(id);
|
||||
return JsonResponse.success();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,38 @@
|
||||
package xyz.playedu.api.controller.backend.jc;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import xyz.playedu.common.types.JsonResponse;
|
||||
import xyz.playedu.jc.domain.BookDepartmentUser;
|
||||
import xyz.playedu.jc.service.IBookDepartmentUserService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/textbook/scope")
|
||||
public class BookScopeController {
|
||||
|
||||
@Autowired
|
||||
private IBookDepartmentUserService bookDepartmentUserService;
|
||||
|
||||
@GetMapping("/list")
|
||||
public JsonResponse list(@RequestParam("bookId") Integer bookId) {
|
||||
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<BookDepartmentUser> wrapper =
|
||||
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<>();
|
||||
wrapper.eq(BookDepartmentUser::getBookId, bookId);
|
||||
List<BookDepartmentUser> list = bookDepartmentUserService.list(wrapper);
|
||||
return JsonResponse.data(list);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
public JsonResponse create(@RequestBody List<BookDepartmentUser> scopes) {
|
||||
bookDepartmentUserService.saveBatch(scopes);
|
||||
return JsonResponse.success();
|
||||
}
|
||||
|
||||
@DeleteMapping("/{id}")
|
||||
public JsonResponse delete(@PathVariable("id") Integer id) {
|
||||
bookDepartmentUserService.removeById(id);
|
||||
return JsonResponse.success();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,39 @@
|
||||
package xyz.playedu.api.controller.backend.jc;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import xyz.playedu.common.types.JsonResponse;
|
||||
import xyz.playedu.jc.domain.ChapterContent;
|
||||
import xyz.playedu.jc.service.IChapterContentService;
|
||||
|
||||
/**
|
||||
* 章节内容 后台接口
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/textbook/chapter-content")
|
||||
public class ChapterContentController {
|
||||
|
||||
@Autowired
|
||||
private IChapterContentService chapterContentService;
|
||||
|
||||
@GetMapping("/{chapterId}")
|
||||
public JsonResponse detail(@PathVariable("chapterId") Integer chapterId) {
|
||||
ChapterContent content = chapterContentService.getByChapterId(chapterId);
|
||||
return JsonResponse.data(content);
|
||||
}
|
||||
|
||||
@PostMapping("/{chapterId}")
|
||||
public JsonResponse save(@PathVariable("chapterId") Integer chapterId,
|
||||
@RequestBody ChapterContent body) {
|
||||
body.setChapterId(chapterId);
|
||||
// 如果该章节已存在内容则更新,否则新增
|
||||
ChapterContent old = chapterContentService.getByChapterId(chapterId);
|
||||
if (old == null) {
|
||||
chapterContentService.save(body);
|
||||
} else {
|
||||
body.setId(old.getId());
|
||||
chapterContentService.updateById(body);
|
||||
}
|
||||
return JsonResponse.success();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,51 @@
|
||||
package xyz.playedu.api.controller.backend.jc;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import xyz.playedu.common.types.JsonResponse;
|
||||
import xyz.playedu.textbook.domain.Resource;
|
||||
import xyz.playedu.textbook.service.IResourceService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/textbook/resource")
|
||||
public class ResourceController {
|
||||
|
||||
@Autowired
|
||||
private IResourceService resourceService;
|
||||
|
||||
@GetMapping("/list")
|
||||
public JsonResponse list(@RequestParam(value = "bookId", required = false) Integer bookId,
|
||||
@RequestParam(value = "chapterId", required = false) Integer chapterId) {
|
||||
// 简单示例:直接用 lambda query 写,实际可抽到 service 中
|
||||
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<Resource> wrapper =
|
||||
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<>();
|
||||
if (bookId != null) {
|
||||
wrapper.eq(Resource::getBookId, bookId);
|
||||
}
|
||||
if (chapterId != null) {
|
||||
wrapper.eq(Resource::getChapterId, chapterId);
|
||||
}
|
||||
List<Resource> list = resourceService.list(wrapper);
|
||||
return JsonResponse.data(list);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
public JsonResponse create(@RequestBody Resource resource) {
|
||||
resourceService.save(resource);
|
||||
return JsonResponse.success();
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
public JsonResponse update(@RequestBody Resource resource) {
|
||||
resourceService.updateById(resource);
|
||||
return JsonResponse.success();
|
||||
}
|
||||
|
||||
@DeleteMapping("/{id}")
|
||||
public JsonResponse delete(@PathVariable("id") Integer id) {
|
||||
resourceService.removeById(id);
|
||||
return JsonResponse.success();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,50 @@
|
||||
package xyz.playedu.api.controller.backend.jc;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import xyz.playedu.common.types.JsonResponse;
|
||||
import xyz.playedu.jc.domain.Textbook;
|
||||
import xyz.playedu.jc.service.ITextbookService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 教材管理 后台接口
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/textbook")
|
||||
public class TextbookController {
|
||||
|
||||
@Autowired
|
||||
private ITextbookService textbookService;
|
||||
|
||||
@GetMapping("/list")
|
||||
public JsonResponse list() {
|
||||
List<Textbook> list = textbookService.list();
|
||||
return JsonResponse.data(list);
|
||||
}
|
||||
|
||||
@GetMapping("/{id}")
|
||||
public JsonResponse detail(@PathVariable("id") Integer id) {
|
||||
Textbook one = textbookService.getById(id);
|
||||
return JsonResponse.data(one);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
public JsonResponse create(@RequestBody Textbook textbook) {
|
||||
textbookService.save(textbook);
|
||||
return JsonResponse.success();
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
public JsonResponse update(@RequestBody Textbook textbook) {
|
||||
textbookService.updateById(textbook);
|
||||
return JsonResponse.success();
|
||||
}
|
||||
|
||||
@DeleteMapping("/{id}")
|
||||
public JsonResponse delete(@PathVariable("id") Integer id) {
|
||||
textbookService.removeById(id);
|
||||
return JsonResponse.success();
|
||||
}
|
||||
}
|
||||
@ -12,6 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
|
||||
import xyz.playedu.common.bus.BackendBus;
|
||||
import xyz.playedu.common.context.BCtx;
|
||||
import xyz.playedu.common.domain.AdminUser;
|
||||
|
||||
@ -0,0 +1,56 @@
|
||||
package xyz.playedu.jc.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 教材章节表
|
||||
* 对应表:jc_book_chapter
|
||||
*/
|
||||
@Data
|
||||
@TableName("jc_book_chapter")
|
||||
public class BookChapter {
|
||||
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Integer id;
|
||||
|
||||
/** 教材主键 */
|
||||
@TableField("book_id")
|
||||
private Integer bookId;
|
||||
|
||||
/** 父节点id 顶级节点为0 */
|
||||
@TableField("parent_id")
|
||||
private Integer parentId;
|
||||
|
||||
/** 父节点链路 */
|
||||
@TableField("chapter_code")
|
||||
private String chapterCode;
|
||||
|
||||
/** 章节名 */
|
||||
@TableField("name")
|
||||
private String name;
|
||||
|
||||
/** 排序 */
|
||||
@TableField("sort")
|
||||
private Integer sort;
|
||||
|
||||
@TableField("create_time")
|
||||
private Date createTime;
|
||||
|
||||
@TableField("update_time")
|
||||
private Date updateTime;
|
||||
|
||||
@TableField("creator")
|
||||
private String creator;
|
||||
|
||||
@TableField("updater")
|
||||
private String updater;
|
||||
|
||||
@TableField("tenant_id")
|
||||
private String tenantId;
|
||||
}
|
||||
@ -0,0 +1,48 @@
|
||||
package xyz.playedu.jc.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 教材可见范围(部门 / 用户)
|
||||
* 对应表:jc_book_department_user
|
||||
*/
|
||||
@Data
|
||||
@TableName("jc_book_department_user")
|
||||
public class BookDepartmentUser {
|
||||
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Integer id;
|
||||
|
||||
/** 教材ID */
|
||||
@TableField("book_id")
|
||||
private Integer bookId;
|
||||
|
||||
/** 部门ID */
|
||||
@TableField("department_id")
|
||||
private Integer departmentId;
|
||||
|
||||
/** 用户ID */
|
||||
@TableField("user_id")
|
||||
private Integer userId;
|
||||
|
||||
@TableField("creator")
|
||||
private String creator;
|
||||
|
||||
@TableField("updater")
|
||||
private String updater;
|
||||
|
||||
@TableField("create_time")
|
||||
private Date createTime;
|
||||
|
||||
@TableField("update_time")
|
||||
private Date updateTime;
|
||||
|
||||
@TableField("tenant_id")
|
||||
private String tenantId;
|
||||
}
|
||||
@ -0,0 +1,56 @@
|
||||
package xyz.playedu.jc.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 教材-试卷 关系
|
||||
* 对应表:jc_book_paper
|
||||
*/
|
||||
@Data
|
||||
@TableName("jc_book_paper")
|
||||
public class BookPaper {
|
||||
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Integer id;
|
||||
|
||||
/** 教材ID */
|
||||
@TableField("book_id")
|
||||
private Integer bookId;
|
||||
|
||||
/** 试卷ID */
|
||||
@TableField("paper_id")
|
||||
private Integer paperId;
|
||||
|
||||
/** 章节ID(可选) */
|
||||
@TableField("chapter_id")
|
||||
private Integer chapterId;
|
||||
|
||||
/** 类型 1-随堂 2-单元 3-期末 等 */
|
||||
@TableField("type")
|
||||
private Integer type;
|
||||
|
||||
/** 排序 */
|
||||
@TableField("sort")
|
||||
private Integer sort;
|
||||
|
||||
@TableField("creator")
|
||||
private String creator;
|
||||
|
||||
@TableField("updater")
|
||||
private String updater;
|
||||
|
||||
@TableField("create_time")
|
||||
private Date createTime;
|
||||
|
||||
@TableField("update_time")
|
||||
private Date updateTime;
|
||||
|
||||
@TableField("tenant_id")
|
||||
private String tenantId;
|
||||
}
|
||||
@ -0,0 +1,55 @@
|
||||
package xyz.playedu.jc.domain;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 章节内容
|
||||
* 对应表:jc_chapter_content
|
||||
*/
|
||||
@Data
|
||||
@TableName("jc_chapter_content")
|
||||
public class ChapterContent {
|
||||
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Integer id;
|
||||
|
||||
/** 章节ID */
|
||||
@TableField("chapter_id")
|
||||
private Integer chapterId;
|
||||
|
||||
/** 富文本内容 */
|
||||
@TableField("content")
|
||||
private String content;
|
||||
|
||||
/** 关联资源ID(逗号分隔) */
|
||||
@TableField("resource_ids")
|
||||
private String resourceIds;
|
||||
|
||||
/** 关联知识点ID(逗号分隔) */
|
||||
@TableField("knowledge_ids")
|
||||
private String knowledgeIds;
|
||||
|
||||
/** 创建人 */
|
||||
@TableField("creator")
|
||||
private String creator;
|
||||
|
||||
/** 更新人 */
|
||||
@TableField("updater")
|
||||
private String updater;
|
||||
|
||||
@TableField("create_time")
|
||||
private Date createTime;
|
||||
|
||||
@TableField("update_time")
|
||||
private Date updateTime;
|
||||
|
||||
@TableField("tenant_id")
|
||||
private String tenantId;
|
||||
}
|
||||
@ -0,0 +1,76 @@
|
||||
package xyz.playedu.jc.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 教材资源
|
||||
* 对应表:jc_resource
|
||||
*/
|
||||
@Data
|
||||
@TableName("jc_resource")
|
||||
public class Resource {
|
||||
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Integer id;
|
||||
|
||||
/** 教材ID */
|
||||
@TableField("book_id")
|
||||
private Integer bookId;
|
||||
|
||||
/** 章节ID */
|
||||
@TableField("chapter_id")
|
||||
private Integer chapterId;
|
||||
|
||||
/** 资源名称 */
|
||||
@TableField("name")
|
||||
private String name;
|
||||
|
||||
/** 资源类型 video/ppt/image/audio/... */
|
||||
@TableField("type")
|
||||
private String type;
|
||||
|
||||
/** 文件后缀 */
|
||||
@TableField("ext")
|
||||
private String ext;
|
||||
|
||||
/** 文件大小(字节) */
|
||||
@TableField("size")
|
||||
private Long size;
|
||||
|
||||
/** 时长(秒),仅视频/音频 */
|
||||
@TableField("duration")
|
||||
private Integer duration;
|
||||
|
||||
/** 访问URL */
|
||||
@TableField("url")
|
||||
private String url;
|
||||
|
||||
/** 封面图 */
|
||||
@TableField("cover")
|
||||
private String cover;
|
||||
|
||||
/** 状态 0-禁用 1-启用 */
|
||||
@TableField("status")
|
||||
private Integer status;
|
||||
|
||||
@TableField("creator")
|
||||
private String creator;
|
||||
|
||||
@TableField("updater")
|
||||
private String updater;
|
||||
|
||||
@TableField("create_time")
|
||||
private Date createTime;
|
||||
|
||||
@TableField("update_time")
|
||||
private Date updateTime;
|
||||
|
||||
@TableField("tenant_id")
|
||||
private String tenantId;
|
||||
}
|
||||
@ -0,0 +1,78 @@
|
||||
package xyz.playedu.jc.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 教材主表
|
||||
* 对应表:jc_textbook
|
||||
*/
|
||||
@Data
|
||||
@TableName("jc_textbook")
|
||||
public class Textbook {
|
||||
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Integer id;
|
||||
|
||||
/** 教材名称 */
|
||||
@TableField("title")
|
||||
private String title;
|
||||
|
||||
/** 封面地址 */
|
||||
@TableField("cover")
|
||||
private String cover;
|
||||
|
||||
/** 简介 */
|
||||
@TableField("description")
|
||||
private String description;
|
||||
|
||||
/** 作者 */
|
||||
@TableField("author")
|
||||
private String author;
|
||||
|
||||
/** ISBN 或教材编号 */
|
||||
@TableField("isbn")
|
||||
private String isbn;
|
||||
|
||||
/** 出版社 */
|
||||
@TableField("publisher")
|
||||
private String publisher;
|
||||
|
||||
/** 适用专业/课程 */
|
||||
@TableField("subject")
|
||||
private String subject;
|
||||
|
||||
/** 发布状态 0-未发布 1-已发布 */
|
||||
@TableField("status")
|
||||
private Integer status;
|
||||
|
||||
/** 版本号 */
|
||||
@TableField("version")
|
||||
private String version;
|
||||
|
||||
/** 发布时间 */
|
||||
@TableField("publish_time")
|
||||
private Date publishTime;
|
||||
|
||||
/** 创建人 */
|
||||
@TableField("creator")
|
||||
private String creator;
|
||||
|
||||
/** 更新人 */
|
||||
@TableField("updater")
|
||||
private String updater;
|
||||
|
||||
@TableField("create_time")
|
||||
private Date createTime;
|
||||
|
||||
@TableField("update_time")
|
||||
private Date updateTime;
|
||||
|
||||
@TableField("tenant_id")
|
||||
private String tenantId;
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
package xyz.playedu.jc.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import xyz.playedu.jc.domain.BookChapter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 教材章节 Mapper
|
||||
*/
|
||||
public interface BookChapterMapper extends BaseMapper<BookChapter> {
|
||||
|
||||
/**
|
||||
* 根据教材ID查询章节列表(已按 parent_id、sort 排好序)
|
||||
*/
|
||||
List<BookChapter> selectByBookId(@Param("bookId") Integer bookId);
|
||||
}
|
||||
@ -0,0 +1,7 @@
|
||||
package xyz.playedu.jc.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import xyz.playedu.jc.domain.BookDepartmentUser;
|
||||
|
||||
public interface BookDepartmentUserMapper extends BaseMapper<BookDepartmentUser> {
|
||||
}
|
||||
@ -0,0 +1,8 @@
|
||||
package xyz.playedu.jc.mapper;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import xyz.playedu.jc.domain.BookPaper;
|
||||
|
||||
public interface BookPaperMapper extends BaseMapper<BookPaper> {
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
package xyz.playedu.jc.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import xyz.playedu.jc.domain.ChapterContent;
|
||||
|
||||
/**
|
||||
* 章节内容 Mapper
|
||||
*/
|
||||
public interface ChapterContentMapper extends BaseMapper<ChapterContent> {
|
||||
}
|
||||
@ -0,0 +1,7 @@
|
||||
package xyz.playedu.jc.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import xyz.playedu.jc.domain.Resource;
|
||||
|
||||
public interface ResourceMapper extends BaseMapper<Resource> {
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
package xyz.playedu.jc.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import xyz.playedu.jc.domain.Textbook;
|
||||
|
||||
/**
|
||||
* 教材 Mapper
|
||||
*/
|
||||
public interface TextbookMapper extends BaseMapper<Textbook> {
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
package xyz.playedu.jc.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import xyz.playedu.jc.domain.BookChapter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 教材章节 Service
|
||||
*/
|
||||
public interface IBookChapterService extends IService<BookChapter> {
|
||||
|
||||
/**
|
||||
* 根据教材ID获取章节列表(已排序)
|
||||
*/
|
||||
List<BookChapter> getByBookId(Integer bookId);
|
||||
}
|
||||
@ -0,0 +1,7 @@
|
||||
package xyz.playedu.jc.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import xyz.playedu.jc.domain.BookDepartmentUser;
|
||||
|
||||
public interface IBookDepartmentUserService extends IService<BookDepartmentUser> {
|
||||
}
|
||||
@ -0,0 +1,7 @@
|
||||
package xyz.playedu.jc.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import xyz.playedu.jc.domain.BookPaper;
|
||||
|
||||
public interface IBookPaperService extends IService<BookPaper> {
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
package xyz.playedu.jc.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import xyz.playedu.jc.domain.ChapterContent;
|
||||
|
||||
/**
|
||||
* 章节内容 Service
|
||||
*/
|
||||
public interface IChapterContentService extends IService<ChapterContent> {
|
||||
|
||||
ChapterContent getByChapterId(Integer chapterId);
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
package xyz.playedu.jc.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import xyz.playedu.jc.domain.Textbook;
|
||||
|
||||
/**
|
||||
* 教材 Service
|
||||
*/
|
||||
public interface ITextbookService extends IService<Textbook> {
|
||||
|
||||
}
|
||||
@ -0,0 +1,31 @@
|
||||
package xyz.playedu.jc.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import xyz.playedu.jc.domain.BookChapter;
|
||||
import xyz.playedu.jc.mapper.BookChapterMapper;
|
||||
import xyz.playedu.jc.service.IBookChapterService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 教材章节 Service 实现
|
||||
*/
|
||||
@Service
|
||||
public class BookChapterServiceImpl
|
||||
extends ServiceImpl<BookChapterMapper, BookChapter>
|
||||
implements IBookChapterService {
|
||||
|
||||
@Override
|
||||
public List<BookChapter> getByBookId(Integer bookId) {
|
||||
LambdaQueryWrapper<BookChapter> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(BookChapter::getBookId, bookId)
|
||||
.orderByAsc(BookChapter::getParentId)
|
||||
.orderByAsc(BookChapter::getSort)
|
||||
.orderByAsc(BookChapter::getId);
|
||||
return list(wrapper);
|
||||
}
|
||||
|
||||
// 如果后面你要做拖拽排序、批量更新等,可以在这里继续加方法
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
package xyz.playedu.jc.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import xyz.playedu.jc.domain.BookDepartmentUser;
|
||||
import xyz.playedu.jc.mapper.BookDepartmentUserMapper;
|
||||
import xyz.playedu.jc.service.IBookDepartmentUserService;
|
||||
|
||||
@Service
|
||||
public class BookDepartmentUserServiceImpl
|
||||
extends ServiceImpl<BookDepartmentUserMapper, BookDepartmentUser>
|
||||
implements IBookDepartmentUserService {
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
package xyz.playedu.jc.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import xyz.playedu.jc.domain.BookPaper;
|
||||
import xyz.playedu.jc.mapper.BookPaperMapper;
|
||||
import xyz.playedu.jc.service.IBookPaperService;
|
||||
|
||||
@Service
|
||||
public class BookPaperServiceImpl
|
||||
extends ServiceImpl<BookPaperMapper, BookPaper>
|
||||
implements IBookPaperService {
|
||||
}
|
||||
@ -0,0 +1,21 @@
|
||||
package xyz.playedu.jc.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import xyz.playedu.jc.domain.ChapterContent;
|
||||
import xyz.playedu.jc.mapper.ChapterContentMapper;
|
||||
import xyz.playedu.jc.service.IChapterContentService;
|
||||
|
||||
@Service
|
||||
public class ChapterContentServiceImpl
|
||||
extends ServiceImpl<ChapterContentMapper, ChapterContent>
|
||||
implements IChapterContentService {
|
||||
|
||||
@Override
|
||||
public ChapterContent getByChapterId(Integer chapterId) {
|
||||
LambdaQueryWrapper<ChapterContent> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(ChapterContent::getChapterId, chapterId);
|
||||
return getOne(wrapper, false);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,16 @@
|
||||
package xyz.playedu.jc.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import xyz.playedu.jc.domain.Textbook;
|
||||
import xyz.playedu.jc.mapper.TextbookMapper;
|
||||
import xyz.playedu.jc.service.ITextbookService;
|
||||
|
||||
/**
|
||||
* 教材 Service 实现
|
||||
*/
|
||||
@Service
|
||||
public class TextbookServiceImpl
|
||||
extends ServiceImpl<TextbookMapper, Textbook>
|
||||
implements ITextbookService {
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
package xyz.playedu.task.service;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import xyz.playedu.textbook.domain.Resource;
|
||||
|
||||
public interface IResourceService extends IService<Resource> {
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
package xyz.playedu.task.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import xyz.playedu.jc.domain.Resource;
|
||||
import xyz.playedu.jc.mapper.ResourceMapper;
|
||||
import xyz.playedu.jc.service.IResourceService;
|
||||
|
||||
@Service
|
||||
public class ResourceServiceImpl
|
||||
extends ServiceImpl<ResourceMapper, Resource>
|
||||
implements IResourceService {
|
||||
}
|
||||
@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="xyz.playedu.jc.mapper.BookChapterMapper">
|
||||
|
||||
<!-- 实体映射 -->
|
||||
<resultMap id="BookChapterResultMap" type="xyz.playedu.jc.domain.BookChapter">
|
||||
<id column="id" property="id"/>
|
||||
<result column="book_id" property="bookId"/>
|
||||
<result column="parent_id" property="parentId"/>
|
||||
<result column="chapter_code" property="chapterCode"/>
|
||||
<result column="name" property="name"/>
|
||||
<result column="sort" property="sort"/>
|
||||
<result column="create_time" property="createTime"/>
|
||||
<result column="update_time" property="updateTime"/>
|
||||
<result column="creator" property="creator"/>
|
||||
<result column="updater" property="updater"/>
|
||||
<result column="tenant_id" property="tenantId"/>
|
||||
</resultMap>
|
||||
|
||||
<!-- 公共列 -->
|
||||
<sql id="Base_Column_List">
|
||||
id,
|
||||
book_id,
|
||||
parent_id,
|
||||
chapter_code,
|
||||
name,
|
||||
sort,
|
||||
create_time,
|
||||
update_time,
|
||||
creator,
|
||||
updater,
|
||||
tenant_id
|
||||
</sql>
|
||||
|
||||
<!-- 根据教材ID查询章节列表(树结构可以在 Service 或前端组装) -->
|
||||
<select id="selectByBookId" resultMap="BookChapterResultMap">
|
||||
SELECT
|
||||
<include refid="Base_Column_List"/>
|
||||
FROM jc_book_chapter
|
||||
WHERE book_id = #{bookId}
|
||||
ORDER BY parent_id ASC, sort ASC, id ASC
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="xyz.playedu.jc.mapper.BookDepartmentUserMapper">
|
||||
|
||||
<resultMap id="BookDepartmentUserResultMap" type="xyz.playedu.textbook.domain.BookDepartmentUser">
|
||||
<id column="id" property="id"/>
|
||||
<result column="book_id" property="bookId"/>
|
||||
<result column="department_id" property="departmentId"/>
|
||||
<result column="user_id" property="userId"/>
|
||||
<result column="creator" property="creator"/>
|
||||
<result column="updater" property="updater"/>
|
||||
<result column="create_time" property="createTime"/>
|
||||
<result column="update_time" property="updateTime"/>
|
||||
<result column="tenant_id" property="tenantId"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="Base_Column_List">
|
||||
id,
|
||||
book_id,
|
||||
department_id,
|
||||
user_id,
|
||||
creator,
|
||||
updater,
|
||||
create_time,
|
||||
update_time,
|
||||
tenant_id
|
||||
</sql>
|
||||
|
||||
</mapper>
|
||||
@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="xyz.playedu.jc.mapper.BookPaperMapper">
|
||||
|
||||
<resultMap id="BookPaperResultMap" type="xyz.playedu.textbook.domain.BookPaper">
|
||||
<id column="id" property="id"/>
|
||||
<result column="book_id" property="bookId"/>
|
||||
<result column="paper_id" property="paperId"/>
|
||||
<result column="chapter_id" property="chapterId"/>
|
||||
<result column="type" property="type"/>
|
||||
<result column="sort" property="sort"/>
|
||||
<result column="creator" property="creator"/>
|
||||
<result column="updater" property="updater"/>
|
||||
<result column="create_time" property="createTime"/>
|
||||
<result column="update_time" property="updateTime"/>
|
||||
<result column="tenant_id" property="tenantId"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="Base_Column_List">
|
||||
id,
|
||||
book_id,
|
||||
paper_id,
|
||||
chapter_id,
|
||||
type,
|
||||
sort,
|
||||
creator,
|
||||
updater,
|
||||
create_time,
|
||||
update_time,
|
||||
tenant_id
|
||||
</sql>
|
||||
|
||||
</mapper>
|
||||
@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="xyz.playedu.jc.mapper.ChapterContentMapper">
|
||||
|
||||
<resultMap id="ChapterContentResultMap" type="xyz.playedu.jc.domain.ChapterContent">
|
||||
<id column="id" property="id"/>
|
||||
<result column="chapter_id" property="chapterId"/>
|
||||
<result column="content" property="content"/>
|
||||
<result column="resource_ids" property="resourceIds"/>
|
||||
<result column="knowledge_ids" property="knowledgeIds"/>
|
||||
<result column="creator" property="creator"/>
|
||||
<result column="updater" property="updater"/>
|
||||
<result column="create_time" property="createTime"/>
|
||||
<result column="update_time" property="updateTime"/>
|
||||
<result column="tenant_id" property="tenantId"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="Base_Column_List">
|
||||
id,
|
||||
chapter_id,
|
||||
content,
|
||||
resource_ids,
|
||||
knowledge_ids,
|
||||
creator,
|
||||
updater,
|
||||
create_time,
|
||||
update_time,
|
||||
tenant_id
|
||||
</sql>
|
||||
|
||||
</mapper>
|
||||
@ -0,0 +1,45 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="xyz.playedu.jc.mapper.ResourceMapper">
|
||||
|
||||
<resultMap id="ResourceResultMap" type="xyz.playedu.textbook.domain.Resource">
|
||||
<id column="id" property="id"/>
|
||||
<result column="book_id" property="bookId"/>
|
||||
<result column="chapter_id" property="chapterId"/>
|
||||
<result column="name" property="name"/>
|
||||
<result column="type" property="type"/>
|
||||
<result column="ext" property="ext"/>
|
||||
<result column="size" property="size"/>
|
||||
<result column="duration" property="duration"/>
|
||||
<result column="url" property="url"/>
|
||||
<result column="cover" property="cover"/>
|
||||
<result column="status" property="status"/>
|
||||
<result column="creator" property="creator"/>
|
||||
<result column="updater" property="updater"/>
|
||||
<result column="create_time" property="createTime"/>
|
||||
<result column="update_time" property="updateTime"/>
|
||||
<result column="tenant_id" property="tenantId"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="Base_Column_List">
|
||||
id,
|
||||
book_id,
|
||||
chapter_id,
|
||||
name,
|
||||
type,
|
||||
ext,
|
||||
size,
|
||||
duration,
|
||||
url,
|
||||
cover,
|
||||
status,
|
||||
creator,
|
||||
updater,
|
||||
create_time,
|
||||
update_time,
|
||||
tenant_id
|
||||
</sql>
|
||||
|
||||
</mapper>
|
||||
@ -0,0 +1,45 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="xyz.playedu.jc.mapper.TextbookMapper">
|
||||
|
||||
<resultMap id="TextbookResultMap" type="xyz.playedu.jc.domain.Textbook">
|
||||
<id column="id" property="id"/>
|
||||
<result column="title" property="title"/>
|
||||
<result column="cover" property="cover"/>
|
||||
<result column="description" property="description"/>
|
||||
<result column="author" property="author"/>
|
||||
<result column="isbn" property="isbn"/>
|
||||
<result column="publisher" property="publisher"/>
|
||||
<result column="subject" property="subject"/>
|
||||
<result column="status" property="status"/>
|
||||
<result column="version" property="version"/>
|
||||
<result column="publish_time" property="publishTime"/>
|
||||
<result column="creator" property="creator"/>
|
||||
<result column="updater" property="updater"/>
|
||||
<result column="create_time" property="createTime"/>
|
||||
<result column="update_time" property="updateTime"/>
|
||||
<result column="tenant_id" property="tenantId"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="Base_Column_List">
|
||||
id,
|
||||
title,
|
||||
cover,
|
||||
description,
|
||||
author,
|
||||
isbn,
|
||||
publisher,
|
||||
subject,
|
||||
status,
|
||||
version,
|
||||
publish_time,
|
||||
creator,
|
||||
updater,
|
||||
create_time,
|
||||
update_time,
|
||||
tenant_id
|
||||
</sql>
|
||||
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue
Block a user