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

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

View File

@ -17,6 +17,9 @@ import java.util.Set;
public interface ColumnMapper { 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}") @Delete("delete from draft_column_rel where draft_id = #{draftId}")
void deleteDraft(@Param("draftId") Long 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); 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({ @Results({
@Result(column = "id", property = "id", id = true), @Result(column = "id", property = "id", id = true),
@Result(column = "parent_id", property = "parentId"), @Result(column = "parent_id", property = "parentId"),

View File

@ -12,6 +12,9 @@ import java.util.List;
public interface NewsMapper { public interface NewsMapper {
@Delete("delete from news where id = #{newsId}")
void deleteNews(@Param("newsId") Long newsId);
@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);
@ -27,6 +30,19 @@ public interface NewsMapper {
"where id = #{id}") "where id = #{id}")
void updateNews(News news); 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}") @Select("select id, draft_id as draftId, status from news where id = #{id}")
News getById(@Param("id") Long id); News getById(@Param("id") Long id);

View File

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

View File

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

View File

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

View File

@ -1,6 +1,6 @@
package com.jinrui.reference.core.model.entity; 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; import java.util.Date;
@ -52,13 +52,13 @@ public class NewsDraft {
public NewsDraft() {} public NewsDraft() {}
public NewsDraft(SaveDraftDTO saveDraftDTO) { public NewsDraft(SaveNewsDTO saveNewsDTO) {
this.id = saveDraftDTO.getId(); this.id = saveNewsDTO.getId();
this.title = saveDraftDTO.getTitle(); this.title = saveNewsDTO.getTitle();
this.summary = saveDraftDTO.getSummary(); this.summary = saveNewsDTO.getSummary();
this.picture = saveDraftDTO.getPicture(); this.picture = saveNewsDTO.getPicture();
this.type = 1; this.type = 1;
this.content = saveDraftDTO.getContent(); this.content = saveNewsDTO.getContent();
this.createTime = new Date(); this.createTime = new Date();
this.updateTime = 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.SaveDraftColumn;
import com.jinrui.reference.core.model.dto.news.SaveDraftColumnItem; 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.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.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;
@ -51,22 +51,98 @@ public class NewsService {
this.tagMapper = tagMapper; this.tagMapper = tagMapper;
} }
public ResultObject<Void> saveDraft(SaveDraftDTO saveDraftDTO) { public ResultObject<Void> createPublish(Long editorId, SaveNewsDTO saveNewsDTO) {
Long id = saveDraftDTO.getId(); Long id = saveNewsDTO.getId();
if (id == null) { Long newsId = saveNewsDTO.getId();
return saveNewDraft(saveDraftDTO, null);
}
return updateDraft(saveDraftDTO);
}
private ResultObject<Void> updateDraft(SaveDraftDTO saveDraftDTO) {
Long id = saveDraftDTO.getId();
News news = newsMapper.getById(id); News news = newsMapper.getById(id);
Long draftId = news.getDraftId(); Long draftId = news.getDraftId();
if (draftId != null) { if (draftId != null) {
deleteDraft(draftId); 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) { private void deleteDraft(Long draftId) {
@ -75,8 +151,8 @@ public class NewsService {
tagMapper.deleteDraft(draftId); tagMapper.deleteDraft(draftId);
} }
private ResultObject<Void> saveNewDraft(SaveDraftDTO saveDraftDTO, News news) { private ResultObject<Void> saveNewDraft(SaveNewsDTO saveNewsDTO, News news) {
NewsDraft newsDraft = new NewsDraft(saveDraftDTO); NewsDraft newsDraft = new NewsDraft(saveNewsDTO);
try { try {
newsMapper.saveDraft(newsDraft); newsMapper.saveDraft(newsDraft);
} catch (Exception e) { } catch (Exception e) {
@ -86,7 +162,7 @@ public class NewsService {
Long draftId = newsMapper.getLastInsertId(); Long draftId = newsMapper.getLastInsertId();
if (news == null) { if (news == null) {
news = new News(saveDraftDTO); news = new News(saveNewsDTO);
news.setDraftId(draftId); news.setDraftId(draftId);
try { try {
newsMapper.saveNews(news); newsMapper.saveNews(news);
@ -97,7 +173,7 @@ public class NewsService {
} else { } else {
Integer status = news.getStatus(); Integer status = news.getStatus();
if (status < 2) { if (status < 2) {
news = new News(saveDraftDTO); news = new News(saveNewsDTO);
news.setStatus(status); news.setStatus(status);
news.setDraftId(draftId); news.setDraftId(draftId);
try { try {
@ -118,7 +194,7 @@ public class NewsService {
} }
try { try {
SaveDraftTag saveDraftTag = saveDraftDTO.getTag(); SaveDraftTag saveDraftTag = saveNewsDTO.getTag();
if (saveDraftTag != null) { if (saveDraftTag != null) {
Long source = saveDraftTag.getSource(); Long source = saveDraftTag.getSource();
if (source != null) { if (source != null) {
@ -135,7 +211,7 @@ public class NewsService {
} }
try { try {
SaveDraftColumn column = saveDraftDTO.getColumn(); SaveDraftColumn column = saveNewsDTO.getColumn();
if (column != null) { if (column != null) {
SaveDraftColumnVip vip = column.getVip(); SaveDraftColumnVip vip = column.getVip();
if (vip != null) { if (vip != null) {