From 248c06a30cd3ebc10a864b9c05065ada084f9881 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Tue, 8 Apr 2025 01:27:40 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9F=E7=8E=87=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../facebody/adapter/BceFaceBodyAdapter.java | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) 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); }