diff --git a/src/main/java/com/ycwl/basic/service/pc/FaceDetectLogAiCamService.java b/src/main/java/com/ycwl/basic/service/pc/FaceDetectLogAiCamService.java index 903a1ed0..36ac2614 100644 --- a/src/main/java/com/ycwl/basic/service/pc/FaceDetectLogAiCamService.java +++ b/src/main/java/com/ycwl/basic/service/pc/FaceDetectLogAiCamService.java @@ -11,11 +11,10 @@ public interface FaceDetectLogAiCamService { /** * 搜索人脸库并保存日志 * @param scenicId 景区ID - * @param deviceId 设备ID - * @param faceSampleId 人脸样本ID + * @param faceId 人脸样本ID * @param faceUrl 人脸URL * @param adapter 人脸适配器 * @return 搜索结果 */ - SearchFaceResp searchAndLog(Long scenicId, Long deviceId, Long faceSampleId, String faceUrl, IFaceBodyAdapter adapter); + void searchAndLog(Long scenicId, Long faceId, String faceUrl, IFaceBodyAdapter adapter); } diff --git a/src/main/java/com/ycwl/basic/service/pc/impl/FaceDetectLogAiCamServiceImpl.java b/src/main/java/com/ycwl/basic/service/pc/impl/FaceDetectLogAiCamServiceImpl.java index 0d22dc29..1531358e 100644 --- a/src/main/java/com/ycwl/basic/service/pc/impl/FaceDetectLogAiCamServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/pc/impl/FaceDetectLogAiCamServiceImpl.java @@ -2,8 +2,10 @@ package com.ycwl.basic.service.pc.impl; import com.ycwl.basic.facebody.adapter.IFaceBodyAdapter; import com.ycwl.basic.facebody.entity.SearchFaceResp; +import com.ycwl.basic.integration.device.dto.device.DeviceV2DTO; import com.ycwl.basic.mapper.FaceDetectLogAiCamMapper; import com.ycwl.basic.model.pc.faceDetectLog.entity.FaceDetectLogAiCamEntity; +import com.ycwl.basic.repository.DeviceRepository; import com.ycwl.basic.service.pc.FaceDetectLogAiCamService; import com.ycwl.basic.utils.JacksonUtil; import lombok.RequiredArgsConstructor; @@ -11,6 +13,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.Date; +import java.util.List; @Slf4j @Service @@ -18,17 +21,28 @@ import java.util.Date; public class FaceDetectLogAiCamServiceImpl implements FaceDetectLogAiCamService { private final FaceDetectLogAiCamMapper faceDetectLogAiCamMapper; + private final DeviceRepository deviceRepository; @Override - public SearchFaceResp searchAndLog(Long scenicId, Long deviceId, Long faceSampleId, String faceUrl, IFaceBodyAdapter adapter) { + public void searchAndLog(Long scenicId, Long faceId, String faceUrl, IFaceBodyAdapter adapter) { + List devices = deviceRepository.getAllDeviceByScenicId(scenicId); + for (DeviceV2DTO device : devices) { + if (!device.getType().equals("AI_CAM")) { + continue; + } + searchDeviceAndLog(scenicId, device.getId(), faceId, faceUrl, adapter); + } + } + + private SearchFaceResp searchDeviceAndLog(Long scenicId, Long deviceId, Long faceId, String faceUrl, IFaceBodyAdapter adapter) { String dbName = "AiCam" + deviceId; - + SearchFaceResp resp = null; try { // 调用适配器搜索人脸 resp = adapter.searchFace(dbName, faceUrl); } catch (Exception e) { - log.error("AI相机人脸搜索异常: scenicId={}, deviceId={}, faceSampleId={}", scenicId, deviceId, faceSampleId, e); + log.error("AI相机人脸搜索异常: scenicId={}, deviceId={}, faceSampleId={}", scenicId, deviceId, faceId, e); // 发生异常时记录空结果或错误信息,视业务需求而定。这里暂不中断流程,继续记录日志 } @@ -37,7 +51,7 @@ public class FaceDetectLogAiCamServiceImpl implements FaceDetectLogAiCamService FaceDetectLogAiCamEntity logEntity = new FaceDetectLogAiCamEntity(); logEntity.setScenicId(scenicId); logEntity.setDeviceId(deviceId); - logEntity.setFaceId(faceSampleId); + logEntity.setFaceId(faceId); logEntity.setDbName(dbName); logEntity.setFaceUrl(faceUrl); logEntity.setCreateTime(new Date()); @@ -47,17 +61,17 @@ public class FaceDetectLogAiCamServiceImpl implements FaceDetectLogAiCamService // SearchFaceResp 的 getOriginalFaceScore 通常是图片质量分,getFirstMatchRate 是最佳匹配分 // 需根据 SearchFaceResp 定义确认。假设 getFirstMatchRate() 是匹配分 // 实际上 searchFace 返回的是匹配列表。 - + // 记录原始响应 logEntity.setMatchRawResult(JacksonUtil.toJSONString(resp)); } else { - logEntity.setMatchRawResult("{\"error\": \"search failed or exception\"}"); + logEntity.setMatchRawResult("{\"error\": \"search failed or exception\"}"); } faceDetectLogAiCamMapper.add(logEntity); } catch (Exception e) { - log.error("保存AI相机人脸识别日志失败: faceSampleId={}", faceSampleId, e); + log.error("保存AI相机人脸识别日志失败: faceSampleId={}", faceId, e); } return resp; diff --git a/src/main/java/com/ycwl/basic/service/pc/impl/FaceServiceImpl.java b/src/main/java/com/ycwl/basic/service/pc/impl/FaceServiceImpl.java index 2a89ee0f..8294205d 100644 --- a/src/main/java/com/ycwl/basic/service/pc/impl/FaceServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/pc/impl/FaceServiceImpl.java @@ -9,7 +9,6 @@ import com.ycwl.basic.constant.BaseContextHandler; import com.ycwl.basic.exception.BaseException; import com.ycwl.basic.facebody.adapter.IFaceBodyAdapter; import com.ycwl.basic.facebody.entity.SearchFaceResultItem; -import com.ycwl.basic.integration.common.manager.DeviceConfigManager; import com.ycwl.basic.mapper.FaceSampleMapper; import com.ycwl.basic.mapper.ProjectMapper; import com.ycwl.basic.mapper.SourceMapper; @@ -62,6 +61,7 @@ import com.ycwl.basic.repository.TemplateRepository; import com.ycwl.basic.repository.VideoRepository; import com.ycwl.basic.repository.VideoTaskRepository; import com.ycwl.basic.service.mobile.GoodsService; +import com.ycwl.basic.service.pc.FaceDetectLogAiCamService; import com.ycwl.basic.service.pc.FaceService; import com.ycwl.basic.service.pc.ScenicService; import com.ycwl.basic.constant.SourceType; @@ -71,7 +71,6 @@ import com.ycwl.basic.service.pc.helper.SearchResultMerger; import com.ycwl.basic.service.pc.helper.ScenicConfigFacade; import com.ycwl.basic.service.pc.orchestrator.FaceMatchingOrchestrator; import com.ycwl.basic.service.pc.processor.BuyStatusProcessor; -import com.ycwl.basic.service.pc.processor.FaceRecoveryStrategy; import com.ycwl.basic.service.pc.processor.SourceRelationProcessor; import com.ycwl.basic.service.pc.processor.VideoRecreationHandler; import com.ycwl.basic.service.pc.strategy.RematchContext; @@ -193,6 +192,8 @@ public class FaceServiceImpl implements FaceService { private IPriceCalculationService iPriceCalculationService; @Autowired private PuzzleTemplateMapper puzzleTemplateMapper; + @Autowired + private FaceDetectLogAiCamService faceDetectLogAiCamService; @Override public ApiResponse> pageQuery(FaceReqQuery faceReqQuery) { @@ -319,6 +320,9 @@ public class FaceServiceImpl implements FaceService { } } + if (org.apache.commons.lang3.Strings.CI.equals("aiCam", scene)) { + faceDetectLogAiCamService.searchAndLog(scenicId, newFaceId, faceUrl, faceBodyAdapter); + } return resp; }