diff --git a/admin/src/main/java/com/hcy/admin/service/order/impl/ParentRepairOrderServiceImpl.java b/admin/src/main/java/com/hcy/admin/service/order/impl/ParentRepairOrderServiceImpl.java index fd0dcfe..e9ace27 100644 --- a/admin/src/main/java/com/hcy/admin/service/order/impl/ParentRepairOrderServiceImpl.java +++ b/admin/src/main/java/com/hcy/admin/service/order/impl/ParentRepairOrderServiceImpl.java @@ -2,6 +2,9 @@ package com.hcy.admin.service.order.impl; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.metadata.data.ClientAnchorData; +import com.alibaba.excel.metadata.data.ImageData; +import com.alibaba.excel.metadata.data.WriteCellData; import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.metadata.fill.FillConfig; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -41,8 +44,7 @@ import com.hcy.common.mapper.system.SystemAuthAdminMapper; import com.hcy.common.mapper.user.UserMapper; import com.hcy.common.utils.StringUtil; import com.hcy.common.utils.TimeUtil; -import com.hcy.common.utils.excel.CustomImageModifyHandler; -import com.hcy.common.utils.excel.LocalImageModifyStrategy; +import com.hcy.common.utils.excel.*; import org.springframework.beans.BeanUtils; import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Service; @@ -56,6 +58,7 @@ import java.math.BigDecimal; import java.net.URL; import java.text.DecimalFormat; import java.util.*; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; /** @@ -619,19 +622,8 @@ public class ParentRepairOrderServiceImpl implements IParentRepairOrderService { .orderByDesc(RepairOrderStepData::getCreateTime) .last("limit 1")); if(preMaintenanceImg != null){ - try{ - List imgList1 = new ArrayList<>(); - String[] arr = preMaintenanceImg.getImg().split(","); - for (String s : arr) { - System.out.println(s); - imgList1.add(new URL(s)); - } - - excelRepairOrder.setRepairFront(imgList1); - }catch (Exception e) { - System.out.println("导出异常"); - } - + List urls = Arrays.asList(preMaintenanceImg.getImg().split(",")); + excelRepairOrder.setRepairFront(EasyExcelImageUtil.urlTransitionWriteCellData(urls)); } //返回维修中照片 RepairOrderStepData inMaintenanceImg = repairOrderStepDataMapper.selectOne(new LambdaQueryWrapper() @@ -640,18 +632,8 @@ public class ParentRepairOrderServiceImpl implements IParentRepairOrderService { .orderByDesc(RepairOrderStepData::getCreateTime) .last("limit 1")); if(inMaintenanceImg != null){ - try{ - List imgList1 = new ArrayList<>(); - String[] arr = inMaintenanceImg.getImg().split(","); - for (String s : arr) { - System.out.println(s); - imgList1.add(new URL(s)); - } - - excelRepairOrder.setRepairIng(imgList1); - }catch (Exception e) { - System.out.println("导出异常"); - } + List urls = Arrays.asList(inMaintenanceImg.getImg().split(",")); + excelRepairOrder.setRepairIng(EasyExcelImageUtil.urlTransitionWriteCellData(urls)); } //返回维修后照片 RepairOrderStepData afterRepairImg = repairOrderStepDataMapper.selectOne(new LambdaQueryWrapper() @@ -660,18 +642,8 @@ public class ParentRepairOrderServiceImpl implements IParentRepairOrderService { .orderByDesc(RepairOrderStepData::getCreateTime) .last("limit 1")); if(afterRepairImg != null){ - try{ - List imgList1 = new ArrayList<>(); - String[] arr = afterRepairImg.getImg().split(","); - for (String s : arr) { - System.out.println(s); - imgList1.add(new URL(s)); - } - - excelRepairOrder.setRepairBack(imgList1); - }catch (Exception e) { - System.out.println("导出异常"); - } + List urls = Arrays.asList(afterRepairImg.getImg().split(",")); + excelRepairOrder.setRepairBack(EasyExcelImageUtil.urlTransitionWriteCellData(urls)); } /* @@ -945,16 +917,8 @@ public class ParentRepairOrderServiceImpl implements IParentRepairOrderService { //报废图片 scrapPicture RepairOrderAudit scrapRepairOrderAudit = repairOrderAuditMapper.findRepairOrderAuditByRepairOrderIdAndReviewRequest(item.getId(),3L); if(scrapRepairOrderAudit != null){ - try{ - List imgList1 = new ArrayList<>(); - String[] arr = scrapRepairOrderAudit.getScrapImg().split(",");// 报废图片 - for (String s : arr) { - imgList1.add(new URL(s)); - } - clientCollarExcel.setScrapPicture(imgList1); - }catch (Exception e) { - System.out.println("导出异常"); - } + List urls = Arrays.asList(scrapRepairOrderAudit.getScrapImg().split(",")); + clientCollarExcel.setScrapPicture(EasyExcelImageUtil.urlTransitionWriteCellData(urls)); } //返回维修前照片 clientCollarExcel.setRepairFront(imgExcel(item.getId(), RepairOrderStopEnum.PRE_MAINTENANCE_IMG.getStatus())); @@ -1023,7 +987,7 @@ public class ParentRepairOrderServiceImpl implements IParentRepairOrderService { * @param repairStep * @return */ - public List imgExcel(Long repairOrderId, Integer repairStep){ + public WriteCellData imgExcel(Long repairOrderId, Integer repairStep){ RepairOrderStepData dismantle = repairOrderStepDataMapper.selectOne(new LambdaQueryWrapper() .eq(RepairOrderStepData::getRepairOrderId, repairOrderId) .eq(RepairOrderStepData::getRepairStep, repairStep) @@ -1031,16 +995,8 @@ public class ParentRepairOrderServiceImpl implements IParentRepairOrderService { .orderByDesc(RepairOrderStepData::getCreateTime) .last("limit 1")); if(dismantle != null){ - try{ - List imgList = new ArrayList<>(); - String[] arr = dismantle.getImg().split(","); - for (String s : arr) { - imgList.add(new URL(s)); - } - return imgList; - }catch (Exception e) { - System.out.println("导出异常"); - } + List urls = Arrays.asList(dismantle.getImg().split(",")); + return EasyExcelImageUtil.urlTransitionWriteCellData(urls); } return null; } diff --git a/admin/src/main/java/com/hcy/admin/vo/excel/order/ClientCollarExcel.java b/admin/src/main/java/com/hcy/admin/vo/excel/order/ClientCollarExcel.java index 64dd351..50bd2d2 100644 --- a/admin/src/main/java/com/hcy/admin/vo/excel/order/ClientCollarExcel.java +++ b/admin/src/main/java/com/hcy/admin/vo/excel/order/ClientCollarExcel.java @@ -2,6 +2,7 @@ package com.hcy.admin.vo.excel.order; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.metadata.data.WriteCellData; import com.hcy.common.utils.excel.DownloadUrlConverter; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; @@ -42,48 +43,47 @@ public class ClientCollarExcel { @ApiModelProperty(value = "拆机") @ExcelProperty(value = "拆机", converter = DownloadUrlConverter.class) - private List dismantle; + private WriteCellData dismantle; @ApiModelProperty(value = "除尘") @ExcelProperty(value = "除尘", converter = DownloadUrlConverter.class) - private List dedusting; + private WriteCellData dedusting; @ApiModelProperty(value = "排查结果") private String scrapOrNot; @ApiModelProperty(value = "维修前图片") @ExcelProperty(value = "维修前图片", converter = DownloadUrlConverter.class) - private List repairFront; + private WriteCellData repairFront; @ApiModelProperty(value = "维修中图片") @ExcelProperty(value = "维修中图片", converter = DownloadUrlConverter.class) - private List repairIng; + private WriteCellData repairIng; @ApiModelProperty(value = "维修后图片") @ExcelProperty(value = "维修后图片)", converter = DownloadUrlConverter.class) - private List repairBack; + private WriteCellData repairBack; @ApiModelProperty(value = "功能测试") @ExcelProperty(value = "功能测试", converter = DownloadUrlConverter.class) - private List functionalTestImg; + private WriteCellData functionalTestImg; @ApiModelProperty(value = "DC&PFC组装") @ExcelProperty(value = "DC&PFC组装", converter = DownloadUrlConverter.class) - private List assembleImg; + private WriteCellData assembleImg; @ApiModelProperty(value = "补强三防漆和点胶") @ExcelProperty(value = "补强三防漆和点胶", converter = DownloadUrlConverter.class) - private List reinforcingThreeAntiPaintAndDispensing; + private WriteCellData reinforcingThreeAntiPaintAndDispensing; @ApiModelProperty(value = "模块装配") @ExcelProperty(value = "模块装配", converter = DownloadUrlConverter.class) - private List moduleAssembly; + private WriteCellData moduleAssembly; @ApiModelProperty(value = "老化测试") @ExcelProperty(value = "老化测试", converter = DownloadUrlConverter.class) - private List agingTest; + private WriteCellData agingTest; @ApiModelProperty(value = "报废图片") - @ExcelProperty(value = "报废图片", converter = DownloadUrlConverter.class) - private List scrapPicture; + private WriteCellData scrapPicture; } diff --git a/admin/src/main/java/com/hcy/admin/vo/excel/order/ExcelRepairOrder.java b/admin/src/main/java/com/hcy/admin/vo/excel/order/ExcelRepairOrder.java index bb171e4..29be242 100644 --- a/admin/src/main/java/com/hcy/admin/vo/excel/order/ExcelRepairOrder.java +++ b/admin/src/main/java/com/hcy/admin/vo/excel/order/ExcelRepairOrder.java @@ -2,6 +2,7 @@ package com.hcy.admin.vo.excel.order; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.metadata.data.WriteCellData; import com.hcy.common.utils.excel.DownloadUrlConverter; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; @@ -9,9 +10,6 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.net.URL; -import java.util.List; - @Data @Builder @NoArgsConstructor @@ -47,16 +45,16 @@ public class ExcelRepairOrder { private String faultCause; @ApiModelProperty(value = "维修前图片") - @ExcelProperty(value = {"维修前图片"}, converter = DownloadUrlConverter.class) - private List repairFront; + //@ExcelProperty(value = {"维修前图片"}, converter = ImageConverter.class) + private WriteCellData repairFront; @ApiModelProperty(value = "维修中图片") @ExcelProperty(value = {"维修中图片"}, converter = DownloadUrlConverter.class) - private List repairIng; + private WriteCellData repairIng; @ApiModelProperty(value = "维修后图片") @ExcelProperty(value = {"维修后图片)"}, converter = DownloadUrlConverter.class) - private List repairBack; + private WriteCellData repairBack; @ApiModelProperty(value = "更换明细") private String replacementDetail; diff --git a/common/src/main/java/com/hcy/common/utils/excel/EasyExcelImageUtil.java b/common/src/main/java/com/hcy/common/utils/excel/EasyExcelImageUtil.java new file mode 100644 index 0000000..3bf2a41 --- /dev/null +++ b/common/src/main/java/com/hcy/common/utils/excel/EasyExcelImageUtil.java @@ -0,0 +1,84 @@ +package com.hcy.common.utils.excel; + +import com.alibaba.excel.metadata.data.ClientAnchorData; +import com.alibaba.excel.metadata.data.ImageData; +import com.alibaba.excel.metadata.data.WriteCellData; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; + +public class EasyExcelImageUtil { + + public static WriteCellData urlTransitionWriteCellData(List urls){ + AtomicReference maxImageSize = new AtomicReference<>(urls.size()); + + WriteCellData writeCellData = new WriteCellData<>(); + //每张图片间距 + int splitWidth = 2; + //每张图片的长度 + Integer imageWidth = 80; + //图片列的最大长度 + Integer sumWidth = maxImageSize.get() * (imageWidth + splitWidth); + + List imageDataList = new ArrayList<>(); + + for (int i = 1; i <= urls.size(); i++) { + String path = urls.get(i - 1); + Integer left = imageWidth * (i - 1) + i * splitWidth; + Integer right = sumWidth - imageWidth - left; + ImageData imageData = new ImageData(); + imageData.setImage(getImageBytes(path)); + imageData.setImageType(ImageData.ImageType.PICTURE_TYPE_PNG); + //距离单元格顶部距离 + imageData.setTop(1); + //距离单元格底部距离 + imageData.setBottom(1); + //距离单元格左边距离 + imageData.setLeft(left); + //距离单元格右边距离 + imageData.setRight(right); + imageData.setAnchorType(ClientAnchorData.AnchorType.DONT_MOVE_DO_RESIZE); + imageDataList.add(imageData); + } + writeCellData.setImageDataList(imageDataList); + + return writeCellData; + } + + public static byte[] getImageBytes(String urlFront) { + try { + // 创建URL对象 + URL url = new URL(urlFront); + + // 打开连接并获取InputStream + InputStream inputStream = url.openStream(); + + // 使用ByteArrayOutputStream来读取数据 + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + int nRead; + byte[] data = new byte[16384]; // 16KB的缓冲区 + + while ((nRead = inputStream.read(data, 0, data.length)) != -1) { + buffer.write(data, 0, nRead); + } + + buffer.flush(); // 刷新缓冲区 + byte[] byteArray = buffer.toByteArray(); // 转换为byte数组 + + // 关闭流 + inputStream.close(); + buffer.close(); + + return byteArray; + } catch (Exception e) { + e.printStackTrace(); + return new byte[0]; + } + } +}