【admin】优化# 1.优化维修,维修单和工序表图片导出功能

dev1.0
JaxCen 2024-11-04 21:14:11 +08:00
parent f8e92b0b48
commit 3fb1e2f390
4 changed files with 117 additions and 79 deletions

View File

@ -2,6 +2,9 @@ package com.hcy.admin.service.order.impl;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter; 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.WriteSheet;
import com.alibaba.excel.write.metadata.fill.FillConfig; import com.alibaba.excel.write.metadata.fill.FillConfig;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.mapper.user.UserMapper;
import com.hcy.common.utils.StringUtil; import com.hcy.common.utils.StringUtil;
import com.hcy.common.utils.TimeUtil; import com.hcy.common.utils.TimeUtil;
import com.hcy.common.utils.excel.CustomImageModifyHandler; import com.hcy.common.utils.excel.*;
import com.hcy.common.utils.excel.LocalImageModifyStrategy;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -56,6 +58,7 @@ import java.math.BigDecimal;
import java.net.URL; import java.net.URL;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -619,19 +622,8 @@ public class ParentRepairOrderServiceImpl implements IParentRepairOrderService {
.orderByDesc(RepairOrderStepData::getCreateTime) .orderByDesc(RepairOrderStepData::getCreateTime)
.last("limit 1")); .last("limit 1"));
if(preMaintenanceImg != null){ if(preMaintenanceImg != null){
try{ List<String> urls = Arrays.asList(preMaintenanceImg.getImg().split(","));
List<URL> imgList1 = new ArrayList<>(); excelRepairOrder.setRepairFront(EasyExcelImageUtil.urlTransitionWriteCellData(urls));
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("导出异常");
}
} }
//返回维修中照片 //返回维修中照片
RepairOrderStepData inMaintenanceImg = repairOrderStepDataMapper.selectOne(new LambdaQueryWrapper<RepairOrderStepData>() RepairOrderStepData inMaintenanceImg = repairOrderStepDataMapper.selectOne(new LambdaQueryWrapper<RepairOrderStepData>()
@ -640,18 +632,8 @@ public class ParentRepairOrderServiceImpl implements IParentRepairOrderService {
.orderByDesc(RepairOrderStepData::getCreateTime) .orderByDesc(RepairOrderStepData::getCreateTime)
.last("limit 1")); .last("limit 1"));
if(inMaintenanceImg != null){ if(inMaintenanceImg != null){
try{ List<String> urls = Arrays.asList(inMaintenanceImg.getImg().split(","));
List<URL> imgList1 = new ArrayList<>(); excelRepairOrder.setRepairIng(EasyExcelImageUtil.urlTransitionWriteCellData(urls));
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("导出异常");
}
} }
//返回维修后照片 //返回维修后照片
RepairOrderStepData afterRepairImg = repairOrderStepDataMapper.selectOne(new LambdaQueryWrapper<RepairOrderStepData>() RepairOrderStepData afterRepairImg = repairOrderStepDataMapper.selectOne(new LambdaQueryWrapper<RepairOrderStepData>()
@ -660,18 +642,8 @@ public class ParentRepairOrderServiceImpl implements IParentRepairOrderService {
.orderByDesc(RepairOrderStepData::getCreateTime) .orderByDesc(RepairOrderStepData::getCreateTime)
.last("limit 1")); .last("limit 1"));
if(afterRepairImg != null){ if(afterRepairImg != null){
try{ List<String> urls = Arrays.asList(afterRepairImg.getImg().split(","));
List<URL> imgList1 = new ArrayList<>(); excelRepairOrder.setRepairBack(EasyExcelImageUtil.urlTransitionWriteCellData(urls));
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("导出异常");
}
} }
/* /*
@ -945,16 +917,8 @@ public class ParentRepairOrderServiceImpl implements IParentRepairOrderService {
//报废图片 scrapPicture //报废图片 scrapPicture
RepairOrderAudit scrapRepairOrderAudit = repairOrderAuditMapper.findRepairOrderAuditByRepairOrderIdAndReviewRequest(item.getId(),3L); RepairOrderAudit scrapRepairOrderAudit = repairOrderAuditMapper.findRepairOrderAuditByRepairOrderIdAndReviewRequest(item.getId(),3L);
if(scrapRepairOrderAudit != null){ if(scrapRepairOrderAudit != null){
try{ List<String> urls = Arrays.asList(scrapRepairOrderAudit.getScrapImg().split(","));
List<URL> imgList1 = new ArrayList<>(); clientCollarExcel.setScrapPicture(EasyExcelImageUtil.urlTransitionWriteCellData(urls));
String[] arr = scrapRepairOrderAudit.getScrapImg().split(",");// 报废图片
for (String s : arr) {
imgList1.add(new URL(s));
}
clientCollarExcel.setScrapPicture(imgList1);
}catch (Exception e) {
System.out.println("导出异常");
}
} }
//返回维修前照片 //返回维修前照片
clientCollarExcel.setRepairFront(imgExcel(item.getId(), RepairOrderStopEnum.PRE_MAINTENANCE_IMG.getStatus())); clientCollarExcel.setRepairFront(imgExcel(item.getId(), RepairOrderStopEnum.PRE_MAINTENANCE_IMG.getStatus()));
@ -1023,7 +987,7 @@ public class ParentRepairOrderServiceImpl implements IParentRepairOrderService {
* @param repairStep * @param repairStep
* @return * @return
*/ */
public List<URL> imgExcel(Long repairOrderId, Integer repairStep){ public WriteCellData<Void> imgExcel(Long repairOrderId, Integer repairStep){
RepairOrderStepData dismantle = repairOrderStepDataMapper.selectOne(new LambdaQueryWrapper<RepairOrderStepData>() RepairOrderStepData dismantle = repairOrderStepDataMapper.selectOne(new LambdaQueryWrapper<RepairOrderStepData>()
.eq(RepairOrderStepData::getRepairOrderId, repairOrderId) .eq(RepairOrderStepData::getRepairOrderId, repairOrderId)
.eq(RepairOrderStepData::getRepairStep, repairStep) .eq(RepairOrderStepData::getRepairStep, repairStep)
@ -1031,16 +995,8 @@ public class ParentRepairOrderServiceImpl implements IParentRepairOrderService {
.orderByDesc(RepairOrderStepData::getCreateTime) .orderByDesc(RepairOrderStepData::getCreateTime)
.last("limit 1")); .last("limit 1"));
if(dismantle != null){ if(dismantle != null){
try{ List<String> urls = Arrays.asList(dismantle.getImg().split(","));
List<URL> imgList = new ArrayList<>(); return EasyExcelImageUtil.urlTransitionWriteCellData(urls);
String[] arr = dismantle.getImg().split(",");
for (String s : arr) {
imgList.add(new URL(s));
}
return imgList;
}catch (Exception e) {
System.out.println("导出异常");
}
} }
return null; return null;
} }

View File

@ -2,6 +2,7 @@ package com.hcy.admin.vo.excel.order;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.hcy.common.utils.excel.DownloadUrlConverter; import com.hcy.common.utils.excel.DownloadUrlConverter;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -42,48 +43,47 @@ public class ClientCollarExcel {
@ApiModelProperty(value = "拆机") @ApiModelProperty(value = "拆机")
@ExcelProperty(value = "拆机", converter = DownloadUrlConverter.class) @ExcelProperty(value = "拆机", converter = DownloadUrlConverter.class)
private List<URL> dismantle; private WriteCellData<Void> dismantle;
@ApiModelProperty(value = "除尘") @ApiModelProperty(value = "除尘")
@ExcelProperty(value = "除尘", converter = DownloadUrlConverter.class) @ExcelProperty(value = "除尘", converter = DownloadUrlConverter.class)
private List<URL> dedusting; private WriteCellData<Void> dedusting;
@ApiModelProperty(value = "排查结果") @ApiModelProperty(value = "排查结果")
private String scrapOrNot; private String scrapOrNot;
@ApiModelProperty(value = "维修前图片") @ApiModelProperty(value = "维修前图片")
@ExcelProperty(value = "维修前图片", converter = DownloadUrlConverter.class) @ExcelProperty(value = "维修前图片", converter = DownloadUrlConverter.class)
private List<URL> repairFront; private WriteCellData<Void> repairFront;
@ApiModelProperty(value = "维修中图片") @ApiModelProperty(value = "维修中图片")
@ExcelProperty(value = "维修中图片", converter = DownloadUrlConverter.class) @ExcelProperty(value = "维修中图片", converter = DownloadUrlConverter.class)
private List<URL> repairIng; private WriteCellData<Void> repairIng;
@ApiModelProperty(value = "维修后图片") @ApiModelProperty(value = "维修后图片")
@ExcelProperty(value = "维修后图片)", converter = DownloadUrlConverter.class) @ExcelProperty(value = "维修后图片)", converter = DownloadUrlConverter.class)
private List<URL> repairBack; private WriteCellData<Void> repairBack;
@ApiModelProperty(value = "功能测试") @ApiModelProperty(value = "功能测试")
@ExcelProperty(value = "功能测试", converter = DownloadUrlConverter.class) @ExcelProperty(value = "功能测试", converter = DownloadUrlConverter.class)
private List<URL> functionalTestImg; private WriteCellData<Void> functionalTestImg;
@ApiModelProperty(value = "DC&PFC组装") @ApiModelProperty(value = "DC&PFC组装")
@ExcelProperty(value = "DC&PFC组装", converter = DownloadUrlConverter.class) @ExcelProperty(value = "DC&PFC组装", converter = DownloadUrlConverter.class)
private List<URL> assembleImg; private WriteCellData<Void> assembleImg;
@ApiModelProperty(value = "补强三防漆和点胶") @ApiModelProperty(value = "补强三防漆和点胶")
@ExcelProperty(value = "补强三防漆和点胶", converter = DownloadUrlConverter.class) @ExcelProperty(value = "补强三防漆和点胶", converter = DownloadUrlConverter.class)
private List<URL> reinforcingThreeAntiPaintAndDispensing; private WriteCellData<Void> reinforcingThreeAntiPaintAndDispensing;
@ApiModelProperty(value = "模块装配") @ApiModelProperty(value = "模块装配")
@ExcelProperty(value = "模块装配", converter = DownloadUrlConverter.class) @ExcelProperty(value = "模块装配", converter = DownloadUrlConverter.class)
private List<URL> moduleAssembly; private WriteCellData<Void> moduleAssembly;
@ApiModelProperty(value = "老化测试") @ApiModelProperty(value = "老化测试")
@ExcelProperty(value = "老化测试", converter = DownloadUrlConverter.class) @ExcelProperty(value = "老化测试", converter = DownloadUrlConverter.class)
private List<URL> agingTest; private WriteCellData<Void> agingTest;
@ApiModelProperty(value = "报废图片") @ApiModelProperty(value = "报废图片")
@ExcelProperty(value = "报废图片", converter = DownloadUrlConverter.class) private WriteCellData<Void> scrapPicture;
private List<URL> scrapPicture;
} }

View File

@ -2,6 +2,7 @@ package com.hcy.admin.vo.excel.order;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.hcy.common.utils.excel.DownloadUrlConverter; import com.hcy.common.utils.excel.DownloadUrlConverter;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -9,9 +10,6 @@ import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.net.URL;
import java.util.List;
@Data @Data
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor
@ -47,16 +45,16 @@ public class ExcelRepairOrder {
private String faultCause; private String faultCause;
@ApiModelProperty(value = "维修前图片") @ApiModelProperty(value = "维修前图片")
@ExcelProperty(value = {"维修前图片"}, converter = DownloadUrlConverter.class) //@ExcelProperty(value = {"维修前图片"}, converter = ImageConverter.class)
private List<URL> repairFront; private WriteCellData<Void> repairFront;
@ApiModelProperty(value = "维修中图片") @ApiModelProperty(value = "维修中图片")
@ExcelProperty(value = {"维修中图片"}, converter = DownloadUrlConverter.class) @ExcelProperty(value = {"维修中图片"}, converter = DownloadUrlConverter.class)
private List<URL> repairIng; private WriteCellData<Void> repairIng;
@ApiModelProperty(value = "维修后图片") @ApiModelProperty(value = "维修后图片")
@ExcelProperty(value = {"维修后图片)"}, converter = DownloadUrlConverter.class) @ExcelProperty(value = {"维修后图片)"}, converter = DownloadUrlConverter.class)
private List<URL> repairBack; private WriteCellData<Void> repairBack;
@ApiModelProperty(value = "更换明细") @ApiModelProperty(value = "更换明细")
private String replacementDetail; private String replacementDetail;

View File

@ -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<Void> urlTransitionWriteCellData(List<String> urls){
AtomicReference<Integer> maxImageSize = new AtomicReference<>(urls.size());
WriteCellData<Void> writeCellData = new WriteCellData<>();
//每张图片间距
int splitWidth = 2;
//每张图片的长度
Integer imageWidth = 80;
//图片列的最大长度
Integer sumWidth = maxImageSize.get() * (imageWidth + splitWidth);
List<ImageData> 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];
}
}
}