From 20956b0f05f81ca47cf6c3e8f9b3b426e9cfd035 Mon Sep 17 00:00:00 2001
From: XiaoRuby <3114200645@qq.com>
Date: 星期日, 24 九月 2023 21:54:01 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java                    |   24 +
 inspect-server/src/main/resources/mapper/InspectUnacceptedMapper.xml                      |  112 ++--
 inspect-server/src/main/resources/mapper/RawInspectMapper.xml                             |   10 
 framework/src/main/java/com/yuanchu/mom/exception/ExcelException.java                     |   25 +
 framework/src/main/java/com/yuanchu/mom/utils/easyexcel/EasyExcelUtils.java               |  405 +++++++++++++++++++
 framework/src/main/java/com/yuanchu/mom/utils/easyexcel/ResponseResultEnum.java           |   28 +
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/FinishedInspectServiceImpl.java |    3 
 inspect-server/src/main/java/com/yuanchu/mom/controller/ProcessInspectController.java     |    7 
 inspect-server/src/main/java/com/yuanchu/mom/controller/RawInspectController.java         |   15 
 pom.xml                                                                                   |   20 
 framework/src/main/java/com/yuanchu/mom/utils/easyexcel/template/ExportSaleTemplate.java  |   68 +++
 inspect-server/src/main/java/com/yuanchu/mom/pojo/RawInspect.java                         |    5 
 framework/src/main/java/com/yuanchu/mom/utils/easyexcel/converter/SaleTypeConverter.java  |   48 ++
 inventory-server/src/main/java/com/yuanchu/mom/service/SaleService.java                   |   11 
 inspect-server/src/main/java/com/yuanchu/mom/pojo/vo/RawInspectVo.java                    |    7 
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/ProcessInspectServiceImpl.java  |    3 
 framework/pom.xml                                                                         |   14 
 framework/src/main/java/com/yuanchu/mom/utils/easyexcel/CustemHandler.java                |   81 +++
 inventory-server/src/main/java/com/yuanchu/mom/controller/SaleController.java             |   29 +
 inspect-server/src/main/java/com/yuanchu/mom/service/FinishedInspectService.java          |    2 
 inventory-server/src/main/java/com/yuanchu/mom/pojo/dto/ExportSaleDto.java                |   30 +
 inspect-server/src/main/java/com/yuanchu/mom/service/ProcessInspectService.java           |    2 
 inspect-server/src/main/java/com/yuanchu/mom/controller/FinishedInspectController.java    |    7 
 inspect-server/src/main/java/com/yuanchu/mom/pojo/InspectUnaccepted.java                  |    5 
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/RawInspectServiceImpl.java      |   49 ++
 inventory-server/src/main/java/com/yuanchu/mom/service/impl/SaleServiceImpl.java          |   51 ++
 inspect-server/src/main/java/com/yuanchu/mom/mapper/RawInspectMapper.java                 |    3 
 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 
 inspect-server/src/main/java/com/yuanchu/mom/service/RawInspectService.java               |   10 
 inventory-server/src/main/java/com/yuanchu/mom/Task/SyncOrder.java                        |   14 
 33 files changed, 1,155 insertions(+), 85 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/inspect-server/src/main/java/com/yuanchu/mom/controller/FinishedInspectController.java b/inspect-server/src/main/java/com/yuanchu/mom/controller/FinishedInspectController.java
index 3814183..4a6b30a 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/controller/FinishedInspectController.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/controller/FinishedInspectController.java
@@ -62,17 +62,18 @@
 
     @ApiOperation(value = "涓婃姤(鏇存柊妫�楠岀姸鎬�)")
     @ApiImplicitParams(value = {
-            @ApiImplicitParam(name = "id", value = "妫�楠屽崟id", dataTypeClass = Integer.class, required = true)
+            @ApiImplicitParam(name = "id", value = "妫�楠屽崟id", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "number", value = "涓嶅悎鏍兼暟閲�", dataTypeClass = Integer.class)
     })
     @PostMapping("/updateFinishInspectsById")
-    public Result updateFinishInspectsById(@RequestHeader("token") String token, Integer id) throws Exception {
+    public Result updateFinishInspectsById(@RequestHeader("token") String token, Integer id,Integer number) throws Exception {
         //濡傛灉宸茬粡涓婃姤浜嗕笉鑳藉啀涓�娆′笂鎶�
         FinishedInspect finishedInspect = finishedInspectService.getById(id);
         if (ObjectUtils.isNotEmpty(finishedInspect.getResult())) {
             return Result.fail("宸茬粡涓婃姤杩囦簡,涓嶈兘鍐嶆涓婃姤!");
         }
         Map<String, String> data = JackSonUtil.unmarshal(jwt.readJWT(token).get("data"), Map.class);
-        return Result.success(finishedInspectService.updateFinishInspectsById(data.get("name").replaceAll("\"", ""), id));
+        return Result.success(finishedInspectService.updateFinishInspectsById(data.get("name").replaceAll("\"", ""), id,number));
     }
 
     @ApiOperation(value = "鏍规嵁妫�楠屽崟id鏌ヨ鎴愬搧妫�楠屽崟璇︽儏")
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/controller/ProcessInspectController.java b/inspect-server/src/main/java/com/yuanchu/mom/controller/ProcessInspectController.java
index e3fac84..4299d1d 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/controller/ProcessInspectController.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/controller/ProcessInspectController.java
@@ -58,16 +58,17 @@
 
     @ApiOperation(value = "涓婃姤(鏇存柊妫�楠岀姸鎬�)")
     @ApiImplicitParams(value = {
-            @ApiImplicitParam(name = "id", value = "妫�楠屽崟id", dataTypeClass = Integer.class, required = true)
+            @ApiImplicitParam(name = "id", value = "妫�楠屽崟id", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "number", value = "涓嶅悎鏍兼暟閲�", dataTypeClass = Integer.class)
     })
     @PostMapping("/updateProcessInspectsById")
-    public Result updateProcessInspectsById(Integer id) {
+    public Result updateProcessInspectsById(Integer id,Integer number) {
         //濡傛灉宸茬粡涓婃姤浜嗕笉鑳藉啀涓�娆′笂鎶�
         ProcessInspect processInspect = processInspectService.getById(id);
         if (ObjectUtils.isNotEmpty(processInspect.getResult())) {
             return Result.fail("宸茬粡涓婃姤杩囦簡,涓嶈兘鍐嶆涓婃姤!");
         }
-        return Result.success(processInspectService.updateProcessInspectsById(id));
+        return Result.success(processInspectService.updateProcessInspectsById(id,number));
     }
 
     @ApiOperation(value = "鏍规嵁妫�楠屽崟id鏌ヨ杩囩▼妫�楠屽崟璇︽儏")
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/controller/RawInspectController.java b/inspect-server/src/main/java/com/yuanchu/mom/controller/RawInspectController.java
index e5331a8..4dc32e3 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/controller/RawInspectController.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/controller/RawInspectController.java
@@ -34,6 +34,14 @@
     @Resource
     Jwt jwt;
 
+    @ApiOperation(value = "鏂板鍘熸潗鏂欐楠屽崟-->鏍规嵁鍘熸潗鏂欑紪鐮佸緱鍒癷fs涓殑鎶ユ鏁版嵁")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "code", value = "鍘熸潗鏂欑紪鐮�", dataTypeClass = String.class, required = true)
+    })
+    @PostMapping("/chooseIFS")
+    public Result chooseIFS(String code){
+        return Result.success(rawInspectService.chooseIFS(code));
+    }
 
     @ApiOperation(value = "鏂板鍘熸潗鏂欐楠屽崟")
     @PostMapping("/addRawInspects")
@@ -71,16 +79,17 @@
 
     @ApiOperation(value = "涓婃姤(鏇存柊妫�楠岀姸鎬�)")
     @ApiImplicitParams(value = {
-            @ApiImplicitParam(name = "id", value = "妫�楠屽崟id", dataTypeClass = Integer.class, required = true)
+            @ApiImplicitParam(name = "id", value = "妫�楠屽崟id", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "number", value = "涓嶅悎鏍兼暟閲�", dataTypeClass = Integer.class)
     })
     @PostMapping("/updateRawInspectsById/{id}")
-    public Result updateRawInspectsById(@PathVariable Integer id) {
+    public Result updateRawInspectsById(@PathVariable Integer id,Integer number) {
         //濡傛灉宸茬粡涓婃姤浜嗕笉鑳藉啀涓�娆′笂鎶�
         RawInspect rawInspect = rawInspectService.getById(id);
         if (rawInspect.getInsState() == 1) {
             return Result.fail("宸茬粡涓婃姤杩囦簡,涓嶈兘鍐嶆涓婃姤!");
         }
-        return Result.success(rawInspectService.updateRawInspectsById(id));
+        return Result.success(rawInspectService.updateRawInspectsById(id,number));
     }
 
 }
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/mapper/RawInspectMapper.java b/inspect-server/src/main/java/com/yuanchu/mom/mapper/RawInspectMapper.java
index 6c0d49a..c52ac5e 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/mapper/RawInspectMapper.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/mapper/RawInspectMapper.java
@@ -28,6 +28,9 @@
 
     //鏍规嵁鍘熸潗鏂欐楠屽崟id鏌ョ湅璇︽儏
     Map<String, Object> selectRawInspectsListById(Integer id);
+
+    //鏍规嵁鍘熸潗鏂欑紪鐮佹煡璇㈡渶杩戜竴鏉℃暟鎹�
+    RawInspect selOneByCode(String code);
 }
 
 
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/pojo/InspectUnaccepted.java b/inspect-server/src/main/java/com/yuanchu/mom/pojo/InspectUnaccepted.java
index e724eda..3dc9130 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/pojo/InspectUnaccepted.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/pojo/InspectUnaccepted.java
@@ -41,6 +41,11 @@
     private String reason;
 
     /**
+     * 鏁伴噺
+     **/
+    private Integer number;
+
+    /**
      * 澶勭悊鐘舵�� 0锛氬緟澶勭悊锛�1锛氬凡澶勭悊
      **/
     private Integer dealState;
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/pojo/RawInspect.java b/inspect-server/src/main/java/com/yuanchu/mom/pojo/RawInspect.java
index 32511d9..641d16d 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/pojo/RawInspect.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/pojo/RawInspect.java
@@ -1,5 +1,6 @@
 package com.yuanchu.mom.pojo;
 
+import cn.hutool.core.date.DateTime;
 import com.baomidou.mybatisplus.annotation.*;
 
 import java.io.Serializable;
@@ -101,8 +102,8 @@
     /**
      * 鏉ユ枡鏃ユ湡
      */
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date formTime;
 
     @TableField(exist = false)
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/pojo/vo/RawInspectVo.java b/inspect-server/src/main/java/com/yuanchu/mom/pojo/vo/RawInspectVo.java
index bc6a811..d2183e0 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/pojo/vo/RawInspectVo.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/pojo/vo/RawInspectVo.java
@@ -1,5 +1,6 @@
 package com.yuanchu.mom.pojo.vo;
 
+import cn.hutool.core.date.DateTime;
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -23,9 +24,9 @@
      * 鏉ユ枡鏃ユ湡
      */
     @NotNull(message = "鏉ユ枡鏃ユ湡涓嶈兘涓虹┖!")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    private Date formTime;
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private DateTime formTime;
 
     /**
      * 鍨嬪彿瑙勬牸
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/FinishedInspectService.java b/inspect-server/src/main/java/com/yuanchu/mom/service/FinishedInspectService.java
index 38545ce..55cca2d 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/FinishedInspectService.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/FinishedInspectService.java
@@ -42,7 +42,7 @@
      * @param id
      * @return
      */
-    String updateFinishInspectsById(String username,Integer id);
+    String updateFinishInspectsById(String username,Integer id,Integer number);
 
     /**
      * 鍒嗛〉鏌ヨ鎴愬搧妫�楠屽崟鍒楄〃
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/ProcessInspectService.java b/inspect-server/src/main/java/com/yuanchu/mom/service/ProcessInspectService.java
index 7f20d43..8f94a42 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/ProcessInspectService.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/ProcessInspectService.java
@@ -37,7 +37,7 @@
      * @param id
      * @return
      */
-    String updateProcessInspectsById(Integer id);
+    String updateProcessInspectsById(Integer id,Integer number);
 
     /**
      * 鏍规嵁妫�楠屽崟id鏌ヨ杩囩▼妫�楠屽崟璇︽儏
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/RawInspectService.java b/inspect-server/src/main/java/com/yuanchu/mom/service/RawInspectService.java
index b82b3eb..e4132d4 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/RawInspectService.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/RawInspectService.java
@@ -18,6 +18,13 @@
 public interface RawInspectService extends IService<RawInspect> {
 
     /**
+     *鏂板鍘熸潗鏂欐楠屽崟-->鏍规嵁鍘熸潗鏂欑紪鐮佸緱鍒癷fs涓殑鎶ユ鏁版嵁
+     * @param code
+     * @return
+     */
+    RawInspectVo chooseIFS(String code);
+
+    /**
      * 鏂板鍘熸潗鏂欐楠屽崟
      * @param userName
      * @param rawInspectVo
@@ -46,6 +53,7 @@
      * 鏇存柊妫�楠岀姸鎬�
      * @param id
      */
-    String updateRawInspectsById(Integer id);
+    String updateRawInspectsById(Integer id,Integer number);
+
 
 }
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/FinishedInspectServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/FinishedInspectServiceImpl.java
index 17e5402..d06c736 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/FinishedInspectServiceImpl.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/FinishedInspectServiceImpl.java
@@ -102,7 +102,7 @@
     //涓婃姤(鏇存柊妫�楠岀姸鎬�)
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public String updateFinishInspectsById(String username, Integer id) {
+    public String updateFinishInspectsById(String username, Integer id,Integer number) {
         /*鏇存柊妫�楠屽崟閲岄潰鐨勬楠岀粨璁�*/
         //鍏堝垽鏂楠岀粨鏋�
         List<Integer> results = inspectionItemMapper.getResult(id, 2);
@@ -126,6 +126,7 @@
         if (finishedInspect.getResult() == 0) {
             InspectUnaccepted finishUnaccepted = InspectUnaccepted.builder()
                     .reason(finishedInspect.getMaterial() + "涓嶅悎鏍�")  //鏆備笖瀹氫箟涓轰骇鍝佸悕绉颁笉鍚堟牸
+                    .number(number)
                     .rawInspectId(id)
                     .type(1)        //绫诲瀷涓烘垚鍝佹楠�
                     .build();
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/ProcessInspectServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/ProcessInspectServiceImpl.java
index 540548e..7bb7f00 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/ProcessInspectServiceImpl.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/ProcessInspectServiceImpl.java
@@ -76,7 +76,7 @@
     //涓婃姤(鏇存柊妫�楠岀姸鎬�)
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public String updateProcessInspectsById(Integer id) {
+    public String updateProcessInspectsById(Integer id,Integer number) {
         /*鏇存柊妫�楠屽崟閲岄潰鐨勬楠岀粨璁�*/
         //鍏堝垽鏂楠岀粨鏋�
         List<Integer> results = inspectionItemMapper.getResult(id, 1);
@@ -100,6 +100,7 @@
         if (processInspect.getResult() == 0) {
             InspectUnaccepted processUnaccepted = InspectUnaccepted.builder()
                     .reason(processInspect.getMaterial() + processInspect.getTechname() + "涓嶅悎鏍�")  //鏆備笖瀹氫箟涓轰骇鍝佸悕绉�+宸ヨ壓涓嶅悎鏍�
+                    .number(number)
                     .rawInspectId(id)
                     .type(2)        //绫诲瀷涓鸿繃绋嬫楠�
                     .build();
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/RawInspectServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/RawInspectServiceImpl.java
index 9c4252c..aeb59ef 100644
--- a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/RawInspectServiceImpl.java
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/RawInspectServiceImpl.java
@@ -1,9 +1,12 @@
 package com.yuanchu.mom.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.mom.Task.SyncOrder;
 import com.yuanchu.mom.mapper.*;
 import com.yuanchu.mom.pojo.*;
 import com.yuanchu.mom.pojo.vo.RawInsProductVo;
@@ -12,6 +15,7 @@
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+
 import javax.annotation.Resource;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -38,6 +42,43 @@
 
     @Resource
     UserMapper userMapper;
+
+    //鏂板鍘熸潗鏂欐楠屽崟-->鏍规嵁鍘熸潗鏂欑紪鐮佸緱鍒癷fs涓殑鎶ユ鏁版嵁
+    @Override
+    public RawInspectVo chooseIFS(String code) {
+        RawInspectVo rawInspectVo = new RawInspectVo();
+        List<Map<String, Object>> mapList = SyncOrder.ifsInterfaces();
+        for (Map<String, Object> map : mapList) {
+            //todo: 鍚庣画闇�瑕佸皢鐘舵�佹敼鎴愬緟妫�楠�
+            if (map.get("STATE").equals("宸叉帴鏀�")) {
+                if (map.get("PART_NO").toString().equals(code)) {
+                    rawInspectVo.setCode(map.get("PART_NO").toString());   //鍘熸潗鏂欑紪鐮�
+                    String[] split = map.get("PART_DESC").toString().split("锛�");
+                    rawInspectVo.setName(split[0]);   //鍘熸潗鏂欏悕绉�
+                    rawInspectVo.setSpecifications(split[1]);  //鍨嬪彿瑙勬牸
+                    rawInspectVo.setUnit(map.get("BUY_UNIT_MEAS").toString());  //鍗曚綅
+                    rawInspectVo.setNumber(Integer.parseInt(String.valueOf(map.get("QTY_TO_INSPECT"))));  //鏁伴噺
+                    rawInspectVo.setFormTime(DateUtil.parse(map.get("APPROVED_DATE").toString())); //鏉ユ枡鏃ユ湡
+                    rawInspectVo.setSupplier(map.get("SUPPLIER_NAME").toString()); //渚涘簲鍟�
+                }
+            }
+        }
+        //鏌ヨ璇ュ師鏉愭枡鏄惁鏈夋楠岄」鐩褰�
+        RawInspect rawInspect = rawInspectMapper.selOneByCode(code);
+        if (ObjectUtils.isNotEmpty(rawInspect)){
+            List<RawInsProduct> rawInsProductList = rawInsProductMapper.selectList(Wrappers.<RawInsProduct>query().eq("raw_inspect_id", rawInspect.getId()));
+            List<RawInsProductVo> rawInsProductVos = rawInsProductList.stream().map(rawInsProduct -> {
+                RawInsProductVo rawInsProductVo = new RawInsProductVo();
+                rawInsProductVo.setName(rawInsProduct.getName());
+                rawInsProductVo.setUnit(rawInsProduct.getUnit());
+                rawInsProductVo.setRequired(rawInsProduct.getRequired());
+                rawInsProductVo.setInternal(rawInsProduct.getInternal());
+                return rawInsProductVo;
+            }).collect(Collectors.toList());
+            rawInspectVo.setRawInsProducts(rawInsProductVos);
+        }
+        return rawInspectVo;
+    }
 
     //鏂板鍘熸潗鏂欐楠屽崟
     @Override
@@ -67,10 +108,10 @@
                     String testValue = rawInsProduct.getTestValue();//妫�娴嬪��
                     char req = required.charAt(0);
                     List<Integer> list = Arrays.stream(testValue.split(",")).map(s -> {
-                        int values=2;
+                        int values = 2;
                         if (req == '>' || req == '<' || req == '=') {
                             values = checkValues(required, internal, s);
-                        }else {
+                        } else {
                             values = conValues(required, internal, s);
                         }
                         return values;
@@ -108,7 +149,7 @@
     //鏇存柊妫�楠岀姸鎬�(涓婃姤)
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public String updateRawInspectsById(Integer id) {
+    public String updateRawInspectsById(Integer id,Integer number) {
         /*鏇存柊妫�楠屽崟閲岄潰鐨勬楠岀粨璁�*/
         //鍏堝垽鏂楠岀粨鏋�
         List<Integer> results = rawInsProductMapper.getresult(id);
@@ -135,6 +176,7 @@
         if (rawInspect.getJudgeState() == 0) {
             InspectUnaccepted rawUnaccepted = InspectUnaccepted.builder()
                     .reason(rawInspectMapper.selectById(id).getName() + "涓嶅悎鏍�")  //鏆備笖瀹氫箟涓哄師鏉愭枡涓嶅悎鏍�
+                    .number(number)
                     .rawInspectId(id)
                     .dealReasult(1)
                     .type(0)        //绫诲瀷涓哄師鏉愭枡
@@ -158,6 +200,7 @@
         }
         return 0;
     }
+
     //濡傛灉鏄�> , < ,=鐨勬搷浣�
     private int checkValues(String standardValueStr, String controlValueStr, String detectionValueStr) {
         boolean isStandardValueSatisfied = isValueSatisfied(standardValueStr, detectionValueStr);
diff --git a/inspect-server/src/main/resources/mapper/InspectUnacceptedMapper.xml b/inspect-server/src/main/resources/mapper/InspectUnacceptedMapper.xml
index c6202b9..344c98d 100644
--- a/inspect-server/src/main/resources/mapper/InspectUnacceptedMapper.xml
+++ b/inspect-server/src/main/resources/mapper/InspectUnacceptedMapper.xml
@@ -1,8 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.yuanchu.mom.mapper.InspectUnacceptedMapper">
-
-
     <!--涓嶅悎鏍肩鐞�-->
     <select id="selectInsList" resultType="java.util.Map">
         SELECT ru.id,
@@ -15,7 +13,7 @@
         fi.project_name,
         fi.specifications_model,
         fi.unit,
-        fi.quantity,
+        number quantity,
         DATE_FORMAT(fi.inspectionDate, '%Y-%m-%d') inspectionDate,
         DATE_FORMAT(fi.processingDate, '%Y-%m-%d') processingDate
         FROM mom_ocean.inspect_unaccepted ru, mom_ocean.`user` u, (
@@ -53,23 +51,23 @@
     <!--鍘熸潗鏂欎笉鍚堟牸鍝�-->
     <select id="selectUnqualifiedRawMaterials" resultType="map">
         SELECT i.id,
-               DATE_FORMAT(r.form_time, '%Y-%m-%d') dateArrival,
-               i.`reason`,
-               r.`code`,
-               r.`name`,
-               r.`specifications`,
-               r.`unit`,
-               r.`number`,
-               DATE_FORMAT(r.`create_time`,'%Y-%m-%d') inspectionDate,
-               r.`user_name`,
-               DATE_FORMAT(r.`ins_time`,'%Y-%m-%d') processingDate,
-               r.`supplier`,
-               i.`deal_state`,
-               i.`deal_reasult`
+        DATE_FORMAT(r.form_time, '%Y-%m-%d') dateArrival,
+        i.`reason`,
+        r.`code`,
+        r.`name`,
+        r.`specifications`,
+        r.`unit`,
+        i.number,
+        DATE_FORMAT(r.`create_time`,'%Y-%m-%d') inspectionDate,
+        r.`user_name`,
+        DATE_FORMAT(r.`ins_time`,'%Y-%m-%d') processingDate,
+        r.`supplier`,
+        i.`deal_state`,
+        i.`deal_reasult`
         FROM mom_ocean.inspect_unaccepted i
-                 LEFT JOIN mom_ocean.raw_inspect r ON i.`raw_inspect_id` = r.`id`
+        LEFT JOIN mom_ocean.raw_inspect r ON i.`raw_inspect_id` = r.`id`
         WHERE i.`state` = 1
-          AND i.`type` = 0
+        AND i.`type` = 0
         <if test="formTime != null and formTime != ''">
             AND r.form_time = #{formTime}
         </if>
@@ -87,48 +85,52 @@
 
     <!--涓嶅悎鏍煎缃�-->
     <select id="selectDisposal" resultType="map">
-        SELECT i.`id`, s.`type`, s.name productName, s.`specifications`, s.number, i.`tell` description,
+        SELECT i.`id`, s.`type`, s.name productName, s.`specifications`, i.number, i.`tell` description,
         i.`tell` opinions, s.user_name, DATE_FORMAT(i.`create_time`, '%Y-%m-%d') `date`, i.`deal_state`, i.way, i.faulty_materials, i.opinion_tell
         FROM mom_ocean.inspect_unaccepted i
         LEFT JOIN
         (
-            -- 鍘熸潗鏂�
-            SELECT 0 AS `type`, r.`name`, r.`specifications`, r.`number`, r.`id`, r.`user_name`
-            FROM mom_ocean.raw_inspect r
-            WHERE r.state = 1
-            <if test="specificationModel != null and specificationModel != ''">AND r.`specifications` LIKE CONCAT('%',
-                #{specificationModel}, '%')
-            </if>
-            <if test="
-            productName != null and productName != ''">AND r.`name` LIKE CONCAT('%', #{productName}, '%')
-            </if>
-            UNION ALL
-            -- 鍗婃垚鍝�
-            SELECT 1 AS `type`, f.`project_name` `name`, f.`specifications_model` specifications, f.`quantity` `number`, f.`id`, u.name user_name
-            FROM mom_ocean.finished_inspect f, mom_ocean.`user` u
-            WHERE f.`state` = 1
-              AND u.id = f.user_id
-            <if test="specificationModel != null and specificationModel != ''">
-                AND f.`specifications_model` LIKE CONCAT('%', #{specificationModel}, '%')
-            </if>
-            <if test="productName != null and productName != ''">
-                AND f.`project_name` LIKE CONCAT('%', #{productName}, '%')
-            </if>
-            UNION ALL
-            -- 鍦ㄥ埗鍝�
-            SELECT 2 AS `type`, p.`material` `name`, p.`specifications_model` specifications, p.`quantity` `number`, p.`id`, u.name user_name
-            FROM mom_ocean.process_inspect p, mom_ocean.`user` u
-            WHERE p.state = 1
-                AND u.id = p.user_id
-            <if test="specificationModel != null and specificationModel != ''">
-                AND p.`specifications_model` LIKE CONCAT('%', #{specificationModel}, '%')
-            </if>
-            <if test="productName != null and productName != ''">
-                AND p.`material` LIKE CONCAT('%', #{productName}, '%')
-            </if>
-         )AS s ON s.`id` = i.`raw_inspect_id` AND s.`type` = i.type
+        -- 鍘熸潗鏂�
+        SELECT 0 AS `type`, r.`name`, r.`specifications`, r.`number`, r.`id`, r.`user_name`
+        FROM mom_ocean.raw_inspect r
+        WHERE r.state = 1
+        <if test="specificationModel != null and specificationModel != ''">
+            AND r.`specifications` LIKE CONCAT('%',
+            #{specificationModel}, '%')
+        </if>
+        <if test="
+            productName != null and productName != ''">
+            AND r.`name` LIKE CONCAT('%', #{productName}, '%')
+        </if>
+        UNION ALL
+        -- 鎴愬搧
+        SELECT 1 AS `type`, f.`project_name` `name`, f.`specifications_model` specifications, f.`quantity` `number`,
+        f.`id`, u.name user_name
+        FROM mom_ocean.finished_inspect f, mom_ocean.`user` u
+        WHERE f.`state` = 1
+        AND u.id = f.user_id
+        <if test="specificationModel != null and specificationModel != ''">
+            AND f.`specifications_model` LIKE CONCAT('%', #{specificationModel}, '%')
+        </if>
+        <if test="productName != null and productName != ''">
+            AND f.`project_name` LIKE CONCAT('%', #{productName}, '%')
+        </if>
+        UNION ALL
+        -- 鍗婃垚鍝�
+        SELECT 2 AS `type`, p.`material` `name`, p.`specifications_model` specifications, p.`quantity` `number`, p.`id`,
+        u.name user_name
+        FROM mom_ocean.process_inspect p, mom_ocean.`user` u
+        WHERE p.state = 1
+        AND u.id = p.user_id
+        <if test="specificationModel != null and specificationModel != ''">
+            AND p.`specifications_model` LIKE CONCAT('%', #{specificationModel}, '%')
+        </if>
+        <if test="productName != null and productName != ''">
+            AND p.`material` LIKE CONCAT('%', #{productName}, '%')
+        </if>
+        )AS s ON s.`id` = i.`raw_inspect_id` AND s.`type` = i.type
         WHERE i.`state` = 1
-          AND i.`deal_reasult` = 0
+        AND i.`deal_reasult` = 0
         <if test="state != null">
             AND i.`deal_state` = #{state}
         </if>
diff --git a/inspect-server/src/main/resources/mapper/RawInspectMapper.xml b/inspect-server/src/main/resources/mapper/RawInspectMapper.xml
index 985266e..62f7235 100644
--- a/inspect-server/src/main/resources/mapper/RawInspectMapper.xml
+++ b/inspect-server/src/main/resources/mapper/RawInspectMapper.xml
@@ -116,4 +116,14 @@
           and rp.state = 1
           and r.id = #{id}
     </select>
+
+    <!--鏍规嵁鍘熸潗鏂欑紪鐮佹煡璇㈡渶杩戜竴鏉℃暟鎹�-->
+    <select id="selOneByCode" resultType="com.yuanchu.mom.pojo.RawInspect">
+        select *
+        from mom_ocean.raw_inspect
+        where state = 1
+          and code = #{code}
+        order by id desc
+        limit 1
+    </select>
 </mapper>
diff --git a/inventory-server/src/main/java/com/yuanchu/mom/Task/SyncOrder.java b/inventory-server/src/main/java/com/yuanchu/mom/Task/SyncOrder.java
index 5ab2ee7..00cfc7d 100644
--- a/inventory-server/src/main/java/com/yuanchu/mom/Task/SyncOrder.java
+++ b/inventory-server/src/main/java/com/yuanchu/mom/Task/SyncOrder.java
@@ -27,6 +27,8 @@
 
     private static final String DOWN_LOAD = "http://192.168.18.16:9999/order/otcService/download/";
 
+    private static final String IFS_URL="http://192.168.20.47:8008/PurchService.ashx?contract=ZTKJ&contractKey=4ttDeLKNsZuhstjtROMcRE1USNFXKdFYE7lQ2p1m5Bo=&procedureName=QUERY_POL_RECEIPT_STD&userId=mes_user&inAttr={\"ORDER_NO\":\"-2050314\"}";
+
     private static final Map<String, String> GET_TOKEN_HEADER = new HashMap<>(2);
 
     private static final Map<String, Object> USER_INFO = new HashMap<>(4);
@@ -88,4 +90,16 @@
                 .execute().body();
         return result;
     }
+
+    /**
+     * ifs
+     * @return
+     */
+    public static List<Map<String, Object>>ifsInterfaces(){
+        String result = HttpRequest.get(IFS_URL)
+                .header("Authorization", "Bearer " + getToken())
+                .execute().body();
+        Map<String, Object>map=JsonUtil.jsonToPojo(result,Map.class);
+        return JsonUtil.jsonToPojo(JsonUtil.jsonToString(map.get("LIST_INFO")),List.class);
+    }
 }
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>
diff --git a/system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java b/system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java
index cd45d30..43087a4 100644
--- a/system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java
+++ b/system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java
@@ -1,7 +1,9 @@
 package com.yuanchu.mom;
 
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import com.yuanchu.mom.Task.SyncOrder;
+import com.yuanchu.mom.pojo.RawInspect;
 import com.yuanchu.mom.pojo.Sale;
 import com.yuanchu.mom.pojo.SaleMaterial;
 import org.junit.jupiter.api.Test;
@@ -60,4 +62,26 @@
         }
         System.out.println(list);
     }
+
+    @Test
+    void bb() {
+        List<Map<String, Object>> mapList = SyncOrder.ifsInterfaces();
+        List<RawInspect> rawInspectList = mapList.stream().map(map -> {
+            RawInspect rawInspect = new RawInspect();
+            if (map.get("PART_NO").toString().equals("A0410008010700")) {
+                rawInspect.setCode(map.get("PART_NO").toString());   //鍘熸潗鏂欑紪鐮�
+                String[] split = map.get("PART_DESC").toString().split("锛�");
+                rawInspect.setName(split[0]);   //鍘熸潗鏂欏悕绉�
+                rawInspect.setSpecifications(split[1]);  //鍨嬪彿瑙勬牸
+                rawInspect.setUnit(map.get("BUY_UNIT_MEAS").toString());  //鍗曚綅
+                rawInspect.setNumber(Integer.parseInt(String.valueOf(map.get("QTY_TO_INSPECT"))));  //鏁伴噺
+                rawInspect.setInsState(0); //鏈楠�
+                rawInspect.setFormTime(DateUtil.parse(map.get("APPROVED_DATE").toString())); //鏉ユ枡鏃ユ湡
+                rawInspect.setSupplier(map.get("SUPPLIER_NAME").toString()); //渚涘簲鍟�
+            }
+            return rawInspect;
+        }).collect(Collectors.toList());
+        System.out.println(rawInspectList);
+    }
+
 }

--
Gitblit v1.9.3