【admin】优化# 1.优化维修,维修单和工序表图片导出功能
parent
f8e92b0b48
commit
3fb1e2f390
|
@ -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<URL> 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<String> urls = Arrays.asList(preMaintenanceImg.getImg().split(","));
|
||||
excelRepairOrder.setRepairFront(EasyExcelImageUtil.urlTransitionWriteCellData(urls));
|
||||
}
|
||||
//返回维修中照片
|
||||
RepairOrderStepData inMaintenanceImg = repairOrderStepDataMapper.selectOne(new LambdaQueryWrapper<RepairOrderStepData>()
|
||||
|
@ -640,18 +632,8 @@ public class ParentRepairOrderServiceImpl implements IParentRepairOrderService {
|
|||
.orderByDesc(RepairOrderStepData::getCreateTime)
|
||||
.last("limit 1"));
|
||||
if(inMaintenanceImg != null){
|
||||
try{
|
||||
List<URL> 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<String> urls = Arrays.asList(inMaintenanceImg.getImg().split(","));
|
||||
excelRepairOrder.setRepairIng(EasyExcelImageUtil.urlTransitionWriteCellData(urls));
|
||||
}
|
||||
//返回维修后照片
|
||||
RepairOrderStepData afterRepairImg = repairOrderStepDataMapper.selectOne(new LambdaQueryWrapper<RepairOrderStepData>()
|
||||
|
@ -660,18 +642,8 @@ public class ParentRepairOrderServiceImpl implements IParentRepairOrderService {
|
|||
.orderByDesc(RepairOrderStepData::getCreateTime)
|
||||
.last("limit 1"));
|
||||
if(afterRepairImg != null){
|
||||
try{
|
||||
List<URL> 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<String> 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<URL> 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<String> 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<URL> imgExcel(Long repairOrderId, Integer repairStep){
|
||||
public WriteCellData<Void> imgExcel(Long repairOrderId, Integer repairStep){
|
||||
RepairOrderStepData dismantle = repairOrderStepDataMapper.selectOne(new LambdaQueryWrapper<RepairOrderStepData>()
|
||||
.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<URL> 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<String> urls = Arrays.asList(dismantle.getImg().split(","));
|
||||
return EasyExcelImageUtil.urlTransitionWriteCellData(urls);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -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<URL> dismantle;
|
||||
private WriteCellData<Void> dismantle;
|
||||
|
||||
@ApiModelProperty(value = "除尘")
|
||||
@ExcelProperty(value = "除尘", converter = DownloadUrlConverter.class)
|
||||
private List<URL> dedusting;
|
||||
private WriteCellData<Void> dedusting;
|
||||
|
||||
@ApiModelProperty(value = "排查结果")
|
||||
private String scrapOrNot;
|
||||
|
||||
@ApiModelProperty(value = "维修前图片")
|
||||
@ExcelProperty(value = "维修前图片", converter = DownloadUrlConverter.class)
|
||||
private List<URL> repairFront;
|
||||
private WriteCellData<Void> repairFront;
|
||||
|
||||
@ApiModelProperty(value = "维修中图片")
|
||||
@ExcelProperty(value = "维修中图片", converter = DownloadUrlConverter.class)
|
||||
private List<URL> repairIng;
|
||||
private WriteCellData<Void> repairIng;
|
||||
|
||||
@ApiModelProperty(value = "维修后图片")
|
||||
@ExcelProperty(value = "维修后图片)", converter = DownloadUrlConverter.class)
|
||||
private List<URL> repairBack;
|
||||
private WriteCellData<Void> repairBack;
|
||||
|
||||
@ApiModelProperty(value = "功能测试")
|
||||
@ExcelProperty(value = "功能测试", converter = DownloadUrlConverter.class)
|
||||
private List<URL> functionalTestImg;
|
||||
private WriteCellData<Void> functionalTestImg;
|
||||
|
||||
@ApiModelProperty(value = "DC&PFC组装")
|
||||
@ExcelProperty(value = "DC&PFC组装", converter = DownloadUrlConverter.class)
|
||||
private List<URL> assembleImg;
|
||||
private WriteCellData<Void> assembleImg;
|
||||
|
||||
@ApiModelProperty(value = "补强三防漆和点胶")
|
||||
@ExcelProperty(value = "补强三防漆和点胶", converter = DownloadUrlConverter.class)
|
||||
private List<URL> reinforcingThreeAntiPaintAndDispensing;
|
||||
private WriteCellData<Void> reinforcingThreeAntiPaintAndDispensing;
|
||||
|
||||
@ApiModelProperty(value = "模块装配")
|
||||
@ExcelProperty(value = "模块装配", converter = DownloadUrlConverter.class)
|
||||
private List<URL> moduleAssembly;
|
||||
private WriteCellData<Void> moduleAssembly;
|
||||
|
||||
@ApiModelProperty(value = "老化测试")
|
||||
@ExcelProperty(value = "老化测试", converter = DownloadUrlConverter.class)
|
||||
private List<URL> agingTest;
|
||||
private WriteCellData<Void> agingTest;
|
||||
|
||||
@ApiModelProperty(value = "报废图片")
|
||||
@ExcelProperty(value = "报废图片", converter = DownloadUrlConverter.class)
|
||||
private List<URL> scrapPicture;
|
||||
private WriteCellData<Void> scrapPicture;
|
||||
}
|
||||
|
|
|
@ -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<URL> repairFront;
|
||||
//@ExcelProperty(value = {"维修前图片"}, converter = ImageConverter.class)
|
||||
private WriteCellData<Void> repairFront;
|
||||
|
||||
@ApiModelProperty(value = "维修中图片")
|
||||
@ExcelProperty(value = {"维修中图片"}, converter = DownloadUrlConverter.class)
|
||||
private List<URL> repairIng;
|
||||
private WriteCellData<Void> repairIng;
|
||||
|
||||
@ApiModelProperty(value = "维修后图片")
|
||||
@ExcelProperty(value = {"维修后图片)"}, converter = DownloadUrlConverter.class)
|
||||
private List<URL> repairBack;
|
||||
private WriteCellData<Void> repairBack;
|
||||
|
||||
@ApiModelProperty(value = "更换明细")
|
||||
private String replacementDetail;
|
||||
|
|
|
@ -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];
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue