自媒体文章上下架

发布时间 2023-07-06 22:03:10作者: 佛系粥米

需求分析:

  已发表且已下架的文章可以上架

  已发表且已上架的文章可以下架

自媒体端点击上架下架按钮:

  上架下架——>根据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));


    }
}