From 32297dc29ccd57cfc45f458f033cc784d2e4e814 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sat, 3 Jan 2026 23:46:52 +0800 Subject: [PATCH] =?UTF-8?q?refactor(printer):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E4=BA=BA=E8=84=B8=E7=B4=A0=E6=9D=90=E6=9F=A5=E8=AF=A2=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除不必要的MemberSourceEntity和相关Repository依赖 - 将数据查询逻辑从Repository层迁移到Mapper层 - 添加type参数支持素材类型过滤 - 修复方法注释中的人脸ID描述错误 - 直接返回SourceEntity列表避免额外的转换操作 --- .../printer/PrinterTvController.java | 20 +++++++------------ .../com/ycwl/basic/mapper/SourceMapper.java | 8 ++++++++ src/main/resources/mapper/SourceMapper.xml | 11 ++++++++++ 3 files changed, 26 insertions(+), 13 deletions(-) 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 + +