瀏覽代碼

pdf导入优化

zhouxingyu 5 天之前
父節點
當前提交
49c6ac0439

+ 54 - 18
srm-module-code/src/main/java/org/jeecg/modules/saleCode/service/impl/SaleInterfaceSyncServiceImpl.java

@@ -599,6 +599,10 @@ public class SaleInterfaceSyncServiceImpl extends ServiceImpl<SaleInterfaceSyncM
         ignoreList.add("Freight Cost");
         ignoreList.add("Packaging Cost");
         ignoreList.add("Grand Total");
+        ignoreList.add("For Component");
+        ignoreList.add("Designer");
+        ignoreList.add("Maker");
+
 
         saleInterfaceSync.setPriority(PDFTableReader.getFields(file, "Priority", "", true).get(0));
         saleInterfaceSync.setBuyerName(split[1]);
@@ -704,7 +708,7 @@ public class SaleInterfaceSyncServiceImpl extends ServiceImpl<SaleInterfaceSyncM
 
         String[] extra = {"Page"};
         PdfTable pdfTable = PDFTableReader.handlePdf(file, "RFQ Details");
-        JSONArray jsonArray = PDFTableReader.getPdfTable(pdfTable, fieldList, ignoreList, extra, "Item Code/Part", null, "left", true);
+        JSONArray jsonArray = PDFTableReader.getPdfTable(pdfTable, fieldList, ignoreList, extra, "Item Code/Part", "noEndKey", "left", true);
        // JSONArray jsonArray = PDFTableReader.getTableByPosition(file, fieldList, ignoreList, "", -1, "left", "Request For Quote No", "Item Code/Part", extra, 5, 0);
         for(Object node : jsonArray) {
             JSONObject jsonObject = JSONObject.parseObject(String.valueOf(node));
@@ -779,13 +783,32 @@ public class SaleInterfaceSyncServiceImpl extends ServiceImpl<SaleInterfaceSyncM
         String id = UUIDGenerator.generate();
         saleInterfaceSync.setId(id);
         saleInterfaceSync.setCreateBy(sysUser.getUsername());
-        //List<String> detailNodes = PDFTableReader.getMultipleLineFields(file, "Enquiry", "Vendor Details");
-//        saleInterfaceSync.setBuyerName(PDFTableReader.getNextLineFields(file, "Company Name:").get(0));
-//        saleInterfaceSync.setSupplierName(PDFTableReader.getNextLineFields(file, "Name:").get(1));
-//        saleInterfaceSync.setBuyerContactName(PDFTableReader.getNextLineFields(file, "Contact:").get(0));
-//        saleInterfaceSync.setBuyerTelephone(PDFTableReader.getNextLineFields(file, "Phone:").get(0));
+        PdfTable pdfTable = PDFTableReader.handlePdf(file, "Equipment Details");
+        String quoteBy = PDFTableReader.getLineByTitle(pdfTable, "Quote By", null, null);
+        String printedOn = PDFTableReader.getLineByTitle(pdfTable, "Printed On", null, null);
+        try {
+            String[] adviseDate = quoteBy.split(" ");
+            String adviseDay = adviseDate[2] + "-" + MonthUtil.getMonthValue(adviseDate[1]) + "-" + adviseDate[0];
+            saleInterfaceSync.setAdviseBeforeDate(DateUtils.parseDate(adviseDay, "yyyy-MM-dd"));
+
+            String[] submitDate = printedOn.split(" ");
+            String submitDay = submitDate[2] + "-" + MonthUtil.getMonthValue(submitDate[1]) + "-" + submitDate[0];
+            saleInterfaceSync.setSubmittedDate(DateUtils.parseDate(submitDay, "yyyy-MM-dd"));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        saleInterfaceSync.setSubject(PDFTableReader.getLineByTitle(pdfTable, "RFQ Title", "Place(CITY)", "Enquiry Date"));
+        List<PdfCell> rowsByTitle = PDFTableReader.getRowsByTitle(pdfTable, "Remarks To Vendor :", null, "tableEnd");
+        if(rowsByTitle != null && rowsByTitle.size() > 0) {
+            rowsByTitle.remove(rowsByTitle.size() - 1);
+            String comment = "";
+            for(PdfCell cell : rowsByTitle) {
+                comment = comment + cell.getText();
+            }
+            comment.replaceAll("Remarks To Vendor :", "");
+            saleInterfaceSync.setComment(comment);
+        }
         saleInterfaceSync.setReferenceNumber(PDFTableReader.getFields(file, "Enquiry Number", "Printed On", true).get(0));
-//        saleInterfaceSync.setVesselImo(PDFTableReader.getNextLineFields(file, "IMO:").get(0));
         saleInterfaceSync.setVesselCode(PDFTableReader.getFields(file, "Vessel  Name", "Quote By", true).get(0));
         saleInterfaceSync.setCurrencyCode(PDFTableReader.getFields(file, "Currency", "", true).get(0));
 
@@ -793,30 +816,36 @@ public class SaleInterfaceSyncServiceImpl extends ServiceImpl<SaleInterfaceSyncM
         fieldList.add("S.No");
         fieldList.add("Item Code");
         fieldList.add("Item Description");
-        fieldList.add("Drawing");
-        fieldList.add(" Part");
-        fieldList.add(" Unit");
-        fieldList.add(" Quantity");
-        fieldList.add(" MD");
+        fieldList.add("Drawing Number");
+        fieldList.add("Part Number");
+        fieldList.add("Unit");
+        fieldList.add("Quantity");
+        fieldList.add("MD");
         fieldList.add("SDoC");
-        fieldList.add("Origin of");
-        fieldList.add("Export");
+        fieldList.add("Origin of Product");
+        fieldList.add("Export Control No");
         fieldList.add("Remarks");
 
         List<String> ignoreList = new ArrayList<>();
         ignoreList.add("Remarks To Vendor");
+        ignoreList.add("Item Details");
+        ignoreList.add("Item Description");
 
 
-        String[] extra = {"Remarks To Vendor", "Equipment Name", "Item Details"};
-        JSONArray jsonArray = PDFTableReader.getTableByPosition(file, fieldList, ignoreList, "Remarks To Vendor", -1, "left", "Remarks To Vendor", "Item Description", extra, 4, 0);
+        String[] extra = {"Equipment Name"};
+        JSONArray jsonArray = PDFTableReader.getPdfTable(pdfTable, fieldList, ignoreList, extra, "Item Description", "noEndKey", "left", true);
+        //JSONArray jsonArray = PDFTableReader.getTableByPosition(file, fieldList, ignoreList, "Remarks To Vendor", -1, "left", "Remarks To Vendor", "Item Description", extra, 4, 0);
         for(Object node : jsonArray) {
             JSONObject jsonObject = JSONObject.parseObject(String.valueOf(node));
             if(jsonObject.size() >= 0) {
                 SaleInterfaceItem saleInterfaceItem = new SaleInterfaceItem();
                 saleInterfaceItem.setDescription(jsonObject.getString("Item Description"));
+                saleInterfaceItem.setComment(jsonObject.getString("Drawing Number"));
+                saleInterfaceItem.setSupplierPartNumber(jsonObject.getString("Part Number"));
                 saleInterfaceItem.setQuantity(jsonObject.getString("Quantity"));
                 saleInterfaceItem.setUnitOfMeasure(jsonObject.getString("Unit"));
                 saleInterfaceItem.setSyncItemCode(jsonObject.getString("Item Code"));
+                saleInterfaceItem.setContent(jsonObject.getString("Remarks"));
                 saleInterfaceItem.setHeadId(id);
                 saleInterfaceItemMapper.insert(saleInterfaceItem);
             }
@@ -833,9 +862,12 @@ public class SaleInterfaceSyncServiceImpl extends ServiceImpl<SaleInterfaceSyncM
         saleInterfaceSync.setCreateBy(sysUser.getUsername());
         List<String> fieldList = new ArrayList<>();
         fieldList.add("#");
+        fieldList.add("Part Type");
         fieldList.add("Part Number");
+        fieldList.add("Supplier Part Number");
         fieldList.add("Item Description");
         fieldList.add("Quality");
+        fieldList.add("Custom Code");
         fieldList.add("UoM");
         fieldList.add("Qty");
 
@@ -875,8 +907,9 @@ public class SaleInterfaceSyncServiceImpl extends ServiceImpl<SaleInterfaceSyncM
         } catch (Exception e) {
             e.printStackTrace();
         }
-        String[] extra = {"Buyer comments:"};
-        JSONArray jsonArray = PDFTableReader.getTableByPosition(file, fieldList, ignoreList, "ShipServ Buyer Record:", -1, "left", "Buyer Details:", "Item Description", extra, 5, 0);
+        String[] extra = {"Buyer comments:", "Equipment Section Name:"};
+        JSONArray jsonArray = PDFTableReader.getPdfTable(pdfTable, fieldList, ignoreList, extra, "Item Description", "ShipServ Buyer Record:", "left", true);
+        //JSONArray jsonArray = PDFTableReader.getTableByPosition(file, fieldList, ignoreList, "ShipServ Buyer Record:", -1, "left", "Buyer Details:", "Item Description", extra, 5, 0);
         for(Object node : jsonArray) {
             JSONObject jsonObject = JSONObject.parseObject(String.valueOf(node));
             if(jsonObject.size() >= 0) {
@@ -971,6 +1004,9 @@ public class SaleInterfaceSyncServiceImpl extends ServiceImpl<SaleInterfaceSyncM
         ignoreList.add("Managers and Agents");
         ignoreList.add("behalf of Owners");
         ignoreList.add("Shipsure Version Number");
+        ignoreList.add("For Component");
+        ignoreList.add("Designer");
+        ignoreList.add("Maker");
 
         saleInterfaceSync.setPriority(PDFTableReader.getFields(file, "Priority", "", true).get(0));
         saleInterfaceSync.setBuyerName(split[1]);

+ 12 - 1
srm-module-code/src/main/java/org/jeecg/modules/saleCode/util/PDFTableReader.java

@@ -112,6 +112,7 @@ public class PDFTableReader<T> {
                     height = page.getMediaBox().getHeight();
                     pdfTable.setWidth(width);
                     pdfTable.setHeight(height);
+                    pdfTable.setPageNums(pageNumber);
                     super.writePage();
                 }
 
@@ -303,6 +304,10 @@ public class PDFTableReader<T> {
                     }
                 }
             }
+            //取整张pdf最后多行数据时,没有结束行供参考,可设置结束行为“tableEnd”
+            if("tableEnd".equals(nextTitle)) {
+                nextRow = pdfTable.getHeight() * pdfTable.getPageNums();
+            }
         }
 
         //根据titleRow和nextRow获取多行数据
@@ -472,6 +477,9 @@ public class PDFTableReader<T> {
                     index ++;
                 }else {
                     headerCells.add(preCell);
+                    if(index == cells.size() - 2) {
+                        headerCells.add(afterCell);
+                    }
                 }
             }
 
@@ -517,9 +525,12 @@ public class PDFTableReader<T> {
         JSONArray result = new JSONArray();
         Map<Float, JSONObject> dataObject = new HashMap<>();
         List<PdfRow> tableDataRows = new ArrayList<>();
+        if(tableEndY == null) {
+            tableEndY = pdfTable.getHeight() * pdfTable.getPageNums();
+        }
         for(Float key : sortKeys) {
             if(key > tableStartY && key < tableEndY) {
-                boolean ignore = false;
+                Boolean ignore = false;//忽略行标记
                 Boolean dataRow = false;//数据行标记
                 Boolean extraRow = false;//额外行标记
                 JSONObject data = new JSONObject();