Commit 0d9e7a09 authored by gaoyingwei's avatar gaoyingwei

添加 百度内容审核

parent 22c03e42
...@@ -190,3 +190,7 @@ faceverfiy: ...@@ -190,3 +190,7 @@ faceverfiy:
ipDayCount: 10 ipDayCount: 10
ipMinCount: 3 ipMinCount: 3
censor:
appId: 117081917
apiKey: g02V7qqYkEOFhhysnQYzBhL6
secretKey: 5WVLmoZvgrBIeh2bTbvuSukY0zCbNcLh
...@@ -179,3 +179,8 @@ faceverfiy: ...@@ -179,3 +179,8 @@ faceverfiy:
idCardMinCount: 3 idCardMinCount: 3
ipDayCount: 10 ipDayCount: 10
ipMinCount: 3 ipMinCount: 3
censor:
appId: 117081917
apiKey: g02V7qqYkEOFhhysnQYzBhL6
secretKey: 5WVLmoZvgrBIeh2bTbvuSukY0zCbNcLh
...@@ -168,6 +168,14 @@ ...@@ -168,6 +168,14 @@
<artifactId>cloudauth20190307</artifactId> <artifactId>cloudauth20190307</artifactId>
<version>3.4.0</version> <version>3.4.0</version>
</dependency> </dependency>
<!--百度内容审核SDK-->
<dependency>
<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<version>4.15.7</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package org.rcisoft.business.faceVerify.bean; package org.rcisoft.alibaba.faceVerify.bean;
import lombok.Data; import lombok.Data;
......
package org.rcisoft.business.faceVerify.bean; package org.rcisoft.alibaba.faceVerify.bean;
/** /**
* Created with family. * Created with family.
......
package org.rcisoft.business.faceVerify.controller; package org.rcisoft.alibaba.faceVerify.controller;
/*固定导入*/ /*固定导入*/
...@@ -6,7 +6,7 @@ package org.rcisoft.business.faceVerify.controller; ...@@ -6,7 +6,7 @@ package org.rcisoft.business.faceVerify.controller;
import com.aliyun.cloudauth20190307.models.InitFaceVerifyRequest; import com.aliyun.cloudauth20190307.models.InitFaceVerifyRequest;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import org.rcisoft.business.faceVerify.service.FaceVerifyService; import org.rcisoft.alibaba.faceVerify.service.FaceVerifyService;
import org.rcisoft.business.memInfo.entity.MemInfo; import org.rcisoft.business.memInfo.entity.MemInfo;
import org.rcisoft.core.anno.CyOpeLogAnno; import org.rcisoft.core.anno.CyOpeLogAnno;
import org.rcisoft.core.constant.CyMessCons; import org.rcisoft.core.constant.CyMessCons;
......
package org.rcisoft.business.faceVerify.service; package org.rcisoft.alibaba.faceVerify.service;
import com.aliyun.cloudauth20190307.models.InitFaceVerifyRequest; import com.aliyun.cloudauth20190307.models.InitFaceVerifyRequest;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import org.rcisoft.business.memInfo.entity.MemInfo; import org.rcisoft.business.memInfo.entity.MemInfo;
import org.rcisoft.core.model.CyPersistModel;
import java.util.Map; import java.util.Map;
......
package org.rcisoft.business.faceVerify.service.impl; package org.rcisoft.alibaba.faceVerify.service.impl;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.aliyun.cloudauth20190307.Client; import com.aliyun.cloudauth20190307.Client;
...@@ -11,16 +11,13 @@ import com.aliyun.teautil.models.RuntimeOptions; ...@@ -11,16 +11,13 @@ import com.aliyun.teautil.models.RuntimeOptions;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.rcisoft.business.faceVerify.bean.FaceVerifyAliComp; import org.rcisoft.alibaba.faceVerify.bean.FaceVerifyAliComp;
import org.rcisoft.business.faceVerify.bean.FaceVerifyRedisBean; import org.rcisoft.alibaba.faceVerify.bean.FaceVerifyRedisBean;
import org.rcisoft.business.faceVerify.service.FaceVerifyService; import org.rcisoft.alibaba.faceVerify.service.FaceVerifyService;
import org.rcisoft.business.memInfo.dao.MemInfoRepository; import org.rcisoft.business.memInfo.dao.MemInfoRepository;
import org.rcisoft.business.memInfo.entity.MemInfo; import org.rcisoft.business.memInfo.entity.MemInfo;
import org.rcisoft.business.memInfo.service.MemInfoService;
import org.rcisoft.core.constant.CySmsLoginCons;
import org.rcisoft.core.exception.CyServiceException; import org.rcisoft.core.exception.CyServiceException;
import org.rcisoft.core.jwt.util.CyJwtUtil; import org.rcisoft.core.jwt.util.CyJwtUtil;
import org.rcisoft.core.model.CyPersistModel;
import org.rcisoft.core.service.CyRedisService; import org.rcisoft.core.service.CyRedisService;
import org.rcisoft.core.util.CyAESUtils; import org.rcisoft.core.util.CyAESUtils;
import org.rcisoft.core.util.CyAddressUtils; import org.rcisoft.core.util.CyAddressUtils;
...@@ -29,7 +26,6 @@ import org.rcisoft.core.util.TimeUtil; ...@@ -29,7 +26,6 @@ import org.rcisoft.core.util.TimeUtil;
import org.rcisoft.sys.rbac.user.dao.SysUserRbacRepository; import org.rcisoft.sys.rbac.user.dao.SysUserRbacRepository;
import org.rcisoft.sys.rbac.user.entity.SysUserRbac; import org.rcisoft.sys.rbac.user.entity.SysUserRbac;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
......
package org.rcisoft.baidu.censor.config;
import com.baidu.aip.contentcensor.AipContentCensor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ContentCensorClientConfig {
/**
* 百度云审核的AppID
*/
@Value("${censor.appId}")
String appId;
/**
* 百度云审核的Api Key
*/
@Value("${censor.apiKey}")
String apiKey;
/**
* 百度云审核的Secret Key
*/
@Value("${censor.secretKey}")
String secretKey;
@Bean(name = "commonTextCensorClient")
AipContentCensor commonTextCensorClient() {
/**
* 可以选择在客户端中添加参数,参考 https://ai.baidu.com/ai-doc/ANTIPORN/ik3h6xdze
* 如:
* // 可选:设置网络连接参数
* client.setConnectionTimeoutInMillis(2000);
* client.setSocketTimeoutInMillis(60000);
*
* // 可选:设置代理服务器地址, http和socket二选一,或者均不设置
* client.setHttpProxy("proxy_host", proxy_port); // 设置http代理
* client.setSocketProxy("proxy_host", proxy_port); // 设置socket代理
*
* // 可选:设置log4j日志输出格式,若不设置,则使用默认配置
* // 也可以直接通过jvm启动参数设置此环境变量
* System.setProperty("aip.log4j.conf", "path/to/your/log4j.properties");
*/
return new AipContentCensor(appId, apiKey, secretKey);
}
}
package org.rcisoft.baidu.censor.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CensorResult {
/**
* 内容是否审核通过
*/
Boolean isPass;
/**
* 审核失败原因
*/
String errorMsg;
}
package org.rcisoft.baidu.censor.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.rcisoft.baidu.censor.dto.CensorResult;
import org.rcisoft.business.memInfo.entity.ArticleExamStatus;
import org.rcisoft.business.memInfo.entity.MemInfo;
import org.rcisoft.business.memInfo.entity.opmArticleDTO;
import org.rcisoft.business.memInfo.entity.peopleNumberDTO;
import org.rcisoft.core.model.CyPageInfo;
import org.rcisoft.core.model.CyPersistModel;
import java.util.List;
/**
* Created by cy on 2024年12月20日 下午3:35:34.
*/
public interface ContentCensorService {
/**
* 获取常规文本审核结果
*
* @param content 内容
* @return 百度内容审核JSON
*/
public CensorResult getCommonTextCensorResult(String content);
/**
* 获取照片审核结果
*
* @param imageUrl 图片Url
* @return 百度图片审核JSON
*/
public CensorResult getImageCensorResult(String imageUrl);
}
package org.rcisoft.baidu.censor.service.impl;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONUtil;
import com.baidu.aip.contentcensor.AipContentCensor;
import com.baidu.aip.contentcensor.EImgType;
import lombok.extern.slf4j.Slf4j;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.rcisoft.baidu.censor.dto.CensorResult;
import org.rcisoft.baidu.censor.service.ContentCensorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@Service
@Transactional(readOnly = true,propagation = Propagation.NOT_SUPPORTED)
@Slf4j
public class ContentCensorServiceImpl implements ContentCensorService {
/**
* 百度文本审核,识别审核结果的JSON KEY
*/
final public static String CENSOR_CONCLUSION_TYPE_KEY = "conclusionType";
//审核结果
final public static String CENSOR_CONCLUSION_KEY = "conclusion";
//请求唯一id
final public static String CENSOR_LOG_ID_KEY = "log_id";
// @Resource(name = "commonTextCensorClient")
@Autowired
AipContentCensor commonTextCensorClient;
/**
* 获取常规文本审核结果
*
* @param content 内容
* @return 百度内容审核JSON
*/
@Override
public CensorResult getCommonTextCensorResult(String content) {
//如果内容为空,则直接返回
if (content == null || content.isEmpty()) {
return getCensorResult(null);
}
try {
JSONObject response = commonTextCensorClient.textCensorUserDefined(content);
return getCensorResult(response);
} catch (Exception exception) {
log.error("失败"+exception);
return getCensorResult(null);
}
}
/**
* 获取照片审核结果
*
* @param imageUrl 图片Url
* @return 百度图片审核JSON
*/
@Override
public CensorResult getImageCensorResult(String imageUrl) {
//如果内容为空,则直接返回
if (imageUrl == null || imageUrl.isEmpty()) {
return getCensorResult(null);
}
try {
JSONObject response = commonTextCensorClient.imageCensorUserDefined(imageUrl, EImgType.URL, null);
return getCensorResult(response);
} catch (Exception exception) {
log.error("失败"+exception);
return getCensorResult(null);
}
}
/**
* 获取审核结果
*
* @param clientJsonObject 百度审核的JSON字段
* @return 审核结果
*/
private CensorResult getCensorResult(JSONObject clientJsonObject) {
//获取代表审核结果的字段
//审核结果类型,可取值1.合规,2.不合规,3.疑似,4.审核失败
int conclusionType = 4;
//如果是null就直接判定为失败
if (clientJsonObject != null) {
try {
conclusionType = clientJsonObject.getInt(CENSOR_CONCLUSION_TYPE_KEY);
log.info("审核结果"+clientJsonObject.getString(CENSOR_CONCLUSION_KEY));
log.info("请求唯一id"+clientJsonObject.getString(CENSOR_LOG_ID_KEY));
boolean isPass = conclusionType == 1;
List<String> msg = new ArrayList<>();
if (clientJsonObject.has("data")) {
JSONArray array = clientJsonObject.getJSONArray("data");
for (int i = 0; i < array.length(); i++) {
cn.hutool.json.JSONObject json = JSONUtil.parseObj(array.get(i).toString());
msg.add(json.getStr("msg"));
}
}
return new CensorResult(isPass, String.join(",", msg) );
} catch (JSONException e) {
log.error(""+e);
return new CensorResult(false, "获取审核结果失败");
}
} else
return new CensorResult(false, "获取审核结果失败");
}
}
package org.rcisoft.business.memInfo.service.impl; package org.rcisoft.business.memInfo.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.rcisoft.business.cmsActivity.entity.CmsActivity; import org.rcisoft.alibaba.faceVerify.bean.FaceVerifyAliComp;
import org.rcisoft.business.faceVerify.bean.FaceVerifyAliComp; import org.rcisoft.alibaba.faceVerify.bean.FaceVerifyRedisBean;
import org.rcisoft.business.faceVerify.bean.FaceVerifyRedisBean;
import org.rcisoft.business.memInfo.bean.MemberGenerateBean; import org.rcisoft.business.memInfo.bean.MemberGenerateBean;
import org.rcisoft.business.memInfo.entity.ArticleExamStatus; import org.rcisoft.business.memInfo.entity.ArticleExamStatus;
import org.rcisoft.business.memInfo.entity.opmArticleDTO; import org.rcisoft.business.memInfo.entity.opmArticleDTO;
import org.rcisoft.business.memInfo.entity.peopleNumberDTO; import org.rcisoft.business.memInfo.entity.peopleNumberDTO;
import org.rcisoft.core.constant.CyDelStaCons; import org.rcisoft.core.constant.CyDelStaCons;
import org.rcisoft.core.constant.CyFlagStaCons; import org.rcisoft.core.constant.CyFlagStaCons;
import org.rcisoft.core.constant.CySmsLoginCons;
import org.rcisoft.core.exception.CyServiceException; import org.rcisoft.core.exception.CyServiceException;
import org.rcisoft.core.result.enums.CyResSysExcEnum;
import org.rcisoft.core.service.CyRedisService; import org.rcisoft.core.service.CyRedisService;
import org.rcisoft.core.util.*; import org.rcisoft.core.util.*;
import org.rcisoft.core.aop.CyPageUtilAsp;
import org.rcisoft.core.model.CyPersistModel; import org.rcisoft.core.model.CyPersistModel;
import org.rcisoft.business.memInfo.dao.MemInfoRepository; import org.rcisoft.business.memInfo.dao.MemInfoRepository;
import org.rcisoft.business.memInfo.entity.MemInfo; import org.rcisoft.business.memInfo.entity.MemInfo;
import org.rcisoft.business.memInfo.service.MemInfoService; import org.rcisoft.business.memInfo.service.MemInfoService;
import org.rcisoft.core.service.CyBaseService;
import org.rcisoft.sys.constant.CyUserCons; import org.rcisoft.sys.constant.CyUserCons;
import org.rcisoft.sys.rbac.user.dao.SysUserRbacRepository; import org.rcisoft.sys.rbac.user.dao.SysUserRbacRepository;
...@@ -43,7 +35,6 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -43,7 +35,6 @@ import org.springframework.transaction.annotation.Transactional;
import org.rcisoft.core.model.CyPageInfo; import org.rcisoft.core.model.CyPageInfo;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.Month;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
......
package org.rcisoft.business.opmArticle.service.impl; package org.rcisoft.business.opmArticle.service.impl;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.rcisoft.baidu.censor.dto.CensorResult;
import org.rcisoft.baidu.censor.service.ContentCensorService;
import org.rcisoft.business.opmArticle.dao.OpmArticleRepository; import org.rcisoft.business.opmArticle.dao.OpmArticleRepository;
import org.rcisoft.business.opmArticle.entity.ArticleCommentVO; import org.rcisoft.business.opmArticle.entity.ArticleCommentVO;
import org.rcisoft.business.opmArticle.entity.LikeDTO; import org.rcisoft.business.opmArticle.entity.LikeDTO;
...@@ -13,7 +17,11 @@ import org.rcisoft.business.opmArticle.service.OpmArticleService; ...@@ -13,7 +17,11 @@ import org.rcisoft.business.opmArticle.service.OpmArticleService;
import org.rcisoft.core.exception.CyServiceException; import org.rcisoft.core.exception.CyServiceException;
import org.rcisoft.core.model.CyPageInfo; import org.rcisoft.core.model.CyPageInfo;
import org.rcisoft.core.model.CyPersistModel; import org.rcisoft.core.model.CyPersistModel;
import org.rcisoft.core.service.CyFileStorageService;
import org.rcisoft.core.util.CyUserUtil; import org.rcisoft.core.util.CyUserUtil;
import org.rcisoft.sys.dictionary.entity.DictData;
import org.rcisoft.sys.dictionary.service.DictionaryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
...@@ -30,6 +38,12 @@ import java.util.List; ...@@ -30,6 +38,12 @@ import java.util.List;
@Slf4j @Slf4j
public class OpmArticleServiceImpl extends ServiceImpl<OpmArticleRepository, OpmArticle> implements OpmArticleService { public class OpmArticleServiceImpl extends ServiceImpl<OpmArticleRepository, OpmArticle> implements OpmArticleService {
@Autowired
private DictionaryService dictionaryService;
@Autowired
private ContentCensorService contentCensorService;
@Autowired
private CyFileStorageService cyFileStorageService;
/** /**
* 保存 opmArticle管理 * 保存 opmArticle管理
* @param opmArticle * @param opmArticle
...@@ -38,6 +52,34 @@ public class OpmArticleServiceImpl extends ServiceImpl<OpmArticleRepository, Opm ...@@ -38,6 +52,34 @@ public class OpmArticleServiceImpl extends ServiceImpl<OpmArticleRepository, Opm
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT) @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT)
@Override @Override
public CyPersistModel persist(OpmArticle opmArticle){ public CyPersistModel persist(OpmArticle opmArticle){
//从redis获取动态审核配置 0:自动审核,1:人工审核
List<DictData> articleAudit = dictionaryService.selectByTypes("article_audit_config");
String style = articleAudit.get(0).getDictValue();
if ("0".equals(style)) {
//调用百度,自动审核
boolean flag = false;
CensorResult result = contentCensorService.getCommonTextCensorResult(opmArticle.getContent());
flag = result.getIsPass();
List<String> msg = new ArrayList<>();
if (!flag)
msg.add(result.getErrorMsg());
if (StringUtils.isNotBlank(opmArticle.getPictureId())){
JSONArray ids = JSONUtil.parseObj(opmArticle.getPictureId()).getJSONArray("id");
for (Object id : ids) {
String url = cyFileStorageService.getOssUrl((Integer)id);
CensorResult imgResult = contentCensorService.getImageCensorResult(url);
if (!imgResult.getIsPass())
msg.add(result.getErrorMsg());
flag = flag && imgResult.getIsPass();
}
}
if (flag)
opmArticle.setExamStatus("1");
else {
opmArticle.setExamStatus("3");
opmArticle.setRemarks(String.join(",", msg));
}
}
//增加操作 //增加操作
int line = baseMapper.insert(opmArticle); int line = baseMapper.insert(opmArticle);
log.debug(CyUserUtil.getAuthenUsername()+"新增了ID为"+ log.debug(CyUserUtil.getAuthenUsername()+"新增了ID为"+
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment