wangwei преди 5 години
родител
ревизия
141a1424b6
променени са 1 файла, в които са добавени 66 реда и са изтрити 33 реда
  1. 66 33
      src/main/java/cn/com/qmth/examcloud/web/baidu/BaiduClient.java

+ 66 - 33
src/main/java/cn/com/qmth/examcloud/web/baidu/BaiduClient.java

@@ -124,29 +124,29 @@ public class BaiduClient {
 			responseHolder = new JsonHttpResponseHolder(statusCode, obj);
 
 			if (HttpStatus.SC_OK != responseHolder.getStatusCode()) {
-				log.error("[Baidu AI]. getAccessToken; statusCode=" + statusCode
-						+ "; responseEntity=" + entityStr);
+				log.error("[Baidu AI Response]. statusCode=" + statusCode + "; responseEntity="
+						+ entityStr);
 			} else {
 				if (log.isDebugEnabled()) {
-					log.debug("[Baidu AI]. getAccessToken; statusCode=" + statusCode
-							+ "; responseEntity=" + entityStr);
+					log.debug("[Baidu AI Response]. statusCode=" + statusCode + "; responseEntity="
+							+ entityStr);
 				}
 			}
 
 		} catch (Exception e) {
+			log.error("[Baidu AI FAIL]. fail to get access token.", e);
 			throw new ExamCloudRuntimeException(e);
 		} finally {
 			IOUtils.closeQuietly(response);
 		}
 
 		if (log.isDebugEnabled()) {
-			log.debug("[Baidu AI]. getAccessToken; cost " + (System.currentTimeMillis() - s)
-					+ " ms.");
+			log.debug("[Baidu AI]. cost " + (System.currentTimeMillis() - s) + " ms.");
 		}
 
 		int statusCode = responseHolder.getStatusCode();
 		if (HttpStatus.SC_OK != statusCode) {
-			throw new StatusException("920", "[Baidu AI]. fail to get access_token");
+			throw new StatusException("920", "[Baidu AI]. fail to get access token");
 		}
 
 		JSONObject respBody = responseHolder.getRespBody();
@@ -165,7 +165,7 @@ public class BaiduClient {
 	public JsonHttpResponseHolder verifyFaceLiveness(String imageUrl) {
 
 		if (log.isDebugEnabled()) {
-			log.debug("[Baidu AI]. verifyFaceLiveness(String); imageUrl=" + imageUrl);
+			log.debug("[Baidu AI]. imageUrl=" + imageUrl);
 		}
 
 		String accessToken = getAccessToken();
@@ -197,19 +197,25 @@ public class BaiduClient {
 			JSONObject obj = JSON.parseObject(entityStr);
 			responseHolder = new JsonHttpResponseHolder(statusCode, obj);
 
-			if (log.isDebugEnabled()) {
-				log.debug("[Baidu AI]. verifyFaceLiveness(String); statusCode=" + statusCode
-						+ "; responseEntity=" + entityStr);
+			if (HttpStatus.SC_OK != responseHolder.getStatusCode()) {
+				log.error("[Baidu AI Response]. statusCode=" + statusCode + "; responseEntity="
+						+ entityStr);
+			} else {
+				if (log.isDebugEnabled()) {
+					log.debug("[Baidu AI Response]. statusCode=" + statusCode + "; responseEntity="
+							+ entityStr);
+				}
 			}
 
 		} catch (Exception e) {
+			log.error("[Baidu AI FAIL].", e);
 			throw new ExamCloudRuntimeException(e);
 		} finally {
 			IOUtils.closeQuietly(response);
 		}
 
 		if (log.isDebugEnabled()) {
-			log.debug("[Baidu AI]. verifyFaceLiveness(String); imageUrl=" + imageUrl + "; cost "
+			log.debug("[Baidu AI]. imageUrl=" + imageUrl + "; cost "
 					+ (System.currentTimeMillis() - s) + " ms.");
 		}
 
@@ -254,16 +260,17 @@ public class BaiduClient {
 			responseHolder = new JsonHttpResponseHolder(statusCode, obj);
 
 			if (HttpStatus.SC_OK != responseHolder.getStatusCode()) {
-				log.error("[Baidu AI]. verifyFaceLivenessUseBase64; statusCode=" + statusCode
-						+ "; responseEntity=" + entityStr);
+				log.error("[Baidu AI Response]. statusCode=" + statusCode + "; responseEntity="
+						+ entityStr);
 			} else {
 				if (log.isDebugEnabled()) {
-					log.debug("[Baidu AI]. verifyFaceLivenessUseBase64; statusCode=" + statusCode
-							+ "; responseEntity=" + entityStr);
+					log.debug("[Baidu AI Response]. statusCode=" + statusCode + "; responseEntity="
+							+ entityStr);
 				}
 			}
 
 		} catch (Exception e) {
+			log.error("[Baidu AI FAIL].", e);
 			throw new ExamCloudRuntimeException(e);
 		} finally {
 			IOUtils.closeQuietly(response);
@@ -292,31 +299,50 @@ public class BaiduClient {
 			throws StatusException {
 
 		if (log.isDebugEnabled()) {
-			log.debug("[Face++]. verifyFaceLiveness(String,String); imageUrl=" + imageUrl
-					+ "; backupImageUrl=" + backupImageUrl);
+			log.debug("[Face++]. imageUrl=" + imageUrl + "; backupImageUrl=" + backupImageUrl);
 		}
 
-		JsonHttpResponseHolder responseHolder = verifyFaceLiveness(imageUrl);
+		JsonHttpResponseHolder responseHolder = null;
 
-		JSONObject respBody = responseHolder.getRespBody();
-		long errCode = respBody.getLong("error_code");
+		boolean exceptionWhenUsingImageUrl = false;
+		boolean exceptionWhenUsingBackupImageUrl = false;
 
-		if (0 == errCode) {
-			return responseHolder;
+		try {
+			responseHolder = verifyFaceLiveness(imageUrl);
+		} catch (ExamCloudRuntimeException e) {
+			exceptionWhenUsingImageUrl = true;
 		}
 
-		if (retry(errCode)) {
-			responseHolder = verifyFaceLiveness(backupImageUrl);
+		if (exceptionWhenUsingImageUrl) {
+			try {
+				responseHolder = verifyFaceLiveness(backupImageUrl);
+			} catch (ExamCloudRuntimeException e) {
+				exceptionWhenUsingBackupImageUrl = true;
+			}
+		} else {
+			long errCode = responseHolder.getRespBody().getLong("error_code");
+
+			if (0 == errCode) {
+				return responseHolder;
+			}
+
+			if (retry(errCode)) {
+				try {
+					responseHolder = verifyFaceLiveness(backupImageUrl);
+				} catch (ExamCloudRuntimeException e) {
+					exceptionWhenUsingBackupImageUrl = true;
+				}
+			}
+
 		}
 
-		respBody = responseHolder.getRespBody();
-		errCode = respBody.getLong("error_code");
+		long errCode = responseHolder.getRespBody().getLong("error_code");
 
 		if (0 == errCode) {
 			return responseHolder;
 		}
 
-		if (retry(errCode)) {
+		if (exceptionWhenUsingBackupImageUrl || retry(errCode)) {
 			HttpGet get = new HttpGet(backupImageUrl);
 			get.setConfig(BaiduClient.requestConfig);
 			CloseableHttpResponse response = null;
@@ -327,7 +353,7 @@ public class BaiduClient {
 
 				if (HttpStatus.SC_OK != response.getStatusLine().getStatusCode()) {
 					throw new StatusException("901",
-							"fail to download file. url=" + backupImageUrl);
+							"fail to download image file. url=" + backupImageUrl);
 				}
 
 				byte[] byteArray = EntityUtils.toByteArray(response.getEntity());
@@ -338,18 +364,18 @@ public class BaiduClient {
 				imageBase64 = Base64.encodeBase64String(byteArray);
 
 			} catch (StatusException e) {
-				log.error("fail to download file. url=" + backupImageUrl, e);
+				log.error("fail to download image file. url=" + backupImageUrl, e);
 				throw e;
 			} catch (Exception e) {
-				log.error("fail to download file. url=" + backupImageUrl, e);
+				log.error("fail to download image file. url=" + backupImageUrl, e);
 				throw new StatusException("903", "fail to download file. url=" + backupImageUrl, e);
 			} finally {
 				IOUtils.closeQuietly(response);
 			}
 
 			if (log.isDebugEnabled()) {
-				log.debug("[Face++]. verifyFaceLiveness(String,String); download image; url="
-						+ backupImageUrl + "; cost " + (System.currentTimeMillis() - s) + " ms.");
+				log.debug("download image file successfully; url=" + backupImageUrl + "; cost "
+						+ (System.currentTimeMillis() - s) + " ms.");
 			}
 
 			responseHolder = verifyFaceLivenessUseBase64(imageBase64);
@@ -358,6 +384,13 @@ public class BaiduClient {
 		return responseHolder;
 	}
 
+	/**
+	 * 是否重试
+	 *
+	 * @author WANGWEI
+	 * @param errCode
+	 * @return
+	 */
 	private boolean retry(long errCode) {
 		return 222204 == errCode || 222013 == errCode;
 	}