This commit is contained in:
王昊 2025-11-21 23:37:36 +08:00
parent 30a37d3c0d
commit f96163582b
38 changed files with 1117 additions and 1 deletions

View File

@ -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);

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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_idsort 排好序
*/
List<BookChapter> selectByBookId(@Param("bookId") Integer bookId);
}

View File

@ -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> {
}

View File

@ -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> {
}

View File

@ -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> {
}

View File

@ -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> {
}

View File

@ -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> {
}

View File

@ -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);
}

View File

@ -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> {
}

View File

@ -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> {
}

View File

@ -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);
}

View File

@ -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> {
}

View File

@ -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);
}
// 如果后面你要做拖拽排序批量更新等可以在这里继续加方法
}

View File

@ -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 {
}

View File

@ -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 {
}

View File

@ -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);
}
}

View File

@ -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 {
}

View File

@ -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> {
}

View File

@ -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 {
}

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>