From 462318b5ec7edaf553512b45addd5c81c521c811 Mon Sep 17 00:00:00 2001 From: wucongxing8150 <815046773@qq.com> Date: Fri, 1 Aug 2025 09:32:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/CaseClinicalVideoService.java | 78 +++++++++++++++++- .../com/example/caseData/utils/ImageUtil.java | 19 +++++ src/main/resources/static/cert/avatar.png | Bin 0 -> 5373 bytes src/main/resources/static/cert/avt.png | Bin 7980 -> 0 bytes 4 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/example/caseData/utils/ImageUtil.java create mode 100644 src/main/resources/static/cert/avatar.png delete mode 100644 src/main/resources/static/cert/avt.png diff --git a/src/main/java/com/example/caseData/service/CaseClinicalVideoService.java b/src/main/java/com/example/caseData/service/CaseClinicalVideoService.java index b0f4a32..868ab45 100644 --- a/src/main/java/com/example/caseData/service/CaseClinicalVideoService.java +++ b/src/main/java/com/example/caseData/service/CaseClinicalVideoService.java @@ -15,6 +15,7 @@ import com.example.caseData.model.*; import com.example.caseData.model.UserCollectClinicalVideoModel; import com.example.caseData.request.CaseClinicalVideoRequest.addClinicalVideoApp; import com.example.caseData.request.CaseClinicalVideoRequest.addClinicalVideoComment; +import com.example.caseData.utils.ImageUtil; import com.example.caseData.utils.Replace; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.annotation.Resource; @@ -878,7 +879,17 @@ public class CaseClinicalVideoService { } // 下载头像 - byte[] avatarByte = Oss.getObjectToByte(caseClinicalDoctor.getAvatar().replaceFirst("^/+", "")); + byte[] avatarByte = new byte[0]; + if (caseClinicalDoctor.getAvatar() != null) { + avatarByte = Oss.getObjectToByte(caseClinicalDoctor.getAvatar().replaceFirst("^/+", "")); + }else{ + try { + avatarByte = ImageUtil.readImageToBytes("src/main/resources/static/cert/avatar.png"); + } catch (Exception e) { + throw new BusinessException("-1", e.getMessage()); + } + } + if (avatarByte == null) { throw new BusinessException("-1", "无法完成此操作"); } @@ -896,15 +907,76 @@ public class CaseClinicalVideoService { // 已存在的 for (CaseClinicalVideoAuthorModel b : existsList){ // 如果现有作者的唯一标识为空 - if (b.getCaseClinicalDoctor().getDoctorIden() == null || b.getCaseClinicalDoctor().getDoctorIden().isEmpty()) { + CaseClinicalDoctorModel caseClinicalDoctor = b.getCaseClinicalDoctor(); + if (b.getCaseClinicalDoctor().getDoctorIden() == null || caseClinicalDoctor.getDoctorIden().isEmpty()) { for (addClinicalVideoApp.Author a : r.getAuthor()){ // 检测医生姓名+医院唯一标识 String akey = a.getDoctorName() + a.getHospitalIden(); - String bkey = b.getCaseClinicalDoctor().getDoctorName() + b.getCaseClinicalDoctor().getBasicHospital().getHospitalIden(); + String bkey = b.getCaseClinicalDoctor().getDoctorName() + caseClinicalDoctor.getBasicHospital().getHospitalIden(); if (akey.equals(bkey)){ // 相等 b.getCaseClinicalDoctor().setDoctorIden(a.getDoctorIden()); caseClinicalDoctorDao.updateById(b.getCaseClinicalDoctor()); + + CaseClinicalVideoAuthorModel caseClinicalVideoAuthor = new CaseClinicalVideoAuthorModel(); + caseClinicalVideoAuthor.setVideoId(caseClinicalVideo.getVideoId()); + caseClinicalVideoAuthor.setDoctorId(String.valueOf(caseClinicalDoctor.getDoctorId())); + caseClinicalVideoAuthorDao.insert(caseClinicalVideoAuthor); + + LocalDateTime lastPushDate = caseClinicalVideoDao.selectLastVideoPushDateByDoctorId(caseClinicalDoctor.getDoctorId()); + + // 新增作者统计 + caseClinicalService.IncStatsCaseClinicalDoctor(String.valueOf(caseClinicalDoctor.getDoctorId()),2,lastPushDate); + + // 新增医院统计 + caseClinicalService.IncStatsCaseClinicalHospital(String.valueOf(caseClinicalDoctor.getHospitalId()),2,lastPushDate); + + // 生成用户证书-文章/视频 + if (qrCodeByte == null || qrCodeByte.length == 0) { + // 生成二维码图片 + if (caseClinicalVideo.getShareQrcode() == null){ + try { + // 生成用户分享二维码-文章/视频 + qrCodeByte = userService.CreateUserCaseClinicalUnlimitedQrcode(String.valueOf(caseClinicalVideo.getVideoId()),2); + } catch (Exception e) { + // 不处理 + throw new BusinessException("-1", "无法完成此操作"); + } + }else{ + // 下载二维码图片 + qrCodeByte = Oss.getObjectToByte(caseClinicalVideo.getShareQrcode().replaceFirst("^/+", "")); + if (qrCodeByte == null) { + throw new BusinessException("-1", "无法完成此操作"); + } + } + + + } + + // 下载头像 + byte[] avatarByte = new byte[0]; + if (caseClinicalDoctor.getAvatar() != null) { + avatarByte = Oss.getObjectToByte(caseClinicalDoctor.getAvatar().replaceFirst("^/+", "")); + }else{ + try { + avatarByte = ImageUtil.readImageToBytes("src/main/resources/static/cert/avatar.png"); + } catch (Exception e) { + throw new BusinessException("-1", e.getMessage()); + } + } + + if (avatarByte == null) { + throw new BusinessException("-1", "无法完成此操作"); + } + + + userService.CreateUserCert( + String.valueOf(caseClinicalVideo.getVideoId()), + 2, + String.valueOf(caseClinicalDoctor.getDoctorId()), + qrCodeByte, + avatarByte + ); } } } diff --git a/src/main/java/com/example/caseData/utils/ImageUtil.java b/src/main/java/com/example/caseData/utils/ImageUtil.java new file mode 100644 index 0000000..4e21d94 --- /dev/null +++ b/src/main/java/com/example/caseData/utils/ImageUtil.java @@ -0,0 +1,19 @@ +package com.example.caseData.utils; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +public class ImageUtil { + public static byte[] readImageToBytes(String imagePath) throws IOException { + File file = new File(imagePath); + try (FileInputStream fis = new FileInputStream(file)) { + byte[] bytes = new byte[(int) file.length()]; + int read = fis.read(bytes); + if (read != bytes.length) { + throw new IOException("读取文件长度不一致"); + } + return bytes; + } + } +} diff --git a/src/main/resources/static/cert/avatar.png b/src/main/resources/static/cert/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..34528c5d10af4941b529ac1903d9ff03c32142cc GIT binary patch literal 5373 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