Browse Source

暂存3

dev
yinzuomei 5 years ago
parent
commit
d519fca198
  1. 7
      epmet-openapi/epmet-openapi-scan/src/main/java/com/epmet/openapi/scan/controller/ScanController.java
  2. 105
      epmet-openapi/epmet-openapi-scan/src/main/java/com/epmet/openapi/scan/service/impl/ScanServiceImpl.java
  3. 30
      epmet-openapi/epmet-openapi-scan/src/main/java/com/epmet/openapi/scan/support/result/video/VideoResultDTO.java
  4. 3
      epmet-openapi/epmet-openapi-scan/src/main/java/com/epmet/openapi/scan/support/result/video/VideoScanOriginalResultDTO.java

7
epmet-openapi/epmet-openapi-scan/src/main/java/com/epmet/openapi/scan/controller/ScanController.java

@ -2,6 +2,8 @@ package com.epmet.openapi.scan.controller;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.openapi.scan.common.constant.SysConstant;
import com.epmet.openapi.scan.common.enu.SysResponseEnum;
import com.epmet.openapi.scan.service.impl.ScanService;
import com.epmet.openapi.scan.support.param.ImgScanParam;
import com.epmet.openapi.scan.support.param.TextScanParam;
@ -104,6 +106,11 @@ public class ScanController {
if (CollectionUtils.isEmpty(taskIds)) {
return new Result<>();
}
//检测对象不能为空,且最多支持100个元素
if (org.springframework.util.CollectionUtils.isEmpty(taskIds) || taskIds.size() > SysConstant.MAX_TASK_SIZE) {
return new Result<VideoResultDTO>().error(SysResponseEnum.SCAN_TASK_LIST_PARAM_ERROR.getCode(),
SysResponseEnum.SCAN_TASK_LIST_PARAM_ERROR.getMsg().concat(SysConstant.MAX_TASK_SIZE.toString()));
}
return scanService.videoResults(taskIds);
}
}

105
epmet-openapi/epmet-openapi-scan/src/main/java/com/epmet/openapi/scan/service/impl/ScanServiceImpl.java

@ -19,9 +19,7 @@ import com.epmet.openapi.scan.support.param.*;
import com.epmet.openapi.scan.support.param.video.VideoAsyncScanParam;
import com.epmet.openapi.scan.support.param.video.VideoAsyncScanTask;
import com.epmet.openapi.scan.support.result.*;
import com.epmet.openapi.scan.support.result.video.VideoAsyncScanTaskDataDTO;
import com.epmet.openapi.scan.support.result.video.VideoAsyncScanTaskResultDTO;
import com.epmet.openapi.scan.support.result.video.VideoResultDTO;
import com.epmet.openapi.scan.support.result.video.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.lang3.StringUtils;
@ -630,7 +628,104 @@ public class ScanServiceImpl implements ScanService {
**/
@Override
public Result<VideoResultDTO> videoResults(List<String> taskIds) {
//todo 未完待续
return null;
VideoAsyncScanResultsRequest videoAsyncScanResultsRequest = new VideoAsyncScanResultsRequest();
videoAsyncScanResultsRequest.setAcceptFormat(FormatType.JSON);
videoAsyncScanResultsRequest.setMethod(com.aliyuncs.http.MethodType.POST);
videoAsyncScanResultsRequest.setConnectTimeout(3000);
videoAsyncScanResultsRequest.setReadTimeout(6000);
try {
videoAsyncScanResultsRequest.setHttpContent(JSON.toJSONString(taskIds).getBytes("UTF-8"), "UTF-8", FormatType.JSON);
} catch (UnsupportedEncodingException e) {
log.error("videoResults parse param exception", e);
return new Result<VideoResultDTO>().error(SysResponseEnum.SCAN_PARAM_ERROR.getCode(), SysResponseEnum.SCAN_PARAM_ERROR.getMsg());
}
try {
HttpResponse httpResponse = IAcsClientUtil.getIAcsClient().doAction(videoAsyncScanResultsRequest);
if (httpResponse.isSuccess()) {
JSONObject responseObject = JSON.parseObject(new String(httpResponse.getHttpContent(), "UTF-8"));
log.info("查询视频检测结果返参"+JSON.toJSONString(responseObject));
if (HttpStatus.SC_OK == responseObject.getInteger(SysConstant.CODE)) {
//获取data列表
JSONArray dataResults = responseObject.getJSONArray(SysConstant.DATA);
List<VideoScanOriginalResultDTO> resultList = dataResults.toJavaList(VideoScanOriginalResultDTO.class);
//解析数据
VideoResultDTO resultDTO = processVideoResults(resultList);
//成功返回
return new Result<VideoResultDTO>().ok(resultDTO);
} else {
log.warn("查询视频检测结果,接口返回code=" + responseObject.getInteger(SysConstant.CODE));
throw new ExecuteHttpException(SysResponseEnum.THIRD_PLATFORM_RESP_CODE_ERROR.getCode(),
SysResponseEnum.THIRD_PLATFORM_RESP_CODE_ERROR.getMsg() + ",status:" + httpResponse.getStatus());
}
} else {
log.warn("查询视频检测结果,API返回失败");
throw new ExecuteHttpException(SysResponseEnum.THIRD_PLATFORM_RESP_STATUS_ERROR.getCode(),
SysResponseEnum.THIRD_PLATFORM_RESP_STATUS_ERROR.getMsg() + ",status:" + httpResponse.getStatus());
}
} catch (Exception e) {
log.error("videoResults exception ", e);
throw new ExecuteHttpException(SysResponseEnum.THIRD_PLATFORM_SERVER_ERROR.getCode(), SysResponseEnum.THIRD_PLATFORM_SERVER_ERROR.getMsg());
}
}
/**
* @author yinzuomei
* @description
**/
private VideoResultDTO processVideoResults(List<VideoScanOriginalResultDTO> resultList) {
VideoResultDTO videoResultDTO = new VideoResultDTO();
resultList.forEach(result -> {
result.setCodeDesc(CommonErrorCodeEnum.getErrorMsg(result.getCode()));
if (result.getCode().equals(CommonErrorCodeEnum.PROCESSING.getCode())) {
//任务正在检测中,继续轮询
} else if (result.getCode().equals(CommonErrorCodeEnum.OK.getCode())) {
//成功=>分析结果
boolean videoPassFlag = getVideoFlag(result.getResults());
boolean voicePassFlag = getVoiceFlag(result.getAudioScanResults());
if (videoPassFlag && voicePassFlag) {
videoResultDTO.getPassDataIds().add(result.getDataId());
videoResultDTO.getPassTaskIds().add(result.getTaskId());
} else {
videoResultDTO.getNoPassDataIds().add(result.getDataId());
videoResultDTO.getNoPassTaskIds().add(result.getTaskId());
}
} else {
//检测结果走丢了.... (*^▽^*) 默认失败
videoResultDTO.getNoPassDataIds().add(result.getDataId());
videoResultDTO.getNoPassTaskIds().add(result.getTaskId());
}
});
videoResultDTO.setDetails(resultList);
return videoResultDTO;
}
/**
* @return boolean
* @author yinzuomei
* @description 视频检测结果判断
**/
private boolean getVideoFlag(List<VideoScanOriginDetail> results) {
for(VideoScanOriginDetail videoRes:results){
if (!SuggestionEnum.PASS.getCode().equals(videoRes.getSuggestion())) {
return false;
}
}
return true;
}
/**
* @return boolean true:内容通过; 建议为内容违规或者需要人工审核的统一视为不通过,返回false
* @author yinzuomei
* @description 返回视频语音检测结果
**/
private boolean getVoiceFlag(VoiceAsyncScanResultDTO audioScanResults) {
if (null == audioScanResults) {
return true;
}
//人工审核或者内容违规,统一视为不通过
if (!SuggestionEnum.PASS.getCode().equals(audioScanResults.getSuggestion())) {
return false;
}
return true;
}
}

30
epmet-openapi/epmet-openapi-scan/src/main/java/com/epmet/openapi/scan/support/result/video/VideoResultDTO.java

@ -8,31 +8,41 @@ import java.util.List;
/**
* 视频异步检测结果查询接口返参
*
* 正在检测中的不返回,调用方继续轮询查询结果
* @author yinzuomei@elink-cn.com
* @date 2020/12/29 15:37
*/
@Data
public class VideoResultDTO implements Serializable {
private static final long serialVersionUID = -3451342817149956488L;
/**
* 检测对象对应的数据ID
*/
private String dataId;
/**
* 检测任务的ID
* 执行成功的任务Id集合
* code=200,且所有语音+视频所有场景返回结果都为pass时则为成功
*/
private String taskId;
private List<String> passDataIds = new ArrayList<>();
/**
* true审核通过false审核不通过
* 执行失败的任务Id集合
*/
private Boolean passFlag;
private List<String> noPassDataIds = new ArrayList<>();
private List<String> passTaskIds = new ArrayList<>();
private List<String> noPassTaskIds = new ArrayList<>();
/**
* desc:阿里内容审核API返回结果详情
*/
private List<VideoScanOriginalResultDTO> details = new ArrayList<>();
/**
* 本地是否全部通过
*/
private Boolean isAllPass;
public boolean isAllPass() {
if (noPassTaskIds.isEmpty() && !passTaskIds.isEmpty()) {
return true;
}
return isAllPass;
}
}

3
epmet-openapi/epmet-openapi-scan/src/main/java/com/epmet/openapi/scan/support/result/video/VideoScanOriginalResultDTO.java

@ -21,6 +21,9 @@ public class VideoScanOriginalResultDTO implements Serializable {
* 更多信息请参见公共错误码
*/
private Integer code;
private String codeDesc;
/**
* 错误描述信息
*/

Loading…
Cancel
Save