From f8832d3faa2416c2a0977d52b9f8fc3b25d7275f Mon Sep 17 00:00:00 2001 From: teddyhuang Date: Fri, 26 Mar 2021 06:39:41 +0800 Subject: [PATCH] 202103260639 --- app/src/components/AssetGroup.vue | 35 ++- app/src/components/Inventory.vue | 117 +++++---- app/src/components/Search.vue | 261 +++++++++++---------- src/main/java/com/moze/rms/config/JdbiFactory.java | 4 + .../moze/rms/controller/InventoryController.java | 52 +++- .../com/moze/rms/controller/SearchController.java | 81 +++++++ src/main/java/com/moze/rms/dao/InventoryDAO.java | 93 +++++++- src/main/java/com/moze/rms/dao/MappingColDAO.java | 5 + src/main/java/com/moze/rms/dao/SearchDAO.java | 120 ++++++++++ src/main/java/com/moze/rms/utils/ExcelExpoter.java | 254 +++++++++++++++----- 10 files changed, 760 insertions(+), 262 deletions(-) create mode 100644 src/main/java/com/moze/rms/controller/SearchController.java create mode 100644 src/main/java/com/moze/rms/dao/SearchDAO.java diff --git a/app/src/components/AssetGroup.vue b/app/src/components/AssetGroup.vue index 21fa843..148e27d 100644 --- a/app/src/components/AssetGroup.vue +++ b/app/src/components/AssetGroup.vue @@ -1,6 +1,24 @@ diff --git a/src/main/java/com/moze/rms/config/JdbiFactory.java b/src/main/java/com/moze/rms/config/JdbiFactory.java index b3c9630..c44f60f 100644 --- a/src/main/java/com/moze/rms/config/JdbiFactory.java +++ b/src/main/java/com/moze/rms/config/JdbiFactory.java @@ -75,5 +75,9 @@ public class JdbiFactory { return jdbi.onDemand(AssertDAO.class); } + @Bean + public SearchDAO searchDAO(Jdbi jdbi) { + return jdbi.onDemand(SearchDAO.class); + } } diff --git a/src/main/java/com/moze/rms/controller/InventoryController.java b/src/main/java/com/moze/rms/controller/InventoryController.java index df45d35..d7855a0 100644 --- a/src/main/java/com/moze/rms/controller/InventoryController.java +++ b/src/main/java/com/moze/rms/controller/InventoryController.java @@ -4,13 +4,18 @@ package com.moze.rms.controller; import com.moze.rms.dao.InventoryDAO; import com.moze.rms.dao.MappingColDAO; import com.moze.rms.dao.MappingTableDAO; +import com.moze.rms.dao.SearchDAO; import com.moze.rms.entity.dto.SelectItemDTO; +import com.moze.rms.entity.model.MappingCol; +import com.moze.rms.utils.ExcelExpoter; import com.moze.rms.utils.ExcelImporter; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.support.ManagedMap; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import java.io.*; import java.util.*; import java.util.function.Function; @@ -29,6 +34,9 @@ public class InventoryController { @Autowired InventoryDAO inventoryDAO; + @Autowired + SearchDAO searchDAO; + @GetMapping("/routes") public JsonResult getRoutes() { @@ -56,6 +64,8 @@ public class InventoryController { public JsonResult insertInventory(@RequestBody Map data) { System.out.println(data); inventoryDAO.insertOne(data); + Integer id = inventoryDAO.findId(data); + searchDAO.insertSearch(id, data); return new JsonResult(StatusCode.SUCCESS, null); } @@ -63,6 +73,7 @@ public class InventoryController { public JsonResult modifyInventory(@RequestBody Map data) { try { inventoryDAO.modifyInventory(data); + searchDAO.modifySearch(data); return new JsonResult(StatusCode.SUCCESS, null); } catch (Exception e) { return new JsonResult(StatusCode.SYS_ERROR, e.getMessage()); @@ -81,6 +92,7 @@ public class InventoryController { System.out.println(tablename); System.out.println(id); inventoryDAO.deleteByTablenameAndId(tablename, id); + searchDAO.deleteFromSearch(tablename, id); return new JsonResult(StatusCode.SUCCESS, null); } @@ -93,22 +105,52 @@ public class InventoryController { } @PostMapping("/importFile") - public JsonResult importFile(@RequestParam(required = false) MultipartFile file) throws IOException, InvalidFormatException { + public JsonResult importFile(String tablename, @RequestParam(required = false) MultipartFile file) throws IOException, InvalidFormatException { File f = File.createTempFile(file.getOriginalFilename().split("\\.")[0], file.getOriginalFilename().split("\\.")[1]); - System.out.println(f.getName()); file.transferTo(f); + ExcelImporter excelImporter = new ExcelImporter(f); + List> data = excelImporter.readAll().get("工作表1"); - ExcelImporter excelImporter2 = new ExcelImporter(f); - System.out.println(excelImporter2.readAll()); + List mappingCols = mappingColDAO.findByTable(tablename); + + inventoryDAO.importInventories(tablename, mappingCols, data, searchDAO); f.deleteOnExit(); + return new JsonResult(StatusCode.SUCCESS, null); + } + + @PostMapping("/exportFile") + public void exportFile(@RequestBody Map data, HttpServletResponse resp) throws IOException, InvalidFormatException { + List> items = (List>) data.get("items"); + Map info = (Map) data.get("info"); - return new JsonResult(StatusCode.SUCCESS, null); + List mappingCols = mappingColDAO.findByTable(info.get("tablename")); + + ArrayList titleKeyList= new ArrayList<>(); + Map titleMap = new ManagedMap<>(); + for(MappingCol m: mappingCols) { + titleKeyList.add(m.getColname()); + titleMap.put(m.getColname(), m.getDescript()); + } + ExcelExpoter excelExpoter = new ExcelExpoter(""); + excelExpoter.expoerDataExcel(resp, titleKeyList, titleMap, items, info.get("tablename")); } + @GetMapping("/allHeaders") + public JsonResult getAllHeaders() { + + + List mappingCols = mappingColDAO.findAll(); + + mappingCols.stream().collect(Collectors.groupingBy(MappingCol::getTablename)); + System.out.println(mappingCols.stream().collect(Collectors.groupingBy(MappingCol::getTablename))); + + return new JsonResult(StatusCode.SUCCESS, mappingCols.stream().collect(Collectors.groupingBy(MappingCol::getTablename))); + + } } diff --git a/src/main/java/com/moze/rms/controller/SearchController.java b/src/main/java/com/moze/rms/controller/SearchController.java new file mode 100644 index 0000000..1cb46a3 --- /dev/null +++ b/src/main/java/com/moze/rms/controller/SearchController.java @@ -0,0 +1,81 @@ +package com.moze.rms.controller; + + +import com.moze.rms.dao.MappingColDAO; +import com.moze.rms.dao.MappingTableDAO; +import com.moze.rms.dao.SearchDAO; +import com.moze.rms.entity.model.MappingCol; +import com.moze.rms.entity.model.MappingTable; +import com.moze.rms.utils.ExcelExpoter; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.support.ManagedMap; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.*; + +@RequestMapping("/api/search") +@RestController +public class SearchController { + + + @Autowired + SearchDAO searchDAO; + + @Autowired + MappingTableDAO mappingTableDAO; + + @Autowired + MappingColDAO mappingColDAO; + + @GetMapping("/search") + public JsonResult search(@RequestParam String text) { + + System.out.println(text); + + List tables = mappingTableDAO.findAll(); + + Map>> result = new HashMap<>(); + + for(MappingTable m : tables) { + if (searchDAO.searchFromTable(m.getTablename(), text).size() > 0) { + result.put(m.getTablename(), searchDAO.searchFromTable(m.getTablename(), text)); + } + + } + + return new JsonResult(StatusCode.SUCCESS, result); + } + + + @PostMapping("/exportFileAllGroup") + public void exportFileAllGroup(@RequestBody Map>> data, HttpServletResponse resp) throws IOException, InvalidFormatException { + + + + Iterator>>> iterator = data.entrySet().iterator(); + + + Map>titleKeyLists = new ManagedMap<>(); + Map> titleMaps = new ManagedMap<>(); + while (iterator.hasNext()) { + Map.Entry>> next = iterator.next(); + String key = next.getKey(); + List mappingCols = mappingColDAO.findByTable(key); + ArrayList titleKeyList= new ArrayList<>(); + Map titleMap = new ManagedMap<>(); + for(MappingCol m: mappingCols) { + titleKeyList.add(m.getColname()); + titleMap.put(m.getColname(), m.getDescript()); + } + titleKeyLists.put(key, titleKeyList); + titleMaps.put(key, titleMap); + + } + ExcelExpoter excelExpoter = new ExcelExpoter(""); + excelExpoter.expoerDataExcelMultiSheet(resp, titleKeyLists, titleMaps, data, ""); + } + +} diff --git a/src/main/java/com/moze/rms/dao/InventoryDAO.java b/src/main/java/com/moze/rms/dao/InventoryDAO.java index df250fe..d7bfd86 100644 --- a/src/main/java/com/moze/rms/dao/InventoryDAO.java +++ b/src/main/java/com/moze/rms/dao/InventoryDAO.java @@ -2,19 +2,21 @@ package com.moze.rms.dao; import com.moze.rms.entity.dto.SelectItemDTO; +import com.moze.rms.entity.model.MappingCol; import org.jdbi.v3.core.Handle; import org.jdbi.v3.sqlobject.SqlObject; import org.jdbi.v3.sqlobject.config.RegisterBeanMapper; import org.jdbi.v3.sqlobject.statement.SqlQuery; import org.jdbi.v3.sqlobject.statement.SqlUpdate; +import org.springframework.beans.factory.annotation.Autowired; +import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; public interface InventoryDAO extends SqlObject { - @RegisterBeanMapper(Object.class) default List> getInventoryByTablename(String tablename) { Handle handle = this.getHandle(); @@ -72,6 +74,55 @@ public interface InventoryDAO extends SqlObject { handle.execute(sql); } + default Integer findId(Map data) { + + Handle handle = this.getHandle(); + + String sql = "select id from " + data.get("tablename") + " where "; + Iterator> iterator = data.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry next = iterator.next(); + String key = next.getKey(); + Object value = next.getValue().toString(); + if (key != "tablename" && key != "id") { + if (value != null) { + sql += key + " = '" + value + "' and "; + } else { + sql += key + " = " + value + " and "; + } + } + } + sql = sql.substring(0, sql.length() - 4); + + return handle.createQuery(sql).mapTo(Integer.class).one(); + } + + + default Integer findId2(Map data) { + + Handle handle = this.getHandle(); + + String sql = "select top 1 id from " + data.get("tablename") + " where "; + Iterator> iterator = data.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry next = iterator.next(); + String key = next.getKey(); + Object value = next.getValue(); + if (key != "tablename" && key != "id") { + if (value != null) { + sql += key + " = '" + value + "' and "; + } else { + sql += key + " = '' and "; + } + } + } + sql = sql.substring(0, sql.length() - 4); + + + return handle.createQuery(sql).mapTo(Integer.class).one(); + } + + @RegisterBeanMapper(Object.class) default List> search(Map data) { @@ -83,7 +134,6 @@ public interface InventoryDAO extends SqlObject { Map.Entry next = iterator.next(); String key = next.getKey(); Object value = next.getValue(); - System.out.println(key); if (key != "tablename" && key != "id" && value != null) { sql += " " + key + " like '%" + value + "%' and"; } @@ -92,4 +142,43 @@ public interface InventoryDAO extends SqlObject { System.out.println(sql); return handle.createQuery(sql).mapToMap().list(); } + + default void importInventories(String tablename, List mappingCols, List> datas, SearchDAO searchDAO) { + + Handle handle = this.getHandle(); + + + + for (Map data : datas) { + String cols = ""; + String values = ""; + Map tmpData = new HashMap<>(); + for(MappingCol m : mappingCols) { + if (!m.getColname().equals("id")) { + if (data.get(m.getDescript()) != null) { + cols += " " + m.getColname() + ","; + values += " '" + data.get(m.getDescript()).replace("'", "`") + "',"; + tmpData.put(m.getColname(), data.get(m.getDescript()).replace("'", "`")); + } else { + cols += " " + m.getColname() + ","; + values += " '',"; + tmpData.put(m.getColname(), data.get(m.getDescript())); + } + } + } + cols = cols.substring(0, cols.length() - 1); + values = values.substring(0, values.length() - 1); + + String sql = "insert into " + tablename + "(" + cols + ") values (" + values + ")"; + System.out.println(sql); + handle.createUpdate(sql).execute(); + + tmpData.put("tablename", tablename); + Integer id = findId2(tmpData); + searchDAO.insertSearch2(id, tmpData); + + } + } + + } diff --git a/src/main/java/com/moze/rms/dao/MappingColDAO.java b/src/main/java/com/moze/rms/dao/MappingColDAO.java index f39a660..05df81d 100644 --- a/src/main/java/com/moze/rms/dao/MappingColDAO.java +++ b/src/main/java/com/moze/rms/dao/MappingColDAO.java @@ -6,6 +6,7 @@ import org.jdbi.v3.sqlobject.config.RegisterBeanMapper; import org.jdbi.v3.sqlobject.statement.SqlQuery; import java.util.List; +import java.util.Map; @RegisterBeanMapper(MappingCol.class) public interface MappingColDAO { @@ -13,4 +14,8 @@ public interface MappingColDAO { @SqlQuery("select * from mapping.mapping_col where tablename = ? order by convert(int, [index]);") List findByTable(String tablename); + + + @SqlQuery("select * from mapping.mapping_col order by convert(int, [index]);") + List findAll(); } diff --git a/src/main/java/com/moze/rms/dao/SearchDAO.java b/src/main/java/com/moze/rms/dao/SearchDAO.java new file mode 100644 index 0000000..bc9daea --- /dev/null +++ b/src/main/java/com/moze/rms/dao/SearchDAO.java @@ -0,0 +1,120 @@ +package com.moze.rms.dao; + +import org.jdbi.v3.core.Handle; +import org.jdbi.v3.sqlobject.SqlObject; +import org.jdbi.v3.sqlobject.config.RegisterBeanMapper; +import org.jdbi.v3.sqlobject.statement.SqlUpdate; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public interface SearchDAO extends SqlObject { + + +// @RegisterBeanMapper(Object.class) +// default List> search(Map data) { +// Handle handle = this.getHandle(); +// String sql = "select * from " + data.get("tablename") + " where"; +// data.remove("tablename"); +// Iterator> iterator = data.entrySet().iterator(); +// while (iterator.hasNext()) { +// Map.Entry next = iterator.next(); +// String key = next.getKey(); +// Object value = next.getValue(); +// if (key != "tablename" && key != "id" && value != null) { +// sql += " " + key + " like '%" + value + "%' and"; +// } +// } +// sql = sql.substring(0, sql.length() - 3); +// System.out.println(sql); +// return handle.createQuery(sql).mapToMap().list(); +// } + + + @RegisterBeanMapper(Object.class) + default List> searchFromTable(String tablename, String text) { + + Handle handle = this.getHandle(); + String sql = "select "; + sql += tablename + ".*"; + sql += "from search "; + sql += "join " + tablename + " on search.id = " + tablename + ".id "; + sql += " and search.tablename = '" + tablename + "' "; + sql += "where text like '%' + '" + text + "' + '%' order by id"; + + + return handle.createQuery(sql).mapToMap().list(); + } + + default void insertSearch(Integer id, Map data) { + Handle handle = this.getHandle(); + + String text = ""; + Iterator> iterator = data.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry next = iterator.next(); + String key = next.getKey(); + Object value = next.getValue().toString(); + if (key != "id" && key != "tablename" && value != null) { + text += value + " "; + } + } + String sql = "insert into search values ("; + sql += "'" + data.get("tablename") + "',"; + sql += "'" + id + "',"; + sql += "'" + text + "'"; + sql += ")"; + handle.createUpdate(sql).execute(); + } + + default void insertSearch2(Integer id, Map data) { + Handle handle = this.getHandle(); + + String text = ""; + Iterator> iterator = data.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry next = iterator.next(); + String key = next.getKey(); + Object value = next.getValue(); + if (key != "id" && key != "tablename" && value != null) { + text += value.toString() + " "; + } + } + String sql = "insert into search values ("; + sql += "'" + data.get("tablename") + "',"; + sql += "'" + id + "',"; + sql += "'" + text + "'"; + sql += ")"; + handle.createUpdate(sql).execute(); + } + + + default void modifySearch( Map data) { + + Handle handle = this.getHandle(); + + String text = ""; + Iterator> iterator = data.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry next = iterator.next(); + String key = next.getKey(); + Object value = next.getValue(); + if (key != "id" && key != "tablename" && value != null) { + text += value.toString() + " "; + } + } + String sql = "update search set text = "; + sql += "'" + text + "'"; + sql += "where tablename = ''" + data.get("tablename") + "' and id = '" + data.get("id").toString() + "'"; + + handle.createUpdate(sql).execute(); + } + + @SqlUpdate("delete from search where tablename = ? and id = ?") + void deleteFromSearch(String tablename, String id); + +// default void bulkinsertSearch(String tablename, String id , List> datas) { +// Handle handle = this.getHandle(); +// } +} diff --git a/src/main/java/com/moze/rms/utils/ExcelExpoter.java b/src/main/java/com/moze/rms/utils/ExcelExpoter.java index 9088781..2633abc 100644 --- a/src/main/java/com/moze/rms/utils/ExcelExpoter.java +++ b/src/main/java/com/moze/rms/utils/ExcelExpoter.java @@ -1,40 +1,31 @@ package com.moze.rms.utils; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.Font; -import org.apache.poi.ss.usermodel.IndexedColors; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.VerticalAlignment; +import java.io.*; +import java.util.*; + +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import javax.servlet.http.HttpServletResponse; + public class ExcelExpoter { - private String outputPath; - private String nullString; - private Set columnAutoSized = new HashSet<>(); - List sheets = new LinkedList<>(); + private String outputPath; + private String nullString; + private Set columnAutoSized = new HashSet<>(); + List sheets = new LinkedList<>(); - public ExcelExpoter(String outputPath) { - this.outputPath = outputPath; - this.nullString = ""; - } + public ExcelExpoter(String outputPath) { + this.outputPath = outputPath; + this.nullString = ""; + } - public ExcelExpoter(String outputPath, String nullString) { - this.outputPath = outputPath; - this.nullString = nullString; - } + public ExcelExpoter(String outputPath, String nullString) { + this.outputPath = outputPath; + this.nullString = nullString; + } // public void export() throws FileNotFoundException, IOException { // try (FileOutputStream outputStream = new FileOutputStream(outputPath); @@ -48,9 +39,9 @@ public class ExcelExpoter { // } // } - public void addSheet(String sheetName, Map headerMap, List data) { - sheets.add(new SheetInfo(sheetName, headerMap, data)); - } + public void addSheet(String sheetName, Map headerMap, List data) { + sheets.add(new SheetInfo(sheetName, headerMap, data)); + } // public void export(String sheetName, Map headerMap, List data) throws FileNotFoundException, IOException { // try (FileOutputStream outputStream = new FileOutputStream(outputPath); @@ -62,8 +53,8 @@ public class ExcelExpoter { // } // } - private void exportSheet(XSSFWorkbook workbook, String sheetName, Map headerMap, List data) { - XSSFSheet sheet = workbook.createSheet(sheetName); + private void exportSheet(XSSFWorkbook workbook, String sheetName, Map headerMap, List data) { + XSSFSheet sheet = workbook.createSheet(sheetName); int rowCount = 0; @@ -71,7 +62,7 @@ public class ExcelExpoter { if (headerMap == null) { headerMap = new LinkedHashMap<>(); if (!data.isEmpty()) { - for(String k: JsonUtil.pojo2Map(data.get(0)).keySet()) { + for (String k : JsonUtil.pojo2Map(data.get(0)).keySet()) { headerMap.put(k, k); } } @@ -88,7 +79,7 @@ public class ExcelExpoter { Row row = sheet.createRow(rowCount++); int columnCount = 0; - for(String v: headerMap.values()) { + for (String v : headerMap.values()) { Cell cell = row.createCell(columnCount++); cell.setCellValue(v); cell.setCellStyle(headerCellStyle); @@ -101,11 +92,11 @@ public class ExcelExpoter { for (Object item : data) { @SuppressWarnings("unchecked") - Map obj = item instanceof Map ? (Map)item: JsonUtil.pojo2Map(item); + Map obj = item instanceof Map ? (Map) item : JsonUtil.pojo2Map(item); row = sheet.createRow(rowCount++); columnCount = 0; - for(String k: headerMap.keySet()) { + for (String k : headerMap.keySet()) { Object v = obj.get(k); Cell cell = row.createCell(columnCount++); String value = v == null ? nullString : v.toString(); @@ -120,57 +111,190 @@ public class ExcelExpoter { } System.out.println("[" + sheetName + "] Created all row " + rowCount); autoSizeColumn(sheet); - } - - private void autoSizeColumn(XSSFSheet sheet) { - if (columnAutoSized.contains(sheet.getSheetName())) - return; - System.out.println("Start auto size columns"); - int maxWidth = 256 * 120; - int minWidth = 256 * 16; - int rowCount = sheet.getRow(0).getLastCellNum(); - System.out.println(rowCount); - for (int j = 0; j < rowCount; j++) { - sheet.autoSizeColumn(j); - if (sheet.getColumnWidth(j) > maxWidth) { - sheet.setColumnWidth(j, maxWidth); - } - if (sheet.getColumnWidth(j) < minWidth) { - sheet.setColumnWidth(j, minWidth); - } - } - columnAutoSized.add(sheet.getSheetName()); - System.out.println("End auto size columns"); - } - - private static class SheetInfo { - private String sheetName; - private Map headerMap; - private List data; + } + + private void autoSizeColumn(XSSFSheet sheet) { + if (columnAutoSized.contains(sheet.getSheetName())) + return; + System.out.println("Start auto size columns"); + int maxWidth = 256 * 120; + int minWidth = 256 * 16; + int rowCount = sheet.getRow(0).getLastCellNum(); + System.out.println(rowCount); + for (int j = 0; j < rowCount; j++) { + sheet.autoSizeColumn(j); + if (sheet.getColumnWidth(j) > maxWidth) { + sheet.setColumnWidth(j, maxWidth); + } + if (sheet.getColumnWidth(j) < minWidth) { + sheet.setColumnWidth(j, minWidth); + } + } + columnAutoSized.add(sheet.getSheetName()); + System.out.println("End auto size columns"); + } + + private static class SheetInfo { + private String sheetName; + private Map headerMap; + private List data; + public SheetInfo(String sheetName, Map headerMap, List data) { super(); this.sheetName = sheetName; this.headerMap = headerMap; this.data = data; } + public String getSheetName() { return sheetName; } + public void setSheetName(String sheetName) { this.sheetName = sheetName; } + public Map getHeaderMap() { return headerMap; } + public void setHeaderMap(Map headerMap) { this.headerMap = headerMap; } + public List getData() { return data; } + public void setData(List data) { this.data = data; } - } + } + + + public void expoerDataExcel(HttpServletResponse response, ArrayList titleKeyList, Map titleMap, List> src_list, String filename) throws IOException { + + String xlsFile_name = filename + ".xls"; //輸出xls檔名稱 + //記憶體中只建立100個物件 + Workbook wb = new SXSSFWorkbook(100); //關鍵語句 + Sheet sheet = null; //工作表物件 + Row nRow = null; //行物件 + Cell nCell = null; //列物件 + + int rowNo = 0; //總行號 + int pageRowNo = 0; //頁行號 + + for (int k = 0; k < src_list.size(); k++) { + Map srcMap = src_list.get(k); + //寫入300000條後切換到下個工作表 + if (rowNo % 300000 == 0) { + System.out.println("Current Sheet:" + rowNo / 300000); + sheet = wb.createSheet("工作簿" + (rowNo / 300000));//建立新的sheet物件 + sheet = wb.getSheetAt(rowNo / 300000); //動態指定當前的工作表 + pageRowNo = 0; //新建了工作表,重置工作表的行號為0 + // -----------定義表頭----------- + nRow = sheet.createRow(pageRowNo++); + // 列數 titleKeyList.size() + for (int i = 0; i < titleKeyList.size(); i++) { + Cell cell_tem = nRow.createCell(i); + cell_tem.setCellValue(titleMap.get(titleKeyList.get(i))); + } + rowNo++; + // --------------------------- + } + rowNo++; + nRow = sheet.createRow(pageRowNo++); //新建行物件 + + // 行,獲取cell值 + for (int j = 0; j < titleKeyList.size(); j++) { + nCell = nRow.createCell(j); + if (srcMap.get(titleKeyList.get(j)) != null) { + nCell.setCellValue(srcMap.get(titleKeyList.get(j)).toString()); + } else { + nCell.setCellValue(""); + } + } + } + System.out.println(wb.getSheet("工作簿0").getRow(1)); + response.setContentType("application/vnd.ms-excel;charset=utf-8"); + response.setHeader("filename" , xlsFile_name); + response.setHeader("Content-disposition" , "attachment;filename=" + xlsFile_name); + response.flushBuffer(); + OutputStream outputStream = response.getOutputStream(); + wb.write(response.getOutputStream()); + wb.close(); + outputStream.flush(); + outputStream.close(); + } + + + public void expoerDataExcelMultiSheet(HttpServletResponse response, Map> titleKeyLists, Map> titleMaps, Map>> src_lists, String filename) throws IOException { + + String xlsFile_name = "資產清冊.xls"; //輸出xls檔名稱 + //記憶體中只建立100個物件 + Workbook wb = new SXSSFWorkbook(100); //關鍵語句 + Iterator>>> iterator = src_lists.entrySet().iterator(); + while (iterator.hasNext()) { + Sheet sheet = null; //工作表物件 + Row nRow = null; //行物件 + Cell nCell = null; //列物件 + + int rowNo = 0; //總行號 + int pageRowNo = 0; //頁行號 + + + Map.Entry>> next = iterator.next(); + String key = next.getKey(); + List> src_list = next.getValue(); + + for (int k = 0; k < src_list.size(); k++) { + Map srcMap = src_list.get(k); + //寫入300000條後切換到下個工作表 + if (rowNo % 300000 == 0) { + System.out.println("Current Sheet:" + key); + sheet = wb.createSheet(key);//建立新的sheet物件 +// sheet = wb.getSheetAt(k); //動態指定當前的工作表 + pageRowNo = 0; //新建了工作表,重置工作表的行號為0 + // -----------定義表頭----------- + nRow = sheet.createRow(pageRowNo++); + // 列數 titleKeyList.size() + for (int i = 0; i < titleKeyLists.get(key).size(); i++) { + Cell cell_tem = nRow.createCell(i); + cell_tem.setCellValue(titleMaps.get(key).get(titleKeyLists.get(key).get(i))); + } + rowNo++; + // --------------------------- + } + rowNo++; + nRow = sheet.createRow(pageRowNo++); //新建行物件 + + // 行,獲取cell值 + for (int j = 0; j < titleKeyLists.get(key).size(); j++) { + nCell = nRow.createCell(j); + if (srcMap.get(titleKeyLists.get(key).get(j)) != null) { + nCell.setCellValue(srcMap.get(titleKeyLists.get(key).get(j)).toString()); + } else { + nCell.setCellValue(""); + } + } + if (k == src_list.size() - 1) { + rowNo = 0; + pageRowNo = 0; + } + } + + + } + + response.setContentType("application/vnd.ms-excel;charset=utf-8"); + response.setHeader("filename" ,xlsFile_name); + response.setHeader("Content-disposition" ,"attachment;filename="+xlsFile_name); + response.flushBuffer(); + OutputStream outputStream = response.getOutputStream(); + wb.write(response.getOutputStream()); + wb.close(); + outputStream.flush(); + outputStream.close(); +} } \ No newline at end of file