完成管理后台新闻详情搜索

This commit is contained in:
xpecya 2024-12-11 08:46:40 +08:00
parent 3166c69f19
commit e7052f07d0
10 changed files with 457 additions and 0 deletions

View File

@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.jinrui.reference.core.model.dto.news.SaveNewsDTO; import com.jinrui.reference.core.model.dto.news.SaveNewsDTO;
import com.jinrui.reference.admin.model.entity.AdminUser; import com.jinrui.reference.admin.model.entity.AdminUser;
import com.jinrui.reference.core.model.vo.ResultObject; import com.jinrui.reference.core.model.vo.ResultObject;
import com.jinrui.reference.core.model.vo.news.NewsDetailVO;
import com.jinrui.reference.core.model.vo.news.NewsVO; import com.jinrui.reference.core.model.vo.news.NewsVO;
import com.jinrui.reference.admin.service.AdminJwtService; import com.jinrui.reference.admin.service.AdminJwtService;
import com.jinrui.reference.core.model.vo.PageObject; import com.jinrui.reference.core.model.vo.PageObject;
@ -35,6 +36,34 @@ public class NewsController {
this.objectMapper = objectMapper; this.objectMapper = objectMapper;
} }
@GetMapping("/detail")
public ResultObject<NewsDetailVO> detail(@RequestHeader("auth-token") String token,
@RequestParam("id") Long id) {
if (!StringUtils.hasText(token)) {
return ResultObject.failed("登陆Token为空!");
}
try {
AdminUser adminUser = AdminJwtService.parseToken(token);
if (adminUser == null) {
log.warn("解析token {}拿不到AdminUser对象!", token);
return ResultObject.failed("登陆Token有误请联系系统管理员!");
}
Long adminUserId = adminUser.getId();
if (!adminUser.isActive()) {
log.warn("当前用户已被封禁! id = {}", adminUserId);
return ResultObject.failed("当前用户已被封禁!请联系系统管理员!");
}
log.info("path: /news/detail, method: GET, request user id: {}, news id: {}", adminUserId, id);
return newsService.detail(id);
} catch (Exception e) {
log.error("解析登陆Token出错!", e);
return ResultObject.failed(500, "服务端错误,请联系系统管理员!");
}
}
@DeleteMapping @DeleteMapping
public ResultObject<Void> deleteNews(@RequestHeader("auth-token") String token, public ResultObject<Void> deleteNews(@RequestHeader("auth-token") String token,
@RequestParam("id") Long id) { @RequestParam("id") Long id) {

View File

@ -18,6 +18,18 @@ public interface NewsMapper {
@Delete("delete from news_draft where id = #{draftId}") @Delete("delete from news_draft where id = #{draftId}")
void deleteDraft(@Param("draftId") Long draftId); void deleteDraft(@Param("draftId") Long draftId);
@Select("select id, title, summary, picture, content, " +
"create_time as createTime, " +
"update_time as updateTime " +
"from news_draft where id = #{id}")
NewsDraft getDraftDetail(@Param("id") Long id);
@Select("select id, title, summary, picture, content, " +
"create_time as createTime, " +
"update_time as updateTime " +
"from news where id = #{id}")
News getNewsDetail(@Param("id") Long id);
@Update("update news " + @Update("update news " +
"set draft_id = #{draftId}," + "set draft_id = #{draftId}," +
"editor_id = #{editorId}," + "editor_id = #{editorId}," +

View File

@ -1,5 +1,7 @@
package com.jinrui.reference.core.mapper; package com.jinrui.reference.core.mapper;
import com.jinrui.reference.core.model.entity.DraftTagRel;
import com.jinrui.reference.core.model.entity.NewsTagRel;
import com.jinrui.reference.core.model.entity.Tag; import com.jinrui.reference.core.model.entity.Tag;
import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Insert;
@ -14,6 +16,24 @@ import java.util.List;
public interface TagMapper { public interface TagMapper {
@Results({
@Result(column = "id", property = "id", id = true),
@Result(column = "parent_id", property = "parentId"),
@Result(column = "name", property = "name"),
@Result(column = "create_time", property = "createTime", javaType = Date.class, jdbcType = JdbcType.TIMESTAMP),
@Result(column = "update_time", property = "updateTime", javaType = Date.class, jdbcType = JdbcType.TIMESTAMP)
})
@Select("select * from tag")
List<Tag> queryAll();
@Select("select id, draft_id as draftId, tag_id as tagId " +
"from draft_tag_rel where draft_id = #{draftId}")
List<DraftTagRel> getDraftTagRelList(@Param("draftId") Long draftId);
@Select("select id, news_id as newsId, tag_id as tagId " +
"from news_tag_rel where news_id = #{newsId}")
List<NewsTagRel> getNewsTagRelList(@Param("newsId") Long newsId);
@Delete("delete from news_tag_rel where news_id = #{newsId}") @Delete("delete from news_tag_rel where news_id = #{newsId}")
void deleteNews(@Param("newsId") Long newsId); void deleteNews(@Param("newsId") Long newsId);

View File

@ -13,6 +13,11 @@ public class Column {
*/ */
private Long id; private Long id;
/**
* 上级栏目ID
*/
private Long parentId;
/** /**
* 栏目名称 * 栏目名称
*/ */
@ -41,6 +46,14 @@ public class Column {
this.id = id; this.id = id;
} }
public Long getParentId() {
return parentId;
}
public void setParentId(Long parentId) {
this.parentId = parentId;
}
public String getName() { public String getName() {
return name; return name;
} }

View File

@ -0,0 +1,45 @@
package com.jinrui.reference.core.model.vo.news;
import com.jinrui.reference.core.model.dto.news.SaveDraftColumnItem;
@SuppressWarnings("unused")
public class NewsDetailColumn {
private NewsDetailColumnVip vip;
private SaveDraftColumnItem earlyKnow;
private boolean showEverything = false;
public NewsDetailColumnVip getVip() {
return vip;
}
public void setVip(NewsDetailColumnVip vip) {
this.vip = vip;
}
public boolean isShowEverything() {
return showEverything;
}
public void setShowEverything(boolean showEverything) {
this.showEverything = showEverything;
}
public SaveDraftColumnItem getEarlyKnow() {
return earlyKnow;
}
public void setEarlyKnow(SaveDraftColumnItem earlyKnow) {
this.earlyKnow = earlyKnow;
}
public Boolean getShowEverything() {
return showEverything;
}
public void setShowEverything(Boolean showEverything) {
this.showEverything = showEverything;
}
}

View File

@ -0,0 +1,44 @@
package com.jinrui.reference.core.model.vo.news;
public class NewsDetailColumnVip {
private Long id;
private String name;
private Integer type;
private NewsDetailColumnVip child;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public NewsDetailColumnVip getChild() {
return child;
}
public void setChild(NewsDetailColumnVip child) {
this.child = child;
}
}

View File

@ -0,0 +1,25 @@
package com.jinrui.reference.core.model.vo.news;
@SuppressWarnings("unused")
public class NewsDetailTag {
private NewsDetailTagItem source;
private NewsDetailTagItem field;
public NewsDetailTagItem getSource() {
return source;
}
public void setSource(NewsDetailTagItem source) {
this.source = source;
}
public NewsDetailTagItem getField() {
return field;
}
public void setField(NewsDetailTagItem field) {
this.field = field;
}
}

View File

@ -0,0 +1,25 @@
package com.jinrui.reference.core.model.vo.news;
@SuppressWarnings("unused")
public class NewsDetailTagItem {
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

View File

@ -0,0 +1,97 @@
package com.jinrui.reference.core.model.vo.news;
import com.jinrui.reference.core.model.dto.news.SaveDraftColumn;
import com.jinrui.reference.core.model.dto.news.SaveDraftTag;
import com.jinrui.reference.core.model.entity.News;
import com.jinrui.reference.core.model.entity.NewsDraft;
@SuppressWarnings("unused")
public class NewsDetailVO {
private Long id;
private String title;
private String summary;
private String picture;
private NewsDetailTag tag;
private NewsDetailColumn column;
private String content;
public NewsDetailVO() {}
public NewsDetailVO(News news) {
this.id = news.getId();
this.title = news.getTitle();
this.summary = news.getSummary();
this.picture = news.getPicture();
this.content = news.getContent();
}
public NewsDetailVO(NewsDraft newsDraft) {
this.title = newsDraft.getTitle();
this.summary = newsDraft.getSummary();
this.picture = newsDraft.getPicture();
this.content = newsDraft.getContent();
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSummary() {
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
public String getPicture() {
return picture;
}
public void setPicture(String picture) {
this.picture = picture;
}
public NewsDetailTag getTag() {
return tag;
}
public void setTag(NewsDetailTag tag) {
this.tag = tag;
}
public NewsDetailColumn getColumn() {
return column;
}
public void setColumn(NewsDetailColumn column) {
this.column = column;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}

View File

@ -12,12 +12,20 @@ import com.jinrui.reference.core.model.dto.news.SaveNewsDTO;
import com.jinrui.reference.core.model.dto.news.SaveDraftTag; import com.jinrui.reference.core.model.dto.news.SaveDraftTag;
import com.jinrui.reference.core.model.entity.Column; import com.jinrui.reference.core.model.entity.Column;
import com.jinrui.reference.core.model.entity.DraftColumnRel; import com.jinrui.reference.core.model.entity.DraftColumnRel;
import com.jinrui.reference.core.model.entity.DraftTagRel;
import com.jinrui.reference.core.model.entity.News; import com.jinrui.reference.core.model.entity.News;
import com.jinrui.reference.core.model.entity.NewsColumnRel; import com.jinrui.reference.core.model.entity.NewsColumnRel;
import com.jinrui.reference.core.model.entity.NewsDraft; import com.jinrui.reference.core.model.entity.NewsDraft;
import com.jinrui.reference.core.model.entity.NewsTagRel;
import com.jinrui.reference.core.model.entity.Tag;
import com.jinrui.reference.core.model.vo.PageObject; import com.jinrui.reference.core.model.vo.PageObject;
import com.jinrui.reference.core.model.vo.ResultObject; import com.jinrui.reference.core.model.vo.ResultObject;
import com.jinrui.reference.core.model.vo.column.ColumnVO; import com.jinrui.reference.core.model.vo.column.ColumnVO;
import com.jinrui.reference.core.model.vo.news.NewsDetailColumn;
import com.jinrui.reference.core.model.vo.news.NewsDetailColumnVip;
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 com.jinrui.reference.core.model.vo.news.NewsVO;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -26,8 +34,10 @@ import org.springframework.util.CollectionUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -51,6 +61,143 @@ public class NewsService {
this.tagMapper = tagMapper; this.tagMapper = tagMapper;
} }
public ResultObject<NewsDetailVO> detail(Long id) {
News news = newsMapper.getById(id);
if (news == null) {
return ResultObject.success();
}
List<Tag> allTags = tagMapper.queryAll();
Map<Long, Tag> tagMap = allTags.stream().collect(Collectors.toMap(Tag::getId, Function.identity()));
List<Column> allColumns = columnMapper.queryAll();
Map<Long, Column> columnMap = allColumns.stream().collect(Collectors.toMap(Column::getId, Function.identity()));
Long draftId = news.getDraftId();
if (draftId != null) {
NewsDraft newsDraft = newsMapper.getDraftDetail(draftId);
NewsDetailVO newsDetailVO = new NewsDetailVO(newsDraft);
newsDetailVO.setId(id);
Set<Long> set = new HashSet<>();
set.add(draftId);
List<DraftColumnRel> columnRelList = columnMapper.queryDraftRel(set);
NewsDetailColumn newsDetailColumn = new NewsDetailColumn();
newsDetailVO.setColumn(newsDetailColumn);
if (!CollectionUtils.isEmpty(columnRelList)) {
for (DraftColumnRel rel : columnRelList) {
Long columnId = rel.getColumnId();
int type = rel.getType();
if (columnId == 13) {
SaveDraftColumnItem item = new SaveDraftColumnItem();
newsDetailColumn.setEarlyKnow(item);
item.setShow(true);
item.setType(type);
} else if (columnId == 14) {
newsDetailColumn.setShowEverything(true);
} else {
NewsDetailColumnVip vip = new NewsDetailColumnVip();
vip.setId(columnId);
vip.setType(type);
Column column = columnMap.get(columnId);
String name = column.getName();
vip.setName(name);
Long parentId = column.getParentId();
if (parentId != null && parentId != 1L) {
Column parentColumn = columnMap.get(parentId);
NewsDetailColumnVip parent = new NewsDetailColumnVip();
parent.setId(parentId);
parent.setName(parentColumn.getName());
parent.setType(type);
parent.setChild(vip);
newsDetailColumn.setVip(parent);
} else {
newsDetailColumn.setVip(vip);
}
}
}
}
List<DraftTagRel> tagRelList = tagMapper.getDraftTagRelList(draftId);
NewsDetailTag newsDetailTag = new NewsDetailTag();
newsDetailVO.setTag(newsDetailTag);
if (!CollectionUtils.isEmpty(tagRelList)) {
for (DraftTagRel rel : tagRelList) {
Long tagId = rel.getTagId();
Tag tag = tagMap.get(tagId);
Long parentId = tag.getParentId();
NewsDetailTagItem tagItem = new NewsDetailTagItem();
tagItem.setId(tagId);
tagItem.setName(tag.getName());
if (parentId == 1) {
newsDetailTag.setSource(tagItem);
} else {
newsDetailTag.setField(tagItem);
}
}
}
return ResultObject.success(newsDetailVO);
}
news = newsMapper.getNewsDetail(id);
NewsDetailVO newsDetailVO = new NewsDetailVO(news);
Set<Long> set = new HashSet<>();
set.add(id);
List<NewsColumnRel> columnRelList = columnMapper.queryNewsRel(set);
NewsDetailColumn newsDetailColumn = new NewsDetailColumn();
newsDetailVO.setColumn(newsDetailColumn);
if (!CollectionUtils.isEmpty(columnRelList)) {
for (NewsColumnRel rel : columnRelList) {
Long columnId = rel.getColumnId();
int type = rel.getType();
if (columnId == 13) {
SaveDraftColumnItem item = new SaveDraftColumnItem();
newsDetailColumn.setEarlyKnow(item);
item.setShow(true);
item.setType(type);
} else if (columnId == 14) {
newsDetailColumn.setShowEverything(true);
} else {
NewsDetailColumnVip vip = new NewsDetailColumnVip();
vip.setId(columnId);
vip.setType(type);
Column column = columnMap.get(columnId);
String name = column.getName();
vip.setName(name);
Long parentId = column.getParentId();
if (parentId != null && parentId != 1L) {
Column parentColumn = columnMap.get(parentId);
NewsDetailColumnVip parent = new NewsDetailColumnVip();
parent.setId(parentId);
parent.setName(parentColumn.getName());
parent.setType(type);
parent.setChild(vip);
newsDetailColumn.setVip(parent);
} else {
newsDetailColumn.setVip(vip);
}
}
}
}
List<NewsTagRel> tagRelList = tagMapper.getNewsTagRelList(id);
NewsDetailTag newsDetailTag = new NewsDetailTag();
newsDetailVO.setTag(newsDetailTag);
if (!CollectionUtils.isEmpty(tagRelList)) {
for (NewsTagRel rel : tagRelList) {
Long tagId = rel.getTagId();
Tag tag = tagMap.get(tagId);
Long parentId = tag.getParentId();
NewsDetailTagItem tagItem = new NewsDetailTagItem();
tagItem.setId(tagId);
tagItem.setName(tag.getName());
if (parentId == 1) {
newsDetailTag.setSource(tagItem);
} else {
newsDetailTag.setField(tagItem);
}
}
}
return ResultObject.success(newsDetailVO);
}
public ResultObject<Void> createPublish(Long editorId, SaveNewsDTO saveNewsDTO) { public ResultObject<Void> createPublish(Long editorId, SaveNewsDTO saveNewsDTO) {
Long id = saveNewsDTO.getId(); Long id = saveNewsDTO.getId();
Long newsId = saveNewsDTO.getId(); Long newsId = saveNewsDTO.getId();