完成管理后台新闻详情页保存功能

This commit is contained in:
xpecya 2024-12-11 07:40:28 +08:00
parent 0d0ec8e4c9
commit 1e3f6c5d43
8 changed files with 180 additions and 37 deletions

View File

@ -1,7 +1,7 @@
package com.jinrui.reference.admin.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jinrui.reference.core.model.dto.news.SaveDraftDTO;
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.NewsVO;
@ -34,9 +34,39 @@ public class NewsController {
this.objectMapper = objectMapper;
}
@PostMapping("/create/publish")
public ResultObject<Void> createPublish(@RequestHeader("auth-token") String token,
@RequestBody SaveNewsDTO saveNewsDTO) {
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/create/publish, method: POST, request user id: {}, param: {}",
adminUserId, objectMapper.writeValueAsString(saveNewsDTO));
return newsService.createPublish(adminUserId, saveNewsDTO);
} catch (Exception e) {
log.error("解析登陆Token出错!", e);
return ResultObject.failed(500, "服务端错误,请联系系统管理员!");
}
}
@PostMapping("/save")
public ResultObject<Void> saveDraft(@RequestHeader("auth-token") String token,
@RequestBody SaveDraftDTO saveDraftDTO) {
@RequestBody SaveNewsDTO saveNewsDTO) {
if (!StringUtils.hasText(token)) {
return ResultObject.failed("登陆Token为空!");
}
@ -54,13 +84,13 @@ public class NewsController {
}
log.info("path: /news/save, method: POST, request user id: {}, param: {}",
adminUser.getId(), objectMapper.writeValueAsString(saveDraftDTO));
adminUser.getId(), objectMapper.writeValueAsString(saveNewsDTO));
} catch (Exception e) {
log.error("解析登陆Token出错!", e);
return ResultObject.failed(500, "服务端错误,请联系系统管理员!");
}
return newsService.saveDraft(saveDraftDTO);
return newsService.saveDraft(saveNewsDTO);
}
@GetMapping

View File

@ -17,6 +17,9 @@ import java.util.Set;
public interface ColumnMapper {
@Delete("delete from news_column_rel where news_id = #{newsId}")
void deleteNews(@Param("newsId") Long newsId);
@Delete("delete from draft_column_rel where draft_id = #{draftId}")
void deleteDraft(@Param("draftId") Long draftId);
@ -32,6 +35,18 @@ public interface ColumnMapper {
")")
void saveDraftColumnRel(@Param("draftId") Long draftId, @Param("columnId") Long columnId, @Param("type") Integer type);
@Insert("<script>" +
"insert into news_column_rel(news_id, column_id" +
"<if test=\"type != null\">" +
", type" +
"</if>" +
") values (#{newsId}, #{columnId}" +
"<if test=\"type != null\">" +
", #{type}" +
"</if>" +
")")
void saveNewsColumnRel(@Param("newsId") Long newsId, @Param("columnId") Long columnId, @Param("type") Integer type);
@Results({
@Result(column = "id", property = "id", id = true),
@Result(column = "parent_id", property = "parentId"),

View File

@ -12,6 +12,9 @@ import java.util.List;
public interface NewsMapper {
@Delete("delete from news where id = #{newsId}")
void deleteNews(@Param("newsId") Long newsId);
@Delete("delete from news_draft where id = #{draftId}")
void deleteDraft(@Param("draftId") Long draftId);
@ -27,6 +30,19 @@ public interface NewsMapper {
"where id = #{id}")
void updateNews(News news);
@Update("update news " +
"set editor_id = #{editorId}," +
"draft_id = NULL, " +
"title = #{title}," +
"summary = #{summary}," +
"picture = #{picture}," +
"content = #{content}," +
"status = #{status}," +
"update_time = now()," +
"publish_time = now() " +
"where id = #{id}")
void publishNews(News news);
@Select("select id, draft_id as draftId, status from news where id = #{id}")
News getById(@Param("id") Long id);

View File

@ -14,12 +14,18 @@ import java.util.List;
public interface TagMapper {
@Delete("delete from news_tag_rel where news_id = #{newsId}")
void deleteNews(@Param("newsId") Long newsId);
@Delete("delete from draft_tag_rel where draft_id = #{draftId}")
void deleteDraft(@Param("draftId") Long draftId);
@Insert("insert into draft_tag_rel(draft_id, tag_id) values (#{draftId}, #{tagId})")
void saveDraftTagRel(@Param("draftId") Long draftId, @Param("tagId") Long tagId);
@Insert("insert into news_tag_rel(news_id, tag_id) values (#{newsId}, #{tagId})")
void saveNewsTagRel(@Param("newsId") Long newsId, @Param("tagId") Long tagId);
@Results({
@Result(column = "id", property = "id", id = true),
@Result(column = "parent_id", property = "parentId"),

View File

@ -1,7 +1,7 @@
package com.jinrui.reference.core.model.dto.news;
@SuppressWarnings("unused")
public class SaveDraftDTO {
public class SaveNewsDTO {
private Long id;

View File

@ -1,6 +1,6 @@
package com.jinrui.reference.core.model.entity;
import com.jinrui.reference.core.model.dto.news.SaveDraftDTO;
import com.jinrui.reference.core.model.dto.news.SaveNewsDTO;
import java.util.Date;
@ -72,13 +72,13 @@ public class News {
public News() {}
public News(SaveDraftDTO saveDraftDTO) {
this.id = saveDraftDTO.getId();
this.title = saveDraftDTO.getTitle();
this.summary = saveDraftDTO.getSummary();
this.picture = saveDraftDTO.getPicture();
public News(SaveNewsDTO saveNewsDTO) {
this.id = saveNewsDTO.getId();
this.title = saveNewsDTO.getTitle();
this.summary = saveNewsDTO.getSummary();
this.picture = saveNewsDTO.getPicture();
this.type = 1;
this.content = saveDraftDTO.getContent();
this.content = saveNewsDTO.getContent();
this.status = 0;
this.createTime = new Date();
this.updateTime = new Date();

View File

@ -1,6 +1,6 @@
package com.jinrui.reference.core.model.entity;
import com.jinrui.reference.core.model.dto.news.SaveDraftDTO;
import com.jinrui.reference.core.model.dto.news.SaveNewsDTO;
import java.util.Date;
@ -52,13 +52,13 @@ public class NewsDraft {
public NewsDraft() {}
public NewsDraft(SaveDraftDTO saveDraftDTO) {
this.id = saveDraftDTO.getId();
this.title = saveDraftDTO.getTitle();
this.summary = saveDraftDTO.getSummary();
this.picture = saveDraftDTO.getPicture();
public NewsDraft(SaveNewsDTO saveNewsDTO) {
this.id = saveNewsDTO.getId();
this.title = saveNewsDTO.getTitle();
this.summary = saveNewsDTO.getSummary();
this.picture = saveNewsDTO.getPicture();
this.type = 1;
this.content = saveDraftDTO.getContent();
this.content = saveNewsDTO.getContent();
this.createTime = new Date();
this.updateTime = new Date();
}

View File

@ -8,7 +8,7 @@ import com.jinrui.reference.core.mapper.TagMapper;
import com.jinrui.reference.core.model.dto.news.SaveDraftColumn;
import com.jinrui.reference.core.model.dto.news.SaveDraftColumnItem;
import com.jinrui.reference.core.model.dto.news.SaveDraftColumnVip;
import com.jinrui.reference.core.model.dto.news.SaveDraftDTO;
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;
@ -51,22 +51,98 @@ public class NewsService {
this.tagMapper = tagMapper;
}
public ResultObject<Void> saveDraft(SaveDraftDTO saveDraftDTO) {
Long id = saveDraftDTO.getId();
if (id == null) {
return saveNewDraft(saveDraftDTO, null);
}
return updateDraft(saveDraftDTO);
}
private ResultObject<Void> updateDraft(SaveDraftDTO saveDraftDTO) {
Long id = saveDraftDTO.getId();
public ResultObject<Void> createPublish(Long editorId, SaveNewsDTO saveNewsDTO) {
Long id = saveNewsDTO.getId();
Long newsId = saveNewsDTO.getId();
News news = newsMapper.getById(id);
Long draftId = news.getDraftId();
if (draftId != null) {
deleteDraft(draftId);
}
return saveNewDraft(saveDraftDTO, news);
news = new News(saveNewsDTO);
news.setStatus(2);
news.setEditorId(editorId);
newsMapper.publishNews(news);
deleteNewsColumnAndTag(newsId);
try {
SaveDraftTag saveDraftTag = saveNewsDTO.getTag();
if (saveDraftTag != null) {
Long source = saveDraftTag.getSource();
if (source != null) {
tagMapper.saveNewsTagRel(id, source);
}
Long field = saveDraftTag.getField();
if (field != null) {
tagMapper.saveNewsTagRel(id, field);
}
}
} catch (Exception e) {
log.error("保存发布新闻标签出错!", e);
return ResultObject.failed(500, "服务器错误,请联系系统管理员!");
}
try {
SaveDraftColumn column = saveNewsDTO.getColumn();
if (column != null) {
SaveDraftColumnVip vip = column.getVip();
if (vip != null) {
id = vip.getId();
if (id != null) {
Integer type = vip.getType();
columnMapper.saveNewsColumnRel(newsId, id, type);
}
}
SaveDraftColumnItem earlyKnow = column.getEarlyKnow();
if (earlyKnow != null) {
Boolean show = earlyKnow.getShow();
if (show != null && show) {
Integer type = earlyKnow.getType();
columnMapper.saveNewsColumnRel(newsId, 13L, type);
}
}
Boolean showEverything = column.getShowEverything();
if (showEverything != null && showEverything) {
columnMapper.saveNewsColumnRel(newsId, 14L, null);
}
}
} catch (Exception e) {
log.error("保存发布新闻栏目栏目出错!", e);
return ResultObject.failed(500, "服务器错误,请联系系统管理员!");
}
return ResultObject.success();
}
public ResultObject<Void> saveDraft(SaveNewsDTO saveNewsDTO) {
Long id = saveNewsDTO.getId();
if (id == null) {
return saveNewDraft(saveNewsDTO, null);
}
return updateDraft(saveNewsDTO);
}
private ResultObject<Void> updateDraft(SaveNewsDTO saveNewsDTO) {
Long id = saveNewsDTO.getId();
News news = newsMapper.getById(id);
Long draftId = news.getDraftId();
if (draftId != null) {
deleteDraft(draftId);
}
return saveNewDraft(saveNewsDTO, news);
}
private void deleteNews(News news) {
Long newsId = news.getId();
Long draftId = news.getDraftId();
if (draftId != null) {
deleteDraft(draftId);
}
deleteNewsColumnAndTag(newsId);
newsMapper.deleteNews(newsId);
}
private void deleteNewsColumnAndTag(Long newsId) {
columnMapper.deleteNews(newsId);
tagMapper.deleteNews(newsId);
}
private void deleteDraft(Long draftId) {
@ -75,8 +151,8 @@ public class NewsService {
tagMapper.deleteDraft(draftId);
}
private ResultObject<Void> saveNewDraft(SaveDraftDTO saveDraftDTO, News news) {
NewsDraft newsDraft = new NewsDraft(saveDraftDTO);
private ResultObject<Void> saveNewDraft(SaveNewsDTO saveNewsDTO, News news) {
NewsDraft newsDraft = new NewsDraft(saveNewsDTO);
try {
newsMapper.saveDraft(newsDraft);
} catch (Exception e) {
@ -86,7 +162,7 @@ public class NewsService {
Long draftId = newsMapper.getLastInsertId();
if (news == null) {
news = new News(saveDraftDTO);
news = new News(saveNewsDTO);
news.setDraftId(draftId);
try {
newsMapper.saveNews(news);
@ -97,7 +173,7 @@ public class NewsService {
} else {
Integer status = news.getStatus();
if (status < 2) {
news = new News(saveDraftDTO);
news = new News(saveNewsDTO);
news.setStatus(status);
news.setDraftId(draftId);
try {
@ -118,7 +194,7 @@ public class NewsService {
}
try {
SaveDraftTag saveDraftTag = saveDraftDTO.getTag();
SaveDraftTag saveDraftTag = saveNewsDTO.getTag();
if (saveDraftTag != null) {
Long source = saveDraftTag.getSource();
if (source != null) {
@ -135,7 +211,7 @@ public class NewsService {
}
try {
SaveDraftColumn column = saveDraftDTO.getColumn();
SaveDraftColumn column = saveNewsDTO.getColumn();
if (column != null) {
SaveDraftColumnVip vip = column.getVip();
if (vip != null) {