From d3cb0e841e6585aa84a45f18bb30965db8d1a6aa Mon Sep 17 00:00:00 2001
From: whycq <913841844@qq.com>
Date: 星期三, 08 一月 2025 15:48:40 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/controller/MatController.java |   86 +++++++++++++++++++++++++++++++++++++------
 1 files changed, 74 insertions(+), 12 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/MatController.java b/src/main/java/com/zy/asrs/controller/MatController.java
index 7e09475..3c2bac0 100644
--- a/src/main/java/com/zy/asrs/controller/MatController.java
+++ b/src/main/java/com/zy/asrs/controller/MatController.java
@@ -1,6 +1,8 @@
 package com.zy.asrs.controller;
 
 import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
 import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -10,11 +12,9 @@
 import com.core.annotations.ManagerAuth;
 import com.core.common.*;
 import com.core.exception.CoolException;
-import com.zy.asrs.entity.ManPakOut;
-import com.zy.asrs.entity.Mat;
-import com.zy.asrs.entity.MatPrint;
-import com.zy.asrs.entity.OrderDetl;
+import com.zy.asrs.entity.*;
 import com.zy.asrs.entity.result.KeyValueVo;
+import com.zy.asrs.mapper.TagMapper;
 import com.zy.asrs.service.ManPakOutService;
 import com.zy.asrs.service.MatService;
 import com.zy.asrs.service.OrderDetlService;
@@ -25,19 +25,24 @@
 import com.zy.common.utils.BarcodeUtils;
 import com.zy.common.utils.QrCode;
 import com.zy.common.web.BaseController;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.annotation.Resource;
 import javax.imageio.ImageIO;
 import javax.servlet.http.HttpServletResponse;
 import java.awt.image.BufferedImage;
 import java.io.IOException;
+import java.io.OutputStream;
 import java.net.URLEncoder;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @RestController
+@Slf4j
 public class MatController extends BaseController {
 
     @Autowired
@@ -113,7 +118,8 @@
         return R.ok(matService.getPage(new Page<>(curr, limit)
                 , String.valueOf(tagId)
                 , param.get("matnr")
-                , param.get("maktx"))
+                , param.get("maktx")
+                , param.get("batch"))
         );
 
     }
@@ -175,16 +181,72 @@
         }
         return R.ok();
     }
+    @Resource
+    private TagMapper tagMapper;
 
     @RequestMapping(value = "/mat/export/auth")
     @ManagerAuth
-    public R export(@RequestBody JSONObject param){
-        EntityWrapper<Mat> wrapper = new EntityWrapper<>();
-        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
-        Map<String, Object> map = excludeTrash(param.getJSONObject("mat"));
-        convert(map, wrapper);
-        List<Mat> list = matService.selectList(wrapper);
-        return R.ok(exportSupport(list, fields));
+    public void export(@RequestBody JSONObject param, HttpServletResponse response) throws IOException {
+        //鏂囦欢鍚�
+        String fileName =String.valueOf(System.currentTimeMillis());
+
+        OutputStream outputStream =null;
+        try {
+            //璁板綍鎬绘暟:瀹為檯涓渶瑕佹牴鎹煡璇㈡潯浠惰繘琛岀粺璁″嵆鍙�:涓�鍏卞灏戞潯
+            int totalCount=matService.selectCount(null);
+            //姣忎竴涓猄heet瀛樻斁100w鏉℃暟鎹�
+            Integer sheetDataRows = 400000;
+            //姣忔鍐欏叆鐨勬暟鎹噺20w,姣忛〉鏌ヨ20W
+            Integer writeDataRows = 200000;
+            //璁$畻闇�瑕佺殑Sheet鏁伴噺
+            Integer sheetNum = totalCount % sheetDataRows == 0 ? (totalCount / sheetDataRows) : (totalCount / sheetDataRows + 1);
+            //璁$畻涓�鑸儏鍐典笅姣忎竴涓猄heet闇�瑕佸啓鍏ョ殑娆℃暟(涓�鑸儏鍐典笉鍖呭惈鏈�鍚庝竴涓猻heet,鍥犱负鏈�鍚庝竴涓猻heet涓嶇‘瀹氫細鍐欏叆澶氬皯鏉℃暟鎹�)
+            Integer oneSheetWriteCount = sheetDataRows / writeDataRows;
+            //璁$畻鏈�鍚庝竴涓猻heet闇�瑕佸啓鍏ョ殑娆℃暟
+            Integer lastSheetWriteCount = totalCount % sheetDataRows == 0 ? oneSheetWriteCount : (totalCount % sheetDataRows % writeDataRows == 0 ? (totalCount / sheetDataRows / writeDataRows) : ((totalCount % sheetDataRows) / writeDataRows + 1));
+            outputStream = response.getOutputStream();
+            //蹇呴』鏀惧埌寰幆澶栵紝鍚﹀垯浼氬埛鏂版祦
+            ExcelWriter excelWriter = EasyExcel.write(outputStream).build();
+            //寮�濮嬪垎鎵规煡璇㈠垎娆″啓鍏�
+            for (int i = 0; i < sheetNum; i++) {
+                //鍒涘缓Sheet
+                WriteSheet sheet = new WriteSheet();
+                sheet.setSheetName("Sheet"+i);
+                sheet.setSheetNo(i);
+                //寰幆鍐欏叆娆℃暟: j鐨勮嚜澧炴潯浠舵槸褰撲笉鏄渶鍚庝竴涓猄heet鐨勬椂鍊欏啓鍏ユ鏁颁负姝e父鐨勬瘡涓猄heet鍐欏叆鐨勬鏁�,濡傛灉鏄渶鍚庝竴涓氨闇�瑕佷娇鐢ㄨ绠楃殑娆℃暟lastSheetWriteCount
+                for (int j = 0; j < (i != sheetNum - 1 ? oneSheetWriteCount : lastSheetWriteCount); j++) {
+                    //鍒嗛〉鏌ヨ涓�娆�20w
+                    Page page1 = new Page(j + 1 + oneSheetWriteCount * i, writeDataRows);
+                    //鏌ヨ鍒嗛〉鍒楄〃---鎸夌収鑷繁鐨勪笟鍔℃煡鍒楄〃锛屽垎椤佃繖涓竴瀹氳浣跨敤杩欎釜锛歱age1.getPageNum(),page1.getPageSize()锛侊紒锛�
+                    List<Mat> list = matService.selectPage(new Page<>(page1.getCurrent(), page1.getLimit())).getRecords();
+                    List<Tag> tags = tagMapper.selectList(null);
+                    // 鎵�鏈夌被鍒�
+                    Map<Long, String> tagMaps = tags.stream().collect(Collectors.toMap(Tag::getId,Tag::getName,(v1,v2) -> v1));
+                    // 褰掔被id瀵绘壘褰掔被鍚嶇О
+                    list = list.stream().peek(mat -> mat.setUuid(tagMaps.get(mat.getTagId()))).collect(Collectors.toList());
+                    //鍐欏叆鍒癳xcel:
+                    /**************z鍙渶瑕侀�夋嫨涓�绉嶆柟寮忓嵆鍙�*****************/
+                    //杩欓噷鍙互閫氳繃璁剧疆includeColumnFiledNames銆乪xcludeColumnFiledNames瀵煎嚭浠�涔堝瓧娈碉紝鍙互鍔ㄦ�侀厤缃紝鍓嶇浼犺繃鏉ラ偅浜涘垪锛屽氨瀵煎嚭閭d簺鍒�
+                    //鏂瑰紡3銆佷笉鍋氳缃紝鍏ㄩ儴瀵煎嚭
+                    WriteSheet writeSheet = EasyExcel.writerSheet(i, "Sheet" + (i + 1)).head(Mat.class)
+                            .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+                    excelWriter.write(list, writeSheet);
+                }
+            }
+            // 涓嬭浇EXCEL锛岃繑鍥炵粰鍓嶆stream娴�
+            response.setContentType("application/octet-stream");
+            response.setCharacterEncoding("utf-8");
+            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
+            excelWriter.finish();
+            outputStream.flush();
+            outputStream.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            if (outputStream != null) {
+                outputStream.close();
+            }
+        }
     }
 
     @RequestMapping(value = "/matQuery/auth")

--
Gitblit v1.9.1