添加RedisTemplate,assureDB方法

This commit is contained in:
Jerry Yan 2024-12-26 14:04:23 +08:00
parent 30314ecd48
commit c65cf7ba05
3 changed files with 60 additions and 12 deletions

View File

@ -0,0 +1,5 @@
package com.ycwl.basic.constant;
public class FaceConstant {
public static final String FACE_DB_NAME_PFX="face:db:";
}

View File

@ -9,11 +9,14 @@ import com.aliyuncs.facebody.model.v20191230.AddFaceResponse;
import com.aliyuncs.facebody.model.v20191230.CreateFaceDbRequest; import com.aliyuncs.facebody.model.v20191230.CreateFaceDbRequest;
import com.aliyuncs.facebody.model.v20191230.DeleteFaceDbRequest; import com.aliyuncs.facebody.model.v20191230.DeleteFaceDbRequest;
import com.aliyuncs.facebody.model.v20191230.DeleteFaceEntityRequest; import com.aliyuncs.facebody.model.v20191230.DeleteFaceEntityRequest;
import com.aliyuncs.facebody.model.v20191230.ListFaceDbsRequest;
import com.aliyuncs.facebody.model.v20191230.ListFaceDbsResponse;
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.aliyuncs.facebody.model.v20191230.SearchFaceResponse;
import com.ycwl.basic.config.FaceDetectConfig; import com.ycwl.basic.config.FaceDetectConfig;
import com.ycwl.basic.constant.FaceConstant;
import com.ycwl.basic.exception.BaseException; import com.ycwl.basic.exception.BaseException;
import com.ycwl.basic.mapper.FaceMapper; import com.ycwl.basic.mapper.FaceMapper;
import com.ycwl.basic.mapper.FaceSampleMapper; import com.ycwl.basic.mapper.FaceSampleMapper;
@ -31,6 +34,7 @@ import com.ycwl.basic.utils.AliFaceUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; 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.stereotype.Service; import org.springframework.stereotype.Service;
import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient; import com.aliyuncs.IAcsClient;
@ -52,6 +56,8 @@ public class TaskFaceServiceImpl implements TaskFaceService {
private ScenicMapper scenicMapper; private ScenicMapper scenicMapper;
@Autowired @Autowired
private FaceDetectConfig faceDetectConfig; private FaceDetectConfig faceDetectConfig;
@Autowired
private RedisTemplate<String, String> redisTemplate;
private IAcsClient getClient() { private IAcsClient getClient() {
DefaultProfile profile = DefaultProfile.getProfile( DefaultProfile profile = DefaultProfile.getProfile(
@ -59,6 +65,7 @@ public class TaskFaceServiceImpl implements TaskFaceService {
IAcsClient client = new DefaultAcsClient(profile); IAcsClient client = new DefaultAcsClient(profile);
return client; return client;
} }
@Override @Override
public SearchFaceRespVo searchFace(Long scenicId, Long faceId) { public SearchFaceRespVo searchFace(Long scenicId, Long faceId) {
FaceRespVO faceRespVO = faceMapper.getById(faceId); FaceRespVO faceRespVO = faceMapper.getById(faceId);
@ -176,9 +183,9 @@ public class TaskFaceServiceImpl implements TaskFaceService {
} }
@Override @Override
public void deleteFaceDB(Long scenicId) { public void deleteFaceDB(String dbName) {
ListFaceEntitiesRequest request = new ListFaceEntitiesRequest(); ListFaceEntitiesRequest request = new ListFaceEntitiesRequest();
request.setDbName(scenicId.toString()); request.setDbName(dbName);
request.setLimit(200); request.setLimit(200);
IAcsClient client = getClient(); IAcsClient client = getClient();
try { try {
@ -204,26 +211,60 @@ public class TaskFaceServiceImpl implements TaskFaceService {
}); });
} }
DeleteFaceDbRequest deleteFaceDbRequest = new DeleteFaceDbRequest(); DeleteFaceDbRequest deleteFaceDbRequest = new DeleteFaceDbRequest();
deleteFaceDbRequest.setName(scenicId.toString()); deleteFaceDbRequest.setName(dbName);
try { client.getAcsResponse(deleteFaceDbRequest);
client.getAcsResponse(deleteFaceDbRequest); removeFaceDBCache(dbName);
} catch (ClientException e) {
log.error("删除人脸数据库失败!", e);
}
} catch (ClientException e) { } catch (ClientException e) {
log.error("删除人脸数据库失败!", e); log.error("删除人脸数据库失败!", e);
} }
} }
@Override @Override
public void createFaceDB(Long scenicId) { public void createFaceDB(String dbName) {
try { try {
CreateFaceDbRequest request = new CreateFaceDbRequest(); CreateFaceDbRequest request = new CreateFaceDbRequest();
request.setName(scenicId.toString()); request.setName(dbName);
IAcsClient client = getClient(); IAcsClient client = getClient();
client.getAcsResponse(request); client.getAcsResponse(request);
addFaceDBCache(dbName);
} catch (ClientException e) { } catch (ClientException e) {
log.error("阿里云添加人脸数据库失败!", e); log.error("阿里云添加人脸数据库失败!", e);
} }
} }
public void addFaceDBCache(String dbName) {
redisTemplate.opsForValue().set(FaceConstant.FACE_DB_NAME_PFX + dbName, "1");
}
public Boolean removeFaceDBCache(String dbName) {
return redisTemplate.delete(FaceConstant.FACE_DB_NAME_PFX + dbName);
}
public Boolean clearFaceDBCache() {
return redisTemplate.delete(FaceConstant.FACE_DB_NAME_PFX + "*");
}
@Override
public void assureFaceDB(String dbName) {
if (redisTemplate.hasKey(FaceConstant.FACE_DB_NAME_PFX + dbName)) {
return;
}
try {
ListFaceDbsRequest request = new ListFaceDbsRequest();
request.setLimit(Long.MAX_VALUE);
IAcsClient client = getClient();
ListFaceDbsResponse response = client.getAcsResponse(request);
if (response.getData().getDbList() == null) {
return;
}
boolean mismatch = response.getData().getDbList().stream().peek(item -> {
redisTemplate.opsForValue().set(FaceConstant.FACE_DB_NAME_PFX + dbName, "1");
}).noneMatch(db -> db.getName().equals(dbName));
if (mismatch) {
createFaceDB(dbName);
}
} catch (ClientException e) {
log.error("阿里云确保人脸数据库失败!", e);
}
}
} }

View File

@ -13,7 +13,9 @@ public interface TaskFaceService {
void batchDeleteFace(Long scenicId); void batchDeleteFace(Long scenicId);
void deleteFaceDB(Long scenicId); void deleteFaceDB(String scenicId);
void createFaceDB(Long scenicId); void createFaceDB(String scenicId);
void assureFaceDB(String scenicId);
} }