规整下代码

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.AliFaceBodyConfig;
import com.ycwl.basic.facebody.entity.SearchFaceResp; import com.ycwl.basic.facebody.entity.SearchFaceResp;
import com.ycwl.basic.facebody.entity.SearchFaceResultItem; import com.ycwl.basic.facebody.entity.SearchFaceResultItem;
import com.ycwl.basic.ratelimiter.FixedRateLimiter; import com.ycwl.basic.utils.ratelimiter.FixedRateLimiter;
import com.ycwl.basic.ratelimiter.IRateLimiter; import com.ycwl.basic.utils.ratelimiter.IRateLimiter;
import lombok.Getter; import lombok.Getter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;

View File

@ -299,7 +299,7 @@ public class FaceServiceImpl implements FaceService {
new Thread(() -> { new Thread(() -> {
sourceMapper.deleteNotBuyFaceRelation(face.getMemberId(), faceId); sourceMapper.deleteNotBuyFaceRelation(face.getMemberId(), faceId);
videoMapper.deleteNotBuyFaceRelations(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(); }).start();
return ApiResponse.success("删除成功"); return ApiResponse.success("删除成功");
} }

View File

@ -14,7 +14,7 @@ public interface TaskFaceService {
String uploadFile(MultipartFile file, Long userId); 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); 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 cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; 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.ListFaceEntitiesRequest;
import com.aliyuncs.facebody.model.v20191230.ListFaceEntitiesResponse; import com.aliyuncs.facebody.model.v20191230.ListFaceEntitiesResponse;
import com.aliyuncs.facebody.model.v20191230.SearchFaceRequest; import com.aliyuncs.facebody.model.v20191230.SearchFaceRequest;
import com.aliyuncs.facebody.model.v20191230.SearchFaceResponse;
import com.ycwl.basic.biz.OrderBiz; import com.ycwl.basic.biz.OrderBiz;
import com.ycwl.basic.constant.FaceConstant; import com.ycwl.basic.constant.FaceConstant;
import com.ycwl.basic.exception.BaseException; 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.MemberSourceEntity;
import com.ycwl.basic.model.pc.source.entity.SourceEntity; import com.ycwl.basic.model.pc.source.entity.SourceEntity;
import com.ycwl.basic.model.task.resp.SearchFaceRespVo; 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.DeviceRepository;
import com.ycwl.basic.repository.FaceRepository; import com.ycwl.basic.repository.FaceRepository;
import com.ycwl.basic.repository.ScenicRepository; 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.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient; import com.aliyuncs.IAcsClient;
import com.aliyuncs.profile.DefaultProfile;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
@ -91,8 +86,6 @@ public class TaskFaceServiceImpl implements TaskFaceService {
private SourceMapper sourceMapper; private SourceMapper sourceMapper;
@Autowired @Autowired
private OrderBiz orderBiz; 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 @Autowired
private ScenicRepository scenicRepository; private ScenicRepository scenicRepository;
@ -318,7 +311,7 @@ public class TaskFaceServiceImpl implements TaskFaceService {
listFaceEntitiesResponse.getData().getEntities().forEach(entity -> { listFaceEntitiesResponse.getData().getEntities().forEach(entity -> {
Date createdDate = new Date(entity.getCreatedAt()); Date createdDate = new Date(entity.getCreatedAt());
if (createdDate.before(endDate)) { if (createdDate.before(endDate)) {
deleteFaceSample(entity.getDbName(), entity.getEntityId()); deleteFaceSample(scenicId, entity.getDbName(), entity.getEntityId());
} else { } else {
count.incrementAndGet(); count.incrementAndGet();
log.info("当前景区{},人脸样本:{}未过期", scenicId, entity.getEntityId()); log.info("当前景区{},人脸样本:{}未过期", scenicId, entity.getEntityId());
@ -349,7 +342,7 @@ public class TaskFaceServiceImpl implements TaskFaceService {
return; return;
} }
if (DateUtils.parse(dateString, DATE_FORMAT).before(endDate)) { if (DateUtils.parse(dateString, DATE_FORMAT).before(endDate)) {
deleteFaceSample(entity.getDbName(), entity.getEntityId()); deleteFaceSample(scenicId, entity.getDbName(), entity.getEntityId());
} else { } else {
count.incrementAndGet(); count.incrementAndGet();
log.info("当前景区{},人脸样本:{}未过期", scenicId, entity.getEntityId()); log.info("当前景区{},人脸样本:{}未过期", scenicId, entity.getEntityId());
@ -387,7 +380,7 @@ public class TaskFaceServiceImpl implements TaskFaceService {
return; return;
} }
if (DateUtils.parse(dateString, DATE_FORMAT).before(endDate)) { if (DateUtils.parse(dateString, DATE_FORMAT).before(endDate)) {
deleteFaceSample(entity.getDbName(), entity.getEntityId()); deleteFaceSample(scenicId, entity.getDbName(), entity.getEntityId());
} else { } else {
count.incrementAndGet(); count.incrementAndGet();
log.info("当前景区{},人脸样本:{}未过期", scenicId, entity.getEntityId()); log.info("当前景区{},人脸样本:{}未过期", scenicId, entity.getEntityId());
@ -403,7 +396,7 @@ public class TaskFaceServiceImpl implements TaskFaceService {
return; return;
} }
faceSampleList.forEach(faceSample -> { faceSampleList.forEach(faceSample -> {
boolean success = deleteFaceSample(String.valueOf(scenicId), generateEntityId(faceSample)); boolean success = deleteFaceSample(scenicId, String.valueOf(scenicId), generateEntityId(faceSample));
if (success) { if (success) {
log.info("当前景区{}人脸样本ID{},删除成功", scenicId, faceSample.getId()); log.info("当前景区{}人脸样本ID{},删除成功", scenicId, faceSample.getId());
faceSampleMapper.deleteById(faceSample.getId()); faceSampleMapper.deleteById(faceSample.getId());
@ -438,15 +431,18 @@ public class TaskFaceServiceImpl implements TaskFaceService {
} }
@Override @Override
public boolean deleteFaceSample(String dbName, String entityId) { public boolean deleteFaceSample(Long scenicId, String dbName, String entityId) {
DeleteFaceEntityRequest deleteFaceEntityRequest = new DeleteFaceEntityRequest(); ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(scenicId);
deleteFaceEntityRequest.setDbName(dbName); IFaceBodyAdapter faceBodyAdapter;
deleteFaceEntityRequest.setEntityId(entityId); if (scenicConfig != null && scenicConfig.getFaceType() != null) {
try { faceBodyAdapter = FaceBodyFactory.getAdapter(scenicConfig.getFaceType());
deleteEntityLimiter.acquire(); faceBodyAdapter.loadConfig(JSONObject.parseObject(scenicConfig.getFaceConfigJson(), Map.class));
} else {
faceBodyAdapter = FaceBodyFactory.use();
}
log.info("删除{}人脸实体:{}", dbName, entityId); log.info("删除{}人脸实体:{}", dbName, entityId);
IAcsClient client = getClient(); try {
client.getAcsResponse(deleteFaceEntityRequest); faceBodyAdapter.deleteFace(dbName, entityId);
return true; return true;
} catch (Exception e) { } catch (Exception e) {
log.error("删除人脸样本失败!", e); log.error("删除人脸样本失败!", e);

View File

@ -84,7 +84,7 @@ public class FaceCleaner {
req.setUpdateEndTime(DateUtil.offsetDay(DateUtil.beginOfDay(new Date()), -sampleStoreDay)); req.setUpdateEndTime(DateUtil.offsetDay(DateUtil.beginOfDay(new Date()), -sampleStoreDay));
List<FaceRespVO> list = faceMapper.list(req); List<FaceRespVO> list = faceMapper.list(req);
list.forEach(face -> { 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) { if (result) {
faceMapper.deleteById(face.getId()); 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.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor; 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; 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.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.ScheduledThreadPoolExecutor;

View File

@ -2,48 +2,25 @@ package com.ycwl.basic.task;
import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient; 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.aliyuncs.profile.DefaultProfile;
import com.ycwl.basic.mapper.FaceMapper; import com.ycwl.basic.mapper.FaceMapper;
import com.ycwl.basic.mapper.FaceSampleMapper; import com.ycwl.basic.mapper.FaceSampleMapper;
import com.ycwl.basic.mapper.ScenicMapper; 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.req.ScenicReqQuery;
import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO; 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.service.task.TaskFaceService;
import com.ycwl.basic.utils.DateUtils;
import lombok.extern.java.Log;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit; 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 @Slf4j
@SpringBootTest @SpringBootTest
@ -58,16 +35,6 @@ public class FaceCleanerTest {
@Autowired @Autowired
private ScenicMapper scenicMapper; 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 @Test
public void test() { public void test() {
ScenicReqQuery scenicQuery = new ScenicReqQuery(); ScenicReqQuery scenicQuery = new ScenicReqQuery();