From 05981a8e1db6adcb3dc79907fc22453fb2e51230 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期日, 24 九月 2023 18:30:28 +0800
Subject: [PATCH] 销售订单导出
---
framework/pom.xml | 14
framework/src/main/java/com/yuanchu/mom/utils/easyexcel/CustemHandler.java | 81 ++++
framework/src/main/java/com/yuanchu/mom/exception/ExcelException.java | 25 +
framework/src/main/java/com/yuanchu/mom/utils/easyexcel/EasyExcelUtils.java | 405 +++++++++++++++++++++++
inventory-server/src/main/java/com/yuanchu/mom/controller/SaleController.java | 29 +
framework/src/main/java/com/yuanchu/mom/utils/easyexcel/ResponseResultEnum.java | 28 +
inventory-server/src/main/java/com/yuanchu/mom/pojo/dto/ExportSaleDto.java | 30 +
pom.xml | 20 +
framework/src/main/java/com/yuanchu/mom/utils/easyexcel/template/ExportSaleTemplate.java | 68 ++++
framework/src/main/java/com/yuanchu/mom/utils/easyexcel/converter/SaleTypeConverter.java | 48 ++
inventory-server/src/main/java/com/yuanchu/mom/service/impl/SaleServiceImpl.java | 51 ++
framework/src/main/java/com/yuanchu/mom/utils/easyexcel/ExcelListener.java | 79 ++++
inventory-server/src/main/resources/mapper/SaleMapper.xml | 26 +
framework/src/main/java/com/yuanchu/mom/utils/easyexcel/LocalDateConverter.java | 43 ++
inventory-server/src/main/java/com/yuanchu/mom/mapper/SaleMapper.java | 4
inventory-server/src/main/java/com/yuanchu/mom/service/SaleService.java | 11
16 files changed, 954 insertions(+), 8 deletions(-)
diff --git a/framework/pom.xml b/framework/pom.xml
index 4fcce66..6ca70ae 100644
--- a/framework/pom.xml
+++ b/framework/pom.xml
@@ -38,5 +38,19 @@
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
</dependency>
+ <dependency>
+ <groupId>com.alibaba</groupId>
+ <artifactId>easyexcel</artifactId>
+ </dependency>
+ <!--poi-->
+ <dependency>
+ <groupId>org.apache.poi</groupId>
+ <artifactId>poi</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.github.whvcse</groupId>
+ <artifactId>easy-captcha</artifactId>
+ <version>1.6.2</version>
+ </dependency>
</dependencies>
</project>
diff --git a/framework/src/main/java/com/yuanchu/mom/exception/ExcelException.java b/framework/src/main/java/com/yuanchu/mom/exception/ExcelException.java
new file mode 100644
index 0000000..c5d18ab
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/exception/ExcelException.java
@@ -0,0 +1,25 @@
+package com.yuanchu.mom.exception;
+
+import com.yuanchu.mom.utils.easyexcel.ResponseResultEnum;
+import lombok.Getter;
+
+/**
+ * excel鍏ㄥ眬寮傚父
+ * @auther Zou, Yu
+ * @create 2023-9-24
+ */
+@Getter
+public class ExcelException extends RuntimeException {
+
+ private Integer status;
+
+ public ExcelException(ResponseResultEnum resultEnum) {
+ super(resultEnum.getMessage());
+ this.status = resultEnum.getStatus();
+ }
+
+ public ExcelException(Integer status, String message) {
+ super(message);
+ this.status = status;
+ }
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/utils/easyexcel/CustemHandler.java b/framework/src/main/java/com/yuanchu/mom/utils/easyexcel/CustemHandler.java
new file mode 100644
index 0000000..e6fc804
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/utils/easyexcel/CustemHandler.java
@@ -0,0 +1,81 @@
+package com.yuanchu.mom.utils.easyexcel;
+
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.Head;
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;
+import org.apache.poi.ss.usermodel.Cell;
+import org.springframework.util.CollectionUtils;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+*@author: Zou, Yu
+*@description:
+*@date: 2023/9/24 0024 12:56
+**/
+public class CustemHandler extends AbstractColumnWidthStyleStrategy {
+
+ private static final int MAX_COLUMN_WIDTH = 255;
+ //鍥犱负鍦ㄨ嚜鍔ㄥ垪瀹界殑杩囩▼涓紝鏈変簺璁剧疆鍦版柟璁╁垪瀹芥樉寰楃揣鍑戯紝鎵�浠ュ仛鍑轰簡涓垽鏂�
+ private static final int COLUMN_WIDTH = 20;
+ private Map<Integer, Map<Integer, Integer>> CACHE = new HashMap(8);
+
+ public CustemHandler() {
+ }
+
+ @Override
+ protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
+ boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);
+ if (needSetWidth) {
+ Map<Integer, Integer> maxColumnWidthMap = (Map) CACHE.get(writeSheetHolder.getSheetNo());
+ if (maxColumnWidthMap == null) {
+ maxColumnWidthMap = new HashMap(16);
+ CACHE.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap);
+ }
+
+ Integer columnWidth = this.dataLength(cellDataList, cell, isHead);
+ if (columnWidth >= 0) {
+ if (columnWidth > MAX_COLUMN_WIDTH) {
+ columnWidth = MAX_COLUMN_WIDTH;
+ } else {
+ if (columnWidth < COLUMN_WIDTH) {
+ columnWidth = columnWidth * 2;
+ }
+ }
+
+ Integer maxColumnWidth = (Integer) ((Map) maxColumnWidthMap).get(cell.getColumnIndex());
+ if (maxColumnWidth == null || columnWidth > maxColumnWidth) {
+ ((Map) maxColumnWidthMap).put(cell.getColumnIndex(), columnWidth);
+ writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth * 256);
+ }
+ }
+ }
+ }
+
+ private Integer dataLength(List<CellData> cellDataList, Cell cell, Boolean isHead) {
+ if (isHead) {
+ return cell.getStringCellValue().getBytes().length;
+ } else {
+ CellData cellData = (CellData) cellDataList.get(0);
+ CellDataTypeEnum type = cellData.getType();
+ if (type == null) {
+ return -1;
+ } else {
+ switch (type) {
+ case STRING:
+ return cellData.getStringValue().getBytes().length;
+ case BOOLEAN:
+ return cellData.getBooleanValue().toString().getBytes().length;
+ case NUMBER:
+ return cellData.getNumberValue().toString().getBytes().length;
+ default:
+ return -1;
+ }
+ }
+ }
+ }
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/utils/easyexcel/EasyExcelUtils.java b/framework/src/main/java/com/yuanchu/mom/utils/easyexcel/EasyExcelUtils.java
new file mode 100644
index 0000000..578666c
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/utils/easyexcel/EasyExcelUtils.java
@@ -0,0 +1,405 @@
+package com.yuanchu.mom.utils.easyexcel;
+
+
+import com.alibaba.excel.EasyExcelFactory;
+import com.alibaba.excel.ExcelReader;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.metadata.Font;
+import com.alibaba.excel.metadata.Sheet;
+import com.alibaba.excel.metadata.Table;
+import com.alibaba.excel.metadata.TableStyle;
+import com.alibaba.excel.metadata.*;
+import com.alibaba.excel.support.ExcelTypeEnum;
+import com.alibaba.excel.write.metadata.style.WriteCellStyle;
+import com.alibaba.excel.write.metadata.style.WriteFont;
+import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
+import com.yuanchu.mom.exception.ExcelException;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.*;
+import java.util.Calendar;
+import java.util.List;
+import java.util.Map;
+
+/**
+*@author: Zou, Yu
+*@description:
+*@date: 2023/9/24 0024 13:18
+**/
+public class EasyExcelUtils {
+
+
+ public static HorizontalCellStyleStrategy getStyleStrategy() {
+ // 澶寸殑绛栫暐
+ WriteCellStyle headWriteCellStyle = new WriteCellStyle();
+ // 鑳屾櫙璁剧疆涓虹伆鑹�
+ headWriteCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
+ WriteFont headWriteFont = new WriteFont();
+ headWriteFont.setFontHeightInPoints((short) 12);
+ // 瀛椾綋鏍峰紡
+ headWriteFont.setFontName("Frozen");
+ headWriteCellStyle.setWriteFont(headWriteFont);
+ // 鑷姩鎹㈣
+ headWriteCellStyle.setWrapped(false);
+ // 姘村钩瀵归綈鏂瑰紡
+ headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
+ // 鍨傜洿瀵归綈鏂瑰紡
+ headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+
+ // 鍐呭鐨勭瓥鐣�
+ WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
+ // 杩欓噷闇�瑕佹寚瀹� FillPatternType 涓篎illPatternType.SOLID_FOREGROUND 涓嶇劧鏃犳硶鏄剧ず鑳屾櫙棰滆壊.澶撮粯璁や簡 FillPatternType鎵�浠ュ彲浠ヤ笉鎸囧畾
+// contentWriteCellStyle.setFillPatternType(FillPatternType.SQUARES);
+ // 鑳屾櫙鐧借壊
+ contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
+ WriteFont contentWriteFont = new WriteFont();
+ // 瀛椾綋澶у皬
+ contentWriteFont.setFontHeightInPoints((short) 12);
+ // 瀛椾綋鏍峰紡
+ contentWriteFont.setFontName("Calibri");
+ contentWriteCellStyle.setWriteFont(contentWriteFont);
+ // 鍐呭宸﹀榻�
+ contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);
+ // 杩欎釜绛栫暐鏄� 澶存槸澶寸殑鏍峰紡 鍐呭鏄唴瀹圭殑鏍峰紡 鍏朵粬鐨勭瓥鐣ュ彲浠ヨ嚜宸卞疄鐜�
+ return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
+ }
+
+ public static HorizontalCellStyleStrategy getStyleFixedStrategy() {
+ // 澶寸殑绛栫暐
+ WriteCellStyle headWriteCellStyle = new WriteCellStyle();
+ // 鑳屾櫙璁剧疆涓虹伆鑹�
+ headWriteCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
+ WriteFont headWriteFont = new WriteFont();
+ headWriteFont.setFontHeightInPoints((short) 12);
+ // 瀛椾綋鏍峰紡
+ headWriteFont.setFontName("Calibri");
+ headWriteCellStyle.setWriteFont(headWriteFont);
+ // 鑷姩鎹㈣
+ headWriteCellStyle.setWrapped(false);
+ // 姘村钩瀵归綈鏂瑰紡
+ headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);
+ // 鍨傜洿瀵归綈鏂瑰紡
+ headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+ // 鍐呭鐨勭瓥鐣�
+ WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
+ // 杩欓噷闇�瑕佹寚瀹� FillPatternType 涓篎illPatternType.SOLID_FOREGROUND 涓嶇劧鏃犳硶鏄剧ず鑳屾櫙棰滆壊.澶撮粯璁や簡 FillPatternType鎵�浠ュ彲浠ヤ笉鎸囧畾
+// contentWriteCellStyle.setFillPatternType(FillPatternType.SQUARES);
+ // 鑳屾櫙鐧借壊
+ contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
+ WriteFont contentWriteFont = new WriteFont();
+ // 瀛椾綋澶у皬
+ contentWriteFont.setFontHeightInPoints((short) 10);
+ // 瀛椾綋鏍峰紡
+ contentWriteFont.setFontName("Calibri");
+ contentWriteCellStyle.setWriteFont(contentWriteFont);
+ // 鍐呭宸﹀榻�
+ contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);
+ // 杩欎釜绛栫暐鏄� 澶存槸澶寸殑鏍峰紡 鍐呭鏄唴瀹圭殑鏍峰紡 鍏朵粬鐨勭瓥鐣ュ彲浠ヨ嚜宸卞疄鐜�
+ return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
+ }
+
+ public static HorizontalCellStyleStrategy getArveStyleStrategy() {
+ // 澶寸殑绛栫暐
+ WriteCellStyle headWriteCellStyle = new WriteCellStyle();
+ // 鑳屾櫙璁剧疆涓�
+ headWriteCellStyle.setFillForegroundColor(IndexedColors.BLACK.getIndex());
+ WriteFont headWriteFont = new WriteFont();
+ headWriteFont.setFontHeightInPoints((short) 12);
+ // 瀛椾綋鏍峰紡
+ headWriteFont.setFontName("Calibri");
+ headWriteFont.setColor(IndexedColors.WHITE.getIndex());
+ headWriteCellStyle.setWriteFont(headWriteFont);
+
+ headWriteCellStyle.setBorderBottom(BorderStyle.MEDIUM);
+ headWriteCellStyle.setLeftBorderColor(IndexedColors.WHITE.getIndex());
+ headWriteCellStyle.setRightBorderColor(IndexedColors.WHITE.getIndex());
+ // 鑷姩鎹㈣
+ headWriteCellStyle.setWrapped(true);
+ // 姘村钩瀵归綈鏂瑰紡
+ headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);
+ // 鍨傜洿瀵归綈鏂瑰紡
+ headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+ // 鍐呭鐨勭瓥鐣�
+ WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
+ // 杩欓噷闇�瑕佹寚瀹� FillPatternType 涓篎illPatternType.SOLID_FOREGROUND 涓嶇劧鏃犳硶鏄剧ず鑳屾櫙棰滆壊.澶撮粯璁や簡 FillPatternType鎵�浠ュ彲浠ヤ笉鎸囧畾
+// contentWriteCellStyle.setFillPatternType(FillPatternType.SQUARES);
+ // 鑳屾櫙鐧借壊
+ contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
+ WriteFont contentWriteFont = new WriteFont();
+ // 瀛椾綋澶у皬
+ contentWriteFont.setFontHeightInPoints((short) 10);
+ // 瀛椾綋鏍峰紡
+ contentWriteFont.setFontName("Calibri");
+ contentWriteCellStyle.setWriteFont(contentWriteFont);
+ // 杩欎釜绛栫暐鏄� 澶存槸澶寸殑鏍峰紡 鍐呭鏄唴瀹圭殑鏍峰紡 鍏朵粬鐨勭瓥鐣ュ彲浠ヨ嚜宸卞疄鐜�
+ return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
+ }
+
+ /**
+ * excel鏂囦欢璇诲彇
+ *
+ * @param clazz model绫诲瀷Class瀵硅薄
+ * @param excel excel鏂囦欢瀵硅薄
+ * @param <T> model绫诲瀷娉涘瀷
+ * @return model绫诲瀷鏁版嵁闆嗗悎
+ * @throws IOException IO寮傚父
+ */
+ public static <T extends BaseRowModel> List<T> readModelExcel(Class<T> clazz, MultipartFile excel) throws IOException {
+ ExcelListener<T> excelListener = new ExcelListener<>();
+ ExcelReader reader = getReader(excel, excelListener);
+ try {
+ reader.getSheets().forEach(sheet -> {
+ sheet.setClazz(clazz);
+ reader.read(sheet);
+ });
+ } catch (Exception e) {
+ throw new IOException("璇锋鏌ュ鍏ユā鏉匡紒");
+ }
+ return excelListener.getDataList();
+ }
+
+ /**
+ *
+ * @param clazz model绫诲瀷Class瀵硅薄
+ * @param excel excel鏂囦欢瀵硅薄
+ * @param sheetNumber 鎸囧畾sheet椤�
+ * @param <T> model绫诲瀷娉涘瀷
+ * @return model绫诲瀷鏁版嵁闆嗗悎
+ * @throws IOException
+ */
+ public static <T extends BaseRowModel> List<T> readModelSheetExcel(Class<T> clazz, MultipartFile excel, int sheetNumber) throws IOException {
+ ExcelListener<T> excelListener = new ExcelListener<>();
+ ExcelReader reader = getReader(excel, excelListener);
+ try {
+ Sheet sheet = reader.getSheets().get(sheetNumber);
+ sheet.setClazz(clazz);
+ reader.read(sheet);
+ } catch (Exception e) {
+ throw new IOException("璇锋鏌ュ鍏ユā鏉匡紒");
+ }
+ return excelListener.getDataList();
+ }
+
+ /**
+ * 鑾峰彇excel鏂囦欢璇诲彇瀵硅薄
+ *
+ * @param excel excel鏂囦欢瀵硅薄
+ * @param excelListener excel浜嬩欢澶勭悊
+ * @return excel 璇诲彇瀵硅薄
+ * @throws IOException IO寮傚父
+ */
+ private static ExcelReader getReader(MultipartFile excel, ExcelListener excelListener) throws IOException {
+ String filename = excel.getOriginalFilename();
+ if (filename == null || (!filename.toLowerCase().endsWith(".xls") && !filename.toLowerCase().endsWith(".xlsx") && !filename.toLowerCase().endsWith(".xltm") && !filename.toLowerCase().endsWith(".xlsm"))) {
+ throw new ExcelException(ResponseResultEnum.EXCEL_FILE_EXT_ERROR);
+ }
+ InputStream inputStream = new BufferedInputStream(excel.getInputStream());
+ return new ExcelReader(inputStream, null, excelListener, false);
+ }
+
+ /**
+ * 鍐欏叆鏁版嵁鍒板鍑烘枃浠�
+ *
+ * @param clazz model绫诲瀷Class瀵硅薄
+ * @param sheetNo sheet搴忓彿
+ * @param headLineMun head琛屾暟
+ * @param startRow 寮�濮嬪啓鍏ヨ鏁�
+ * @param tableNo table搴忓彿
+ * @param modelList model鏁版嵁闆嗗悎
+ * @param temp 涓存椂鏂囦欢瀵硅薄
+ * @param export 瀵煎嚭鏂囦欢瀵硅薄
+ * @param <T> model娉涘瀷
+ */
+ public static <T extends BaseRowModel> void writeModelExport(Class<T> clazz, Integer sheetNo, Integer headLineMun, Integer startRow, Integer tableNo, List<T> modelList, File temp, File export) {
+ try {
+ InputStream inputStream = new FileInputStream(temp);
+ FileOutputStream OutputStream = new FileOutputStream(export);
+ ExcelWriter writer = EasyExcelFactory.getWriterWithTemp(inputStream, OutputStream, ExcelTypeEnum.XLSX, false);
+ writer.write(modelList, initSheet(sheetNo, headLineMun, startRow), initTable(tableNo, clazz));
+ writer.finish();
+ OutputStream.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Sheet鍒濆鍖�
+ *
+ * @param sheetNo sheet搴忓彿
+ * @param headLineMun head琛屾暟
+ * @param startRow 寮�濮嬪啓鍏ヨ鏁�
+ * @return Sheet瀵硅薄
+ */
+ public static Sheet initSheet(Integer sheetNo, Integer headLineMun, Integer startRow) {
+ Sheet sheet = new Sheet(sheetNo, headLineMun);
+ sheet.setStartRow(startRow);
+ return sheet;
+ }
+
+ /**
+ * Table鍒濆鍖�
+ *
+ * @param tableNo table搴忓彿
+ * @param clazz model绫诲瀷Class瀵硅薄
+ * @param <T> model娉涘瀷
+ * @return Table瀵硅薄
+ */
+ public static <T extends BaseRowModel> Table initTable(Integer tableNo, Class<T> clazz) {
+ Table table = new Table(tableNo);
+ table.setClazz(clazz);
+ TableStyle tableStyle = new TableStyle();
+ tableStyle.setTableContentBackGroundColor(IndexedColors.WHITE);
+ tableStyle.setTableHeadBackGroundColor(IndexedColors.WHITE);
+ Font font = new Font();
+ font.setBold(false);
+ font.setFontName("瀹嬩綋");
+ font.setFontHeightInPoints((short) 11);
+ tableStyle.setTableContentFont(font);
+ table.setTableStyle(tableStyle);
+ return table;
+ }
+
+ /**
+ * 鏇挎崲妯℃澘鏍囪
+ *
+ * @param export 瀵煎嚭鏂囦欢瀵硅薄
+ * @param index sheet搴忓彿
+ * @param rows 鍗曞厓鏍艰搴�
+ * @param columns 鍗曞厓鏍煎垪搴�
+ * @param replaceMap 澶氫釜鏍囪闆嗗悎
+ */
+ public static void editModelWorkBook(File export, Integer index, Integer rows, Integer columns, Map<String, String> replaceMap) {
+ try {
+ XSSFWorkbook workBook = new XSSFWorkbook(export);
+// editModelWorkBook(workBook,index,0,0,replaceMap);
+ editModelWorkBook(workBook, index, rows, columns, replaceMap);
+ workBook.close();
+ } catch (IOException | InvalidFormatException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 鏇挎崲妯℃澘鏍囪
+ *
+ * @param workBook excel宸ヤ綔鍐屽璞�
+ * @param index sheet搴忓彿
+ * @param rows 鍗曞厓鏍艰搴�
+ * @param columns 鍗曞厓鏍煎垪搴�
+ * @param replaceMap 澶氫釜鏍囪闆嗗悎
+ */
+ public static void editModelWorkBook(XSSFWorkbook workBook, Integer index, Integer rows, Integer columns, Map<String, String> replaceMap) {
+ XSSFSheet sheet = workBook.getSheetAt(index);
+ Row row = sheet.getRow(rows);
+ Cell cell = row.getCell(columns);
+ String replaceString = cell.toString();
+ for (Map.Entry<String, String> entry : replaceMap.entrySet()) {
+ replaceString = replaceString.replace(entry.getKey(), entry.getValue());
+ }
+ cell.setCellValue(replaceString);
+ workBook.setSheetName(index, replaceString.replace(":", ""));
+ }
+
+ /**
+ * 妯℃澘sheet鍏嬮殕鍙婂懡鍚�
+ *
+ * @param temp 涓存椂鏂囦欢瀵硅薄
+ * @param export 瀵煎嚭鏂囦欢瀵硅薄
+ * @param cloneSheetNo 鍏嬮殕sheet搴忓垪
+ * @param rows 鍗曞厓鏍艰搴�
+ * @param columns 鍗曞厓鏍煎垪搴�
+ * @param replaceMapList 澶氫釜鏍囪闆嗗悎
+ */
+ public static void writeModelCloneSheet(File temp, File export, Integer cloneSheetNo, Integer rows, Integer columns, List<Map<String, String>> replaceMapList) {
+ try {
+ XSSFWorkbook workBook = new XSSFWorkbook(temp);
+ OutputStream outputStream = new FileOutputStream(export);
+ /** 濡傛灉浣犻渶瑕�6浠界浉鍚屾ā鏉跨殑sheet 閭d箞浣犲彧闇�瑕佸厠闅�5浠藉嵆鍙�*/
+ for (int index = 0; index < replaceMapList.size() - 1; index++) {
+ /** 鍏嬮殕妯℃澘鏂囦欢 */
+ XSSFSheet sheet = workBook.cloneSheet(cloneSheetNo);
+ }
+ for (int index = 0; index < replaceMapList.size(); index++) {
+ editModelWorkBook(workBook, index, rows, columns, replaceMapList.get(index));
+ }
+ workBook.write(outputStream);
+ outputStream.flush();
+ outputStream.close();
+ workBook.close();
+ } catch (IOException | InvalidFormatException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 涓存椂鏂囦欢鍐欏叆瀵煎嚭鏂囦欢
+ *
+ * @param temp 涓存椂鏂囦欢瀵硅薄
+ * @param export 瀵煎嚭鏂囦欢瀵硅薄
+ * @param index sheet搴忓彿
+ * @param rows 鍗曞厓鏍艰搴�
+ * @param columns 鍗曞厓鏍煎垪搴�
+ * @param isTime 鏄惁鏈夋椂闂存爣璁�
+ */
+ public static void writeModelWorkBook(File temp, File export, Integer index, Integer rows, Integer columns, Boolean isTime) {
+ try {
+ XSSFWorkbook workBook = new XSSFWorkbook(temp);
+ OutputStream outputStream = new FileOutputStream(export);
+ if (isTime) {
+ writeModelWorkBook(workBook, index, rows, columns);
+ }
+ workBook.write(outputStream);
+ outputStream.flush();
+ outputStream.close();
+ workBook.close();
+ } catch (IOException | InvalidFormatException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 鏇挎崲鏃堕棿鏍囪锛坹ear,month,day锛�
+ *
+ * @param workBook excel宸ヤ綔鍐屽璞�
+ * @param index sheet搴忓彿
+ * @param rows 鍗曞厓鏍艰搴�
+ * @param columns 鍗曞厓鏍煎垪搴�
+ */
+ public static void writeModelWorkBook(XSSFWorkbook workBook, Integer index, Integer rows, Integer columns) {
+ XSSFSheet xssfSheet = workBook.getSheetAt(index);
+ Row row = xssfSheet.getRow(rows);
+ Cell cell = row.getCell(columns);
+ String cellString = cell.toString();
+ Calendar calendar = Calendar.getInstance();
+ int year = calendar.get(Calendar.YEAR);
+ int month = calendar.get(Calendar.MONTH) + 1;
+ int day = calendar.get(Calendar.DAY_OF_MONTH);
+ String yearString = cellString.replace("year", String.valueOf(year));
+ String monthString = yearString.replace("month", String.valueOf(month));
+ String dayString = monthString.replace("day", String.valueOf(day));
+ cell.setCellValue(dayString);
+ }
+
+ /**
+ * 閽堝UserModel瀵煎嚭鏂规硶
+ *
+ * @param temp
+ * @param export
+ * @param isTime
+ */
+ public static void writeModelWorkBook(File temp, File export, Boolean isTime) {
+ writeModelWorkBook(temp, export, 0, 1, 9, isTime);
+ }
+
+
+ public static void writeModelCloneSheet(File temp, File export, List<Map<String, String>> replaceMapList) {
+ writeModelCloneSheet(temp, export, 0, 0, 0, replaceMapList);
+ }
+
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/utils/easyexcel/ExcelListener.java b/framework/src/main/java/com/yuanchu/mom/utils/easyexcel/ExcelListener.java
new file mode 100644
index 0000000..0b9f4e8
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/utils/easyexcel/ExcelListener.java
@@ -0,0 +1,79 @@
+package com.yuanchu.mom.utils.easyexcel;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * excel鏁版嵁瀵煎叆鏁版嵁澶勭悊
+ *
+ * @param <T>
+ * @author Zou, Yu
+ */
+@Slf4j
+@Getter
+@Setter
+public class ExcelListener<T> extends AnalysisEventListener<T> {
+
+ private List<T> dataList = new ArrayList<>();
+
+ @Override
+ public void invoke(T classType, AnalysisContext analysisContext) {
+ dataList.add(classType);
+ }
+
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext context) {
+ }
+
+ @Override
+ public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
+ String templateHead = "";
+
+ List<String> headList = new ArrayList<>();
+ for (Integer i : headMap.keySet()) {
+ headList.add(headMap.get(i));
+ }
+ String importHead = headMap.values().toString();
+ log.info("importHead:{}", importHead);
+ String templateName = context.getCurrentSheet().getClazz().getSimpleName();
+ log.info("templateName:", templateName);
+// if ("CostModel".equals(templateName)) {
+// templateHead = templateHeadCost;
+// } else if ("StaffInfoTemplate".equals(templateName)) {
+// templateHead = templateHeadStaff;
+// } else if ("OrganizationTemplate".equals(templateName)) {
+// templateHead = templateHeadOrganization;
+// }else if ("StaffDictionaryTemplate".equals(templateName)) {
+// templateHead = templateHeadDictionary;
+// }else if ("StaffCtfTemplate".equals(templateName)){
+// templateHead = templateHeadCtf;
+// }else if ("IndustryLineTemplate".equals(templateName)){
+// templateHead = templateHeadIndustryLine;
+// }else if ("SubServiceLineTemplate".equals(templateName)){
+// templateHead = templateHeadSubServiceLine;
+// }else if ("StaffHealthTemplate".equals(templateName)){
+// templateHead = templateHeadHealth;
+// }else if ("AccountDataTemplate".equals(templateName)){
+// templateHead = templateAccountData;
+// }else if ("PlInfoTemplate".equals(templateName)){
+// templateHead = templatePlInfo;
+// }else if ("CodeDataTemplate".equals(templateName)){
+// templateHead = templateCodeData;
+// }else if ("CodeTbdDataTemplate".equals(templateName)){
+// templateHead = templateCodeTbdData;
+// }
+
+ if (!templateHead.equals(importHead)) {
+ throw new RuntimeException(ResponseResultEnum.EXCEL_MODEL_ERROR.getMessage());
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/framework/src/main/java/com/yuanchu/mom/utils/easyexcel/LocalDateConverter.java b/framework/src/main/java/com/yuanchu/mom/utils/easyexcel/LocalDateConverter.java
new file mode 100644
index 0000000..91e2eb5
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/utils/easyexcel/LocalDateConverter.java
@@ -0,0 +1,43 @@
+package com.yuanchu.mom.utils.easyexcel;
+
+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 org.springframework.stereotype.Component;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+
+/**
+*@author: Zou, Yu
+*@description:
+*@date: 2023/9/24 0024 13:18
+**/
+@Component
+public class LocalDateConverter implements Converter<LocalDate> {
+
+ @Override
+ public Class<LocalDate> supportJavaTypeKey() {
+ return LocalDate.class;
+ }
+
+ @Override
+ public CellDataTypeEnum supportExcelTypeKey() {
+ return CellDataTypeEnum.STRING;
+ }
+
+ @Override
+ public LocalDate convertToJavaData(CellData cellData, ExcelContentProperty contentProperty,
+ GlobalConfiguration globalConfiguration) {
+ return LocalDate.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+ }
+
+ @Override
+ public CellData<String> convertToExcelData(LocalDate value, ExcelContentProperty contentProperty,
+ GlobalConfiguration globalConfiguration) {
+ return new CellData<>(value.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+ }
+
+}
\ No newline at end of file
diff --git a/framework/src/main/java/com/yuanchu/mom/utils/easyexcel/ResponseResultEnum.java b/framework/src/main/java/com/yuanchu/mom/utils/easyexcel/ResponseResultEnum.java
new file mode 100644
index 0000000..34dcead
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/utils/easyexcel/ResponseResultEnum.java
@@ -0,0 +1,28 @@
+package com.yuanchu.mom.utils.easyexcel;
+
+import lombok.Getter;
+
+/**
+ * 寮傚父淇℃伅鏋氫妇
+ * @auther Zou, Yu
+ * @create 2023-09-24
+ */
+@Getter
+public enum ResponseResultEnum {
+ EXCEL_FILE_EXT_ERROR(1000,"鏂囦欢鏍煎紡閿欒"),
+ EXCEL_FILE_READ_FAIL(1001,"excel鏂囦欢璇诲彇澶辫触,璇锋鏌ユā鏉�!"),
+ EXCEL_FILE_IS_EMPTY(1002,"excel鏂囦欢涓虹┖"),
+ MODEL_FILE_NOT_EXIT(1003,"妯$増鏂囦欢涓嶅瓨鍦�"),
+ EXCEL_ACTIVE_DATE_ERROR(1004,"鐢熸晥鏃堕棿閿欒"),
+ EXCEL_MODEL_ERROR(1005,"瀵煎叆妯℃澘鏈夎锛岃妫�鏌ワ紒"),
+ EXCEL_FILE_EXCESS(1006,"鎵归噺瀵煎叆鏁版嵁閲忎笉鍙秴杩�500鏉�");
+
+ private Integer status;
+ private String message;
+
+ ResponseResultEnum(Integer status, String message) {
+ this.status = status;
+ this.message = message;
+ }
+
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/utils/easyexcel/converter/SaleTypeConverter.java b/framework/src/main/java/com/yuanchu/mom/utils/easyexcel/converter/SaleTypeConverter.java
new file mode 100644
index 0000000..52bfb0d
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/utils/easyexcel/converter/SaleTypeConverter.java
@@ -0,0 +1,48 @@
+package com.yuanchu.mom.utils.easyexcel.converter;
+
+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 org.springframework.stereotype.Component;
+
+/** 璁㈠崟鐘舵�佽浆鎹�
+ * @Author: Zou, Yu
+ * @DATE: 2023/9/24 0024 14:21
+ */
+@Component
+public class SaleTypeConverter implements Converter<String> {
+
+ @Override
+ public Class<String> supportJavaTypeKey() {
+ return String.class;
+ }
+
+ @Override
+ public CellDataTypeEnum supportExcelTypeKey() {
+ return CellDataTypeEnum.STRING;
+ }
+
+ @Override
+ public String convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+ if("閫氳繃".equals(cellData.getStringValue())){
+ return "1";
+ }else if("涓嶉�氳繃".equals(cellData.getStringValue())){
+ return "0";
+ }else{
+ return "2";
+ }
+ }
+
+ @Override
+ public CellData convertToExcelData(String str, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+ if("1".equals(str)){
+ return new CellData<>("閫氳繃");
+ }else if("0".equals(str)){
+ return new CellData<>("涓嶉�氳繃");
+ }else{
+ return new CellData<>("鏈鏍�");
+ }
+ }
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/utils/easyexcel/template/ExportSaleTemplate.java b/framework/src/main/java/com/yuanchu/mom/utils/easyexcel/template/ExportSaleTemplate.java
new file mode 100644
index 0000000..eec62ea
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/utils/easyexcel/template/ExportSaleTemplate.java
@@ -0,0 +1,68 @@
+package com.yuanchu.mom.utils.easyexcel.template;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.metadata.BaseRowModel;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.yuanchu.mom.utils.easyexcel.converter.SaleTypeConverter;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Author: Zou, Yu
+ * @DATE: 2023/9/24 0024 11:21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ExportSaleTemplate extends BaseRowModel implements Serializable {
+
+ @ColumnWidth(26)
+ @ExcelProperty(value="搴忓彿", index = 0)
+ private Integer id;
+
+ @ColumnWidth(26)
+ @ExcelProperty(value="璁㈠崟缂栧彿", index = 1)
+ @JsonSerialize
+ private String orderNumber;
+
+ @ColumnWidth(26)
+ @ExcelProperty(value="璁㈠崟绫诲瀷", index = 2)
+ @JsonSerialize
+ private String orderType;
+
+ @ColumnWidth(26)
+ @ExcelProperty(value="鍚堝悓缂栧彿", index = 3)
+ @JsonSerialize
+ private String code;
+
+ @ColumnWidth(26)
+ @ExcelProperty(value="宸ョ▼鍚嶇О", index = 4)
+ @JsonSerialize
+ private String name;
+
+ @ColumnWidth(26)
+ @ExcelProperty(value="瀹㈡埛鍚嶇О", index = 5)
+ @JsonSerialize
+ private String proname;
+
+ @ColumnWidth(26)
+ @ExcelProperty(value="浜よ揣鏃ユ湡", index = 6)
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date delTime;
+
+ @ColumnWidth(26)
+ @ExcelProperty(value="澶囨敞", index = 7)
+ @JsonSerialize
+ private String note;
+
+ @ColumnWidth(26)
+ @ExcelProperty(value="鐘舵��", index = 8 ,converter = SaleTypeConverter.class)
+ @JsonSerialize
+ private String type;
+
+}
diff --git a/inventory-server/src/main/java/com/yuanchu/mom/controller/SaleController.java b/inventory-server/src/main/java/com/yuanchu/mom/controller/SaleController.java
index dfc3a62..bd6a077 100644
--- a/inventory-server/src/main/java/com/yuanchu/mom/controller/SaleController.java
+++ b/inventory-server/src/main/java/com/yuanchu/mom/controller/SaleController.java
@@ -1,15 +1,22 @@
package com.yuanchu.mom.controller;
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.support.ExcelTypeEnum;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.pojo.dto.ExportSaleDto;
+import com.yuanchu.mom.utils.easyexcel.template.ExportSaleTemplate;
+import com.yuanchu.mom.pojo.dto.SaleDto;
import com.yuanchu.mom.pojo.dto.SaleMaterialDto;
import com.yuanchu.mom.pojo.vo.SaleVo;
-import com.yuanchu.mom.service.RepertoryService;
-import com.yuanchu.mom.utils.JackSonUtil;
-import com.yuanchu.mom.pojo.dto.SaleDto;
import com.yuanchu.mom.service.SaleService;
+import com.yuanchu.mom.utils.JackSonUtil;
import com.yuanchu.mom.utils.Jwt;
+import com.yuanchu.mom.utils.easyexcel.CustemHandler;
+import com.yuanchu.mom.utils.easyexcel.EasyExcelUtils;
+import com.yuanchu.mom.utils.easyexcel.LocalDateConverter;
import com.yuanchu.mom.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -20,6 +27,10 @@
import springfox.documentation.spring.web.json.Json;
import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
import java.util.*;
/**
@@ -148,4 +159,16 @@
return Result.success(saleService.download(id));
}
+ @ApiOperation(value = "閿�鍞鍗曞鍑�")
+ @ApiImplicitParams(value = {
+ @ApiImplicitParam(name = "orderNumber", value = "璁㈠崟缂栧彿", dataTypeClass = String.class),
+ @ApiImplicitParam(name = "name", value = "浜у搧鍚嶇О", dataTypeClass = String.class),
+ @ApiImplicitParam(name = "type", value = "鐘舵��(涓虹┖=鍏ㄩ儴)", dataTypeClass = Integer.class),
+ @ApiImplicitParam(name = "delTime", value = "浜よ揣鏃ユ湡", dataTypeClass = String.class)
+ })
+ @PostMapping("/exportSale")
+ public void exportSale(@RequestBody ExportSaleDto dto, HttpServletResponse response){
+ saleService.exportSale(dto,response);
+ }
+
}
diff --git a/inventory-server/src/main/java/com/yuanchu/mom/mapper/SaleMapper.java b/inventory-server/src/main/java/com/yuanchu/mom/mapper/SaleMapper.java
index 14de9eb..04bdcdd 100644
--- a/inventory-server/src/main/java/com/yuanchu/mom/mapper/SaleMapper.java
+++ b/inventory-server/src/main/java/com/yuanchu/mom/mapper/SaleMapper.java
@@ -4,7 +4,9 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.pojo.Sale;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yuanchu.mom.utils.easyexcel.template.ExportSaleTemplate;
+import java.util.List;
import java.util.Map;
/**
@@ -25,4 +27,6 @@
//鎵归噺鍒犻櫎
void delAllSale(String ids);
+
+ List<ExportSaleTemplate> selectSaleListByExport(String orderNumber, String name, Integer type, String delTime);
}
diff --git a/inventory-server/src/main/java/com/yuanchu/mom/pojo/dto/ExportSaleDto.java b/inventory-server/src/main/java/com/yuanchu/mom/pojo/dto/ExportSaleDto.java
new file mode 100644
index 0000000..5fb99c6
--- /dev/null
+++ b/inventory-server/src/main/java/com/yuanchu/mom/pojo/dto/ExportSaleDto.java
@@ -0,0 +1,30 @@
+package com.yuanchu.mom.pojo.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Author: Zou, Yu
+ * @DATE: 2023/9/24 0024 15:45
+ */
+@Data
+@JsonSerialize
+public class ExportSaleDto {
+
+ @JsonSerialize
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ private String delTime;
+
+ @JsonSerialize
+ private String name;
+
+ @JsonSerialize
+ private Integer type;
+
+ @JsonSerialize
+ private String orderNumber;
+
+}
diff --git a/inventory-server/src/main/java/com/yuanchu/mom/service/SaleService.java b/inventory-server/src/main/java/com/yuanchu/mom/service/SaleService.java
index c420b22..a2ce614 100644
--- a/inventory-server/src/main/java/com/yuanchu/mom/service/SaleService.java
+++ b/inventory-server/src/main/java/com/yuanchu/mom/service/SaleService.java
@@ -5,9 +5,12 @@
import com.yuanchu.mom.pojo.Sale;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.mom.pojo.dto.ConsignmentDto1;
+import com.yuanchu.mom.pojo.dto.ExportSaleDto;
import com.yuanchu.mom.pojo.dto.SaleDto;
import com.yuanchu.mom.pojo.vo.SaleVo;
+import com.yuanchu.mom.utils.easyexcel.template.ExportSaleTemplate;
+import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
@@ -90,4 +93,12 @@
* @return
*/
List<String> download(Integer id);
+
+ /**
+ * 瀵煎嚭閿�鍞鍗�
+ * @param dto
+ * @param response
+ */
+ void exportSale(ExportSaleDto dto, HttpServletResponse response);
+
}
diff --git a/inventory-server/src/main/java/com/yuanchu/mom/service/impl/SaleServiceImpl.java b/inventory-server/src/main/java/com/yuanchu/mom/service/impl/SaleServiceImpl.java
index 85abcc8..516d62d 100644
--- a/inventory-server/src/main/java/com/yuanchu/mom/service/impl/SaleServiceImpl.java
+++ b/inventory-server/src/main/java/com/yuanchu/mom/service/impl/SaleServiceImpl.java
@@ -1,6 +1,8 @@
package com.yuanchu.mom.service.impl;
import cn.hutool.core.date.DateUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.support.ExcelTypeEnum;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -10,20 +12,25 @@
import com.yuanchu.mom.pojo.Sale;
import com.yuanchu.mom.mapper.SaleMapper;
import com.yuanchu.mom.pojo.SaleMaterial;
-import com.yuanchu.mom.pojo.dto.ConsignmentDto1;
-import com.yuanchu.mom.pojo.dto.ConsignmentDto2;
-import com.yuanchu.mom.pojo.dto.SaleDto;
-import com.yuanchu.mom.pojo.dto.SaleMaterialDto;
+import com.yuanchu.mom.pojo.dto.*;
import com.yuanchu.mom.pojo.vo.SaleVo;
import com.yuanchu.mom.service.SaleMaterialService;
import com.yuanchu.mom.service.SaleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.mom.utils.easyexcel.CustemHandler;
+import com.yuanchu.mom.utils.easyexcel.EasyExcelUtils;
+import com.yuanchu.mom.utils.easyexcel.LocalDateConverter;
+import com.yuanchu.mom.utils.easyexcel.template.ExportSaleTemplate;
import com.yuanchu.mom.vo.Result;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
@@ -257,4 +264,40 @@
}
return list;
}
+
+ @Override
+ public void exportSale(ExportSaleDto dto, HttpServletResponse response) {
+ try{
+ List<ExportSaleTemplate> exportSaleTemplates = saleMapper.selectSaleListByExport(dto.getOrderNumber(), dto.getName(), dto.getType(), dto.getDelTime());
+ for (int i = 0; i < exportSaleTemplates.size(); i++) {
+ exportSaleTemplates.get(i).setId(i+1);
+ }
+ String fileName = String.valueOf(new StringBuilder()
+ .append("閿�鍞鍗昣")
+ .append(DateUtil.today())
+ .append(ExcelTypeEnum.XLS.getValue()));
+ fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
+ response.setContentType("application/octet-stream");
+ response.setHeader("Cache-Control", "no-cache");
+ response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
+ response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
+ EasyExcel.write(response.getOutputStream())
+ .head(ExportSaleTemplate.class)
+ .registerConverter(new LocalDateConverter())
+ .autoCloseStream(true)
+ .excelType(ExcelTypeEnum.XLS)
+ .registerWriteHandler(new CustemHandler())
+ .registerWriteHandler(EasyExcelUtils.getStyleStrategy())
+ .sheet("Sheet1")
+ .doWrite(exportSaleTemplates);
+ }catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ response.getOutputStream().close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
}
diff --git a/inventory-server/src/main/resources/mapper/SaleMapper.xml b/inventory-server/src/main/resources/mapper/SaleMapper.xml
index 5bcccc2..b2d9448 100644
--- a/inventory-server/src/main/resources/mapper/SaleMapper.xml
+++ b/inventory-server/src/main/resources/mapper/SaleMapper.xml
@@ -33,7 +33,31 @@
</if>
order by id desc
</select>
-
+ <select id="selectSaleListByExport" resultType="com.yuanchu.mom.utils.easyexcel.template.ExportSaleTemplate">
+ select order_number AS orderNumber,
+ code,
+ name,
+ proname,
+ type,
+ DATE_FORMAT(delTime, '%Y-%m-%d') AS delTime,
+ note,
+ order_type AS orderType
+ from mom_ocean.sale
+ where state=1
+ <if test="orderNumber!=null and orderNumber!=''">
+ and order_number like concat('%',#{orderNumber},'%')
+ </if>
+ <if test="name!=null and name!=''">
+ and name LIKE CONCAT('%',#{name},'%')
+ </if>
+ <if test="type!=null ">
+ and type=#{type}
+ </if>
+ <if test="delTime!=null and delTime!=''">
+ and DATE_FORMAT(delTime, '%Y-%m-%d')=#{delTime}
+ </if>
+ order by id desc
+ </select>
<!--鏌ヨ璁㈠崟BOM鍒楄〃-->
<select id="selectAllOrder" resultType="java.util.Map">
select sm.id,
diff --git a/pom.xml b/pom.xml
index d372146..797173f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,6 +39,8 @@
<feign-okhttp.version>11.0</feign-okhttp.version>
<shiro.version>1.5.3</shiro.version>
<hutool.version>5.8.16</hutool.version>
+ <easyexcel.version>2.2.10</easyexcel.version>
+ <poi.version>4.1.2</poi.version>
<!--鎻愪氦鍓�-->
<!-- 鎵撳寘鍚庡鍑虹殑璺緞 -->
<package.path>${project.build.directory}/BLOG</package.path>
@@ -98,6 +100,24 @@
<dependencyManagement>
<dependencies>
+ <!--easyexcel-->
+ <dependency>
+ <groupId>com.alibaba</groupId>
+ <artifactId>easyexcel</artifactId>
+ <version>${easyexcel.version}</version>
+ </dependency>
+ <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
+ <dependency>
+ <groupId>org.apache.poi</groupId>
+ <artifactId>poi</artifactId>
+ <version>${poi.version}</version>
+ </dependency>
+ <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
+ <dependency>
+ <groupId>org.apache.poi</groupId>
+ <artifactId>poi-ooxml</artifactId>
+ <version>${poi.version}</version>
+ </dependency>
<!--log4j-->
<dependency>
<groupId>log4j</groupId>
--
Gitblit v1.9.3