避免重复创建

This commit is contained in:
2025-04-07 09:46:16 +08:00
parent 389c28300f
commit 84287df87b
10 changed files with 128 additions and 221 deletions

View File

@@ -1,10 +1,12 @@
package com.ycwl.basic.service.pc;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.facebody.adapter.IFaceBodyAdapter;
import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity;
import com.ycwl.basic.model.pc.scenic.req.ScenicAddOrUpdateReq;
import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery;
import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO;
import com.ycwl.basic.storage.adapters.IStorageAdapter;
import com.ycwl.basic.utils.ApiResponse;
import java.util.List;
@@ -31,4 +33,8 @@ public interface ScenicService {
ScenicConfigEntity getConfig(Long id);
void saveConfig(Long configId, ScenicConfigEntity config);
IStorageAdapter getScenicStorageAdapter(Long scenicId);
IFaceBodyAdapter getScenicFaceBodyAdapter(Long scenicId);
}

View File

@@ -28,6 +28,7 @@ import com.ycwl.basic.model.task.resp.SearchFaceRespVo;
import com.ycwl.basic.repository.FaceRepository;
import com.ycwl.basic.repository.ScenicRepository;
import com.ycwl.basic.service.pc.FaceService;
import com.ycwl.basic.service.pc.ScenicService;
import com.ycwl.basic.service.task.TaskFaceService;
import com.ycwl.basic.service.task.TaskService;
import com.ycwl.basic.storage.StorageFactory;
@@ -75,6 +76,8 @@ public class FaceServiceImpl implements FaceService {
private VideoMapper videoMapper;
@Autowired
private ScenicRepository scenicRepository;
@Autowired
private ScenicService scenicService;
@Override
public ApiResponse<PageInfo<FaceRespVO>> pageQuery(FaceReqQuery faceReqQuery) {
@@ -303,7 +306,8 @@ public class FaceServiceImpl implements FaceService {
new Thread(() -> {
sourceMapper.deleteNotBuyFaceRelation(face.getMemberId(), faceId);
videoMapper.deleteNotBuyFaceRelations(face.getMemberId(), faceId);
faceService.deleteFaceSample(face.getScenicId(), USER_FACE_DB_NAME+face.getScenicId().toString(), faceId.toString());
IFaceBodyAdapter adapter = scenicService.getScenicFaceBodyAdapter(face.getScenicId());
adapter.deleteFace(USER_FACE_DB_NAME+face.getScenicId().toString(), faceId.toString());
}).start();
return ApiResponse.success("删除成功");
}

View File

@@ -15,6 +15,8 @@ import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO;
import com.ycwl.basic.repository.ScenicRepository;
import com.ycwl.basic.service.pc.ScenicService;
import com.ycwl.basic.service.task.TaskFaceService;
import com.ycwl.basic.storage.StorageFactory;
import com.ycwl.basic.storage.adapters.IStorageAdapter;
import com.ycwl.basic.utils.ApiResponse;
import com.ycwl.basic.utils.SnowFlakeUtil;
import lombok.extern.slf4j.Slf4j;
@@ -25,6 +27,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import static com.ycwl.basic.constant.FaceConstant.USER_FACE_DB_NAME;
@@ -93,17 +96,15 @@ public class ScenicServiceImpl implements ScenicService {
int i = scenicMapper.deleteById(id);
if (i > 0) {
scenicAccountMapper.deleteByScenicId(id);
ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(id);
if (scenicConfig != null && scenicConfig.getFaceType() != null) {
IFaceBodyAdapter adapter = FaceBodyFactory.getAdapter(scenicConfig.getFaceType());
adapter.loadConfig(JSONObject.parseObject(scenicConfig.getFaceConfigJson(), Map.class));
(new Thread(() -> {
adapter.deleteFaceDb(id.toString());
adapter.deleteFaceDb(USER_FACE_DB_NAME + id);
})).start();
}
IFaceBodyAdapter adapter = getScenicFaceBodyAdapter(id);
(new Thread(() -> {
adapter.deleteFaceDb(id.toString());
adapter.deleteFaceDb(USER_FACE_DB_NAME + id);
})).start();
scenicMapper.deleteConfigByScenicId(id);
scenicRepository.clearCache(id);
scenicFaceBodyAdapterMap.remove(id);
scenicStorageAdapterMap.remove(id);
return ApiResponse.success(true);
}else {
return ApiResponse.fail("景区删除失败");
@@ -194,5 +195,39 @@ public class ScenicServiceImpl implements ScenicService {
}
scenicMapper.updateConfigById(config);
scenicRepository.clearCache(config.getScenicId());
scenicFaceBodyAdapterMap.remove(config.getScenicId());
scenicStorageAdapterMap.remove(config.getScenicId());
}
private static final Map<Long, IStorageAdapter> scenicStorageAdapterMap = new ConcurrentHashMap<>();
@Override
public IStorageAdapter getScenicStorageAdapter(Long scenicId) {
return scenicStorageAdapterMap.computeIfAbsent(scenicId, (key) -> {
IStorageAdapter adapter;
ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(scenicId);
if (scenicConfig != null && scenicConfig.getStoreType() != null) {
adapter = StorageFactory.get(scenicConfig.getStoreType());
adapter.loadConfig(JSONObject.parseObject(scenicConfig.getStoreConfigJson(), Map.class));
} else {
adapter = StorageFactory.use("video");
}
return adapter;
});
}
private static final Map<Long, IFaceBodyAdapter> scenicFaceBodyAdapterMap = new ConcurrentHashMap<>();
@Override
public IFaceBodyAdapter getScenicFaceBodyAdapter(Long scenicId) {
return scenicFaceBodyAdapterMap.computeIfAbsent(scenicId, (key) -> {
IFaceBodyAdapter adapter;
ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(scenicId);
if (scenicConfig != null && scenicConfig.getFaceType() != null) {
adapter = FaceBodyFactory.getAdapter(scenicConfig.getFaceType());
adapter.loadConfig(JSONObject.parseObject(scenicConfig.getFaceConfigJson(), Map.class));
} else {
adapter = FaceBodyFactory.use();
}
return adapter;
});
}
}