From d1aab1459f8904502c74c363b141d57433ec0ad9 Mon Sep 17 00:00:00 2001 From: mirage <1127314491@qq.com> Date: Sat, 28 Feb 2026 15:57:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E8=8E=B7=E5=8F=96=E4=BA=8C=E7=BB=B4?= =?UTF-8?q?=E7=A0=81=E5=9B=BE=E7=89=87=E4=BB=A5=E5=8F=8AURL=E7=9A=84?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E7=8B=AC=E7=AB=8B=E6=8A=BD=E5=87=BA=E6=9D=A5?= =?UTF-8?q?,=20=E6=96=B9=E4=BE=BF=E4=B8=A4=E4=B8=AA=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E5=90=8C=E4=B8=80=E5=A5=97=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/src/views/teacher/teacher copy/edit.vue | 3 +- .../admin/controller/TeacherController.java | 7 +- .../mdd/admin/service/ITeacherService.java | 17 ----- .../service/impl/TeacherServiceImpl.java | 50 ------------- .../com/mdd/common/service/QrCodeService.java | 73 +++++++++++++++++++ .../front/controller/TeacherController.java | 24 ++++++ 6 files changed, 104 insertions(+), 70 deletions(-) create mode 100644 server/like-common/src/main/java/com/mdd/common/service/QrCodeService.java diff --git a/admin/src/views/teacher/teacher copy/edit.vue b/admin/src/views/teacher/teacher copy/edit.vue index 44e8b4c5..426640cc 100644 --- a/admin/src/views/teacher/teacher copy/edit.vue +++ b/admin/src/views/teacher/teacher copy/edit.vue @@ -31,13 +31,14 @@ + getQrCodeUrl(@Validated @IDMust() @RequestParam("id") Integer id) { - return iTeacherService.getQrCodeUrl(id); + return qrCodeService.getQrCodeUrl(id); } @GetMapping("/qrcode/image") @ApiOperation(value = "获取二维码图片流", notes = "带鉴权返回教师二维码图片,用于前端展示与下载") public ResponseEntity getQrCodeImage(@Validated @IDMust() @RequestParam("id") Integer id) { - byte[] bytes = iTeacherService.getQrCodeImageBytes(id); + byte[] bytes = qrCodeService.getQrCodeImageBytes(id); if (bytes == null || bytes.length == 0) { return ResponseEntity.notFound().build(); } diff --git a/server/like-admin/src/main/java/com/mdd/admin/service/ITeacherService.java b/server/like-admin/src/main/java/com/mdd/admin/service/ITeacherService.java index bc3389ca..843b951f 100644 --- a/server/like-admin/src/main/java/com/mdd/admin/service/ITeacherService.java +++ b/server/like-admin/src/main/java/com/mdd/admin/service/ITeacherService.java @@ -74,23 +74,6 @@ public interface ITeacherService { */ AjaxResult generateInvitationCode(Integer teacherId); - /** - * 获取二维码图片URL - * - * @param teacherId 教师ID - * @return AjaxResult 返回二维码图片的绝对URL - * @author gyp - */ - AjaxResult getQrCodeUrl(Integer teacherId); - - /** - * 获取二维码图片字节流(用于带鉴权的图片展示与下载) - * - * @param teacherId 教师ID - * @return 图片字节数组,不存在时返回 null - */ - byte[] getQrCodeImageBytes(Integer teacherId); - /** * 教师下拉选项列表(仅id和姓名) */ diff --git a/server/like-admin/src/main/java/com/mdd/admin/service/impl/TeacherServiceImpl.java b/server/like-admin/src/main/java/com/mdd/admin/service/impl/TeacherServiceImpl.java index c8359576..1175c69a 100644 --- a/server/like-admin/src/main/java/com/mdd/admin/service/impl/TeacherServiceImpl.java +++ b/server/like-admin/src/main/java/com/mdd/admin/service/impl/TeacherServiceImpl.java @@ -548,56 +548,6 @@ public class TeacherServiceImpl implements ITeacherService { } } - /** - * 获取二维码图片URL - * - * @param teacherId 教师ID - * @return AjaxResult 返回二维码图片的绝对URL - */ - @Override - public AjaxResult getQrCodeUrl(Integer teacherId) { - Teacher teacher = teacherMapper.selectOne( - new QueryWrapper() - .eq("teacher_id", teacherId) - .last("limit 1")); - - Assert.notNull(teacher, "教师不存在!"); - - if (teacher.getQrcodeUrl() == null || teacher.getQrcodeUrl().isEmpty()) { - return AjaxResult.failed("该教师尚未生成二维码,请先生成邀请码"); - } - - // 转换为后台端可访问的绝对URL(/adminapi/uploads/**) - String absoluteUrl = UrlUtils.toAdminAbsoluteUrl(teacher.getQrcodeUrl()); - return AjaxResult.success(absoluteUrl); - } - - @Override - public byte[] getQrCodeImageBytes(Integer teacherId) { - Teacher teacher = teacherMapper.selectOne( - new QueryWrapper() - .eq("teacher_id", teacherId) - .last("limit 1")); - if (teacher == null || teacher.getQrcodeUrl() == null || teacher.getQrcodeUrl().isEmpty()) { - return null; - } - String engine = ConfigUtils.get("storage", "default", "local"); - engine = engine == null || engine.isEmpty() ? "local" : engine; - if (!"local".equals(engine)) { - return null; - } - String path = teacher.getQrcodeUrl().startsWith("/") ? teacher.getQrcodeUrl().substring(1) : teacher.getQrcodeUrl(); - java.io.File file = new java.io.File(path); - if (!file.exists() || !file.isFile()) { - return null; - } - try { - return java.nio.file.Files.readAllBytes(file.toPath()); - } catch (java.io.IOException e) { - return null; - } - } - /** * 删除旧的二维码文件 * diff --git a/server/like-common/src/main/java/com/mdd/common/service/QrCodeService.java b/server/like-common/src/main/java/com/mdd/common/service/QrCodeService.java new file mode 100644 index 00000000..4224ccad --- /dev/null +++ b/server/like-common/src/main/java/com/mdd/common/service/QrCodeService.java @@ -0,0 +1,73 @@ +package com.mdd.common.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.mdd.common.core.AjaxResult; +import com.mdd.common.entity.Teacher; +import com.mdd.common.mapper.TeacherMapper; +import com.mdd.common.util.ConfigUtils; +import com.mdd.common.util.UrlUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import javax.annotation.Resource; + +@Service +public class QrCodeService { + + @Resource + private TeacherMapper teacherMapper; + + /** + * 获取二维码图片URL + * + * @param teacherId 教师ID + * @return AjaxResult 返回二维码图片的绝对URL + */ + public AjaxResult getQrCodeUrl(Integer teacherId) { + Teacher teacher = teacherMapper.selectOne( + new QueryWrapper() + .eq("teacher_id", teacherId) + .last("limit 1")); + + Assert.notNull(teacher, "教师不存在!"); + + if (teacher.getQrcodeUrl() == null || teacher.getQrcodeUrl().isEmpty()) { + return AjaxResult.failed("该教师尚未生成二维码,请先生成邀请码"); + } + + // 转换为后台端可访问的绝对URL(/adminapi/uploads/**) + String absoluteUrl = UrlUtils.toAdminAbsoluteUrl(teacher.getQrcodeUrl()); + return AjaxResult.success(absoluteUrl); + } + + /** + * 获取二维码图片字节流(用于带鉴权的图片展示与下载) + * + * @param teacherId 教师ID + * @return 图片字节数组,不存在时返回 null + */ + public byte[] getQrCodeImageBytes(Integer teacherId) { + Teacher teacher = teacherMapper.selectOne( + new QueryWrapper() + .eq("teacher_id", teacherId) + .last("limit 1")); + if (teacher == null || teacher.getQrcodeUrl() == null || teacher.getQrcodeUrl().isEmpty()) { + return null; + } + String engine = ConfigUtils.get("storage", "default", "local"); + engine = engine == null || engine.isEmpty() ? "local" : engine; + if (!"local".equals(engine)) { + return null; + } + String path = teacher.getQrcodeUrl().startsWith("/") ? teacher.getQrcodeUrl().substring(1) : teacher.getQrcodeUrl(); + java.io.File file = new java.io.File(path); + if (!file.exists() || !file.isFile()) { + return null; + } + try { + return java.nio.file.Files.readAllBytes(file.toPath()); + } catch (java.io.IOException e) { + return null; + } + } +} diff --git a/server/like-front/src/main/java/com/mdd/front/controller/TeacherController.java b/server/like-front/src/main/java/com/mdd/front/controller/TeacherController.java index d52b6160..873ef4c1 100644 --- a/server/like-front/src/main/java/com/mdd/front/controller/TeacherController.java +++ b/server/like-front/src/main/java/com/mdd/front/controller/TeacherController.java @@ -2,12 +2,16 @@ package com.mdd.front.controller; import com.mdd.common.core.AjaxResult; import com.mdd.common.core.PageResult; +import com.mdd.common.service.QrCodeService; +import com.mdd.common.validator.annotation.IDMust; import com.mdd.front.service.ITeacherService; import com.mdd.front.validate.common.PageValidate; import com.mdd.front.validate.teacher.TeacherSearchValidate; import com.mdd.front.vo.teacher.TeacherListedVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -20,6 +24,8 @@ public class TeacherController { @Resource ITeacherService iTeacherService; + @Resource + private QrCodeService qrCodeService; @GetMapping("/list") @ApiOperation(value = "教师信息扩展列表") @@ -34,4 +40,22 @@ public class TeacherController { public AjaxResult getTeacherInfo(@RequestBody TeacherSearchValidate searchValidate) { return iTeacherService.getTeacherInfo(searchValidate); } + + @GetMapping("/qrcode") + @ApiOperation(value = "获取二维码图片URL", notes = "获取指定教师的二维码图片访问地址") + public AjaxResult getQrCodeUrl(@Validated @IDMust() @RequestParam("id") Integer id) { + return qrCodeService.getQrCodeUrl(id); + } + + @GetMapping("/qrcode/image") + @ApiOperation(value = "获取二维码图片流", notes = "带鉴权返回教师二维码图片,用于前端展示与下载") + public ResponseEntity getQrCodeImage(@Validated @IDMust() @RequestParam("id") Integer id) { + byte[] bytes = qrCodeService.getQrCodeImageBytes(id); + if (bytes == null || bytes.length == 0) { + return ResponseEntity.notFound().build(); + } + return ResponseEntity.ok() + .contentType(MediaType.IMAGE_PNG) + .body(bytes); + } }