添加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.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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user