Parcourir la source

合集内新增文章优化
前提属于同一个用户下合集:
1. 一个文章只能有一个合集
2. 假设文章已经在A合集下,再次新增文章到B合集,A合集会做失效处理并移动到B合集

fangqing il y a 6 mois
Parent
commit
aca34c380f

+ 31 - 1
ruoyi-generator/src/main/java/com/ruoyi/generator/controller/CommunityArticleController.java

@@ -76,6 +76,12 @@ public class CommunityArticleController extends BaseController {
 
     @Autowired
     private CommunityArticleMapper communityArticleMapper;
+
+    @Autowired
+    private CommunityCollectionArticleMapper communityCollectionArticleMapper;
+
+
+
     /**
      * 获取文章列表信息
      */
@@ -631,7 +637,31 @@ public class CommunityArticleController extends BaseController {
             return AjaxResult.error("合集参数异常!");
         }
 
-        collectionArticle.setCreateBy(SecurityUtils.getLoginUser().getUserId());
+        /**
+         * 1.查询当前用户合集下有没有收录这边文章
+         * 2.情况1 如果在合集下,更新这个合集的删除状态,在插入到新的合集
+         * 4.情况2 如果文章就在需要添加的合集下,则返回  该文章在合集已经存在
+         * 3.如果没有在合集下,直接插入
+         */
+        Long collectionId = collectionArticle.getCollectionId();
+        Long articleId = collectionArticle.getArticleId();
+        Long userId = SecurityUtils.getLoginUser().getUserId();
+
+        List<CommunityCollectionArticle> communityCollectionArticles = communityCollectionArticleMapper.selectUserCollectionArticle(userId,articleId);
+        System.out.println("communityCollectionArticles: " + communityCollectionArticles);
+        // 如果已存在,则更新删除状态并插入新的合集
+        if (!communityCollectionArticles.isEmpty()) {
+            Long collectionId1 = communityCollectionArticles.get(0).getCollectionId();
+            System.out.println("collectionId1: " + collectionId1);
+            // 如果 id 与 collectionId 相等,直接返回
+            if (collectionId1.equals(collectionId)) {
+                return AjaxResult.success("该文章在合集已经存在!");
+            } else {
+                // 如果不相等,执行删除操作
+                communityCollectionService.deleteArticleToCollection(collectionId1, articleId);
+            }
+        }
+        collectionArticle.setCreateBy(userId);
         collectionArticle.setCreateTime(DateUtils.parseDate(DateUtils.getTime()));
         communityCollectionService.addArticleToCollection(collectionArticle);
 

+ 13 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/community/CommunityCollectionArticleMapper.java

@@ -3,7 +3,20 @@ package com.ruoyi.generator.mapper.community;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.generator.domain.Community.CommunityCollectionArticle;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 @Mapper
 public interface CommunityCollectionArticleMapper extends BaseMapper<CommunityCollectionArticle> {
+
+    /**
+     * 根据提供的ID去查询 关联表数据
+     * @param userId
+     * @param articleId
+     * @return 返回一条 community_collection_article
+     */
+    List<CommunityCollectionArticle> selectUserCollectionArticle(
+            @Param("userId")        Long userId,
+            @Param("articleId")     Long articleId);
 }

+ 18 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/service/CommunityCollectionArticleImpl.java

@@ -2,9 +2,27 @@ package com.ruoyi.generator.service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.generator.domain.Community.CommunityCollectionArticle;
+import com.ruoyi.generator.mapper.community.CommunityArticleTagMapper;
 import com.ruoyi.generator.mapper.community.CommunityCollectionArticleMapper;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 @Service
 public class CommunityCollectionArticleImpl extends ServiceImpl<CommunityCollectionArticleMapper, CommunityCollectionArticle> implements ICommunityCollectionArticleService {
+
+    @Autowired
+    private CommunityCollectionArticleMapper communityCollectionArticleMapper;
+
+    /**
+     * 根据提供的ID去查询 关联表数据
+     * @param userId
+     * @param articleId
+     * @return 返回一条 community_collection_article
+     */
+    @Override
+    public List<CommunityCollectionArticle> selectUserCollectionArticle(Long userId,Long articleId) {
+        return communityCollectionArticleMapper.selectUserCollectionArticle(userId,articleId);
+    }
 }

+ 10 - 0
ruoyi-generator/src/main/java/com/ruoyi/generator/service/ICommunityCollectionArticleService.java

@@ -3,5 +3,15 @@ package com.ruoyi.generator.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.generator.domain.Community.CommunityCollectionArticle;
 
+import java.util.List;
+
 public interface ICommunityCollectionArticleService extends IService<CommunityCollectionArticle> {
+
+    /**
+     * 根据提供的ID去查询 关联表数据
+     * @param userId
+     * @param articleId
+     * @return 返回一条 community_collection_article
+     */
+    List<CommunityCollectionArticle> selectUserCollectionArticle(Long userId,Long articleId);
 }

+ 26 - 0
ruoyi-generator/src/main/resources/mapper/community/CommunityCollectionArticleMapper.xml

@@ -0,0 +1,26 @@
+<?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="com.ruoyi.generator.mapper.community.CommunityCollectionArticleMapper">
+
+    <select id="selectUserCollectionArticle"
+            resultType="com.ruoyi.generator.domain.Community.CommunityCollectionArticle">
+        select
+            a.id,
+            a.collection_id as collectionId,
+            a.article_id    as articleId,
+            a.is_delete	    as isDelete,
+            a.create_by	    as createBy,
+            a.update_by	    as updateBy,
+            a.create_time   as createTime,
+            a.update_time   as updateTime
+        from community_collection_article a
+                 LEFT JOIN community_collection b ON a.collection_id  = b.id
+        where
+            (a.is_delete != '1' OR a.is_delete IS NULL) AND
+            (b.is_delete != '1' OR b.is_delete IS NULL) AND
+            b.user_id =  #{userId} AND
+            a.article_id = #{articleId} LIMIT 1;
+    </select>
+</mapper>