diff --git a/src/main/java/com/ycwl/basic/facebody/adapter/BceFaceBodyAdapter.java b/src/main/java/com/ycwl/basic/facebody/adapter/BceFaceBodyAdapter.java index 0fbb504..614c15f 100644 --- a/src/main/java/com/ycwl/basic/facebody/adapter/BceFaceBodyAdapter.java +++ b/src/main/java/com/ycwl/basic/facebody/adapter/BceFaceBodyAdapter.java @@ -172,6 +172,9 @@ public class BceFaceBodyAdapter implements IFaceBodyAdapter { AipFace client = getClient(); HashMap options = new HashMap<>(); List tokenList = listUserFace(dbName, entityId); + if (tokenList == null) { + return false; + } AtomicInteger count = new AtomicInteger(0); tokenList.forEach(faceToken -> { try { @@ -232,9 +235,14 @@ public class BceFaceBodyAdapter implements IFaceBodyAdapter { } public List listUserFace(String dbName, String entityId) { + IRateLimiter listFaceLimiter = getLimiter(LOCK_TYPE.LIST_FACE); try { AipFace client = getClient(); HashMap options = new HashMap<>(); + try { + listFaceLimiter.acquire(); + } catch (InterruptedException ignored) { + } JSONObject response = client.faceGetlist(entityId, dbName, options); if (response.getInt("error_code") == 0) { JSONObject resultObj = response.getJSONObject("result"); @@ -249,13 +257,16 @@ public class BceFaceBodyAdapter implements IFaceBodyAdapter { } else { return Collections.emptyList(); } + } else if (response.getInt("error_code") == 223103) { + // 用户不存在 + return Collections.emptyList(); } else { log.warn("获取人脸列表失败!{}", response); - return Collections.emptyList(); + return null; } } catch (Exception e) { log.error("获取人脸列表失败!", e); - return Collections.emptyList(); + return null; } } @@ -325,21 +336,21 @@ public class BceFaceBodyAdapter implements IFaceBodyAdapter { private IRateLimiter getLimiter(LOCK_TYPE type) { switch (type) { case ADD_DB: - return addDbLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS)); + return addDbLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(105, TimeUnit.MILLISECONDS)); case ADD_FACE: return addFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(config.getAddQps())); case LIST_DB: - return listDbLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS)); + return listDbLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(105, TimeUnit.MILLISECONDS)); case LIST_FACE: - return listFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS)); + return listFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(105, TimeUnit.MILLISECONDS)); case SEARCH_FACE: return searchFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(config.getSearchQps())); case DELETE_DB: - return deleteDbLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS)); + return deleteDbLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(105, TimeUnit.MILLISECONDS)); case DELETE_ENTITY: - return deleteEntityLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS)); + return deleteEntityLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(105, TimeUnit.MILLISECONDS)); case DELETE_FACE: - return deleteFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(100, TimeUnit.MILLISECONDS)); + return deleteFaceLimiters.computeIfAbsent(config.getAppId(), k -> new FixedRateLimiter(105, TimeUnit.MILLISECONDS)); default: return new FixedRateLimiter(500, TimeUnit.MILLISECONDS); }