1.自媒体文章审核模块(自动)

  • 所用技术亮点: 阿里云内容安全检测(文本和图片),敏感词DFA算法
  • 实现思路:

    1. 1. 参数校验,主要校验文章状态,若文章不是待审核状态则无法审核
    2. 1. 抽取出文章中所有的文本内容和图片内容
    3. 1. Map<String,Object> key: content 文本内容 , value: String 文本内容 key: images 图片集合, List<String> 图片url集合
    4. 1. 取到标题字段的文本为content
    5. 1. 将前台传过来的内容的json数组转换为map,遍历map找到type = text遍历所有内容 拼接到content字符串上
    6. 1. 由于直接拼接,会造成一种现象,第一句话的最后一个字和第二句话的第一个字拼接后形成敏感词,导致内容审核不通过,所以做了添加一段随机字符串的处理

    .forEach((_text) -> content.append(“_hmtt“ + text));

    1. 4. 图片集合 content中包含的所有图片 封面中包含的所有图片 放到同一个集合 最后去重 (内容图片和封面图片拼接后可能有重复图片)
    2. 3. DFA敏感词审核
    3. 1. 从管理者微服务中调用查询敏感词的方法
    4. 1. DFA工具类 初始化DFA数据模型<br />SensitiveWordUtil.initMap(sensitives);
    5. 1. 使用DFA算法进行敏感词审核<br />Map<String, Integer> matchWords = SensitiveWordUtil.matchWords(content);
    6. 1. 修改审核状态
    7. 4. 阿里云文本内容审核
    8. 1. 内容审核会返回一个map集合,其中有一个字段"suggestion",有三种取值分别为:pass(通过),review(需要再审核,即人工审核),block(有敏感词,审核失败)
    9. 1. 根据审核结果,设置不同的文章状态 : 失败,成功,需要人工审核
    10. 1. 若因为网络问题,调用阿里云接口失败,同样转为人工审核
    11. 5. 阿里云图片内容审核
    12. 1. 整体思路与内容审核相同
    13. 6. 若通过了敏感词审核,阿里云的内容审核和图片审核,则说明文章没有问题,就可以设置文章状态为审核成功
    14. 6. 延时发布(详见第六天内容总结)
  • 相关表: wm_news(文章信息表) ad_sensitive(自管理敏感词表)

    2.集成RabbitMQ实现自动审核

  • 所有技术: RabbitMQ

  • 实现思路:

    1. 1. 首先要使用mq,就要确定好生产者和消费者,在自动审核业务中,生产者一定是提交自动审核的方法即(submitNews),那么消费者就是执行自动审核的方法即(autoScanWmNews)
    2. 1. 生产者发消息,消息内容为文章的id,消费者可以通过该id去执行各种审核操作

    3.admin端-人工审核文章

    3.1 查询文章列表

  • 实现思路: 查询文章列表时候,不仅仅要返回文章数据,也要返回作者名称,这个时候返回的数据,需要包含作者名称 由于在admin端,所以需要用feign进行远程调用

    1. 1. 需要使用wm_news表与wm_user表做关联查询
    2. 1. 在返回的结果的时候,单独再封装一个类,用于包装用户名称和文章数据 WmNewsVo
    3. vo:view object 视图对象 是一个表现层对象,主要对应页面显示(web页面)的数据对象<br /> 3. 由于需要做关联查询,mybatis-plus暂时不支持关联查询,需要自定义mapper实现<br /> 4. 查询全部时,要排除草稿状态文章

    3.2 查询文章详情

  • 实现思路: 远程调用自媒体微服务,查询文章详情列表,没啥特殊的.

    3.3 修改文章状态

  • 实现思路: 远程调用自媒体微服务,修改文章状态,没啥特殊的.