From 09849af55c4d79df9021209d654d4a0498f2044b Mon Sep 17 00:00:00 2001 From: besscroft Date: Tue, 12 Sep 2023 21:35:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(practise):=E5=AE=8C=E5=96=84=E4=B8=8B?= =?UTF-8?q?=E9=94=99=E9=A2=98=E5=A4=8D=E4=B9=A0=E5=8A=9F=E8=83=BD=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=83=A8=E5=88=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/api/BookController.java | 6 + .../enstudy/mapper/UserWrongWordMapper.java | 9 ++ .../enstudy/mongo/service/BookService.java | 6 + .../mongo/service/impl/BookServiceImpl.java | 24 +-- .../heming/enstudy/service/WordService.java | 9 ++ .../enstudy/service/impl/WordServiceImpl.java | 20 +++ .../resources/mapper/UserWrongWordMapper.xml | 15 ++ heming-web/pages/practise.vue | 141 +++++++++++++++++- 8 files changed, 218 insertions(+), 12 deletions(-) diff --git a/heming-system/src/main/java/dev/heming/enstudy/controller/api/BookController.java b/heming-system/src/main/java/dev/heming/enstudy/controller/api/BookController.java index 32144ac..52a6983 100644 --- a/heming-system/src/main/java/dev/heming/enstudy/controller/api/BookController.java +++ b/heming-system/src/main/java/dev/heming/enstudy/controller/api/BookController.java @@ -40,6 +40,12 @@ public CommonResult getWord() { return CommonResult.success(bookService.getWord()); } + @GetMapping("/getWorkWord") + @Operation(summary = "获取错题本单个单词") + public CommonResult getWorkWord() { + return CommonResult.success(bookService.getWorkWord()); + } + @GetMapping("/getWordList") @Operation(summary = "获取单词列表") public CommonResult> getWordList() { diff --git a/heming-system/src/main/java/dev/heming/enstudy/mapper/UserWrongWordMapper.java b/heming-system/src/main/java/dev/heming/enstudy/mapper/UserWrongWordMapper.java index 3b1741b..ae4f556 100644 --- a/heming-system/src/main/java/dev/heming/enstudy/mapper/UserWrongWordMapper.java +++ b/heming-system/src/main/java/dev/heming/enstudy/mapper/UserWrongWordMapper.java @@ -31,4 +31,13 @@ UserWrongWord selectByUserIdAndBookIdAndWordId(@Param("userId") Long userId, @Param("bookId") String bookId, @Param("wordId") Long wordId); + /** + * 查询用户错题本单个单词 id + * @param userId 用户 id + * @param bookId 词典 id + * @return 单词 id + */ + Long selectWordIdByUserIdAndBookId(@Param("userId") Long userId, + @Param("bookId") String bookId); + } diff --git a/heming-system/src/main/java/dev/heming/enstudy/mongo/service/BookService.java b/heming-system/src/main/java/dev/heming/enstudy/mongo/service/BookService.java index 7a1b2ff..57cf8fc 100644 --- a/heming-system/src/main/java/dev/heming/enstudy/mongo/service/BookService.java +++ b/heming-system/src/main/java/dev/heming/enstudy/mongo/service/BookService.java @@ -26,6 +26,12 @@ public interface BookService { */ Book getWord(); + /** + * 获取当前用户活动词典对应的错题本的下一个单词信息 + * @return 单词信息 + */ + Book getWorkWord(); + /** * 获取当前用户活动词典的单词学习列表 * @return 单词信息列表 diff --git a/heming-system/src/main/java/dev/heming/enstudy/mongo/service/impl/BookServiceImpl.java b/heming-system/src/main/java/dev/heming/enstudy/mongo/service/impl/BookServiceImpl.java index f76be99..f2beffc 100644 --- a/heming-system/src/main/java/dev/heming/enstudy/mongo/service/impl/BookServiceImpl.java +++ b/heming-system/src/main/java/dev/heming/enstudy/mongo/service/impl/BookServiceImpl.java @@ -14,6 +14,7 @@ import dev.heming.enstudy.mongo.service.BookService; import dev.heming.enstudy.common.param.book.GetBookParam; import dev.heming.enstudy.service.UserBookDictService; +import dev.heming.enstudy.service.WordService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.mongodb.core.MongoTemplate; @@ -43,6 +44,7 @@ public class BookServiceImpl implements BookService { private final UserBookDictService userBookDictService; private final UserWorkActionsMapper userWorkActionsMapper; private final WordMapper wordMapper; + private final WordService wordService; private final UserBookDictMapper userBookDictMapper; private final UserWrongWordMapper userWrongWordMapper; private final RedisTemplate redisTemplate; @@ -68,16 +70,18 @@ public Book getWord() { Assert.notNull(userDict, "还未选择词典!"); UserWorkActions actions = userWorkActionsMapper.selectByUserIdAndBookId(userId, userDict.getBookId()); Assert.notNull(actions, "未生成学习数据,请联系管理员!"); - Word word = wordMapper.selectById(actions.getWordId()); - Assert.notNull(word, "单词数据不存在,请联系管理员!"); - Query query = new Query( - Criteria - .where("bookId").is(userDict.getBookId()) - .and("wordRank").is(word.getWordRank()) - .and("headWord").is(word.getHeadWord()) - ); - Book result = mongoTemplate.findOne(query, Book.class); - return result; + return wordService.getWordByWordIdAndBookId(actions.getWordId(), userDict.getBookId()); + } + + @Override + public Book getWorkWord() { + // TODO 优化 + long userId = StpUtil.getLoginIdAsLong(); + UserBookDictVo userDict = userBookDictService.getUserDict(); + Assert.notNull(userDict, "还未选择词典!"); + Long wordId = userWrongWordMapper.selectWordIdByUserIdAndBookId(userId, userDict.getBookId()); + Assert.notNull(wordId, "当前错题本暂无错题!"); + return wordService.getWordByWordIdAndBookId(wordId, userDict.getBookId()); } @Override diff --git a/heming-system/src/main/java/dev/heming/enstudy/service/WordService.java b/heming-system/src/main/java/dev/heming/enstudy/service/WordService.java index 33c14c6..35ccd74 100644 --- a/heming-system/src/main/java/dev/heming/enstudy/service/WordService.java +++ b/heming-system/src/main/java/dev/heming/enstudy/service/WordService.java @@ -1,6 +1,7 @@ package dev.heming.enstudy.service; import com.baomidou.mybatisplus.extension.service.IService; +import dev.heming.enstudy.common.entity.Book; import dev.heming.enstudy.common.entity.Word; import dev.heming.enstudy.common.vo.console.ConsoleVo; @@ -34,4 +35,12 @@ public interface WordService extends IService { */ ConsoleVo getConsoleInfo(); + /** + * 获取单词 + * @param wordId 单词表 id + * @param bookId 词典 id + * @return 单词数据 + */ + Book getWordByWordIdAndBookId(Long wordId, String bookId); + } diff --git a/heming-system/src/main/java/dev/heming/enstudy/service/impl/WordServiceImpl.java b/heming-system/src/main/java/dev/heming/enstudy/service/impl/WordServiceImpl.java index 53b4d6f..37f8bc6 100644 --- a/heming-system/src/main/java/dev/heming/enstudy/service/impl/WordServiceImpl.java +++ b/heming-system/src/main/java/dev/heming/enstudy/service/impl/WordServiceImpl.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.pagehelper.PageHelper; import dev.heming.enstudy.common.constant.CacheConstants; +import dev.heming.enstudy.common.entity.Book; import dev.heming.enstudy.common.entity.Word; import dev.heming.enstudy.common.vo.console.ConsoleVo; import dev.heming.enstudy.mapper.BookDictMapper; @@ -11,8 +12,12 @@ import dev.heming.enstudy.service.WordService; import lombok.RequiredArgsConstructor; import org.springframework.cache.annotation.Cacheable; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; +import org.springframework.util.Assert; import java.util.List; import java.util.Optional; @@ -27,6 +32,7 @@ @RequiredArgsConstructor public class WordServiceImpl extends ServiceImpl implements WordService { + private final MongoTemplate mongoTemplate; private final UserMapper userMapper; private final BookDictMapper bookDictMapper; private final RedisTemplate redisTemplate; @@ -58,4 +64,18 @@ public ConsoleVo getConsoleInfo() { ); } + @Override + public Book getWordByWordIdAndBookId(Long wordId, String bookId) { + // TODO 优化 + Word word = this.baseMapper.selectById(wordId); + Assert.notNull(word, "单词数据不存在,请联系管理员!"); + Query query = new Query( + Criteria + .where("bookId").is(bookId) + .and("wordRank").is(word.getWordRank()) + .and("headWord").is(word.getHeadWord()) + ); + return mongoTemplate.findOne(query, Book.class); + } + } diff --git a/heming-system/src/main/resources/mapper/UserWrongWordMapper.xml b/heming-system/src/main/resources/mapper/UserWrongWordMapper.xml index 34a2c47..175849c 100644 --- a/heming-system/src/main/resources/mapper/UserWrongWordMapper.xml +++ b/heming-system/src/main/resources/mapper/UserWrongWordMapper.xml @@ -54,4 +54,19 @@ word_id =#{wordId} + + diff --git a/heming-web/pages/practise.vue b/heming-web/pages/practise.vue index 6c5fa32..2e54e22 100644 --- a/heming-web/pages/practise.vue +++ b/heming-web/pages/practise.vue @@ -1,5 +1,75 @@