diff --git a/admin/src/main/java/com/jinrui/reference/admin/controller/NewsController.java b/admin/src/main/java/com/jinrui/reference/admin/controller/NewsController.java index 9300568..0051f5e 100644 --- a/admin/src/main/java/com/jinrui/reference/admin/controller/NewsController.java +++ b/admin/src/main/java/com/jinrui/reference/admin/controller/NewsController.java @@ -1,6 +1,7 @@ package com.jinrui.reference.admin.controller; import com.fasterxml.jackson.databind.ObjectMapper; +import com.jinrui.reference.admin.model.dto.news.PublishNewsDTO; 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; @@ -36,6 +37,39 @@ public class NewsController { this.objectMapper = objectMapper; } + @PostMapping("/publish") + public ResultObject publish(@RequestHeader("auth-token") String token, + @RequestBody PublishNewsDTO publishNewsDTO) { + 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("当前用户已被封禁!请联系系统管理员!"); + } + + Long id = publishNewsDTO.getId(); + if (id == null) { + return ResultObject.failed("要发布/下架的新闻ID不可为空!"); + } + + log.info("path: /news/publish, method: POST, request user id: {}, news id: {}", adminUserId, id); + return newsService.publish(id, adminUserId); + } catch (Exception e) { + log.error("解析登陆Token出错!", e); + return ResultObject.failed(500, "服务端错误,请联系系统管理员!"); + } + } + @GetMapping("/detail") public ResultObject detail(@RequestHeader("auth-token") String token, @RequestParam("id") Long id) { diff --git a/admin/src/main/java/com/jinrui/reference/admin/model/dto/news/PublishNewsDTO.java b/admin/src/main/java/com/jinrui/reference/admin/model/dto/news/PublishNewsDTO.java new file mode 100644 index 0000000..0d0a63d --- /dev/null +++ b/admin/src/main/java/com/jinrui/reference/admin/model/dto/news/PublishNewsDTO.java @@ -0,0 +1,15 @@ +package com.jinrui.reference.admin.model.dto.news; + +@SuppressWarnings("unused") +public class PublishNewsDTO { + + private Long id; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } +} diff --git a/core/src/main/java/com/jinrui/reference/core/mapper/NewsMapper.java b/core/src/main/java/com/jinrui/reference/core/mapper/NewsMapper.java index b709a8b..3ffd3d6 100644 --- a/core/src/main/java/com/jinrui/reference/core/mapper/NewsMapper.java +++ b/core/src/main/java/com/jinrui/reference/core/mapper/NewsMapper.java @@ -30,6 +30,12 @@ public interface NewsMapper { "from news where id = #{id}") News getNewsDetail(@Param("id") Long id); + @Update("update news set status = 1 where id = #{id}") + void simpleUnpublish(@Param("id") long id); + + @Update("update news set status = 2, publish_time = now(), editor_id = #{editorId} where id = #{id}") + void simplePublish(@Param("id") long id, @Param("editorId") long editorId); + @Update("update news " + "set draft_id = #{draftId}," + "editor_id = #{editorId}," + diff --git a/core/src/main/java/com/jinrui/reference/core/model/dto/news/SaveDraftColumn.java b/core/src/main/java/com/jinrui/reference/core/model/dto/news/SaveDraftColumn.java index 120ace2..bcd239a 100644 --- a/core/src/main/java/com/jinrui/reference/core/model/dto/news/SaveDraftColumn.java +++ b/core/src/main/java/com/jinrui/reference/core/model/dto/news/SaveDraftColumn.java @@ -1,5 +1,8 @@ package com.jinrui.reference.core.model.dto.news; +import com.jinrui.reference.core.model.vo.news.NewsDetailColumn; +import com.jinrui.reference.core.model.vo.news.NewsDetailColumnVip; + @SuppressWarnings("unused") public class SaveDraftColumn { @@ -9,6 +12,17 @@ public class SaveDraftColumn { private Boolean showEverything; + public SaveDraftColumn() {} + + public SaveDraftColumn(NewsDetailColumn newsDetailColumn) { + NewsDetailColumnVip newsDetailColumnVip = newsDetailColumn.getVip(); + if (newsDetailColumnVip != null) { + this.vip = new SaveDraftColumnVip(newsDetailColumnVip); + } + this.earlyKnow = newsDetailColumn.getEarlyKnow(); + this.showEverything = newsDetailColumn.isShowEverything(); + } + public SaveDraftColumnVip getVip() { return vip; } diff --git a/core/src/main/java/com/jinrui/reference/core/model/dto/news/SaveDraftColumnVip.java b/core/src/main/java/com/jinrui/reference/core/model/dto/news/SaveDraftColumnVip.java index 32d6612..b06c455 100644 --- a/core/src/main/java/com/jinrui/reference/core/model/dto/news/SaveDraftColumnVip.java +++ b/core/src/main/java/com/jinrui/reference/core/model/dto/news/SaveDraftColumnVip.java @@ -1,11 +1,21 @@ package com.jinrui.reference.core.model.dto.news; +import com.jinrui.reference.core.model.vo.news.NewsDetailColumnVip; + +@SuppressWarnings("unused") public class SaveDraftColumnVip { private Long id; private Integer type; + public SaveDraftColumnVip() {} + + public SaveDraftColumnVip(NewsDetailColumnVip newsDetailColumnVip) { + this.id = newsDetailColumnVip.getId(); + this.type = newsDetailColumnVip.getType(); + } + public Long getId() { return id; } diff --git a/core/src/main/java/com/jinrui/reference/core/model/dto/news/SaveDraftTag.java b/core/src/main/java/com/jinrui/reference/core/model/dto/news/SaveDraftTag.java index 7db82d1..bd65620 100644 --- a/core/src/main/java/com/jinrui/reference/core/model/dto/news/SaveDraftTag.java +++ b/core/src/main/java/com/jinrui/reference/core/model/dto/news/SaveDraftTag.java @@ -1,5 +1,8 @@ package com.jinrui.reference.core.model.dto.news; +import com.jinrui.reference.core.model.vo.news.NewsDetailTag; +import com.jinrui.reference.core.model.vo.news.NewsDetailTagItem; + @SuppressWarnings("unused") public class SaveDraftTag { @@ -7,6 +10,19 @@ public class SaveDraftTag { private Long field; + public SaveDraftTag() {} + + public SaveDraftTag(NewsDetailTag newsDetailTag) { + NewsDetailTagItem sourceItem = newsDetailTag.getSource(); + if (sourceItem != null) { + this.source = sourceItem.getId(); + } + NewsDetailTagItem fieldItem = newsDetailTag.getField(); + if (fieldItem != null) { + this.field = fieldItem.getId(); + } + } + public Long getSource() { return source; } 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 b4d14af..253c502 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,5 +1,7 @@ package com.jinrui.reference.core.model.dto.news; +import com.jinrui.reference.core.model.vo.news.NewsDetailVO; + @SuppressWarnings("unused") public class SaveNewsDTO { @@ -17,6 +19,18 @@ public class SaveNewsDTO { private String content; + public SaveNewsDTO() {} + + public SaveNewsDTO(NewsDetailVO newsDetailVO) { + this.id = newsDetailVO.getId(); + this.title = newsDetailVO.getTitle(); + this.summary = newsDetailVO.getSummary(); + this.picture = newsDetailVO.getPicture(); + this.tag = new SaveDraftTag(newsDetailVO.getTag()); + this.column = new SaveDraftColumn(newsDetailVO.getColumn()); + this.content = newsDetailVO.getContent(); + } + public Long getId() { return id; } 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 60b7109..448271b 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 @@ -61,6 +61,34 @@ public class NewsService { this.tagMapper = tagMapper; } + public ResultObject publish(long id, long editorId) { + News news = newsMapper.getById(id); + if (news == null) { + log.warn("找不到ID为{}的新闻!", id); + return ResultObject.failed("找不到ID为" + id + "的新闻!"); + } + Integer status = news.getStatus(); + if (status == 2) { + newsMapper.simpleUnpublish(id); + return ResultObject.success(); + } + + Long draftId = news.getDraftId(); + if (draftId == null) { + newsMapper.simplePublish(id, editorId); + return ResultObject.success(); + } + + ResultObject resultObject = detail(id); + int code = resultObject.getCode(); + NewsDetailVO newsDetailVO = resultObject.getData(); + if (code > 200) { + return ResultObject.failed(resultObject.getCode(), resultObject.getMsg()); + } + SaveNewsDTO saveNewsDTO = new SaveNewsDTO(newsDetailVO); + return createPublish(editorId, saveNewsDTO); + } + public ResultObject detail(Long id) { News news = newsMapper.getById(id); if (news == null) {