licailing 5 年 前
コミット
803689e10c

+ 27 - 17
src/main/java/com/izouma/imt/service/vendor/VendorInfoService.java

@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
+import com.github.kevinsawicki.http.HttpRequest;
 import com.izouma.imt.converter.LongArrayConverter;
 import com.izouma.imt.converter.LongArrayConverter;
 import com.izouma.imt.converter.StringArrayConverter;
 import com.izouma.imt.converter.StringArrayConverter;
 import com.izouma.imt.domain.*;
 import com.izouma.imt.domain.*;
@@ -36,6 +37,7 @@ import org.springframework.stereotype.Service;
 import javax.persistence.criteria.Expression;
 import javax.persistence.criteria.Expression;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Predicate;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
+import java.io.File;
 import java.io.IOException;
 import java.io.IOException;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.*;
@@ -495,7 +497,7 @@ public class VendorInfoService {
     /*
     /*
     导出
     导出
      */
      */
-    public List<VendorInfoVO> export(HttpServletResponse response) {
+    public List<VendorInfoVO> export() {
         List<VendorInfoVO> vos = new ArrayList<>();
         List<VendorInfoVO> vos = new ArrayList<>();
 
 
         // 所有展商
         // 所有展商
@@ -595,29 +597,37 @@ public class VendorInfoService {
                         .collect(Collectors.joining(",")));
                         .collect(Collectors.joining(",")));
             }
             }
             // 下载文件
             // 下载文件
-//            String file = "vendor/" + vendorInfo.getEnCompanyName();
-
-            //                FileUtils.download(vendorInfo.getBusinessLicenseImg(), file, "BusinessLicense");
-//            FileUtils.download2(response, vendorInfo.getEnCompanyName() + "-BusinessLicense", vendorInfo.getBusinessLicenseImg());
-//            try {
-//                FileUtils.download(vendorInfo.getLogo(), file, "logo");
-//                FileUtils.download2(response, vendorInfo.getLogo(), vendorInfo.getEnCompanyName() + "-logo");
-//            } catch (IOException e) {
-//                e.printStackTrace();
-//            }
-//            try {
-//                FileUtils.download(vendorInfo.getIDImg(), file, "id");
-//                FileUtils.download2(response, vendorInfo.getIDImg(), vendorInfo.getEnCompanyName() + "-id");
-//            } catch (IOException e) {
-//                e.printStackTrace();
-//            }
 
 
+            File dirfile = new File("vendor/" + vendorInfo.getEnCompanyName());
+            if (!dirfile.exists()) {
+                dirfile.mkdirs();
+            }
+            if (StrUtil.isNotBlank(vendorInfo.getLogo())) {
+                HttpRequest.get(vendorInfo.getLogo())
+                        .receive(new File(dirfile + "/logo" + this.getSuffix(vendorInfo.getLogo())));
+            }
+            if (StrUtil.isNotBlank(vendorInfo.getLogo1())) {
+                HttpRequest.get(vendorInfo.getLogo1())
+                        .receive(new File(dirfile + "/logo1" + this.getSuffix(vendorInfo.getLogo())));
+            }
+            if (StrUtil.isNotBlank(vendorInfo.getBusinessLicenseImg())) {
+                HttpRequest.get(vendorInfo.getBusinessLicenseImg())
+                        .receive(new File(dirfile + "/BusinessLicense" + this.getSuffix(vendorInfo.getLogo())));
+            }
             vos.add(vo);
             vos.add(vo);
         });
         });
 
 
         return vos;
         return vos;
     }
     }
 
 
+    /*
+    后缀
+     */
+    public String getSuffix(String name) {
+        int i = name.lastIndexOf(".");
+        return name.substring(i);
+    }
+
     public Page<VendorInfo> getAll(PageQuery pageQuery, String categoryIds, String enterpriseType,
     public Page<VendorInfo> getAll(PageQuery pageQuery, String categoryIds, String enterpriseType,
                                    String applicationField, String countries, String continent) {
                                    String applicationField, String countries, String continent) {
         LongArrayConverter converter = new LongArrayConverter();
         LongArrayConverter converter = new LongArrayConverter();

+ 22 - 0
src/main/java/com/izouma/imt/utils/excel/ExcelUtils.java

@@ -9,6 +9,7 @@ import io.swagger.annotations.ApiModel;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 
 
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
+import java.io.File;
 import java.io.IOException;
 import java.io.IOException;
 import java.net.URLEncoder;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.nio.charset.StandardCharsets;
@@ -43,6 +44,27 @@ public class ExcelUtils<T> {
                 .doWrite(data);
                 .doWrite(data);
     }
     }
 
 
+    public static <T> void export1(List<T> data, String file) throws IOException {
+        String fileName = "data.xlsx";
+        if (data != null && !data.isEmpty()) {
+            fileName = data.get(0).getClass().getSimpleName() + ".xlsx";
+            ApiModel apiModel = data.get(0).getClass().getAnnotation(ApiModel.class);
+            if (apiModel != null) {
+                if (StringUtils.isNotEmpty(apiModel.value())) {
+                    fileName = apiModel.value() + ".xlsx";
+                }
+            }
+        }
+
+        EasyExcel.write(new File(file + fileName), data.get(0).getClass()).sheet("sheet")
+                .registerWriteHandler(customStyle())
+                .registerWriteHandler(new SimpleRowHeightStyleStrategy((short) 20, (short) 20))
+                .registerConverter(new LocalDateConverter())
+                .registerConverter(new LocalDateTimeConverter())
+                .registerConverter(new BooleanConverter())
+                .doWrite(data);
+    }
+
     public static HorizontalCellStyleStrategy customStyle() {
     public static HorizontalCellStyleStrategy customStyle() {
         // 头的策略
         // 头的策略
         WriteCellStyle headWriteCellStyle = new WriteCellStyle();
         WriteCellStyle headWriteCellStyle = new WriteCellStyle();

+ 35 - 8
src/main/java/com/izouma/imt/web/vendor/VendorInfoController.java

@@ -2,27 +2,30 @@ package com.izouma.imt.web.vendor;
 
 
 
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ZipUtil;
+import com.izouma.imt.domain.vendor.VendorInfo;
 import com.izouma.imt.dto.InfoVO;
 import com.izouma.imt.dto.InfoVO;
+import com.izouma.imt.dto.PageQuery;
 import com.izouma.imt.dto.VendorDTO;
 import com.izouma.imt.dto.VendorDTO;
 import com.izouma.imt.dto.excel.VendorInfoVO;
 import com.izouma.imt.dto.excel.VendorInfoVO;
 import com.izouma.imt.enums.ApplyStatus;
 import com.izouma.imt.enums.ApplyStatus;
 import com.izouma.imt.enums.VendorSort;
 import com.izouma.imt.enums.VendorSort;
-import com.izouma.imt.web.BaseController;
-import com.izouma.imt.domain.vendor.VendorInfo;
-import com.izouma.imt.service.vendor.VendorInfoService;
-import com.izouma.imt.dto.PageQuery;
 import com.izouma.imt.exception.BusinessException;
 import com.izouma.imt.exception.BusinessException;
 import com.izouma.imt.repo.vendor.VendorInfoRepo;
 import com.izouma.imt.repo.vendor.VendorInfoRepo;
+import com.izouma.imt.service.vendor.VendorInfoService;
 import com.izouma.imt.utils.ObjUtils;
 import com.izouma.imt.utils.ObjUtils;
 import com.izouma.imt.utils.excel.ExcelUtils;
 import com.izouma.imt.utils.excel.ExcelUtils;
-
+import com.izouma.imt.web.BaseController;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.IOException;
+import java.io.OutputStream;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
@@ -75,11 +78,35 @@ public class VendorInfoController extends BaseController {
         vendorInfoRepo.softDelete(id);
         vendorInfoRepo.softDelete(id);
     }
     }
 
 
-    @GetMapping("/excel")
+    @GetMapping(value = "/excel", produces = "application/zip;charset=utf-8")
     @ResponseBody
     @ResponseBody
     public void excel(HttpServletResponse response, PageQuery pageQuery) throws IOException {
     public void excel(HttpServletResponse response, PageQuery pageQuery) throws IOException {
-        List<VendorInfoVO> data = vendorInfoService.export(response);
-        ExcelUtils.export(response, data);
+        List<VendorInfoVO> data = vendorInfoService.export();
+        ExcelUtils.export1(data,"vendor/");
+        File vendor = ZipUtil.zip(new File("vendor"));
+
+        //响应头的设置
+//        response.reset();
+        response.setCharacterEncoding("utf-8");
+        response.setContentType("application/zip");
+
+        //设置压缩包的名字
+        //解决不同浏览器压缩包名字含有中文时乱码的问题
+        String downloadName = "vendor.zip";
+        response.setHeader("Content-Disposition", "attachment;fileName=\"" + downloadName + "\"");
+
+        FileInputStream fis = new FileInputStream(vendor);
+        OutputStream os = response.getOutputStream();
+        int readBytes;
+        while ((readBytes = fis.read()) != -1) {
+            os.write(readBytes);
+        }
+
+        os.flush();
+        os.close();
+        fis.close();
+
+        //        ExcelUtils.export(response, data);
     }
     }
 
 
     @GetMapping("/allList")
     @GetMapping("/allList")

+ 2 - 2
src/main/vue/src/plugins/http.js

@@ -5,8 +5,8 @@ import qs from 'qs';
 let baseUrl = 'http://localhost:8080';
 let baseUrl = 'http://localhost:8080';
 switch (process.env.NODE_ENV) {
 switch (process.env.NODE_ENV) {
     case 'development':
     case 'development':
-        baseUrl = 'https://imt.izouma.com';
-        // baseUrl = 'http://localhost:8080';
+        // baseUrl = 'https://imt.izouma.com';
+        baseUrl = 'http://localhost:8080';
         // baseUrl = 'http://192.168.50.127:8080';
         // baseUrl = 'http://192.168.50.127:8080';
         break;
         break;
     case 'test':
     case 'test':

+ 2 - 1
src/main/vue/src/views/vendor/VendorInfoList.vue

@@ -326,7 +326,8 @@ export default {
                     const downloadUrl = window.URL.createObjectURL(new Blob([res.data]));
                     const downloadUrl = window.URL.createObjectURL(new Blob([res.data]));
                     const link = document.createElement('a');
                     const link = document.createElement('a');
                     link.href = downloadUrl;
                     link.href = downloadUrl;
-                    link.setAttribute('download', res.headers['content-disposition'].split('filename=')[1]);
+                    link.setAttribute('download', 'vendor.zip');
+                    // link.setAttribute('download', res.headers['content-disposition'].split('filename=')[1]);
                     document.body.appendChild(link);
                     document.body.appendChild(link);
                     link.click();
                     link.click();
                     link.remove();
                     link.remove();

+ 2 - 1
src/test/java/com/izouma/imt/service/InformationServiceTest.java

@@ -36,8 +36,9 @@ public class InformationServiceTest {
 
 
     @Test
     @Test
     public void test2() {
     public void test2() {
-        Information information = informationRepo.findById(4782L).orElse(null);
+        Information information = informationRepo.findById(47309L).orElse(null);
         List<Information> related = informationService.related(information);
         List<Information> related = informationService.related(information);
         related.forEach(re -> System.out.println(re.getId()));
         related.forEach(re -> System.out.println(re.getId()));
+        System.out.println(related.size());
     }
     }
 }
 }

+ 102 - 4
src/test/java/com/izouma/imt/service/vendor/VendorInfoServiceTest.java

@@ -1,14 +1,19 @@
 package com.izouma.imt.service.vendor;
 package com.izouma.imt.service.vendor;
 
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ZipUtil;
+import com.github.kevinsawicki.http.HttpRequest;
 import com.izouma.imt.domain.vendor.VendorInfo;
 import com.izouma.imt.domain.vendor.VendorInfo;
 import com.izouma.imt.dto.InfoVO;
 import com.izouma.imt.dto.InfoVO;
 import com.izouma.imt.dto.PageQuery;
 import com.izouma.imt.dto.PageQuery;
 import com.izouma.imt.dto.VendorDTO;
 import com.izouma.imt.dto.VendorDTO;
+import com.izouma.imt.dto.excel.VendorInfoVO;
 import com.izouma.imt.enums.VendorSort;
 import com.izouma.imt.enums.VendorSort;
+import com.izouma.imt.exception.BusinessException;
 import com.izouma.imt.repo.vendor.VendorInfoRepo;
 import com.izouma.imt.repo.vendor.VendorInfoRepo;
 import com.izouma.imt.service.ProductCategoryService;
 import com.izouma.imt.service.ProductCategoryService;
 import com.izouma.imt.service.buyers.BuyersInfoService;
 import com.izouma.imt.service.buyers.BuyersInfoService;
+import com.izouma.imt.utils.excel.ExcelUtils;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.FileUtils;
 import org.junit.Test;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runner.RunWith;
@@ -17,12 +22,16 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 import org.springframework.test.context.junit4.SpringRunner;
 import org.springframework.test.context.junit4.SpringRunner;
 
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.io.*;
 import java.io.*;
 import java.net.HttpURLConnection;
 import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URL;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.*;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
 
 
 @SpringBootTest
 @SpringBootTest
 @RunWith(SpringRunner.class)
 @RunWith(SpringRunner.class)
@@ -153,13 +162,102 @@ public class VendorInfoServiceTest {
         String urlStr = "https://imttech.oss-cn-hangzhou.aliyuncs.com/image/avatar/2021-01-20-22-59-11wMmjdDcp.jpg";
         String urlStr = "https://imttech.oss-cn-hangzhou.aliyuncs.com/image/avatar/2021-01-20-22-59-11wMmjdDcp.jpg";
         try {
         try {
             URL httpurl = new URL(urlStr);
             URL httpurl = new URL(urlStr);
-            File dirfile = new File("vendor");
-            if (!dirfile.exists()) {
-                dirfile.mkdirs();
+//            File dirfile = new File("vendor");
+//            if (!dirfile.exists()) {
+//                dirfile.mkdirs();
+//            }
+            FileUtils.copyURLToFile(httpurl, new File("/Users/qiufangchao/Desktop/123" + com.izouma.imt.utils.FileUtils.getFileNameFromUrl(urlStr)));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Test
+    public void test12() {
+        VendorInfo vendorInfo = vendorInfoRepo.findById(27804L).orElseThrow(new BusinessException("wu"));
+        String logo = vendorInfo.getLogo();
+        int i = logo.lastIndexOf(".");
+        String suffer = logo.substring(i);
+        System.out.println(suffer);
+        HttpRequest.get("https://imttech.oss-cn-hangzhou.aliyuncs.com/image/avatar/2021-01-20-22-59-11wMmjdDcp.jpg")
+                .receive(new File("/Users/qiufangchao/Desktop/vendor/logo.jpg"));
+        HttpRequest.get(vendorInfo.getLogo())
+                .receive(new File("/Users/qiufangchao/Desktop/vendor/logo/logo1" + suffer));
+
+        ZipUtil.zip(new File("/Users/qiufangchao/Desktop/vendor"));
+
+    }
+
+   /* @Test
+    public void test13(HttpServletResponse response, HttpServletRequest request){
+        //响应头的设置
+        response.reset();
+        response.setCharacterEncoding("utf-8");
+        response.setContentType("multipart/form-data");
+
+        //设置压缩包的名字
+        //解决不同浏览器压缩包名字含有中文时乱码的问题
+        String downloadName = "我是压缩包的名字.zip";
+        String agent = request.getHeader("USER-AGENT");
+        try {
+            if (agent.contains("MSIE")||agent.contains("Trident")) {
+                downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8");
+            } else {
+                downloadName = new String(downloadName.getBytes("UTF-8"),"ISO-8859-1");
             }
             }
-            FileUtils.copyURLToFile(httpurl, new File("vendor/123" + com.izouma.imt.utils.FileUtils.getFileNameFromUrl(urlStr)));
         } catch (Exception e) {
         } catch (Exception e) {
             e.printStackTrace();
             e.printStackTrace();
         }
         }
+        response.setHeader("Content-Disposition", "attachment;fileName=\"" + downloadName + "\"");
+
+        //设置压缩流:直接写入response,实现边压缩边下载
+        ZipOutputStream zipos = null;
+        try {
+            zipos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
+            zipos.setMethod(ZipOutputStream.DEFLATED); //设置压缩方法
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        //循环将文件写入压缩流
+        DataOutputStream os = null;
+
+
+        for(int i = 0; i < 10; i++ ){
+
+            File file = new File("要下载的某个文件的路径");
+            try {
+                //添加ZipEntry,并ZipEntry中写入文件流
+                //这里,加上i是防止要下载的文件有重名的导致下载失败
+                zipos.putNextEntry(new ZipEntry(i + "文件名字"));
+                os = new DataOutputStream(zipos);
+                InputStream is = new FileInputStream(file);
+                byte[] b = new byte[100];
+                int length = 0;
+                while((length = is.read(b))!= -1){
+                    os.write(b, 0, length);
+                }
+                is.close();
+                zipos.closeEntry();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+
+        //关闭流
+        try {
+            os.flush();
+            os.close();
+            zipos.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }*/
+
+    @Test
+    public void test14() throws IOException {
+        List<VendorInfoVO> data = vendorInfoService.export();
+        ExcelUtils.export1(data,"vendor/");
+        ZipUtil.zip(new File("vendor"));
     }
     }
 }
 }