From d5f54f243755de970308d94471d11a88e0582a75 Mon Sep 17 00:00:00 2001
From: 谢茂盛 <A807732>
Date: Wed, 15 Nov 2023 17:15:01 +0800
Subject: [PATCH] fix: 订单导出图片支持

---
 pom.xml                                                                      |  8 ++++++++
 src/main/java/com/order/erp/controller/OrderController.java                  | 11 +++++++----
 src/main/java/com/order/erp/service/order/OrderBaseInfoService.java          | 11 +++++------
 src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java | 27 +++++++++++++++++++++++----
 4 files changed, 43 insertions(+), 14 deletions(-)

diff --git a/pom.xml b/pom.xml
index 883cda8..5e2c311 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,6 +30,7 @@
         <fastjson.version>1.2.83</fastjson.version>
         <poi.version>3.17</poi.version>
         <poi-ooxml.version>3.17</poi-ooxml.version>
+        <poi-excel.version>poi-317.8</poi-excel.version>
         <commons-csv.version>1.6</commons-csv.version>
         <commons-lang3.version>3.8.1</commons-lang3.version>
         <commons-pool2.version>2.11.1</commons-pool2.version>
@@ -236,6 +237,13 @@
             <version>${easy-captcha.version}</version>
         </dependency>
 
+        <!-- excel导入导出 POI版本为3.17 -->
+        <dependency>
+            <groupId>com.github.stupdit1t</groupId>
+            <artifactId>poi-excel</artifactId>
+            <version>${poi-excel.version}</version>
+        </dependency>
+
         <!--短信服务-->
         <dependency>
             <groupId>com.aliyun</groupId>
diff --git a/src/main/java/com/order/erp/controller/OrderController.java b/src/main/java/com/order/erp/controller/OrderController.java
index 7708beb..00a3e4e 100644
--- a/src/main/java/com/order/erp/controller/OrderController.java
+++ b/src/main/java/com/order/erp/controller/OrderController.java
@@ -3,7 +3,10 @@ package com.order.erp.controller;
 import com.order.erp.common.annotation.AnonymousAccess;
 import com.order.erp.common.constant.ServerResult;
 import com.order.erp.common.excel4j.exceptions.Excel4JException;
-import com.order.erp.domain.vo.order.*;
+import com.order.erp.domain.vo.order.OrderAddVO;
+import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO;
+import com.order.erp.domain.vo.order.OrderUnlockFieldApplyVO;
+import com.order.erp.domain.vo.order.OrderUpdateVO;
 import com.order.erp.service.order.OrderBaseInfoService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -52,11 +55,11 @@ public class OrderController {
      * @param orderBaseInfoQueryVO 查询条件
      * @return 查询结果
      */
-    @PostMapping("/export")
+    @PostMapping(value = "/export")
     @ApiOperation("导出订单")
     @AnonymousAccess
-    public ServerResult export(HttpServletResponse response, @RequestBody @Validated OrderBaseInfoQueryVO orderBaseInfoQueryVO) throws IOException, Excel4JException {
-        return orderBaseInfoService.export(response, orderBaseInfoQueryVO);
+    public void export(HttpServletResponse response, @RequestBody @Validated OrderBaseInfoQueryVO orderBaseInfoQueryVO) throws IOException, Excel4JException {
+        orderBaseInfoService.export(response, orderBaseInfoQueryVO);
     }
 
     /**
diff --git a/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java b/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java
index b007f94..b1039dc 100644
--- a/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java
+++ b/src/main/java/com/order/erp/service/order/OrderBaseInfoService.java
@@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.order.erp.common.constant.ServerResult;
 import com.order.erp.common.excel4j.exceptions.Excel4JException;
 import com.order.erp.domain.dto.order.OrderBaseInfoDO;
-import com.order.erp.domain.vo.IndexDataVO;
-import com.order.erp.domain.vo.order.*;
+import com.order.erp.domain.vo.order.OrderAddVO;
+import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO;
+import com.order.erp.domain.vo.order.OrderUnlockFieldApplyVO;
+import com.order.erp.domain.vo.order.OrderUpdateVO;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -38,22 +40,19 @@ public interface OrderBaseInfoService extends IService<OrderBaseInfoDO> {
 
 
     /**
-     *
      * @param orderBaseInfoQueryVO
      * @return
      */
     ServerResult listByPage(OrderBaseInfoQueryVO orderBaseInfoQueryVO);
 
     /**
-     *
      * @param response
      * @param orderBaseInfoQueryVO
      * @return
      */
-    ServerResult export(HttpServletResponse response, OrderBaseInfoQueryVO orderBaseInfoQueryVO) throws IOException, Excel4JException;
+    void export(HttpServletResponse response, OrderBaseInfoQueryVO orderBaseInfoQueryVO) throws IOException, Excel4JException;
 
     /**
-     *
      * @param fieldVO
      * @return
      */
diff --git a/src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java b/src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java
index 5a32f81..4207f49 100644
--- a/src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java
+++ b/src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java
@@ -11,6 +11,8 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.stupdit1t.excel.common.PoiWorkbookType;
+import com.github.stupdit1t.excel.core.ExcelHelper;
 import com.order.erp.common.constant.Constant;
 import com.order.erp.common.constant.ServerResult;
 import com.order.erp.common.constant.ServerResultCode;
@@ -37,7 +39,9 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.io.InputStream;
 import java.math.BigDecimal;
+import java.net.URL;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -168,7 +172,7 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
     }
 
     @Override
-    public ServerResult export(HttpServletResponse response, OrderBaseInfoQueryVO queryVO) throws IOException, Excel4JException {
+    public void export(HttpServletResponse response, OrderBaseInfoQueryVO queryVO) throws IOException, Excel4JException {
         OrderLockFieldVO lockFieldVO = queryVO.getFieldVO();
         if (Objects.isNull(lockFieldVO)) {
             throw new BusinessException("请选择要导出的列!");
@@ -206,11 +210,17 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
             if (CollectionUtils.isNotEmpty(resultVOList)) {
                 List<Map<String, Object>> list = buildExportMapVOS(resultVOList, lockFieldVO);
                 if (CollectionUtils.isNotEmpty(list)) {
-                    FileUtil.downloadExcel(list, response);
+                    List<String> keys = new ArrayList<>(list.get(Constant.ZERO).keySet());
+
+                    ExcelHelper.opsExport(PoiWorkbookType.XLSX)
+                            .opsSheet(list)
+                            .opsHeader().simple().texts(keys).done()
+                            .opsColumn().fields(keys).done()
+                            .done()
+                            .export(response.getOutputStream());
                 }
             }
         }
-        return ServerResult.success();
     }
 
     /**
@@ -218,7 +228,7 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
      * @param lockFieldVO
      * @return
      */
-    private List<Map<String, Object>> buildExportMapVOS(List<OrderInfoResultVO> resultVOList, OrderLockFieldVO lockFieldVO) {
+    private List<Map<String, Object>> buildExportMapVOS(List<OrderInfoResultVO> resultVOList, OrderLockFieldVO lockFieldVO) throws IOException {
         List<Map<String, Object>> list = new ArrayList<>();
         for (OrderInfoResultVO orderInfoResultVO : resultVOList) {
             Map<String, Object> map = new LinkedHashMap<>();
@@ -282,6 +292,15 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O
                 if (StringUtils.isNotBlank(baseFields.getPacketType())) {
                     map.put("包装类型", orderInfoResultVO.getPacketType());
                 }
+                if (StringUtils.isNotBlank(baseFields.getPicUrl())) {
+                    if (StringUtils.isNotBlank(orderInfoResultVO.getSmallPicUrl())) {
+                        URL url = new URL(orderInfoResultVO.getSmallPicUrl());
+                        InputStream inputStream = url.openStream();
+                        map.put("订单图片", FileUtil.imageParseBytes(inputStream));
+                    } else {
+                        map.put("订单图片", "");
+                    }
+                }
             }
             OrderProfitAnalysisVO profitAnalysisVO = orderInfoResultVO.getProfitAnalysisInfo();
             if (Objects.nonNull(profitAnalysisFields) && Objects.nonNull(profitAnalysisVO)) {
--
libgit2 0.23.3