完成管理后台新闻详情搜索
This commit is contained in:
parent
3166c69f19
commit
e7052f07d0
|
|
@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
|||
import com.jinrui.reference.core.model.dto.news.SaveNewsDTO;
|
||||
import com.jinrui.reference.admin.model.entity.AdminUser;
|
||||
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.admin.service.AdminJwtService;
|
||||
import com.jinrui.reference.core.model.vo.PageObject;
|
||||
|
|
@ -35,6 +36,34 @@ public class NewsController {
|
|||
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
|
||||
public ResultObject<Void> deleteNews(@RequestHeader("auth-token") String token,
|
||||
@RequestParam("id") Long id) {
|
||||
|
|
|
|||
|
|
@ -18,6 +18,18 @@ public interface NewsMapper {
|
|||
@Delete("delete from news_draft where id = #{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 " +
|
||||
"set draft_id = #{draftId}," +
|
||||
"editor_id = #{editorId}," +
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
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 org.apache.ibatis.annotations.Delete;
|
||||
import org.apache.ibatis.annotations.Insert;
|
||||
|
|
@ -14,6 +16,24 @@ import java.util.List;
|
|||
|
||||
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}")
|
||||
void deleteNews(@Param("newsId") Long newsId);
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,11 @@ public class Column {
|
|||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 上级栏目ID
|
||||
*/
|
||||
private Long parentId;
|
||||
|
||||
/**
|
||||
* 栏目名称
|
||||
*/
|
||||
|
|
@ -41,6 +46,14 @@ public class Column {
|
|||
this.id = id;
|
||||
}
|
||||
|
||||
public Long getParentId() {
|
||||
return parentId;
|
||||
}
|
||||
|
||||
public void setParentId(Long parentId) {
|
||||
this.parentId = parentId;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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.entity.Column;
|
||||
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.NewsColumnRel;
|
||||
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.ResultObject;
|
||||
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 org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
|
@ -26,8 +34,10 @@ import org.springframework.util.CollectionUtils;
|
|||
|
||||
import java.util.ArrayList;
|
||||
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;
|
||||
|
||||
|
|
@ -51,6 +61,143 @@ public class NewsService {
|
|||
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) {
|
||||
Long id = saveNewsDTO.getId();
|
||||
Long newsId = saveNewsDTO.getId();
|
||||
|
|
|
|||
Loading…
Reference in New Issue