Jelajahi Sumber

fix:完善小说阅读记录更新

hidewnd 2 minggu lalu
induk
melakukan
ab14fcd9d1

+ 4 - 0
yt-common/src/main/java/com/ytpm/app/model/YtNovelReadRecord.java

@@ -31,6 +31,10 @@ public class YtNovelReadRecord {
     private Date readTime;
     @ApiModelProperty("删除标志|0未删除|1已删除")
     private Integer deleted;
+    @ApiModelProperty("章节总页数")
+    private Integer totalPage;
+    @ApiModelProperty("当前记录页")
+    private Integer readPage;
 
     private String createBy;
     private Date createTime;

+ 18 - 1
yt-novel/yt-novel-service/src/main/java/com/ytpm/novel/dao/NovelMapper.java

@@ -3,12 +3,13 @@ package com.ytpm.novel.dao;
 
 import com.ytpm.app.model.YtNovel;
 import com.ytpm.app.model.YtNovelChapter;
-import com.ytpm.app.model.YtNovelShelf;
 import com.ytpm.app.model.YtNovelReadRecord;
+import com.ytpm.app.model.YtNovelShelf;
 import com.ytpm.novel.model.dto.YtNovelCategoryDto;
 import com.ytpm.novel.model.dto.YtNovelChapterDto;
 import com.ytpm.novel.model.dto.YtNovelDto;
 import com.ytpm.novel.model.param.NovelPageParam;
+import com.ytpm.novel.model.param.NovelRecordParam;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -61,12 +62,22 @@ public interface NovelMapper {
      */
     YtNovelReadRecord selectLastRecord(@Param("userId") String userId, @Param("novelId") String novelId);
 
+    /**
+     * 查询具体小说章节记录
+     */
+    YtNovelReadRecord selectChapterRecord(@Param("param") NovelRecordParam param);
+
 
     /**
      * 保存阅读记录
      */
     void insertReadRecord(YtNovelReadRecord readRecord);
 
+    /**
+     * 更新阅读记录
+     */
+    void updateReadRecord(YtNovelReadRecord readRecord);
+
     /**
      *  保存用户书架
      */
@@ -83,4 +94,10 @@ public interface NovelMapper {
      */
     List<YtNovelCategoryDto> selectCategoryList();
 
+    /**
+     * 更新小说阅读记录数
+     */
+    void updateNovelRead(@Param("novelId") String novelId);
+
+
 }

+ 5 - 0
yt-novel/yt-novel-service/src/main/java/com/ytpm/novel/model/dto/YtNovelChapterDto.java

@@ -26,4 +26,9 @@ public class YtNovelChapterDto implements Serializable {
     @ApiModelProperty("章节内容")
     private String contentText;
 
+    @ApiModelProperty("章节总页数")
+    private Integer totalPage;
+    @ApiModelProperty("当前记录页")
+    private Integer readPage;
+
 }

+ 6 - 0
yt-novel/yt-novel-service/src/main/java/com/ytpm/novel/model/param/NovelRecordParam.java

@@ -25,4 +25,10 @@ public class NovelRecordParam {
 
     @ApiModelProperty("章节名称")
     private String chapterName;
+
+    @ApiModelProperty("章节总页数")
+    private Integer totalPage;
+
+    @ApiModelProperty("章节记录页")
+    private Integer readPage;
 }

+ 36 - 17
yt-novel/yt-novel-service/src/main/java/com/ytpm/novel/service/impl/NovelServiceImpl.java

@@ -57,14 +57,13 @@ public class NovelServiceImpl implements NovelService {
     /**
      * 获取小说临时名称
      */
-    private String getTemporaryName(String novelName){
+    private String getTemporaryName(String novelName) {
         String novelTemporaryName = novelName;
         if (StrUtil.isNotEmpty(novelName)) {
             if (novelName.length() > 10) {
                 novelTemporaryName = novelName.substring(0, 6);
-            }
-            else if (novelName.length() > 2) {
-                novelTemporaryName = novelName.substring(0,2) + "**" + novelName.charAt(novelName.length() - 1);
+            } else if (novelName.length() > 2) {
+                novelTemporaryName = novelName.substring(0, 2) + "**" + novelName.charAt(novelName.length() - 1);
             }
         }
         return novelTemporaryName;
@@ -101,6 +100,8 @@ public class NovelServiceImpl implements NovelService {
                 if (chapter != null) {
                     YtNovelChapterDto chapterDto = new YtNovelChapterDto();
                     BeanUtil.copyProperties(chapter, chapterDto);
+                    chapterDto.setTotalPage(lastReadRecord.getTotalPage());
+                    chapterDto.setReadPage(lastReadRecord.getReadPage());
                     dto.setLastReadChapter(chapterDto);
                 }
             }
@@ -132,19 +133,37 @@ public class NovelServiceImpl implements NovelService {
         if (ytNovelUser == null) {
             throw new CustomerException("未知用户");
         }
-        YtNovelReadRecord readRecord = new YtNovelReadRecord();
-        readRecord.setRecordId(IdUtil.fastSimpleUUID());
-        readRecord.setUserId(param.getUserId());
-        readRecord.setNovelId(param.getNovelId());
-        readRecord.setChapterId(param.getChapterId());
-        readRecord.setNovelName(param.getNovelName());
-        readRecord.setNovelChapterName(param.getChapterName());
-        readRecord.setReadTime(new Date());
-        readRecord.setCreateTime(new Date());
-        readRecord.setUpdateTime(new Date());
-        readRecord.setCreateBy(param.getUserId());
-        readRecord.setUpdateBy(param.getUserId());
-        novelMapper.insertReadRecord(readRecord);
+        // 记录用户阅读章节
+        YtNovelReadRecord readRecord = novelMapper.selectChapterRecord(param);
+        if (readRecord == null) {
+            readRecord = new YtNovelReadRecord();
+            BeanUtil.copyProperties(param, readRecord);
+            readRecord.setRecordId(IdUtil.fastSimpleUUID());
+            readRecord.setReadTime(new Date());
+            readRecord.setCreateTime(new Date());
+            readRecord.setUpdateTime(new Date());
+            readRecord.setCreateBy(param.getUserId());
+            readRecord.setUpdateBy(param.getUserId());
+            if (StrUtil.isEmpty(readRecord.getNovelName())) {
+                YtNovel novel = novelMapper.selectByPrimaryKey(param.getNovelId());
+                readRecord.setNovelName(novel == null ? "" : novel.getNovelName());
+            }
+            if (StrUtil.isEmpty(readRecord.getNovelChapterName())) {
+                YtNovelChapter chapter = novelMapper.selectNovelChapterByPrimaryKey(param.getChapterId());
+                readRecord.setNovelChapterName(chapter == null ? "" : chapter.getChapterName());
+            }
+            novelMapper.insertReadRecord(readRecord);
+            // 更新小说阅读数
+            novelMapper.updateNovelRead(param.getNovelId());
+        }
+        else if (param.getReadPage() == null && param.getTotalPage() != null) {
+            // 已存在章节阅读记录 则更新记录章节页
+            readRecord.setTotalPage(param.getTotalPage());
+            readRecord.setReadPage(param.getReadPage());
+            readRecord.setUpdateTime(new Date());
+            readRecord.setUpdateBy(param.getUserId());
+            novelMapper.updateReadRecord(readRecord);
+        }
         return "保存记录成功";
     }
 

+ 57 - 4
yt-novel/yt-novel-service/src/main/resources/mapper/NovelMapper.xml

@@ -13,7 +13,9 @@
          create_by,
          create_time,
          update_by,
-         update_time)
+         update_time,
+         total_page,
+         read_page)
         values (#{recordId},
                 #{userId},
                 #{novelId},
@@ -24,7 +26,9 @@
                 #{createBy},
                 #{createTime},
                 #{updateBy},
-                #{updateTime});
+                #{updateTime},
+                #{totalPage},
+                #{readPage});
     </insert>
     <insert id="insertNovelShelf">
         insert into yt_novel_shelf(shelf_id, user_id, shelf_name, novel_ids, create_by, create_time)
@@ -42,6 +46,29 @@
         update_time = #{updateTime}
         where user_id =#{userId} and deleted =0;
     </update>
+    <update id="updateNovelRead">
+        update yt_novel set novel_reads = (
+            select count(distinct user_id) from yt_novel_read_record
+            where novel_id = #{novelId}
+        )
+        where novel_id = #{novelId}
+    </update>
+    <update id="updateReadRecord">
+        update yt_novel_read_record
+        set
+            <if test="readPage != null">
+                read_page = #{readPage},
+            </if>
+            <if test="totalPage != null">
+                total_page = #{totalPage},
+            </if>
+            <if test="updateBy != null and updateBy != ''">
+                update_by = #{updateBy},
+            </if>
+            update_time = now()
+        where record_id = #{recordId}
+        limit 1
+    </update>
 
     <select id="selectByPrimaryKey" resultType="com.ytpm.app.model.YtNovel">
         select novel_id,
@@ -183,7 +210,7 @@
         where yns.deleted = 0 and yns.user_id = #{userId}
     </select>
     <select id="selectLastRecord" resultType="com.ytpm.app.model.YtNovelReadRecord">
-        select ynrr.record_id,
+        select record_id,
                user_id,
                novel_id,
                chapter_id,
@@ -194,12 +221,37 @@
                create_by,
                create_time,
                update_by,
-               update_time
+               update_time,
+               total_page,
+               read_page
         from yt_novel_read_record ynrr
         where user_id=#{userId} and novel_id=#{novelId} and deleted = 0
         order by read_time desc
         limit 1
     </select>
+    <select id="selectChapterRecord" resultType="com.ytpm.app.model.YtNovelReadRecord">
+        select record_id,
+               user_id,
+               novel_id,
+               chapter_id,
+               novel_name,
+               novel_chapter_name,
+               deleted,
+               read_time,
+               create_by,
+               create_time,
+               update_by,
+               update_time,
+               total_page,
+               read_page
+        from yt_novel_read_record ynrr
+        where user_id = #{param.userId}
+          and novel_id = #{param.novelId}
+          and chapter_id = #{param.chapterId}
+          and deleted = 0
+        order by read_time desc
+        limit 1
+    </select>
     <select id="selectNovelChapterPage" resultType="com.ytpm.novel.model.dto.YtNovelChapterDto">
         select chapter_id,
                novel_id,
@@ -227,4 +279,5 @@
     </select>
 
 
+
 </mapper>

+ 4 - 4
yt-question/yt-question-service/src/main/resources/bootstrap.yml

@@ -34,12 +34,12 @@ spring:
     #name-zh: '每天爱跑步'
     #name: lemon-service
     #name-zh: '青柠檬记账'
-#    name: lime-service
-#    name-zh: '青柠记账'
+    name: lime-service
+    name-zh: '青柠记账'
     #name: mileage-service
     #name-zh: '宠物里程表'
-    name: nofeeds-service
-    name-zh: 'Nofeeds'
+#    name: nofeeds-service
+#    name-zh: 'Nofeeds'
     #name: picking-service
     #name-zh: '找茬挑战王'
     #name: proverb-service