规整下代码

This commit is contained in:
Jerry Yan 2025-04-05 14:54:44 +08:00
parent 117a13cc2c
commit b4aa3619ba
9 changed files with 23 additions and 60 deletions

View File

@ -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;

View File

@ -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("删除成功");
}

View File

@ -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);
}

View File

@ -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);

View File

@ -84,7 +84,7 @@ public class FaceCleaner {
req.setUpdateEndTime(DateUtil.offsetDay(DateUtil.beginOfDay(new Date()), -sampleStoreDay));
List<FaceRespVO> 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());
}

View File

@ -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;

View File

@ -1,4 +1,4 @@
package com.ycwl.basic.ratelimiter;
package com.ycwl.basic.utils.ratelimiter;
import java.util.concurrent.TimeUnit;

View File

@ -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;

View File

@ -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();