1.文章自动审核流程(业务说明,具体实现)

    涉及表:wm_news表、wm_sensitive表

    业务流程:
    1.当自媒体用户提交发布文章之后,会通过RabbitMQ发送自动审核消息
    2.自媒体微服务会监听自动审核消息,当收到消息时,开始自动审核文章
    3.判断文章是否是待审核状态(status=1)
    4.文章不是待审核状态,结束审核
    5.对文章文本和图片进行审核
    6.通过自设的敏感词对文章内容进行审核,审核不通过 修改文章状态为不通过(status=2)
    7.调用阿里云的文本审核服务,进行文本审核,审核不通过,文章状态设为2(审核失败);审核不确定,文章状态设为3(人工审核)
    8.调用阿里云的图片审核服务,进行图片审核,审核不通过,文章状态设为2(审核失败);审核不确定,文章状态设为3(人工审核)
    9.如果审核通过,判断发布时间,是否小于等于当前时间。如果小于等于,直接发消息通知,文章微服务,发布文章
    10.如果未到发布时间,将消息发送到RabbitMQ的死信队列,并设置消息失效时间。

    实现流程:
    1.当自媒体用户提交发布文章之后,会通过RabbitMQ发送自动审核消息
    2.自媒体微服务会监听自动审核消息,当收到消息时,开始自动审核文章
    3.判断文章是否是待审核状态(status=1)
    4.文章不是待审核状态,结束审核
    5.对文章文本和图片进行审核
    6.抽取出文章中 所有的文本内容 和 所有的图片url集合 Map content 内容 images List
    步骤:
    (1)检查文章内容是否为空

    (2)抽取文章所有文本
    String content = contentMaps.stream() .filter(map -> “text”.equals(map.get(“type”))) //过滤type = text .map(text -> (String) text.get(“value”)) //获取文本 .collect(Collectors.joining(“html“)); //以html拼接文本 content = content + “html“ + wmNews.getTitle();

    (3)抽取文章内容中的所有图片
    List images = contentMaps.stream() .filter(map -> “image”.equals(map.get(“type”))) //过滤type = image .map(image -> (String) image.get(“value”)) //获取文章内容引用的图片url .collect(Collectors.toList());//收集成list集合

    4)抽取文章封面的所有图片 if (StringUtils.isNotBlank(wmNews.getImages())) { List coverImageUrls = Arrays.stream(wmNews.getImages().split(“,”)) //以逗号切割 .map(url -> webSite + url) //添加url前缀 .collect(Collectors.toList());//收集成list集合 images.addAll(coverImageUrls);

    1. 5)去重 images = images.stream().distinct().collect(Collectors.toList());


    7.通过自设的敏感词对文章内容进行审核,审核不通过 修改文章状态为不通过(status=2)
    步骤:
    (1)查询数据库所有的敏感词
    (2)判断远程调用是否成功
    (3)将查询到的敏感词转换为DFA数据模型
    (4)使用DFA工具,检查敏感词
    (5)核失败,将文章状态修改为 2

    1. 调用阿里云的文本审核服务,进行文本审核,审核不通过,文章状态设为2(审核失败);
      审核不确定,文章状态设为3(人工审核)
      步骤:
      (1)调用阿里云文本审核,将待审核的文本传入进出
      (2)获取审核结果 pass:审核通过 block:审核不通过 review:不确定

    9.调用阿里云的图片审核服务,进行图片审核,审核不通过,文章状态设为2(审核失败);
    审核不确定,文章状态设为3(人工审核)
    步骤:
    (1)调用阿里云图片审核,将待审核的图片传入进出
    (2)获取审核结果 pass:审核通过 block:审核不通过 review:不确定

    10.如果审核通过,判断发布时间,是否小于等于当前时间。如果小于等于,直接发消息通知,文章微服务,发布文章

    11.如果未到发布时间,将消息发送到RabbitMQ的死信队列,并设置消息失效时间。