diff --git a/src/main/java/com/ycwl/basic/facebody/adapter/AliFaceBodyAdapter.java b/src/main/java/com/ycwl/basic/facebody/adapter/AliFaceBodyAdapter.java index 98b8a05..1062eaa 100644 --- a/src/main/java/com/ycwl/basic/facebody/adapter/AliFaceBodyAdapter.java +++ b/src/main/java/com/ycwl/basic/facebody/adapter/AliFaceBodyAdapter.java @@ -20,8 +20,8 @@ import com.ycwl.basic.facebody.entity.AddFaceResp; import com.ycwl.basic.facebody.entity.AliFaceBodyConfig; import com.ycwl.basic.facebody.entity.SearchFaceResp; import com.ycwl.basic.facebody.entity.SearchFaceResultItem; -import com.ycwl.basic.ratelimiter.FixedRateLimiter; -import com.ycwl.basic.ratelimiter.IRateLimiter; +import com.ycwl.basic.utils.ratelimiter.FixedRateLimiter; +import com.ycwl.basic.utils.ratelimiter.IRateLimiter; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; diff --git a/src/main/java/com/ycwl/basic/service/pc/impl/FaceServiceImpl.java b/src/main/java/com/ycwl/basic/service/pc/impl/FaceServiceImpl.java index d2b382e..8fb9050 100644 --- a/src/main/java/com/ycwl/basic/service/pc/impl/FaceServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/pc/impl/FaceServiceImpl.java @@ -299,7 +299,7 @@ public class FaceServiceImpl implements FaceService { new Thread(() -> { sourceMapper.deleteNotBuyFaceRelation(face.getMemberId(), faceId); videoMapper.deleteNotBuyFaceRelations(face.getMemberId(), faceId); - faceService.deleteFaceSample(USER_FACE_DB_NAME+face.getScenicId().toString(), faceId.toString()); + faceService.deleteFaceSample(face.getScenicId(), USER_FACE_DB_NAME+face.getScenicId().toString(), faceId.toString()); }).start(); return ApiResponse.success("删除成功"); } diff --git a/src/main/java/com/ycwl/basic/service/task/TaskFaceService.java b/src/main/java/com/ycwl/basic/service/task/TaskFaceService.java index 475b8d0..a387334 100644 --- a/src/main/java/com/ycwl/basic/service/task/TaskFaceService.java +++ b/src/main/java/com/ycwl/basic/service/task/TaskFaceService.java @@ -14,7 +14,7 @@ public interface TaskFaceService { String uploadFile(MultipartFile file, Long userId); - boolean deleteFaceSample(String dbName, String entityId); + boolean deleteFaceSample(Long scenicId, String dbName, String entityId); boolean assureFaceDb(IFaceBodyAdapter faceBodyAdapter, String dbName); } diff --git a/src/main/java/com/ycwl/basic/service/task/impl/TaskFaceServiceImpl.java b/src/main/java/com/ycwl/basic/service/task/impl/TaskFaceServiceImpl.java index 83d5e10..38d9730 100644 --- a/src/main/java/com/ycwl/basic/service/task/impl/TaskFaceServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/task/impl/TaskFaceServiceImpl.java @@ -3,11 +3,9 @@ package com.ycwl.basic.service.task.impl; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.aliyuncs.facebody.model.v20191230.DeleteFaceEntityRequest; import com.aliyuncs.facebody.model.v20191230.ListFaceEntitiesRequest; import com.aliyuncs.facebody.model.v20191230.ListFaceEntitiesResponse; import com.aliyuncs.facebody.model.v20191230.SearchFaceRequest; -import com.aliyuncs.facebody.model.v20191230.SearchFaceResponse; import com.ycwl.basic.biz.OrderBiz; import com.ycwl.basic.constant.FaceConstant; import com.ycwl.basic.exception.BaseException; @@ -34,7 +32,6 @@ import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity; import com.ycwl.basic.model.pc.source.entity.MemberSourceEntity; import com.ycwl.basic.model.pc.source.entity.SourceEntity; import com.ycwl.basic.model.task.resp.SearchFaceRespVo; -import com.ycwl.basic.ratelimiter.FixedRateLimiter; import com.ycwl.basic.repository.DeviceRepository; import com.ycwl.basic.repository.FaceRepository; import com.ycwl.basic.repository.ScenicRepository; @@ -49,9 +46,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; -import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; -import com.aliyuncs.profile.DefaultProfile; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; @@ -91,8 +86,6 @@ public class TaskFaceServiceImpl implements TaskFaceService { private SourceMapper sourceMapper; @Autowired private OrderBiz orderBiz; - private final FixedRateLimiter deleteEntityLimiter = new FixedRateLimiter(600, TimeUnit.MILLISECONDS); - private final ThreadPoolExecutor executor = new ThreadPoolExecutor(8, 1024, 0, TimeUnit.SECONDS, new ArrayBlockingQueue<>(1024)); @Autowired private ScenicRepository scenicRepository; @@ -318,7 +311,7 @@ public class TaskFaceServiceImpl implements TaskFaceService { listFaceEntitiesResponse.getData().getEntities().forEach(entity -> { Date createdDate = new Date(entity.getCreatedAt()); if (createdDate.before(endDate)) { - deleteFaceSample(entity.getDbName(), entity.getEntityId()); + deleteFaceSample(scenicId, entity.getDbName(), entity.getEntityId()); } else { count.incrementAndGet(); log.info("当前景区{},人脸样本:{}未过期", scenicId, entity.getEntityId()); @@ -349,7 +342,7 @@ public class TaskFaceServiceImpl implements TaskFaceService { return; } if (DateUtils.parse(dateString, DATE_FORMAT).before(endDate)) { - deleteFaceSample(entity.getDbName(), entity.getEntityId()); + deleteFaceSample(scenicId, entity.getDbName(), entity.getEntityId()); } else { count.incrementAndGet(); log.info("当前景区{},人脸样本:{}未过期", scenicId, entity.getEntityId()); @@ -387,7 +380,7 @@ public class TaskFaceServiceImpl implements TaskFaceService { return; } if (DateUtils.parse(dateString, DATE_FORMAT).before(endDate)) { - deleteFaceSample(entity.getDbName(), entity.getEntityId()); + deleteFaceSample(scenicId, entity.getDbName(), entity.getEntityId()); } else { count.incrementAndGet(); log.info("当前景区{},人脸样本:{}未过期", scenicId, entity.getEntityId()); @@ -403,7 +396,7 @@ public class TaskFaceServiceImpl implements TaskFaceService { return; } faceSampleList.forEach(faceSample -> { - boolean success = deleteFaceSample(String.valueOf(scenicId), generateEntityId(faceSample)); + boolean success = deleteFaceSample(scenicId, String.valueOf(scenicId), generateEntityId(faceSample)); if (success) { log.info("当前景区{},人脸样本ID{},删除成功", scenicId, faceSample.getId()); faceSampleMapper.deleteById(faceSample.getId()); @@ -438,15 +431,18 @@ public class TaskFaceServiceImpl implements TaskFaceService { } @Override - public boolean deleteFaceSample(String dbName, String entityId) { - DeleteFaceEntityRequest deleteFaceEntityRequest = new DeleteFaceEntityRequest(); - deleteFaceEntityRequest.setDbName(dbName); - deleteFaceEntityRequest.setEntityId(entityId); + public boolean deleteFaceSample(Long scenicId, String dbName, String entityId) { + ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(scenicId); + IFaceBodyAdapter faceBodyAdapter; + if (scenicConfig != null && scenicConfig.getFaceType() != null) { + faceBodyAdapter = FaceBodyFactory.getAdapter(scenicConfig.getFaceType()); + faceBodyAdapter.loadConfig(JSONObject.parseObject(scenicConfig.getFaceConfigJson(), Map.class)); + } else { + faceBodyAdapter = FaceBodyFactory.use(); + } + log.info("删除{}人脸实体:{}", dbName, entityId); try { - deleteEntityLimiter.acquire(); - log.info("删除{}人脸实体:{}", dbName, entityId); - IAcsClient client = getClient(); - client.getAcsResponse(deleteFaceEntityRequest); + faceBodyAdapter.deleteFace(dbName, entityId); return true; } catch (Exception e) { log.error("删除人脸样本失败!", e); diff --git a/src/main/java/com/ycwl/basic/task/FaceCleaner.java b/src/main/java/com/ycwl/basic/task/FaceCleaner.java index 80c2113..9c494b0 100644 --- a/src/main/java/com/ycwl/basic/task/FaceCleaner.java +++ b/src/main/java/com/ycwl/basic/task/FaceCleaner.java @@ -84,7 +84,7 @@ public class FaceCleaner { req.setUpdateEndTime(DateUtil.offsetDay(DateUtil.beginOfDay(new Date()), -sampleStoreDay)); List list = faceMapper.list(req); list.forEach(face -> { - boolean result = faceService.deleteFaceSample(USER_FACE_DB_NAME+face.getScenicId(), face.getId().toString()); + boolean result = faceService.deleteFaceSample(face.getScenicId(), USER_FACE_DB_NAME+face.getScenicId(), face.getId().toString()); if (result) { faceMapper.deleteById(face.getId()); } diff --git a/src/main/java/com/ycwl/basic/ratelimiter/FixedRateLimiter.java b/src/main/java/com/ycwl/basic/utils/ratelimiter/FixedRateLimiter.java similarity index 97% rename from src/main/java/com/ycwl/basic/ratelimiter/FixedRateLimiter.java rename to src/main/java/com/ycwl/basic/utils/ratelimiter/FixedRateLimiter.java index acb0da0..9453c58 100644 --- a/src/main/java/com/ycwl/basic/ratelimiter/FixedRateLimiter.java +++ b/src/main/java/com/ycwl/basic/utils/ratelimiter/FixedRateLimiter.java @@ -1,4 +1,4 @@ -package com.ycwl.basic.ratelimiter; +package com.ycwl.basic.utils.ratelimiter; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; diff --git a/src/main/java/com/ycwl/basic/ratelimiter/IRateLimiter.java b/src/main/java/com/ycwl/basic/utils/ratelimiter/IRateLimiter.java similarity index 85% rename from src/main/java/com/ycwl/basic/ratelimiter/IRateLimiter.java rename to src/main/java/com/ycwl/basic/utils/ratelimiter/IRateLimiter.java index bdcbbe3..7c951c9 100644 --- a/src/main/java/com/ycwl/basic/ratelimiter/IRateLimiter.java +++ b/src/main/java/com/ycwl/basic/utils/ratelimiter/IRateLimiter.java @@ -1,4 +1,4 @@ -package com.ycwl.basic.ratelimiter; +package com.ycwl.basic.utils.ratelimiter; import java.util.concurrent.TimeUnit; diff --git a/src/main/java/com/ycwl/basic/ratelimiter/SlidingWindowRateLimiter.java b/src/main/java/com/ycwl/basic/utils/ratelimiter/SlidingWindowRateLimiter.java similarity index 97% rename from src/main/java/com/ycwl/basic/ratelimiter/SlidingWindowRateLimiter.java rename to src/main/java/com/ycwl/basic/utils/ratelimiter/SlidingWindowRateLimiter.java index 99571f5..adc04c8 100644 --- a/src/main/java/com/ycwl/basic/ratelimiter/SlidingWindowRateLimiter.java +++ b/src/main/java/com/ycwl/basic/utils/ratelimiter/SlidingWindowRateLimiter.java @@ -1,4 +1,4 @@ -package com.ycwl.basic.ratelimiter; +package com.ycwl.basic.utils.ratelimiter; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; diff --git a/src/test/java/com/ycwl/basic/task/FaceCleanerTest.java b/src/test/java/com/ycwl/basic/task/FaceCleanerTest.java index f05ba46..a362bd1 100644 --- a/src/test/java/com/ycwl/basic/task/FaceCleanerTest.java +++ b/src/test/java/com/ycwl/basic/task/FaceCleanerTest.java @@ -2,48 +2,25 @@ package com.ycwl.basic.task; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; -import com.aliyuncs.exceptions.ClientException; -import com.aliyuncs.exceptions.ServerException; -import com.aliyuncs.facebody.model.v20191230.GetFaceEntityRequest; -import com.aliyuncs.facebody.model.v20191230.GetFaceEntityResponse; -import com.aliyuncs.facebody.model.v20191230.ListFaceEntitiesRequest; -import com.aliyuncs.facebody.model.v20191230.ListFaceEntitiesResponse; import com.aliyuncs.profile.DefaultProfile; import com.ycwl.basic.mapper.FaceMapper; import com.ycwl.basic.mapper.FaceSampleMapper; import com.ycwl.basic.mapper.ScenicMapper; -import com.ycwl.basic.model.pc.face.resp.FaceRespVO; -import com.ycwl.basic.model.pc.faceSample.req.FaceSampleReqQuery; -import com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO; import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery; import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO; -import com.ycwl.basic.ratelimiter.FixedRateLimiter; import com.ycwl.basic.service.task.TaskFaceService; -import com.ycwl.basic.utils.DateUtils; -import lombok.extern.java.Log; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.junit4.SpringRunner; import java.util.Arrays; -import java.util.Collections; -import java.util.Date; import java.util.List; -import java.util.Objects; -import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.stream.Collectors; - -import static com.ycwl.basic.constant.FaceConstant.USER_FACE_DB_NAME; -import static org.junit.jupiter.api.Assertions.*; @Slf4j @SpringBootTest @@ -58,16 +35,6 @@ public class FaceCleanerTest { @Autowired private ScenicMapper scenicMapper; - private IAcsClient getClient() { - DefaultProfile profile = DefaultProfile.getProfile( - faceDetectConfig.getRegion(),faceDetectConfig.getAccessKeyId(), faceDetectConfig.getAccessKeySecret()); - IAcsClient client = new DefaultAcsClient(profile); - return client; - } - private static final String DATE_FORMAT="yyyyMMddHHmmss"; - private final FixedRateLimiter entityLimiter1 = new FixedRateLimiter(600, TimeUnit.MILLISECONDS); - private final FixedRateLimiter entityLimiter2 = new FixedRateLimiter(600, TimeUnit.MILLISECONDS); - @Test public void test() { ScenicReqQuery scenicQuery = new ScenicReqQuery();