|
|
@ -4,10 +4,7 @@ import com.alibaba.fastjson.JSON; |
|
|
|
import com.alibaba.fastjson.JSONArray; |
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
import com.aliyuncs.AcsRequest; |
|
|
|
import com.aliyuncs.green.model.v20180509.ImageSyncScanRequest; |
|
|
|
import com.aliyuncs.green.model.v20180509.TextScanRequest; |
|
|
|
import com.aliyuncs.green.model.v20180509.VoiceAsyncScanRequest; |
|
|
|
import com.aliyuncs.green.model.v20180509.VoiceAsyncScanResultsRequest; |
|
|
|
import com.aliyuncs.green.model.v20180509.*; |
|
|
|
import com.aliyuncs.http.FormatType; |
|
|
|
import com.aliyuncs.http.HttpResponse; |
|
|
|
import com.epmet.commons.tools.constant.NumConstant; |
|
|
@ -19,7 +16,12 @@ import com.epmet.openapi.scan.common.exception.ExecuteHttpException; |
|
|
|
import com.epmet.openapi.scan.common.redis.RedisKeys; |
|
|
|
import com.epmet.openapi.scan.common.util.IAcsClientUtil; |
|
|
|
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 lombok.extern.slf4j.Slf4j; |
|
|
|
import org.apache.commons.collections4.ListUtils; |
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
@ -503,4 +505,132 @@ public class ScanServiceImpl implements ScanService { |
|
|
|
return getResultsRequest; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* desc:视频检测-异步检测 |
|
|
|
* |
|
|
|
* @param videoAsyncScanParam |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public Result<VideoAsyncScanTaskResultDTO> videoAsyncScan(VideoAsyncScanParam videoAsyncScanParam) { |
|
|
|
//一次至多提交100个检测对象
|
|
|
|
List<VideoAsyncScanTask> videoTasks = videoAsyncScanParam.getTasks(); |
|
|
|
if (CollectionUtils.isEmpty(videoTasks) || videoTasks.size() > SysConstant.MAX_TASK_SIZE) { |
|
|
|
return new Result<VideoAsyncScanTaskResultDTO>().error(SysResponseEnum.SCAN_TASK_LIST_PARAM_ERROR.getCode(), SysResponseEnum.SCAN_TASK_LIST_PARAM_ERROR.getMsg().concat(SysConstant.MAX_TASK_SIZE.toString())); |
|
|
|
} |
|
|
|
//默认参数赋值
|
|
|
|
videoAsyncScanParam.setScenes(VideoSceneEnum.getVideoSceneList()); |
|
|
|
videoAsyncScanParam.setBizType(bizType); |
|
|
|
videoAsyncScanParam.setAudioScenes(VoiceSceneEnum.getVoiceSceneList()); |
|
|
|
videoAsyncScanParam.setSeed(UUID.randomUUID().toString().replace("-", "")); |
|
|
|
//API文档没写限制多少最大多少,应该与图片一致
|
|
|
|
if (videoTasks.size() <= SysConstant.MAX_SCAN_IMG_TASK_SIZE) { |
|
|
|
return doScanVideo(videoAsyncScanParam); |
|
|
|
} |
|
|
|
log.info("videoAsyncScan tasks size:{} over 10", videoTasks.size()); |
|
|
|
//分组调用,一次提交10个
|
|
|
|
List<List<VideoAsyncScanTask>> partition = ListUtils.partition(videoTasks, SysConstant.MAX_SCAN_IMG_TASK_SIZE); |
|
|
|
VideoAsyncScanTaskResultDTO finalResult = new VideoAsyncScanTaskResultDTO(); |
|
|
|
for (List<VideoAsyncScanTask> tasks : partition) { |
|
|
|
VideoAsyncScanParam videParam = new VideoAsyncScanParam(); |
|
|
|
videParam.setBizType(videoAsyncScanParam.getBizType()); |
|
|
|
videParam.setScenes(videoAsyncScanParam.getScenes()); |
|
|
|
videParam.setTasks(tasks); |
|
|
|
videParam.setCallback(videoAsyncScanParam.getCallback()); |
|
|
|
videParam.setSeed(videoAsyncScanParam.getSeed()); |
|
|
|
videParam.setAudioScenes(videoAsyncScanParam.getAudioScenes()); |
|
|
|
Result<VideoAsyncScanTaskResultDTO> partResult = doScanVideo(videParam); |
|
|
|
try { |
|
|
|
Thread.sleep(5L); |
|
|
|
} catch (InterruptedException e) { |
|
|
|
log.error("videoAsyncScan InterruptedException"); |
|
|
|
} |
|
|
|
if (partResult.success()) { |
|
|
|
VideoAsyncScanTaskResultDTO data = partResult.getData(); |
|
|
|
finalResult.setSeed(data.getSeed()); |
|
|
|
finalResult.getSuccessTasks().addAll(data.getSuccessTasks()); |
|
|
|
finalResult.getFailTasks().addAll(data.getFailTasks()); |
|
|
|
} else { |
|
|
|
return partResult; |
|
|
|
} |
|
|
|
} |
|
|
|
return new Result<VideoAsyncScanTaskResultDTO>().ok(finalResult); |
|
|
|
} |
|
|
|
|
|
|
|
private Result<VideoAsyncScanTaskResultDTO> doScanVideo(VideoAsyncScanParam videoAsyncScanParam) { |
|
|
|
VideoAsyncScanRequest videoAsyncScanRequest = getVideoAsyncScanRequest(); |
|
|
|
try { |
|
|
|
videoAsyncScanRequest.setHttpContent(JSON.toJSONString(videoAsyncScanParam).getBytes(SysConstant.UTF8), SysConstant.UTF8, FormatType.JSON); |
|
|
|
} catch (UnsupportedEncodingException e) { |
|
|
|
log.error("doScanVideo parse param exception", e); |
|
|
|
return new Result<VideoAsyncScanTaskResultDTO>().error(SysResponseEnum.SCAN_PARAM_ERROR.getCode(), SysResponseEnum.SCAN_PARAM_ERROR.getMsg()); |
|
|
|
} |
|
|
|
|
|
|
|
try { |
|
|
|
VideoAsyncScanTaskResultDTO scanResult = executeAsyncVideo(videoAsyncScanRequest); |
|
|
|
scanResult.setSeed(videoAsyncScanParam.getSeed()); |
|
|
|
return new Result<VideoAsyncScanTaskResultDTO>().ok(scanResult); |
|
|
|
} catch (ExecuteHttpException e) { |
|
|
|
log.error("doScanVideo execute exception,param:{},fail msg:{}", JSON.toJSONString(videoAsyncScanParam), e.getMsg()); |
|
|
|
return new Result<VideoAsyncScanTaskResultDTO>().error(e.getCode(), e.getMsg()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private VideoAsyncScanRequest getVideoAsyncScanRequest() { |
|
|
|
VideoAsyncScanRequest videoAsyncScanRequest = new VideoAsyncScanRequest(); |
|
|
|
videoAsyncScanRequest.setAcceptFormat(FormatType.JSON); // 指定API返回格式。
|
|
|
|
videoAsyncScanRequest.setMethod(com.aliyuncs.http.MethodType.POST); // 指定请求方法。
|
|
|
|
/** |
|
|
|
* 请务必设置超时时间。 |
|
|
|
*/ |
|
|
|
videoAsyncScanRequest.setConnectTimeout(3000); |
|
|
|
videoAsyncScanRequest.setReadTimeout(6000); |
|
|
|
return videoAsyncScanRequest; |
|
|
|
} |
|
|
|
|
|
|
|
private VideoAsyncScanTaskResultDTO executeAsyncVideo(VideoAsyncScanRequest videoAsyncScanRequest) { |
|
|
|
try { |
|
|
|
HttpResponse httpResponse = IAcsClientUtil.getIAcsClient().doAction(videoAsyncScanRequest); |
|
|
|
if (httpResponse.isSuccess()) { |
|
|
|
JSONObject scrResponse = JSON.parseObject(new String(httpResponse.getHttpContent(), "UTF-8")); |
|
|
|
if (HttpStatus.SC_OK == scrResponse.getInteger(SysConstant.CODE)) { |
|
|
|
//获取data列表
|
|
|
|
JSONArray dataResults = scrResponse.getJSONArray(SysConstant.DATA); |
|
|
|
List<VideoAsyncScanTaskDataDTO> dataList = dataResults.toJavaList(VideoAsyncScanTaskDataDTO.class); |
|
|
|
VideoAsyncScanTaskResultDTO result=new VideoAsyncScanTaskResultDTO(); |
|
|
|
dataList.forEach(data->{ |
|
|
|
if (HttpStatus.SC_OK == data.getCode()) { |
|
|
|
result.getSuccessTasks().add(data); |
|
|
|
} else { |
|
|
|
result.getFailTasks().add(data); |
|
|
|
} |
|
|
|
}); |
|
|
|
return result; |
|
|
|
} else { |
|
|
|
log.warn("executeAsyncVideo detect not success. code:{}", scrResponse.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("executeAsyncVideo response status is not success. httpResponse:{}", JSON.toJSONString(httpResponse)); |
|
|
|
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("executeAsyncVideo exception IAcsClientUtil do action exception", e); |
|
|
|
throw new ExecuteHttpException(SysResponseEnum.THIRD_PLATFORM_SERVER_ERROR.getCode(), SysResponseEnum.THIRD_PLATFORM_SERVER_ERROR.getMsg()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* @param taskIds |
|
|
|
* @author yinzuomei |
|
|
|
* @description 视频异步检测结果查询接口 |
|
|
|
* @Date 2020/12/29 16:10 |
|
|
|
**/ |
|
|
|
@Override |
|
|
|
public Result<VideoResultDTO> videoResults(List<String> taskIds) { |
|
|
|
//todo 未完待续
|
|
|
|
return null; |
|
|
|
} |
|
|
|
} |
|
|
|