/*** 自媒体文章自动审核服务** @author silence丶你的名字* createTime 2021-08-22-17:57*/
@Service
@Log4j2
public class WemediaNewsAutoScanServiceImpl implements WemediaNewsAutoScanService {/*** fastServer 地址*/@Value("${fdfs.url}")private String fileServerUrl;/*** 自媒体微服务远程调用接口*/@Autowiredprivate WemediaFeign wemediaFeign;/*** 自维护敏感词*/@Autowiredprivate AdSensitiveService adSensitiveService;/*** 文章信息表,存储已发布的文章(远程 接口)*/@Autowiredprivate ArticleFeign articleFeign;/*** 文章频道*/@Autowiredprivate AdChannelMapper adChannelMapper;/*** 自媒体文章审核** @param id 自媒体文章id*/@Overridepublic void autoScanByMediaNewsId(Integer id) {if (ObjectUtil.isEmpty(id)) {log.error("当前审核的id为空");return;}//自媒体图文内容信息表WmNews wmNews = wemediaFeign.findById(id);if (Objects.isNull(wmNews)) {log.error("审核的自媒体文章不存在,自媒体的id:{}", id);return;}//2.文章状态为4(人工审核通过)直接保存数据和创建索引if (WmNewsStatus.ADMIN_SUCCESS.getCode().equals(wmNews.getStatus())) {saveAppArticle(wmNews);return;}//3.文章状态为8 8 审核通过(待发布)  发布时间小于等于当前时间 直接保存数据 保存数据if (WmNewsStatus.SUCCESS.getCode().equals(wmNews.getStatus()) &&wmNews.getPublishTime().getTime() <= System.currentTimeMillis()) {saveAppArticle(wmNews);return;}//4.文章状态为1:待审核if (WmNewsStatus.SUBMIT.getCode().equals(wmNews.getStatus())) {//4.1 文本审核 通过为trueif (!handleTextScan(wmNews)) {updateWmNews(wmNews);return;}//图片审核  通过为trueif (!handleImagesScan(wmNews)) {updateWmNews(wmNews);return;}//自管理 敏感词审核 通过为trueif (!handleSensitive(wmNews)) {updateWmNews(wmNews);return;}// 发布时间大于当前时间,  8 审核通过(待发布)  9 已发布int status = wmNews.getPublishTime().getTime() > System.currentTimeMillis() ?WmNewsStatus.SUCCESS.getCode() : WmNewsStatus.PUBLISHED.getCode();//修改当前文章状态if (WmNewsStatus.SUCCESS.getCode().equals(wmNews.getStatus())) {wmNews.setStatus(status);wmNews.setReason("审核通过,待发布");updateWmNews(wmNews);return;}//5.审核通过,修改自媒体文章状态为9  保存app端相关文章信息saveAppArticle(wmNews);}}/*** 保存app端相关文章信息** @param wmNews 自媒体图文内容信息表*/private void saveAppArticle(WmNews wmNews) {//保存app文章 文章信息表,存储已发布的文章ApArticle apArticle = saveArticle(wmNews);// ApArticleConfig 初始化一个对象  保存app文章配置ApArticleConfig apArticleConfig = ApArticleConfig.init(apArticle.getId());articleFeign.saveArticleConfig(apArticleConfig);//保存app文章内容saveArticleContent(apArticle, wmNews);//修改自媒体文章的状态为9 发布状态wmNews.setStatus(WmNewsStatus.PUBLISHED.getCode());wmNews.setReason("审核通过");updateWmNews(wmNews);//TODO es索引创建}/*** 创建app端文章内容信息** @param apArticle 文章信息表,存储已发布的文章* @param wmNews    自媒体图文内容信息表*/private void saveArticleContent(ApArticle apArticle, WmNews wmNews) {ApArticleContent apArticleContent = new ApArticleContent();apArticleContent.setArticleId(apArticle.getId());apArticleContent.setContent(wmNews.getContent());articleFeign.saveArticleContent(apArticleContent);}/*** 创建app端文章内容信息** @param wmNews 自媒体图文内容信息表* @return 文章信息表,存储已发布的文章*/private ApArticle saveArticle(WmNews wmNews) {ApArticle apArticle = new ApArticle();apArticle.setTitle(wmNews.getTitle());apArticle.setLayout(wmNews.getType());apArticle.setImages(wmNews.getImages());//获取作者相关信息WmUser wmUser = wemediaFeign.findWmUserById(wmNews.getUserId());if (Objects.nonNull(wmUser)) {//查询作者信息ApAuthor apAuthor = articleFeign.selectAuthorByName(wmUser.getName());if (Objects.nonNull(apAuthor)) {apArticle.setAuthorId(apAuthor.getId().longValue());apArticle.setAuthorName(apAuthor.getName());}}//获取频道相关信息AdChannel channel = adChannelMapper.selectById(wmNews.getChannelId());if (Objects.nonNull(channel)) {apArticle.setChannelId(channel.getId());apArticle.setChannelName(channel.getName());}return articleFeign.saveArticle(apArticle);}/*** 自管理 敏感词审核** @param wmNews 自媒体图文内容信息表* @return boolean true:成功  false:失败*/private boolean handleSensitive(WmNews wmNews) {try {String contentText = wmNews.getContentText();if (ObjectUtil.isEmpty(contentText)) {return false;}//查询 所有敏感词 并初始化SensitiveUtil.init(adSensitiveService.findSensitives());List<String> result = SensitiveUtil.getFindedAllSensitive(contentText);if (CollUtil.isEmpty(result)) {return true;}String join = CollUtil.join(result, ",");log.error("敏感词过滤没有通过,包含了敏感词:{}", join);//找到了敏感词,审核不通过wmNews.setStatus(WmNewsStatus.FAIL.getCode());wmNews.setReason("文章中包含了敏感词:" + join);} catch (Exception e) {e.printStackTrace();}return false;}/*** 图片审核* true:成功  false:失败** @param wmNews 自媒体图文内容信息表* @return boolean true:成功  false:失败*/private boolean handleImagesScan(WmNews wmNews) {try {//抽取文章的图片wmNews.getImagesUrls(fileServerUrl);//抽取封面图片wmNews.splitMainImages(fileServerUrl);//TODO 需要阿里云 或腾讯云审核 返回结果。 参考文本审核return true;} catch (Exception e) {e.printStackTrace();}return false;}/*** 阿里云文本审核* true:成功  false:失败** @param wmNews 自媒体图文内容信息表* @return boolean true:成功  false:失败*/private boolean handleTextScan(WmNews wmNews) {try {//阿里云审核 并获取结果Map<String, String> map = TextReviews.senText(wmNews.getContentText());//审核通过if ("Pass".equals(map.get("suggestion"))) {return true;}//修改失败状态 "Block":不通过      "Review":建议人工审核wmNews.setStatus(WmNewsStatus.FAIL.getCode());wmNews.setReason(map.get("suggestion") + " : " + map.get("evilType"));} catch (Exception e) {e.printStackTrace();}return false;}/*** 修改自媒体文章** @param wmNews 自媒体图文内容信息表*/private void updateWmNews(WmNews wmNews) {wemediaFeign.updateWmNews(wmNews);}}

silence丶你的名字相关推荐

  1. 随机名字生成小demo源码

    根据提供的文字随机生成指定字符的名称,挺简单的,一个小demo吧 源字符 package com.example.demo;import cn.hutool.core.util.RandomUtil; ...

  2. java数组及Arrays创建一个int 类型数组 数组元素由键盘录入,每次打印插入排序的结果(数组扩容,数组排序,键盘录入)

    @author silence丶你的名字 java数组及Arrays创建一个int 类型数组 数组元素由键盘录入,每次打印插入排序的结果 初始数组元素1 for死循环 获取用户录入的数据,如果为952 ...

  3. 编写程序,随机产生20个0到1之间的数,将这20个数写入文本文件中,要求每行5个数

    import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOEx ...

  4. 三个球A,B,C大小形状相同,且其中有一个球与其他球的重量不同,要求找出这个不一样的球

    import java.util.Arrays; import java.util.Scanner;/*** @author silence丶黎明* 三个球A,B,C大小形状相同,且其中有一个球与其他 ...

  5. 微信公众号使用Emoji表情

    看习惯了qq的默认表情,尝到了漂亮的emoji表情.这个时候,就开始心动了.我要我要回复漂亮的emoji表情. 既然,谈到emoji表情,能回复是必然的.只是方法你寻到了没.php有点不同,在php中 ...

  6. OLED屏显显示温湿度,学号姓名滚动显示温湿度

    文章目录 一.SPI串行外设接口 1.SPI的介绍 2.原理 3.组成结构 二.0.96寸OLED显示屏显示数据 1.所使用的工具 三丶代码的修改 1.输出文字设置 2.滚动设置 3.字模软件 四丶显 ...

  7. 适合计算机应用的班群名称,班级同学群名字大全

    很多人现在都是一个班级建一个群,以便大家沟通交流,有什么事大家群里一说很方便,没事还可以吹吹牛B策策谈,那么同学班级群用什么样的名字好呢,在此起名网为大家收集整理了班级同学群名字大全.来看看吧. 最新 ...

  8. cf英文名字格式好看的_cf英文名字大全_Michael、

    游戏英文名字[cf英文名字大全_Michael.]约420字,预计阅读需要2分钟.游戏起名网为您提热门戏名字大全,如果想要浏览更多相关游戏名字,请使用网站顶部的搜索引擎进行搜索.游戏起名网帮助您快速起 ...

  9. c 路径 空格 参数_好听的炫舞名字空格最新_好听的炫舞名字空格2020

    发布时间:2020-11-02 10:30:02 来源:网络点击量:4356 1 ☞「gseoulpnjt」 2 ☞「紫山」 3 ☞「影弑尘」 4 ☞「北杳」 5 ☞「⁂夜不成眠的日子.」 6 ☞「那 ...

最新文章

  1. 源码分析-GLSurfaceView的内部实现
  2. 你的云计算到底有多安全?
  3. 计算机控制系统三种信号,计算机控制技术模拟试题3
  4. iOS开发常用的资源和资料
  5. 周鸿祎回顾IPO一周年:保持创业心态 看好无线
  6. 2015 8月31号 本周计划
  7. python-re模块
  8. 风变编程python笔记_自学Python和风变编程
  9. 链表的基本操作(单链表)
  10. 快手短视频产品分析报告-小白文
  11. Lattice:1、MachXO系列CPLD器件专业名词(缩略语及器件介绍)
  12. 软件测试工程师-面试如何使用代码进行接口测试?
  13. Kafka精华问答 | 为什么要用Message Queue?
  14. 零基础学Arcgis(四)|空间数据采集与管理(1)Shapefile和dBASE文件的创建与管理
  15. Hack The Box 注册教程
  16. 天大2021年秋学期考试《材料力学》离线作业考核试题
  17. Spring Boot项目启动流程
  18. 电脑怎么录制屏幕带声音?其实几步就可以完成电脑录屏
  19. Hexo 博客优化之博客美化系列(持续更新)
  20. java实现两人对战的五子棋游戏

热门文章

  1. python progressbar print_python print 进度条的例子
  2. java integer最大值_五分钟学会java中的基础类型封装类
  3. linux中shell编写数组排序,linux bash shell实现对数组快速排序(升序)
  4. Oracle的Net Configuration Assistant 配置
  5. php通过条件来定义const,php用const出错是什么原因
  6. flume mysql hdfs_利用Flume将MySQL表数据准实时抽取到HDFS
  7. 思科模拟服务器怎么写文件,思科模拟服务器配置教程
  8. 【转】ABP源码分析二十六:核心框架中的一些其他功能
  9. 【转】页(page),用户控件(userControl),窗口(window)区别
  10. 【转】5.2高性能IO模型浅析