/*** 自媒体文章自动审核服务** @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);}}