1.自媒体文章审核模块(自动)
- 所用技术亮点: 阿里云内容安全检测(文本和图片),敏感词DFA算法
实现思路:
1. 参数校验,主要校验文章状态,若文章不是待审核状态则无法审核
1. 抽取出文章中所有的文本内容和图片内容
1. Map<String,Object> key: content 文本内容 , value: String 文本内容 key: images 图片集合, List<String> 图片url集合
1. 取到标题字段的文本为content
1. 将前台传过来的内容的json数组转换为map,遍历map找到type = text遍历所有内容 拼接到content字符串上
1. 由于直接拼接,会造成一种现象,第一句话的最后一个字和第二句话的第一个字拼接后形成敏感词,导致内容审核不通过,所以做了添加一段随机字符串的处理
.forEach((_text) -> content.append(“_hmtt“ + text));
4. 图片集合 content中包含的所有图片 封面中包含的所有图片 放到同一个集合 最后去重 (内容图片和封面图片拼接后可能有重复图片)
3. DFA敏感词审核
1. 从管理者微服务中调用查询敏感词的方法
1. DFA工具类 初始化DFA数据模型<br />SensitiveWordUtil.initMap(sensitives);
1. 使用DFA算法进行敏感词审核<br />Map<String, Integer> matchWords = SensitiveWordUtil.matchWords(content);
1. 修改审核状态
4. 阿里云文本内容审核
1. 内容审核会返回一个map集合,其中有一个字段"suggestion",有三种取值分别为:pass(通过),review(需要再审核,即人工审核),block(有敏感词,审核失败)
1. 根据审核结果,设置不同的文章状态 : 失败,成功,需要人工审核
1. 若因为网络问题,调用阿里云接口失败,同样转为人工审核
5. 阿里云图片内容审核
1. 整体思路与内容审核相同
6. 若通过了敏感词审核,阿里云的内容审核和图片审核,则说明文章没有问题,就可以设置文章状态为审核成功
6. 延时发布(详见第六天内容总结)
相关表: wm_news(文章信息表) ad_sensitive(自管理敏感词表)
2.集成RabbitMQ实现自动审核
所有技术: RabbitMQ
实现思路:
1. 首先要使用mq,就要确定好生产者和消费者,在自动审核业务中,生产者一定是提交自动审核的方法即(submitNews),那么消费者就是执行自动审核的方法即(autoScanWmNews)
1. 生产者发消息,消息内容为文章的id,消费者可以通过该id去执行各种审核操作
3.admin端-人工审核文章
3.1 查询文章列表
实现思路: 查询文章列表时候,不仅仅要返回文章数据,也要返回作者名称,这个时候返回的数据,需要包含作者名称 由于在admin端,所以需要用feign进行远程调用
1. 需要使用wm_news表与wm_user表做关联查询
1. 在返回的结果的时候,单独再封装一个类,用于包装用户名称和文章数据 WmNewsVo
vo:view object 视图对象 是一个表现层对象,主要对应页面显示(web页面)的数据对象<br /> 3. 由于需要做关联查询,mybatis-plus暂时不支持关联查询,需要自定义mapper实现<br /> 4. 查询全部时,要排除草稿状态文章
3.2 查询文章详情
实现思路: 远程调用自媒体微服务,查询文章详情列表,没啥特殊的.
3.3 修改文章状态
实现思路: 远程调用自媒体微服务,修改文章状态,没啥特殊的.