自媒体文章上下架
需求分析:
已发表且已下架的文章可以上架
已发表且已上架的文章可以下架
自媒体端点击上架下架按钮:
上架下架——>根据id查询文章——>文章是否存在:否结束,是——文章是否发布——>否结束,是——修改自媒体文章状态enable
app移动端:自媒体端发送请求到kafka,参数文章的articleId和enable,让article端监听消息,修改article端的config的is_down[是否下架]。
一、自媒体端
/** * 文章的上下架 * * @param dto * @return */ @Override public ResponseResult dowmOrUp(WmNewsDto dto) { //1、检查参数 if(dto.getId() == null){ return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID); } //2、查询文章 WmNews wmNews = getById(dto.getId()); if(wmNews == null){ return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST, "文章不存在"); } //3、判断文章是否已发布 if(!wmNews.getStatus().equals(WmNews.Status.PUBLISHED.getCode())){ return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST, "当前文章不是发布状态,不能上下架"); } //4、修改文章enable:0、1 if(dto.getEnable() != null && dto.getEnable() > -1 && dto.getEnable() < 2){ update(Wrappers.<WmNews>lambdaUpdate().set(WmNews::getEnable, dto.getEnable()) .eq(WmNews::getId, wmNews.getId())); } return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS); }
二、消息传递article通知article文章上下架【即移动端用户是否可见】
自媒体微服务作为生产者producer发送消息,文章微服务作为消费者consumer拉取处理消息
自媒体端修改文章enable后发送消息:
if(wmNews.getArticleId() != null){ //发送消息通知article修改文章配置 Map<String, Object> map = new HashMap<>(); map.put("articleId", wmNews.getArticleId()); map.put("enable", dto.getEnable()); kafkaTemplate.send(WmNewsMessageConstants.WM_NEWS_UP_OR_DOWN_TOPIC, JSON.toJSONString(map)); }
文章微服务监听topic处理消息:
package com.heima.article.listener; import com.alibaba.fastjson.JSON; import com.heima.article.mapper.ApArticleMapper; import com.heima.article.service.ApArticleConfigService; import com.heima.common.constants.WmNewsMessageConstants; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.stereotype.Component; import java.util.Map; @Component @Slf4j public class ArtilceIsDownListener { @Autowired private ApArticleConfigService apArticleConfigService; @KafkaListener(topics = WmNewsMessageConstants.WM_NEWS_UP_OR_DOWN_TOPIC) public void onMessage(String message){ if(StringUtils.isNotBlank(message)){ Map map = JSON.parseObject(message, Map.class); apArticleConfigService.updateByMap(map); } } }
package com.heima.article.service.impl; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.heima.article.mapper.ApArticleConfigMapper; import com.heima.article.service.ApArticleConfigService; import com.heima.model.article.pojos.ApArticleConfig; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Map; @Service @Slf4j @Transactional public class ApArticleConfigServiceImpl extends ServiceImpl<ApArticleConfigMapper, ApArticleConfig> implements ApArticleConfigService { /** * 修改文章【上下架】 * map中的down的0/1表示与articleconfig的0/1含义相反 * @param map */ @Override public void updateByMap(Map map) { //0下架 1上架 Object enable = map.get("enable"); boolean isDown = true; if(enable.equals(1)){ isDown = false; } update(Wrappers.<ApArticleConfig>lambdaUpdate().eq(ApArticleConfig::getArticleId, map.get("articleId")) .set(ApArticleConfig::getIsDown, isDown)); } }