From 25d3c4c216f1ed765599e5f26a15b00d8160ec92 Mon Sep 17 00:00:00 2001 From: yangjun <1173114630@qq.com> Date: Thu, 26 Mar 2026 10:49:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NuBizAllMaterialInfoController.java | 2 +- .../service/INuBizAllMaterialInfoService.java | 3 +- .../impl/NuBizAllMaterialInfoServiceImpl.java | 246 ++++++++++++++++-- 3 files changed, 222 insertions(+), 29 deletions(-) diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/allMaterialInfo/controller/NuBizAllMaterialInfoController.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/allMaterialInfo/controller/NuBizAllMaterialInfoController.java index 0dfd563..2f62e80 100644 --- a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/allMaterialInfo/controller/NuBizAllMaterialInfoController.java +++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/allMaterialInfo/controller/NuBizAllMaterialInfoController.java @@ -155,7 +155,7 @@ public class NuBizAllMaterialInfoController extends JeecgController { - void exportExcel(NuBizAllMaterialInfo nuBizAllMaterialInfo,HttpServletResponse response); + void exportExcel(NuBizAllMaterialInfo nuBizAllMaterialInfo,HttpServletResponse response) throws IOException; } diff --git a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/allMaterialInfo/service/impl/NuBizAllMaterialInfoServiceImpl.java b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/allMaterialInfo/service/impl/NuBizAllMaterialInfoServiceImpl.java index 68a23bd..51f18c1 100644 --- a/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/allMaterialInfo/service/impl/NuBizAllMaterialInfoServiceImpl.java +++ b/nursing-unit-admin/nu-admin-biz/src/main/java/com/nu/modules/allMaterialInfo/service/impl/NuBizAllMaterialInfoServiceImpl.java @@ -1,5 +1,6 @@ package com.nu.modules.allMaterialInfo.service.impl; +import com.aliyun.core.utils.IOUtils; import com.nu.modules.allMaterialInfo.entity.NuBizAllMaterialInfo; import com.nu.modules.allMaterialInfo.mapper.NuBizAllMaterialInfoMapper; import com.nu.modules.allMaterialInfo.service.INuBizAllMaterialInfoService; @@ -23,7 +24,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; +import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.List; @@ -37,7 +43,7 @@ import java.util.List; public class NuBizAllMaterialInfoServiceImpl extends ServiceImpl implements INuBizAllMaterialInfoService { @Override - public void exportExcel(NuBizAllMaterialInfo nuBizAllMaterialInfo,HttpServletResponse response) { + public void exportExcel(NuBizAllMaterialInfo nuBizAllMaterialInfo,HttpServletResponse response) throws IOException { // 1. 查询数据 QueryWrapper queryWrapper = new QueryWrapper<>(); List dataList = baseMapper.selectList(queryWrapper); @@ -82,37 +88,128 @@ public class NuBizAllMaterialInfoServiceImpl extends ServiceImpl drawing = sheet.createDrawingPatriarch(); + + // 创建锚点 + ClientAnchor anchor = workbook.getCreationHelper().createClientAnchor(); + anchor.setCol1(startCol); // 起始列 + anchor.setRow1(startRow); // 起始行 + anchor.setCol2(endCol); // 结束列(不包含) + anchor.setRow2(endRow); // 结束行(不包含) + + // 插入图片 + Picture picture = drawing.createPicture(anchor, pictureIdx); + } + + // 从URL下载图片的方法 + private static byte[] downloadImageFromUrl(String imageUrl) throws IOException { + try { + // 使用Java内置的HttpURLConnection + URL url = new URL(imageUrl); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + connection.setConnectTimeout(10000); // 10秒连接超时 + connection.setReadTimeout(30000); // 30秒读取超时 + + // 检查响应码 + int responseCode = connection.getResponseCode(); + if (responseCode != HttpURLConnection.HTTP_OK) { + throw new IOException("HTTP请求失败,响应码: " + responseCode); + } + + // 读取图片数据 + try (InputStream inputStream = connection.getInputStream(); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { + + byte[] buffer = new byte[8192]; + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + + return outputStream.toByteArray(); + } + + } catch (Exception e) { + throw new IOException("下载图片失败: " + imageUrl, e); + } + } + + // 根据URL或路径确定图片类型 + private static int getPictureType(String path) { + String lowerPath = path.toLowerCase(); + + if (lowerPath.endsWith(".png")) { + return Workbook.PICTURE_TYPE_PNG; + } else if (lowerPath.endsWith(".jpg") || lowerPath.endsWith(".jpeg")) { + return Workbook.PICTURE_TYPE_JPEG; + } else if (lowerPath.endsWith(".bmp") || lowerPath.endsWith(".dib")) { + return Workbook.PICTURE_TYPE_DIB; + } else if (lowerPath.endsWith(".emf")) { + return Workbook.PICTURE_TYPE_EMF; + } else if (lowerPath.endsWith(".wmf")) { + return Workbook.PICTURE_TYPE_WMF; + } else if (lowerPath.endsWith(".gif")) { + return Workbook.PICTURE_TYPE_JPEG; // POI不支持GIF,转换为JPEG + } else { + // 默认或从Content-Type判断 + return Workbook.PICTURE_TYPE_JPEG; + } + } + /** * 设置单元格值并应用样式 */