增加PC端文章详情接口

This commit is contained in:
TinyAnts 2023-01-09 18:11:28 +08:00
parent d6bd188203
commit f48116e8d1
5 changed files with 174 additions and 10 deletions

View File

@ -30,6 +30,7 @@ public class FrontConfig {
"/api/article/list",
"/api/pc/getConfig",
"/api/pc/index",
"/api/pc/articleDetail",
"/api/login/getScanCode",
"/api/login/scanLogin",

View File

@ -1,9 +1,14 @@
package com.mdd.front.controller;
import com.mdd.common.core.AjaxResult;
import com.mdd.common.validator.annotation.IDMust;
import com.mdd.front.LikeFrontThreadLocal;
import com.mdd.front.service.IPcService;
import com.mdd.front.vo.PcArticleDetailVo;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@ -19,9 +24,14 @@ public class PcController {
@Resource
IPcService iPcService;
/**
* 主页
*
* @author cjh
* @return AjaxResult<Map<String, Object>>
*/
@GetMapping("/index")
public AjaxResult<Map<String,Object>> index()
{
public AjaxResult<Map<String,Object>> index() {
Map<String, Object> index = iPcService.index();
return AjaxResult.success(index);
}
@ -37,4 +47,18 @@ public class PcController {
return AjaxResult.success(config);
}
/**
* 文章详情
*
* @author fzr
* @param id 文章主键
* @return AjaxResult<PcArticleDetailVo>
*/
@GetMapping("/articleDetail")
public AjaxResult<PcArticleDetailVo> articleDetail(@Validated @IDMust() @RequestParam("id") Integer id) {
Integer userId = LikeFrontThreadLocal.getUserId();
PcArticleDetailVo vo = iPcService.articleDetail(id, userId);
return AjaxResult.success(vo);
}
}

View File

@ -1,5 +1,7 @@
package com.mdd.front.service;
import com.mdd.front.vo.PcArticleDetailVo;
import java.util.Map;
public interface IPcService {
@ -17,4 +19,14 @@ public interface IPcService {
* @return Map<String, Object>
*/
Map<String, Object> getConfig();
/**
* 文章详情
*
* @author fzr
* @param id 文章主键
* @return Object
*/
PcArticleDetailVo articleDetail(Integer id, Integer userId);
}

View File

@ -4,20 +4,21 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mdd.common.config.GlobalConfig;
import com.mdd.common.entity.DecoratePage;
import com.mdd.common.entity.article.Article;
import com.mdd.common.entity.article.ArticleCategory;
import com.mdd.common.entity.article.ArticleCollect;
import com.mdd.common.exception.OperateException;
import com.mdd.common.mapper.DecoratePageMapper;
import com.mdd.common.mapper.article.ArticleCategoryMapper;
import com.mdd.common.mapper.article.ArticleCollectMapper;
import com.mdd.common.mapper.article.ArticleMapper;
import com.mdd.common.util.ArrayUtils;
import com.mdd.common.util.ConfigUtils;
import com.mdd.common.util.TimeUtils;
import com.mdd.common.util.UrlUtils;
import com.mdd.common.util.*;
import com.mdd.front.service.IPcService;
import com.mdd.front.vo.PcArticleDetailVo;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.*;
@Service
public class PcServiceImpI implements IPcService {
@ -25,9 +26,20 @@ public class PcServiceImpI implements IPcService {
@Resource
DecoratePageMapper decoratePageMapper;
@Resource
ArticleCategoryMapper articleCategoryMapper;
@Resource
ArticleCollectMapper articleCollectMapper;
@Resource
ArticleMapper articleMapper;
/**
* 配置
* @author cjh
* @return Map<String, Object>
*/
@Override
public Map<String, Object> index() {
Map<String,Object> indexData = new LinkedHashMap<>();
@ -106,6 +118,11 @@ public class PcServiceImpI implements IPcService {
return indexData;
}
/**
* 配置
* @author cjh
* @return Map<String, Object>
*/
@Override
public Map<String, Object> getConfig() {
Map<String, Object> config = new LinkedHashMap<>();
@ -146,4 +163,84 @@ public class PcServiceImpI implements IPcService {
config.put("qrcode",qrCodeMap);
return config;
}
/**
* 文章详情
*
* @author fzr
* @param id 文章主键
* @param userId 用户ID
* @return PcArticleDetailVo
*/
@Override
public PcArticleDetailVo articleDetail(Integer id, Integer userId) {
// 文章详情
Article article = articleMapper.selectOne(new QueryWrapper<Article>()
.select(Article.class, info->
!info.getColumn().equals("is_show") &&
!info.getColumn().equals("is_delete") &&
!info.getColumn().equals("delete_time"))
.eq("id", id)
.eq("is_delete", 0)
.last("limit 1"));
if (StringUtils.isNull(article)) {
throw new OperateException("文章数据不存在!");
}
// 分类名称
ArticleCategory articleCategory = articleCategoryMapper.selectOne(
new QueryWrapper<ArticleCategory>()
.eq("id", article.getId())
.eq("is_delete", 0));
// 上一条记录
Article prev = articleMapper.selectOne(new QueryWrapper<Article>()
.select()
.lt("id", id)
.eq("is_delete", 0)
.orderByDesc(Arrays.asList("sort", "id"))
.last("limit 1"));
// 下一条记录
Article next = articleMapper.selectOne(new QueryWrapper<Article>()
.select("id,title")
.gt("id", id)
.eq("is_delete", 0)
.orderByDesc(Arrays.asList("sort", "id"))
.last("limit 1"));
// 是否收藏
ArticleCollect collect = articleCollectMapper.selectOne(new QueryWrapper<ArticleCollect>()
.eq("article_id", article.getId())
.eq("user_id", userId)
.eq("is_delete", 0)
.last("limit 1"));
// 处理数据
PcArticleDetailVo vo = new PcArticleDetailVo();
BeanUtils.copyProperties(article, vo);
vo.setCreateTime(TimeUtils.timestampToDate(vo.getCreateTime()));
vo.setUpdateTime(TimeUtils.timestampToDate(vo.getUpdateTime()));
vo.setCategory(StringUtils.isNotNull(articleCategory) ? articleCategory.getName() : "");
vo.setIsCollect(StringUtils.isNotNull(collect) ? 1 : 0);
vo.setPrev(null);
vo.setNext(null);
if (StringUtils.isNotNull(prev)) {
Map<String, Object> prevMap = new LinkedHashMap<>();
prevMap.put("id", prev.getId());
prevMap.put("title", prev.getTitle());
vo.setPrev(prevMap);
}
if (StringUtils.isNotNull(next)) {
Map<String, Object> nextMap = new LinkedHashMap<>();
nextMap.put("id", next.getId());
nextMap.put("title", next.getTitle());
vo.setNext(nextMap);
}
return vo;
}
}

View File

@ -0,0 +1,30 @@
package com.mdd.front.vo;
import lombok.Data;
import java.io.Serializable;
/**
* PC端文章详情
*/
@Data
public class PcArticleDetailVo implements Serializable {
private Integer id;
private Integer cid;
private String category;
private String intro;
private String summary;
private String image;
private String content;
private String author;
private Integer visit;
private Integer sort;
private Integer isCollect;
private String createTime;
private String updateTime;
private Object prev;
private Object next;
}