From df67fe187fae9ce9f486ea2f14c95a14d843e4a1 Mon Sep 17 00:00:00 2001 From: cjl <276999030@qq.com> Date: Wed, 15 Nov 2023 14:23:56 +0800 Subject: [PATCH] fix:增加导出功能 --- screen-api/src/main/java/com/moral/api/service/FileTableService.java | 3 screen-api/src/main/java/com/moral/api/service/AllocationService.java | 4 screen-api/src/main/java/com/moral/api/utils/CustomImageModifyHandler.java | 127 ++++++++++ screen-api/src/main/java/com/moral/api/service/impl/AllocationServiceImpl.java | 13 + screen-api/src/main/java/com/moral/api/utils/MyUrlConverterUtil.java | 70 +++++ screen-api/src/main/java/com/moral/api/pojo/vo/allocation/AllocationListExcelVo.java | 172 ++++++++++++++ screen-api/pom.xml | 12 + screen-api/src/main/java/com/moral/api/pojo/ext/allocation/AllocationExcelExt.java | 51 ++++ screen-api/src/main/java/com/moral/api/service/impl/FileTableServiceImpl.java | 19 + screen-api/src/main/resources/application-qa.yml | 2 screen-api/src/main/java/com/moral/api/controller/AllocationController.java | 98 +++++-- screen-api/src/main/java/com/moral/api/pojo/vo/file/FileAddressVo.java | 32 ++ screen-api/src/main/java/com/moral/api/utils/MyStringImageConverterUtil.java | 69 +++++ 13 files changed, 643 insertions(+), 29 deletions(-) diff --git a/screen-api/pom.xml b/screen-api/pom.xml index 16b68d7..9a39a17 100644 --- a/screen-api/pom.xml +++ b/screen-api/pom.xml @@ -53,6 +53,18 @@ <artifactId>fastjson</artifactId> <version>1.2.66</version> </dependency> + + <dependency> + <groupId>com.alibaba</groupId> + <artifactId>easyexcel</artifactId> + <version>2.2.7</version> + </dependency> + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>javax.servlet-api</artifactId> + <version>4.0.1</version> + </dependency> + <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-spring-boot-starter</artifactId> diff --git a/screen-api/src/main/java/com/moral/api/controller/AllocationController.java b/screen-api/src/main/java/com/moral/api/controller/AllocationController.java index 86f968a..afdc6de 100644 --- a/screen-api/src/main/java/com/moral/api/controller/AllocationController.java +++ b/screen-api/src/main/java/com/moral/api/controller/AllocationController.java @@ -1,49 +1,45 @@ package com.moral.api.controller; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiImplicitParams; -import io.swagger.annotations.ApiOperation; -import org.apache.commons.collections4.CollectionUtils; +import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.moral.api.entity.AllocationLog; -import com.moral.api.pojo.enums.SysDictTypeEnum; +import com.moral.api.entity.ResponsibilityUnit; +import com.moral.api.pojo.ext.allocation.AllocationExcelExt; import com.moral.api.pojo.ext.allocation.AllocationExt; import com.moral.api.pojo.ext.allocation.AllocationPageExt; import com.moral.api.pojo.query.allocation.*; import com.moral.api.pojo.query.allocationextension.AllocationExtensionAddCond; - +import com.moral.api.pojo.vo.allocation.AllocationListExcelVo; import com.moral.api.pojo.vo.allocation.AllocationPageVo; import com.moral.api.pojo.vo.allocation.AllocationVo; - -import com.moral.constant.PageResult; -import io.swagger.annotations.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.util.ObjectUtils; - -import org.springframework.web.bind.annotation.*; - -import java.util.ArrayList; - -import java.util.List; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import com.moral.api.entity.ResponsibilityUnit; - +import com.moral.api.pojo.vo.file.FileAddressVo; import com.moral.api.service.AllocationService; -import com.moral.api.utils.EasyExcelUtils; -import com.moral.api.utils.NoModelWriteData; +import com.moral.api.utils.*; import com.moral.constant.Constants; +import com.moral.constant.PageResult; import com.moral.constant.ResultMessage; import com.moral.util.DateUtils; import com.moral.util.WebUtils; +import io.swagger.annotations.*; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.*; - +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.net.URL; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; @Api(tags = {"������������"}) @@ -51,6 +47,8 @@ @RequestMapping("allocation") public class AllocationController { + @Value("${file.path}") + private String basePath; @Autowired private AllocationService allocationService; @@ -220,4 +218,48 @@ } + + @GetMapping("listExcel") + @ApiOperation("������������") + public void listExcel(@RequestParam @ApiParam(value = "id",name = "������id") List<Integer> id,HttpServletResponse response){ + + List<AllocationExcelExt> extList = allocationService.listExcel(id); + try { + genImageExcel(extList,response); + }catch (Exception e){ + + } + + } + + private final String PARHTINAGE = "https://qx.7drlb.com/api/file/preview/"; + + private void genImageExcel(List<AllocationExcelExt> list, HttpServletResponse response) throws IOException { + if (CollectionUtils.isEmpty(list)) { + return; + } + List<AllocationListExcelVo> demoDataList = new ArrayList<>(); + for(int i = 0;i<list.size();i++){ + AllocationListExcelVo item = AllocationListExcelVo.convert(list.get(i)); + List<String> urls = new ArrayList<>(); + for(FileAddressVo z : list.get(i).getFileBaseList()){ + urls.add(handleFileRealPath(z.getFileAddress())); + } + item.setWriteCellDataFile(urls); + demoDataList.add(item); + } + try { + response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + + URLEncoder.encode("���������������", "utf-8") + ".xlsx"); + response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); + EasyExcel.write(response.getOutputStream(), AllocationListExcelVo.class) + .registerWriteHandler(new CustomImageModifyHandler()).sheet("���������").doWrite(demoDataList); + }catch (Exception e){ + + } + } + private String handleFileRealPath(String path) { + return basePath.replaceAll(StringUtils.BACKSLASH.concat(StringUtils.BACKSLASH), StringUtils.SLASH).concat(StringUtils.SLASH).concat(path); + } + } diff --git a/screen-api/src/main/java/com/moral/api/pojo/ext/allocation/AllocationExcelExt.java b/screen-api/src/main/java/com/moral/api/pojo/ext/allocation/AllocationExcelExt.java new file mode 100644 index 0000000..a73cc6d --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/pojo/ext/allocation/AllocationExcelExt.java @@ -0,0 +1,51 @@ +package com.moral.api.pojo.ext.allocation; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.moral.api.entity.Allocation; +import com.moral.api.pojo.vo.approvetable.ApproveTableListVo; +import com.moral.api.pojo.vo.file.FileAddressVo; +import com.moral.api.pojo.vo.file.FileVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * <p> + * ��������� + * </p> + * deyt template generate + * @author JI + * @since 2023-09-25 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class AllocationExcelExt extends Allocation { + + @ApiModelProperty(value = "������������") + private List<FileAddressVo> fileBaseList; + + /* @ApiModelProperty(value = "������������") + private List<FileVo> fileChangeList; + + @ApiModelProperty(value = "������������") + private List<FileVo> fileApproveList; + + @ApiModelProperty(value = "������������") + private List<ApproveTableListVo> approveList;*/ + + //������������������ + @TableField(exist = false) + private String unitName; + + //������������������ + @TableField(exist = false) + private String escalationUnitName; + @TableField(exist = false) + //������������������ + private String polluteTypeName; + +} diff --git a/screen-api/src/main/java/com/moral/api/pojo/vo/allocation/AllocationListExcelVo.java b/screen-api/src/main/java/com/moral/api/pojo/vo/allocation/AllocationListExcelVo.java new file mode 100644 index 0000000..f5fefde --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/pojo/vo/allocation/AllocationListExcelVo.java @@ -0,0 +1,172 @@ +package com.moral.api.pojo.vo.allocation; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.moral.api.pojo.ext.allocation.AllocationExcelExt; +import com.moral.api.pojo.vo.approvetable.ApproveTableListVo; +import com.moral.api.pojo.vo.file.FileAddressVo; +import com.moral.api.pojo.vo.file.FileVo; +import com.moral.api.utils.BeanConverts; +import com.moral.api.utils.MyStringImageConverterUtil; +import com.moral.api.utils.MyUrlConverterUtil; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.net.URL; +import java.util.Date; +import java.util.List; + +/** + * <p> + * ��������� + * </p> + * deyt template generate + * @author JI + * @since 2023-09-25 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="AllocationListExcelVo - ������VO������", description="AllocationListExcelVo - ������VO������") +public class AllocationListExcelVo implements Serializable { + + + + + @ApiModelProperty(value = "������������") + @ExcelProperty(value = "������������") + private String allocationNum; + + + @ApiModelProperty(value = "������������") + @JsonFormat(pattern="yyyy-MM-dd") + @ExcelProperty(value = "������������") + private Date escalationTime; + + @ApiModelProperty(value = "������������") + @ExcelProperty(value = "������������") + private String pollutePosition; + + /* @ApiModelProperty(value = "������������") + private List<FileAddressVo> fileBaseList;*/ + + @ApiModelProperty(value = "������������") + @ExcelProperty(value = "���������������",converter = MyStringImageConverterUtil.class) + private List<String> writeCellDataFile; + + @ApiModelProperty(value = "���������") + @ExcelProperty(value = "���������") + private String escalationName; + + /* @ApiModelProperty(value = "������������id") + private Integer unitId; + + @ApiModelProperty(value = "������������id") + private Integer polluteType; + + @ApiModelProperty(value = "������������id") + private Integer changeType; + + @ApiModelProperty(value = "������������") + private Integer changeDay; + + @ApiModelProperty(value = "������������id") + private Integer escalationUnitId; + + @ApiModelProperty(value = "���������") + private String escalationName; + + @ApiModelProperty(value = "������������id") + private Integer investigationType; + + @ApiModelProperty(value = "������������") + private String problemDescribe; + + @ApiModelProperty(value = "������������") + private Integer isChange; + + @ApiModelProperty(value = "������������") + private String changeDescribe; + + @ApiModelProperty(value = "���������������") + private String changeName; + + @ApiModelProperty(value = "������������") + @JsonFormat(pattern="yyyy-MM-dd") + private Date changeTime; + + @ApiModelProperty(value = "������������") + private Integer checkScore; + + @ApiModelProperty(value = "������������") + private String checkDescribe; + + @ApiModelProperty(value = "���������") + private String checkName; + + @ApiModelProperty(value = "������������") + @JsonFormat(pattern="yyyy-MM-dd HH:mm", timezone = "GMT+8") + private Date checkTime; + + @ApiModelProperty(value = "������") + private Integer state; + + @ApiModelProperty(value = "������������") + private Integer isInvalid; + + @ApiModelProperty(value = "������������") + private String invalidReason; + + @ApiModelProperty(value = "���������id") + private Integer createId; + + @ApiModelProperty(value = "���������������") + private String createName; + + @ApiModelProperty(value = "������������") + @JsonFormat(pattern="yyyy-MM-dd HH:mm", timezone = "GMT+8") + private Date createTime; + + @ApiModelProperty(value = "���������id") + private Integer updateId; + + @ApiModelProperty(value = "���������������") + private String updateName; + + @ApiModelProperty(value = "������������") + @JsonFormat(pattern="yyyy-MM-dd HH:mm", timezone = "GMT+8") + private Date updateTime; + + + + @ApiModelProperty(value = "������������") + private List<FileVo> fileChangeList; + + @ApiModelProperty(value = "������������") + private List<FileVo> fileApproveList; + + @ApiModelProperty(value = "������������") + private List<ApproveTableListVo> approveList; + + @TableField(exist = false) + private String time; + + @TableField(exist = false) + private String unitName; + @TableField(exist = false) + private String escalationUnitName; + @TableField(exist = false) + private String polluteTypeName;*/ + + + public static AllocationListExcelVo convert(AllocationExcelExt allocationExt) { + AllocationListExcelVo allocationVo = BeanConverts.convert(allocationExt, AllocationListExcelVo.class); + return allocationVo; + } + +} diff --git a/screen-api/src/main/java/com/moral/api/pojo/vo/file/FileAddressVo.java b/screen-api/src/main/java/com/moral/api/pojo/vo/file/FileAddressVo.java new file mode 100644 index 0000000..26d087c --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/pojo/vo/file/FileAddressVo.java @@ -0,0 +1,32 @@ +package com.moral.api.pojo.vo.file; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @ClassName FileVo + * @Description TODO + * @Author @cjl + * @Date 2023-09-21 14:51 + * @Version 1.0 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(description="FileAddressVo - ������VO������") +public class FileAddressVo { + @ApiModelProperty(value = "ID") + private Integer fileId; + + @ApiModelProperty(value = "������������") + private String fileName; + + @ApiModelProperty(value = "������������") + private String fileAddress; + + @ApiModelProperty(value = "������1������") + private Integer fileType; +} diff --git a/screen-api/src/main/java/com/moral/api/service/AllocationService.java b/screen-api/src/main/java/com/moral/api/service/AllocationService.java index 0da84e8..18b9bcb 100644 --- a/screen-api/src/main/java/com/moral/api/service/AllocationService.java +++ b/screen-api/src/main/java/com/moral/api/service/AllocationService.java @@ -9,6 +9,7 @@ import com.moral.api.entity.Allocation; import com.moral.api.entity.AllocationLog; import com.moral.api.entity.ResponsibilityUnit; +import com.moral.api.pojo.ext.allocation.AllocationExcelExt; import com.moral.api.pojo.ext.allocation.AllocationExt; import com.moral.api.pojo.ext.allocation.AllocationListExt; import com.moral.api.pojo.ext.allocation.AllocationPageExt; @@ -160,4 +161,7 @@ * @return */ List<Integer> getUnitAuthority(String code); + + + List<AllocationExcelExt> listExcel(List<Integer> id); } diff --git a/screen-api/src/main/java/com/moral/api/service/FileTableService.java b/screen-api/src/main/java/com/moral/api/service/FileTableService.java index b63cec4..b102755 100644 --- a/screen-api/src/main/java/com/moral/api/service/FileTableService.java +++ b/screen-api/src/main/java/com/moral/api/service/FileTableService.java @@ -2,6 +2,7 @@ import com.moral.api.entity.FileTable; import com.baomidou.mybatisplus.extension.service.IService; +import com.moral.api.pojo.vo.file.FileAddressVo; import com.moral.api.pojo.vo.file.FileVo; import org.springframework.web.multipart.MultipartFile; @@ -30,4 +31,6 @@ void upDateResult(List<FileVo> list,int relationId,int fileModule); List<FileVo> list(int relationId,int fileModule); + + List<FileAddressVo> list(int relationId,int fileModule,int fileType); } diff --git a/screen-api/src/main/java/com/moral/api/service/impl/AllocationServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/AllocationServiceImpl.java index 6a2648b..c7c3ebf 100644 --- a/screen-api/src/main/java/com/moral/api/service/impl/AllocationServiceImpl.java +++ b/screen-api/src/main/java/com/moral/api/service/impl/AllocationServiceImpl.java @@ -19,6 +19,7 @@ import com.moral.api.pojo.bean.BaseInvalidEntity; import com.moral.api.pojo.dto.allocation.AllocationUnitViewDto; import com.moral.api.pojo.enums.*; +import com.moral.api.pojo.ext.allocation.AllocationExcelExt; import com.moral.api.pojo.ext.allocation.AllocationExt; import com.moral.api.pojo.ext.allocation.AllocationListExt; import com.moral.api.pojo.ext.allocation.AllocationPageExt; @@ -31,6 +32,7 @@ import com.moral.api.pojo.vo.app.AppAuthority; import com.moral.api.pojo.vo.user.QxUser; import com.moral.api.service.*; +import com.moral.api.utils.BeanConverts; import com.moral.constant.Constants; import com.moral.constant.RedisConstants; import com.moral.util.DateUtils; @@ -994,4 +996,15 @@ return responsibilityUnit; } + @Override + public List<AllocationExcelExt> listExcel(List<Integer> id) { + List<AllocationExcelExt> list = new ArrayList<>(); + for(Integer i : id){ + AllocationExt allocationExt = oneAllocation(i); + AllocationExcelExt allocationExcelExt = BeanConverts.convert(allocationExt,AllocationExcelExt.class); + allocationExcelExt.setFileBaseList(fileTableService.list(i,FileTableEnum.ALLOCATION_FOUNDATION.value,FileType.PICTURE.getValue())); + list.add(allocationExcelExt); + } + return list; + } } diff --git a/screen-api/src/main/java/com/moral/api/service/impl/FileTableServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/FileTableServiceImpl.java index 4d17a57..d1e99f7 100644 --- a/screen-api/src/main/java/com/moral/api/service/impl/FileTableServiceImpl.java +++ b/screen-api/src/main/java/com/moral/api/service/impl/FileTableServiceImpl.java @@ -6,6 +6,7 @@ import com.moral.api.mapper.FileTableMapper; import com.moral.api.pojo.enums.FileType; import com.moral.api.pojo.enums.YesOrNo; +import com.moral.api.pojo.vo.file.FileAddressVo; import com.moral.api.pojo.vo.file.FileVo; import com.moral.api.pojo.vo.user.QxUser; import com.moral.api.service.FileTableService; @@ -236,4 +237,22 @@ }); return list; } + + @Override + public List<FileAddressVo> list(int relationId, int fileModule, int fileType) { + List<FileAddressVo> list = new ArrayList<>(); + List<FileTable> existsList = this.lambdaQuery().eq(FileTable::getRelationId, relationId) + .eq(FileTable::getFileModule, fileModule) + .eq(Objects.nonNull(fileType),FileTable::getFileType,fileType) + .eq(FileTable::getIsDel, YesOrNo.NO.value).orderByAsc(FileTable::getCreateTime).list(); + existsList.forEach(it->{ + FileAddressVo fileVo = new FileAddressVo(); + fileVo.setFileId(it.getFileId()); + fileVo.setFileName(it.getFileName()); + fileVo.setFileType(it.getFileType()); + fileVo.setFileAddress(it.getFileAddress()); + list.add(fileVo); + }); + return list; + } } diff --git a/screen-api/src/main/java/com/moral/api/utils/CustomImageModifyHandler.java b/screen-api/src/main/java/com/moral/api/utils/CustomImageModifyHandler.java new file mode 100644 index 0000000..e130b06 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/utils/CustomImageModifyHandler.java @@ -0,0 +1,127 @@ +package com.moral.api.utils; + +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.CellData; +import com.alibaba.excel.metadata.Head; +import com.alibaba.excel.write.handler.CellWriteHandler; +import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; +import com.alibaba.excel.write.metadata.holder.WriteTableHolder; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.util.Units; + +import java.util.ArrayList; +import java.util.List; + +/** + * @ClassName CustomImageModifyHandler + * @Description TODO + * @Author @cjl + * @Date 2023-11-15 10:56 + * @Version 1.0 + */ +public class CustomImageModifyHandler implements CellWriteHandler { + private List<String> repeats = new ArrayList<>(); + // ������������������������������������������������������������������������������������������������������������������������������������ + private Integer maxDataSize = 0; + @Override + public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) { + + } + + @Override + public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { + + } + + @Override + public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { + // ��� ��������������������� ��������������������������������� + if (isHead) { + return; + } + //���������������������������������type������������,��������������������� + if(cellData.getImageValue()!=null||cellData.getData() instanceof ArrayList){ + cellData.setType(CellDataTypeEnum.EMPTY); + } + } + + @Override + public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) { + // ��� ������������������������ ��������������������� + if (isHead || CollectionUtils.isEmpty(cellDataList)) { + return; + } + Boolean listFlag = false; + ArrayList data = null; + Sheet sheet = cell.getSheet(); + // ���������ListUrlConverterUtil������������ + if (cellDataList.get(0).getData() instanceof ArrayList){ + data = (ArrayList) cellDataList.get(0).getData(); + if (CollectionUtils.isEmpty(data)) { + return; + } + if (data.get(0) instanceof CellData){ + CellData cellData = (CellData) data.get(0); + if (cellData.getImageValue() == null){ + return; + }else { + listFlag = true; + } + } + } + if (!listFlag && cellDataList.get(0).getImageValue() == null){ + return; + } + String key = cell.getRowIndex() + "_" + cell.getColumnIndex(); + if (repeats.contains(key)){ + return; + } + repeats.add(key); + if (data.size() > maxDataSize) { + maxDataSize = data.size(); + } + //60px������������������900,60px���������������248*8,������������������ + sheet.getRow(cell.getRowIndex()).setHeight((short)900); + sheet.setColumnWidth(cell.getColumnIndex(), (int) (listFlag?21.8*256*maxDataSize:22.8*256)); + + if (listFlag){ + for (int i = 0; i < data.size(); i++) { + CellData cellData= (CellData) data.get(i); + if(cellData.getImageValue()==null){ + continue; + } + this.insertImage(sheet,cell,cellData.getImageValue(),i); + } + }else { + // cellDataList ���list������������ ������������������ ������������������������������������ ������������������������ ������������������ + this.insertImage(sheet,cell,cellDataList.get(0).getImageValue(),0); + } + + } + + private void insertImage(Sheet sheet,Cell cell,byte[] pictureData,int i){ + int picWidth = Units.pixelToEMU(175); + int index = sheet.getWorkbook().addPicture(pictureData, HSSFWorkbook.PICTURE_TYPE_PNG); + Drawing drawing = sheet.getDrawingPatriarch(); + if (drawing == null) { + drawing = sheet.createDrawingPatriarch(); + } + CreationHelper helper = sheet.getWorkbook().getCreationHelper(); + ClientAnchor anchor = helper.createClientAnchor(); + // ������������������ + anchor.setDx1(picWidth*i); + anchor.setDx2(picWidth+picWidth*i); + anchor.setDy1(0); + anchor.setDy2(0); + //������������������ + anchor.setCol1(cell.getColumnIndex()); + anchor.setCol2(cell.getColumnIndex()); + anchor.setRow1(cell.getRowIndex()); + anchor.setRow2(cell.getRowIndex() + 1); + // ��������������������������������������� + anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE); + drawing.createPicture(anchor, index); + } +} diff --git a/screen-api/src/main/java/com/moral/api/utils/MyStringImageConverterUtil.java b/screen-api/src/main/java/com/moral/api/utils/MyStringImageConverterUtil.java new file mode 100644 index 0000000..77ff3d2 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/utils/MyStringImageConverterUtil.java @@ -0,0 +1,69 @@ +package com.moral.api.utils; + +import cn.hutool.core.convert.Convert; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.CellData; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.property.ExcelContentProperty; +import com.alibaba.excel.util.IoUtils; + +import java.io.FileInputStream; +import java.util.ArrayList; +import java.util.List; + +/** + * @ClassName MyStringImageConverterUtil + * @Description TODO + * @Author @cjl + * @Date 2023-11-15 14:08 + * @Version 1.0 + */ +public class MyStringImageConverterUtil implements Converter<List<String>> { + @Override + public Class supportJavaTypeKey() { + return List.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.IMAGE; + } + + @Override + public List<String> convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception { + String stringValue = cellData.getStringValue(); + //���json���������������excel���������������������������java List<String>������ + List<String> list = Convert.toList(String.class,stringValue); + return list; + + } + + @Override + public CellData convertToExcelData(List<String> stringUrl, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception { + // ������������������������������URL������������ + List<CellData> data = new ArrayList<>(); + // for ������������������ + for (String url : stringUrl) { + FileInputStream inputStream = null; + try { + inputStream = new FileInputStream(url); + byte[] bytes = IoUtils.toByteArray(inputStream); + data.add(new CellData(bytes)); + } catch (Exception e) { + //��������������������������� + //data.add(new CellData(IoUtils.toByteArray(new FileInputStream("D:\\easyexcel\\err.png")))); + continue; + } finally { + if (inputStream != null){ + inputStream.close(); + } + } + } + + // ���������������������������������List,������������������CellData cellData = new CellData(data);���������list���������������������CellData���������data������������ + CellData cellData = new CellData(data); + cellData.setType(CellDataTypeEnum.IMAGE); + return cellData; + } +} diff --git a/screen-api/src/main/java/com/moral/api/utils/MyUrlConverterUtil.java b/screen-api/src/main/java/com/moral/api/utils/MyUrlConverterUtil.java new file mode 100644 index 0000000..ab96d18 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/utils/MyUrlConverterUtil.java @@ -0,0 +1,70 @@ +package com.moral.api.utils; + +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.CellData; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.property.ExcelContentProperty; +import com.alibaba.excel.util.IoUtils; + +import java.io.FileInputStream; +import java.io.InputStream; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; + +/** + * @ClassName MyUrlConverterUtil + * @Description TODO + * @Author @cjl + * @Date 2023-11-15 11:02 + * @Version 1.0 + */ +public class MyUrlConverterUtil implements Converter<List<URL>> { + @Override + public Class supportJavaTypeKey() { + return List.class; + } + + @Override + public CellDataTypeEnum supportExcelTypeKey() { + /** + *���������������������������IMAGE + */ + return CellDataTypeEnum.IMAGE; + } + + @Override + public List convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + return null; + } + + @Override + public CellData convertToExcelData(List<URL> value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + // ������������������������������URL������������ + List<CellData> data = new ArrayList<>(); + // for ������������������ + for (URL url : value) { + InputStream inputStream = null; + try { + inputStream = url.openStream(); + byte[] bytes = IoUtils.toByteArray(inputStream); + data.add(new CellData(bytes)); + } catch (Exception e) { + //��������������������������� + data.add(new CellData(IoUtils.toByteArray(new FileInputStream("D:\\easyexcel\\err.png")))); + continue; + } finally { + if (inputStream != null){ + inputStream.close(); + } + } + } + + // ���������������������������������List,������������������CellData cellData = new CellData(data);���������list���������������������CellData���������data������������ + CellData cellData = new CellData(data); + cellData.setType(CellDataTypeEnum.IMAGE); + return cellData; + } + +} diff --git a/screen-api/src/main/resources/application-qa.yml b/screen-api/src/main/resources/application-qa.yml index ccec2b7..66a5a9f 100644 --- a/screen-api/src/main/resources/application-qa.yml +++ b/screen-api/src/main/resources/application-qa.yml @@ -141,4 +141,4 @@ foh3wi2ooghiCh5 file: - path: /data/upload/ \ No newline at end of file + path: E:/upload \ No newline at end of file -- Gitblit v1.8.0