From 616ab217e48a6eb9990c85e28e72d0d8ffba2658 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sat, 8 Nov 2025 00:47:33 +0800 Subject: [PATCH] =?UTF-8?q?feat(printer):=20=E6=96=B0=E5=A2=9E=E6=89=93?= =?UTF-8?q?=E5=8D=B0=E6=9C=BA=E5=A4=A7=E5=B1=8F=E5=AF=B9=E6=8E=A5=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加获取景区列表接口 - 实现根据景区ID查询设备列表功能 - 支持生成并返回二维码图片- 集成设备、景区和人脸样本数据查询- 提供微信小程序二维码生成功能 - 实现文件流输出与临时文件清理机制 --- .../printer/PrinterTvController.java | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 src/main/java/com/ycwl/basic/controller/printer/PrinterTvController.java diff --git a/src/main/java/com/ycwl/basic/controller/printer/PrinterTvController.java b/src/main/java/com/ycwl/basic/controller/printer/PrinterTvController.java new file mode 100644 index 00000000..18419fd4 --- /dev/null +++ b/src/main/java/com/ycwl/basic/controller/printer/PrinterTvController.java @@ -0,0 +1,97 @@ +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.device.service.DeviceIntegrationService; +import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2DTO; +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.repository.DeviceRepository; +import com.ycwl.basic.repository.FaceRepository; +import com.ycwl.basic.repository.ScenicRepository; +import com.ycwl.basic.service.pc.ScenicService; +import com.ycwl.basic.utils.ApiResponse; +import com.ycwl.basic.utils.WxMpUtil; +import jakarta.websocket.server.PathParam; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.OutputStream; +import jakarta.servlet.http.HttpServletResponse; + +import java.util.List; + +@IgnoreToken +// 打印机大屏对接接口 +@RestController +@RequestMapping("/printer/v1/tv") +@RequiredArgsConstructor +public class PrinterTvController { + + private final DeviceRepository deviceRepository; + private final ScenicRepository scenicRepository; + private final FaceRepository faceRepository; + + /** + * 获取景区列表 + * + * @return 景区列表 + */ + @GetMapping("/scenic/list") + public ApiResponse> getScenicList() { + ScenicReqQuery query = new ScenicReqQuery(); + query.setStatus("1"); // 只查询启用状态的景区 + return ApiResponse.success(scenicRepository.list(query)); + } + + /** + * 根据景区ID查询设备列表 + * + * @param scenicId 景区ID + * @return 设备列表 + */ + @GetMapping("/device/list") + public ApiResponse> getDeviceListByScenicId(@RequestParam Long scenicId) { + List result = deviceRepository.getAllDeviceByScenicId(scenicId); + return ApiResponse.success(result); + } + + @GetMapping("/{sampleId}/qrcode") + public void getQrcode(@PathVariable("sampleId") Long sampleId, HttpServletResponse response) throws Exception { + File qrcode = new File("qrcode_"+sampleId+".jpg"); + try { + FaceSampleEntity faceSample = faceRepository.getFaceSample(sampleId); + MpConfigEntity scenicMpConfig = scenicRepository.getScenicMpConfig(faceSample.getScenicId()); + WxMpUtil.generateUnlimitedWXAQRCode(scenicMpConfig.getAppId(), scenicMpConfig.getAppSecret(), "pages/videoSynthesis/from_face", sampleId.toString(), qrcode); + + // 设置响应头 + response.setContentType("image/jpeg"); + response.setHeader("Content-Disposition", "inline; filename=\"" + qrcode.getName() + "\""); + + // 将二维码文件写入响应输出流 + try (FileInputStream fis = new FileInputStream(qrcode); + OutputStream os = response.getOutputStream()) { + byte[] buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = fis.read(buffer)) != -1) { + os.write(buffer, 0, bytesRead); + } + os.flush(); + } + } finally { + // 删除临时文件 + if (qrcode.exists()) { + qrcode.delete(); + } + } + } +}