在这里插入图片描述
根据文章类型查询,实现上一篇、下一篇的效果

  1. 自定义实体Dto(这里只放出扩展字段)
@Getter
@Setter
public class OsArticleDto extends BaseDto {
	/**  */
	private static final long serialVersionUID = 1L;
	/*
	 * 上一篇文章id
	 */
	private String beforeId;
	/**
	 * 上一篇文章标题
	 */
	private String beforeTitle;
	/**
	 * 下一篇文章id
	 */
	private String afterId;
	/**
	 * 下一篇文章标题
	 */
	private String afterTitle;

}
  1. service层实现
public OsArticleDto getAfter(String id) {
		OsArticleDto articleOld = getById(id);
		OsArticle articleNew = new OsArticle();
		// 设置查询条件
		articleNew.setType(articleOld.getType());
		articleNew.setStatus(articleOld.getStatus());
		// 根据当前文章类型查询相关文章
		List<OsArticleDto> list = osArticleMapper.getPageList(articleNew);
		// list长度减一(索引值从0开始)
		int count = list.size() - 1;
		list.forEach(a -> {
			if (a.getId().equals(articleOld.getId())) {
				// 当前文章所在索引位置
				int index = list.indexOf(a);
				// 索引为0时且list长度大于0,直接获取索引下一个值
				if (index == 0 && count > 0) {
					articleOld.setAfterId(list.get(1).getId());
					articleOld.setAfterTitle(list.get(1).getArticleTitle());
					// 索引为最后一个且list长度大于0,,赋值上一篇文章
				} else if (index == count && count > 0) {
					articleOld.setBeforeId(list.get(index - 1).getId());
					articleOld.setBeforeTitle(list.get(index - 1).getArticleTitle());
				} else {
					// 索引为中间值时,分别给上下文章赋值
					articleOld.setBeforeId(list.get(index - 1).getId());
					articleOld.setBeforeTitle(list.get(index - 1).getArticleTitle());
					articleOld.setAfterId(list.get(index + 1).getId());
					articleOld.setAfterTitle(list.get(index + 1).getArticleTitle());
				}
			}
		});
		return articleOld;
	}
  1. Controller层,此方法为根据id查询详情时向前台提供的接口。
@GetMapping(value = "/getById", produces = "application/json;charset=UTF-8")
	public BaseResult<?> getById(@RequestParam("id") String id) {
		try {
			OsArticleDto dto = oArticleService.getAfter(id);
			return getBaseResultSuccess(dto, "获取信息成功");
		} catch (BusinessException e) {
			return getBaseResultFail(null, e.getCode(), e.getMessage());
		} catch (Exception e) {
			log.error("获取信息失败" + e + "######################");
			return getBaseResultFail(null, ErrorCode.HANDLER_EXCEPTION, "系统繁忙,请稍后再试");
		}
	}

  1. 代码有待优化,希望各位多提意见,谢谢。
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐