diff --git a/src/main/java/com/ycwl/basic/controller/printer/PrinterTvController.java b/src/main/java/com/ycwl/basic/controller/printer/PrinterTvController.java index 98747bea..30296a5b 100644 --- a/src/main/java/com/ycwl/basic/controller/printer/PrinterTvController.java +++ b/src/main/java/com/ycwl/basic/controller/printer/PrinterTvController.java @@ -4,18 +4,16 @@ package com.ycwl.basic.controller.printer; import com.ycwl.basic.annotation.IgnoreToken; import com.ycwl.basic.integration.device.dto.device.DeviceV2DTO; import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2DTO; +import com.ycwl.basic.mapper.SourceMapper; import com.ycwl.basic.model.mobile.face.FaceRecognizeResp; import com.ycwl.basic.model.pc.face.entity.FaceEntity; import com.ycwl.basic.model.pc.faceSample.entity.FaceSampleEntity; import com.ycwl.basic.model.pc.mp.MpConfigEntity; import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery; -import com.ycwl.basic.model.pc.source.entity.MemberSourceEntity; import com.ycwl.basic.model.pc.source.entity.SourceEntity; import com.ycwl.basic.repository.DeviceRepository; import com.ycwl.basic.repository.FaceRepository; -import com.ycwl.basic.repository.MemberRelationRepository; import com.ycwl.basic.repository.ScenicRepository; -import com.ycwl.basic.repository.SourceRepository; import com.ycwl.basic.service.pc.FaceService; import com.ycwl.basic.utils.ApiResponse; import com.ycwl.basic.utils.WxMpUtil; @@ -32,7 +30,6 @@ import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.FileInputStream; import java.io.OutputStream; -import java.util.Collections; import java.util.List; @IgnoreToken @@ -46,8 +43,7 @@ public class PrinterTvController { private final ScenicRepository scenicRepository; private final FaceRepository faceRepository; private final FaceService pcFaceService; - private final MemberRelationRepository memberRelationRepository; - private final SourceRepository sourceRepository; + private final SourceMapper sourceMapper; /** * 获取景区列表 @@ -167,18 +163,16 @@ public class PrinterTvController { } /** - * 根据人脸样本ID查询图像素材 + * 根据人脸ID查询图像素材 * - * @param faceId 人脸样本ID + * @param faceId 人脸ID + * @param type 素材类型(默认为2-图片) * @return 匹配的source记录 */ @GetMapping("/{faceId}/source") public ApiResponse> getSourceByFaceId(@PathVariable Long faceId, @RequestParam(name = "type", required = false, defaultValue = "2") Integer type) { - List source = memberRelationRepository.listSourceByFaceRelation(faceId, type); - if (source == null) { - return ApiResponse.success(Collections.emptyList()); - } - return ApiResponse.success(source.stream().map(item -> sourceRepository.getSource(item.getSourceId())).toList()); + List sources = sourceMapper.listSourceByFaceRelation(faceId, type); + return ApiResponse.success(sources); } /** diff --git a/src/main/java/com/ycwl/basic/mapper/SourceMapper.java b/src/main/java/com/ycwl/basic/mapper/SourceMapper.java index 60ad3008..2ffe8d12 100644 --- a/src/main/java/com/ycwl/basic/mapper/SourceMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/SourceMapper.java @@ -173,4 +173,12 @@ public interface SourceMapper { * @return 免费记录数 */ int countFreeRelationsByFaceIdAndType(Long faceId, Integer type); + + /** + * 根据faceId和type直接查询关联的source列表(避免N+1查询) + * @param faceId 人脸ID + * @param type 素材类型 + * @return source实体列表 + */ + List listSourceByFaceRelation(Long faceId, Integer type); } diff --git a/src/main/resources/mapper/SourceMapper.xml b/src/main/resources/mapper/SourceMapper.xml index da5b1c5e..eba7ffd6 100644 --- a/src/main/resources/mapper/SourceMapper.xml +++ b/src/main/resources/mapper/SourceMapper.xml @@ -512,4 +512,15 @@ SELECT COUNT(*) FROM member_source WHERE face_id = #{faceId} AND `type` = #{type} AND is_free = 1 + +