添加RedisTemplate,assureDB方法
This commit is contained in:
parent
30314ecd48
commit
c65cf7ba05
5
src/main/java/com/ycwl/basic/constant/FaceConstant.java
Normal file
5
src/main/java/com/ycwl/basic/constant/FaceConstant.java
Normal file
@ -0,0 +1,5 @@
|
||||
package com.ycwl.basic.constant;
|
||||
|
||||
public class FaceConstant {
|
||||
public static final String FACE_DB_NAME_PFX="face:db:";
|
||||
}
|
@ -9,11 +9,14 @@ import com.aliyuncs.facebody.model.v20191230.AddFaceResponse;
|
||||
import com.aliyuncs.facebody.model.v20191230.CreateFaceDbRequest;
|
||||
import com.aliyuncs.facebody.model.v20191230.DeleteFaceDbRequest;
|
||||
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.ListFaceEntitiesResponse;
|
||||
import com.aliyuncs.facebody.model.v20191230.SearchFaceRequest;
|
||||
import com.aliyuncs.facebody.model.v20191230.SearchFaceResponse;
|
||||
import com.ycwl.basic.config.FaceDetectConfig;
|
||||
import com.ycwl.basic.constant.FaceConstant;
|
||||
import com.ycwl.basic.exception.BaseException;
|
||||
import com.ycwl.basic.mapper.FaceMapper;
|
||||
import com.ycwl.basic.mapper.FaceSampleMapper;
|
||||
@ -31,6 +34,7 @@ import com.ycwl.basic.utils.AliFaceUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
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;
|
||||
@ -52,6 +56,8 @@ public class TaskFaceServiceImpl implements TaskFaceService {
|
||||
private ScenicMapper scenicMapper;
|
||||
@Autowired
|
||||
private FaceDetectConfig faceDetectConfig;
|
||||
@Autowired
|
||||
private RedisTemplate<String, String> redisTemplate;
|
||||
|
||||
private IAcsClient getClient() {
|
||||
DefaultProfile profile = DefaultProfile.getProfile(
|
||||
@ -59,6 +65,7 @@ public class TaskFaceServiceImpl implements TaskFaceService {
|
||||
IAcsClient client = new DefaultAcsClient(profile);
|
||||
return client;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SearchFaceRespVo searchFace(Long scenicId, Long faceId) {
|
||||
FaceRespVO faceRespVO = faceMapper.getById(faceId);
|
||||
@ -176,9 +183,9 @@ public class TaskFaceServiceImpl implements TaskFaceService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteFaceDB(Long scenicId) {
|
||||
public void deleteFaceDB(String dbName) {
|
||||
ListFaceEntitiesRequest request = new ListFaceEntitiesRequest();
|
||||
request.setDbName(scenicId.toString());
|
||||
request.setDbName(dbName);
|
||||
request.setLimit(200);
|
||||
IAcsClient client = getClient();
|
||||
try {
|
||||
@ -204,26 +211,60 @@ public class TaskFaceServiceImpl implements TaskFaceService {
|
||||
});
|
||||
}
|
||||
DeleteFaceDbRequest deleteFaceDbRequest = new DeleteFaceDbRequest();
|
||||
deleteFaceDbRequest.setName(scenicId.toString());
|
||||
try {
|
||||
client.getAcsResponse(deleteFaceDbRequest);
|
||||
} catch (ClientException e) {
|
||||
log.error("删除人脸数据库失败!", e);
|
||||
}
|
||||
deleteFaceDbRequest.setName(dbName);
|
||||
client.getAcsResponse(deleteFaceDbRequest);
|
||||
removeFaceDBCache(dbName);
|
||||
} catch (ClientException e) {
|
||||
log.error("删除人脸数据库失败!", e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createFaceDB(Long scenicId) {
|
||||
public void createFaceDB(String dbName) {
|
||||
try {
|
||||
CreateFaceDbRequest request = new CreateFaceDbRequest();
|
||||
request.setName(scenicId.toString());
|
||||
request.setName(dbName);
|
||||
IAcsClient client = getClient();
|
||||
client.getAcsResponse(request);
|
||||
addFaceDBCache(dbName);
|
||||
} catch (ClientException 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -13,7 +13,9 @@ public interface TaskFaceService {
|
||||
|
||||
void batchDeleteFace(Long scenicId);
|
||||
|
||||
void deleteFaceDB(Long scenicId);
|
||||
void deleteFaceDB(String scenicId);
|
||||
|
||||
void createFaceDB(Long scenicId);
|
||||
void createFaceDB(String scenicId);
|
||||
|
||||
void assureFaceDB(String scenicId);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user