From af487fdb480f09fc61748dc342ef4e7ea68f0f44 Mon Sep 17 00:00:00 2001 From: sunflower2014 Date: Wed, 28 May 2025 10:51:50 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B5=84=E8=AE=AF=E4=BF=9D=E5=AD=98=E8=8D=89?= =?UTF-8?q?=E7=A8=BF=E7=AE=B1=E5=92=8C=E5=8F=91=E5=B8=83=E6=97=B6=E8=A1=8C?= =?UTF-8?q?=E4=B8=9A=E5=88=86=E7=B1=BB=E7=9B=B8=E5=85=B3=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reference/core/mapper/IndustryMapper.java | 13 ++ .../core/model/dto/news/SaveNewsDTO.java | 16 ++- .../reference/core/service/NewsService.java | 113 ++++++++++++++---- 3 files changed, 119 insertions(+), 23 deletions(-) diff --git a/core/src/main/java/com/jinrui/reference/core/mapper/IndustryMapper.java b/core/src/main/java/com/jinrui/reference/core/mapper/IndustryMapper.java index ce4c314..67ba0ba 100644 --- a/core/src/main/java/com/jinrui/reference/core/mapper/IndustryMapper.java +++ b/core/src/main/java/com/jinrui/reference/core/mapper/IndustryMapper.java @@ -64,6 +64,19 @@ public interface IndustryMapper { "from draft_industry_rel where industry_id = #{industryId}") Long countDraftIndustryRelList(@Param("industryId") Long industryId); + + @Delete("delete from news_industry_rel where news_id = #{newsId}") + void deleteNews(@Param("newsId") Long newsId); + + @Delete("delete from draft_industry_rel where draft_id = #{draftId}") + void deleteDraft(@Param("draftId") Long draftId); + + @Insert("insert into draft_industry_rel(draft_id, industry_id) values (#{draftId}, #{industryId})") + void saveDraftIndustryRel(@Param("draftId") Long draftId, @Param("industryId") Long industryId); + + @Insert("insert into news_industry_rel(news_id, industry_id) values (#{newsId}, #{industryId})") + void saveNewsIndustryRel(@Param("newsId") Long newsId, @Param("industryId") Long industryId); + @Results({ @Result(column = "id", property = "id", id = true), @Result(column = "parent_id", property = "parentId"), diff --git a/core/src/main/java/com/jinrui/reference/core/model/dto/news/SaveNewsDTO.java b/core/src/main/java/com/jinrui/reference/core/model/dto/news/SaveNewsDTO.java index 82d0acb..17e69b9 100644 --- a/core/src/main/java/com/jinrui/reference/core/model/dto/news/SaveNewsDTO.java +++ b/core/src/main/java/com/jinrui/reference/core/model/dto/news/SaveNewsDTO.java @@ -1,8 +1,9 @@ package com.jinrui.reference.core.model.dto.news; -import com.jinrui.reference.core.model.vo.news.NewsDetailVO; - import java.util.Date; +import java.util.List; + +import com.jinrui.reference.core.model.vo.news.NewsDetailVO; @SuppressWarnings("unused") public class SaveNewsDTO { @@ -18,6 +19,9 @@ public class SaveNewsDTO { private SaveDraftTag tag; private SaveDraftColumn column; + + private List industries; + private String content; // 不含html标签的纯文本 @@ -116,4 +120,12 @@ public class SaveNewsDTO { public void setContentText(String contentText) { this.contentText = contentText; } + + public List getIndustries() { + return industries; + } + + public void setIndustries(List industries) { + this.industries = industries; + } } diff --git a/core/src/main/java/com/jinrui/reference/core/service/NewsService.java b/core/src/main/java/com/jinrui/reference/core/service/NewsService.java index bb9cb3e..a21b3aa 100644 --- a/core/src/main/java/com/jinrui/reference/core/service/NewsService.java +++ b/core/src/main/java/com/jinrui/reference/core/service/NewsService.java @@ -1,5 +1,21 @@ package com.jinrui.reference.core.service; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.jinrui.reference.core.mapper.ColumnMapper; @@ -32,21 +48,6 @@ import com.jinrui.reference.core.model.vo.news.NewsDetailTag; import com.jinrui.reference.core.model.vo.news.NewsDetailTagItem; import com.jinrui.reference.core.model.vo.news.NewsDetailVO; import com.jinrui.reference.core.model.vo.news.NewsVO; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; -import org.springframework.util.StringUtils; - -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.function.Function; -import java.util.stream.Collectors; @Service public class NewsService { @@ -346,7 +347,7 @@ public class NewsService { news.setEditorId(editorId); newsMapper.publishNews(news); // zzp - deleteNewsColumnAndTag(newsId); + deleteNewsRel(newsId); try { SaveDraftTag saveDraftTag = saveNewsDTO.getTag(); if (saveDraftTag != null) { @@ -403,7 +404,17 @@ public class NewsService { return ResultObject.failed(500, "服务器错误,请联系系统管理员!"); } - + try { + List saveDraftIndustries = saveNewsDTO.getIndustries(); + if (!CollectionUtils.isEmpty(saveDraftIndustries)) { + for (Long industryId:saveDraftIndustries) { + industryMapper.saveNewsIndustryRel(newIdRl, industryId); + } + } + } catch (Exception e) { + log.error("保存发布新闻标签出错!", e); + return ResultObject.failed(500, "服务器错误,请联系系统管理员!"); + } return ResultObject.success(); } @@ -443,7 +454,7 @@ public class NewsService { } } try { - deleteNewsColumnAndTag(newsId); + deleteNewsRel(newsId); } catch (Exception e) { log.error("删除新闻栏目标签异常!", e); return ResultObject.failed(500, "服务器错误,请联系系统管理员!"); @@ -457,17 +468,17 @@ public class NewsService { return ResultObject.success(); } - private void deleteNewsColumnAndTag(Long newsId) { + private void deleteNewsRel(Long newsId) { columnMapper.deleteNews(newsId); tagMapper.deleteNews(newsId); + industryMapper.deleteNews(newsId); } private void deleteDraft(Long draftId) { newsMapper.deleteDraft(draftId); columnMapper.deleteDraft(draftId); tagMapper.deleteDraft(draftId); - - + industryMapper.deleteDraft(draftId); } private ResultObject saveNewDraft(SaveNewsDTO saveNewsDTO, News news) { @@ -608,6 +619,66 @@ public class NewsService { log.error("保存草稿标签出错!", e); return ResultObject.failed(500, "服务器错误,请联系系统管理员!"); } + + // 保存新闻行业分类关系 + try { + List saveDraftIndustries = saveNewsDTO.getIndustries(); + if (CollectionUtils.isEmpty(saveDraftIndustries)) { + industryMapper.deleteNews(newsId); + industryMapper.deleteDraft(draftId); + } else { + // 先查到这个行业分类有没有关联过 + List newsIndustryRelList = industryMapper.getNewsIndustryRelList(newsId); + + // 如果前端传进来的没有,而库里有,就删掉 + Set existedNewsIndustries = new HashSet<>(); + for(NewsIndustryRel newsIndustryRel: newsIndustryRelList){ + boolean isIn = false; + for (Long industryId : saveDraftIndustries) { + if(industryId == newsIndustryRel.getIndustryId()){ + isIn = true; + existedNewsIndustries.add(industryId); + break; + } + } + if(!isIn){ + industryMapper.deleteNews(newsIndustryRel.getNewsId()); + } + } + + for (Long industryId : saveDraftIndustries) { + if (!existedNewsIndustries.contains(industryId)) { + industryMapper.saveNewsIndustryRel(newsId, industryId); + } + } + + List draftIndustryRelList = industryMapper.getDraftIndustryRelList(draftId); + Set existedDraftIndustries = new HashSet<>(); + for(DraftIndustryRel draftIndustryRel: draftIndustryRelList){ + boolean isIn = false; + for (Long industryId : saveDraftIndustries) { + if(industryId == draftIndustryRel.getIndustryId()){ + isIn = true; + existedDraftIndustries.add(industryId); + break; + } + } + if(!isIn){ + industryMapper.deleteDraft(draftIndustryRel.getDraftId()); + } + } + + for (Long industryId : saveDraftIndustries) { + if (!existedDraftIndustries.contains(industryId)) { + industryMapper.saveDraftIndustryRel(draftId, industryId); + } + } + } + } catch (Exception e) { + log.error("保存发布新闻行业分类出错!", e); + return ResultObject.failed(500, "服务器错误,请联系系统管理员!"); + } + try { SaveDraftColumn column = saveNewsDTO.getColumn();