diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/InvoiceController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/InvoiceController.java index e57a67884..fa5f385ef 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/InvoiceController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/InvoiceController.java @@ -84,6 +84,8 @@ public class InvoiceController { @Value("${jeecg.path.shippingInvoiceDetailDir}") private String INVOICE_DETAIL_DIR; + @Value("${jeecg.path.shippingInvoicePdfDir}") + private String INVOICE_PDF_DIR; @Autowired Environment env; @@ -484,6 +486,7 @@ public class InvoiceController { if (metaData.getInvoiceCode().equals("error")) { metaDataErrorList.add(metaData); } else { + filenameList.add(INVOICE_PDF_DIR + "//" + "Invoice N°" + metaData.getInvoiceCode() + " (" + metaData.getInvoiceEntity() + ").pdf"); filenameList.add(INVOICE_DIR + "//" + metaData.getFilename()); List factureDetails = shippingInvoiceService.getInvoiceDetail(metaData.getInvoiceCode()); List refunds = savRefundWithDetailService.getRefundsByInvoiceNumber(metaData.getInvoiceCode()); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/ShippingInvoiceController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/ShippingInvoiceController.java index 64fe943c5..bcb5216af 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/ShippingInvoiceController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/ShippingInvoiceController.java @@ -1,7 +1,5 @@ package org.jeecg.modules.business.controller.admin.shippingInvoice; -import com.aspose.cells.SaveFormat; -import com.aspose.cells.Workbook; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -49,11 +47,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import java.util.stream.Collectors; -import java.util.stream.Stream; - /** * @Description: 物流发票 * @Author: jeecg-boot @@ -72,6 +66,8 @@ public class ShippingInvoiceController { @Autowired private IPlatformOrderService platformOrderService; @Autowired + private PlatformOrderShippingInvoiceService platformOrderShippingInvoiceService; + @Autowired private ISavRefundService savRefundService; @Autowired private IShippingInvoiceService shippingInvoiceService; @@ -79,15 +75,10 @@ public class ShippingInvoiceController { private FreeMarkerConfigurer freemarkerConfigurer; @Autowired private EmailService emailService; - private static final String EXTENSION = ".xlsx"; @Value("${jeecg.path.shippingInvoiceDir}") private String INVOICE_LOCATION; @Value("${jeecg.path.shippingInvoiceDetailDir}") private String INVOICE_DETAIL_LOCATION; - @Value("${jeecg.path.shippingInvoicePdfDir}") - private String INVOICE_PDF_LOCATION; - @Value("${jeecg.path.shippingInvoiceDetailPdfDir}") - private String INVOICE_DETAIL_PDF_LOCAION; @Autowired Environment env; @@ -276,82 +267,6 @@ public class ShippingInvoiceController { return Result.OK("文件导入失败!"); } - /** Finds the absolute path of invoice file by recursively walking the directory and it's subdirectories - * - * @param dirPath - * @param invoiceNumber - * @return List of paths for the file but should only find one result - */ - public List getPath(String dirPath, String invoiceNumber) { - List pathList = new ArrayList<>(); - //Recursively list all files - //The walk() method returns a Stream by walking the file tree beginning with a given starting file/directory in a depth-first manner. - try (Stream stream = Files.walk(Paths.get(dirPath))) { - pathList = stream.map(Path::normalize) - .filter(Files::isRegularFile) // directories, hidden files and files without extension are not included - .filter(path -> path.getFileName().toString().contains(invoiceNumber)) - .filter(path -> path.getFileName().toString().endsWith(EXTENSION)) - .collect(Collectors.toList()); - } - catch(IOException e) { - e.printStackTrace(); - } - return pathList; - } - - /** Finds the absolute path of invoice file by recursively walking the directory and it's subdirectories - * - * @param dirPath - * @param invoiceNumber - * @return List of paths for the file but should only find one result - */ - public List getPath(String dirPath, String invoiceNumber, String invoiceEntity) { - List pathList = new ArrayList<>(); - //Recursively list all files - //The walk() method returns a Stream by walking the file tree beginning with a given starting file/directory in a depth-first manner. - try (Stream stream = Files.walk(Paths.get(dirPath))) { - pathList = stream.map(Path::normalize) - .filter(Files::isRegularFile) // directories, hidden files and files without extension are not included - .filter(path -> path.getFileName().toString().contains(invoiceNumber)) - .filter(path -> path.getFileName().toString().contains(invoiceEntity)) - .filter(path -> path.getFileName().toString().endsWith(EXTENSION)) - .collect(Collectors.toList()); - } - catch(IOException e) { - e.printStackTrace(); - } - return pathList; - } - - /** - * Finds the absolute path of invoice file and return the path - * @param invoiceNumber - * @param filetype if it's an invoice or invoice detail - * @return String returns the path of the invoice file - */ - public String getInvoiceList(String invoiceNumber, String filetype) { - log.info("Invoice number : " + invoiceNumber); - List pathList = new ArrayList<>(); - if(filetype.equals("invoice")) { - log.info("File asked is of type invoice"); - pathList = getPath(INVOICE_LOCATION, invoiceNumber); - } - if(filetype.equals("detail")) { - log.info("File asked is of type invoice detail"); - pathList = getPath(INVOICE_DETAIL_LOCATION, invoiceNumber); - } - if(pathList.isEmpty()) { - log.error("NO INVOICE FILE FOUND : " + invoiceNumber); - return "ERROR"; - } - else { - for (Path path : pathList) { - log.info(path.toString()); - } - return pathList.get(0).toString(); - } - } - /** * Downloads the invoice and returns it in form of bytearray * @param invoiceNumber the invoice we want to download @@ -361,7 +276,7 @@ public class ShippingInvoiceController { */ @GetMapping(value = "/downloadCompleteInvoiceExcel") public ResponseEntity download(@RequestParam("invoiceNumber") String invoiceNumber, @RequestParam("filetype") String filetype) throws IOException { - String filename = getInvoiceList(invoiceNumber, filetype); + String filename = platformOrderShippingInvoiceService.getInvoiceList(invoiceNumber, filetype); if(!filename.equals("ERROR")) { File file = new File(filename); @@ -391,32 +306,6 @@ public class ShippingInvoiceController { .body("Couldn't find the invoice file for : " + invoiceNumber); } } - - public String convertToPdf(String invoiceNumber, String fileType) throws Exception { - String excelFilePath = getInvoiceList(invoiceNumber, fileType);// (C:\PATH\filename.xlsx) - - if(!excelFilePath.equals("ERROR")) { - String pdfFilePath= INVOICE_PDF_LOCATION + "/" + invoiceNumber + ".pdf"; - if(fileType.equals("invoice")){ - pdfFilePath = INVOICE_PDF_LOCATION + "/Invoice N°" + invoiceNumber + ".pdf"; - } - if(fileType.equals("detail")) { - pdfFilePath = INVOICE_DETAIL_PDF_LOCAION + "/Détail_calcul_de_facture_" + invoiceNumber + ".pdf"; - } - - Pattern p = Pattern.compile("^(.*)[\\/\\\\](.*)(\\.[a-z]+)"); //group(1): "C:\PATH" , group(2) : "filename", group(3): ".xlsx" - Matcher m = p.matcher(excelFilePath); - if (m.matches()) { - pdfFilePath = INVOICE_PDF_LOCATION + "/" + m.group(2) + ".pdf"; - } - // Créé un classeur pour charger le fichier Excel - Workbook workbook = new Workbook(excelFilePath); - // On enregistre le document au format PDF - workbook.save(pdfFilePath, SaveFormat.PDF); - return pdfFilePath; - } - return "ERROR"; - } /** * * @param invoiceNumber @@ -424,7 +313,7 @@ public class ShippingInvoiceController { */ @GetMapping(value = "/downloadPdf") public ResponseEntity downloadPdf(@RequestParam("invoiceNumber") String invoiceNumber) throws Exception { - String pdfFilePath = convertToPdf(invoiceNumber, "invoice"); + String pdfFilePath = platformOrderShippingInvoiceService.convertToPdf(invoiceNumber, "invoice"); if(!pdfFilePath.equals("ERROR")) { File file = new File(pdfFilePath); HttpHeaders header = new HttpHeaders(); @@ -453,7 +342,7 @@ public class ShippingInvoiceController { @RequestParam("invoiceID") String invoiceID, @RequestParam("email") String email, @RequestParam("invoiceEntity") String invoiceEntity) throws Exception { - String filePath = getInvoiceList(invoiceNumber, "detail"); + String filePath = platformOrderShippingInvoiceService.getInvoiceList(invoiceNumber, "detail"); String fileType = "Détails de facture"; String subject = "Détails de facture N°" + invoiceNumber; Properties prop = emailService.getMailSender(); @@ -513,8 +402,8 @@ public class ShippingInvoiceController { shippingInvoiceService.delMain(id); log.info("Deleting invoice files ..."); String invoiceEntity = clientService.getClientEntity(clientId); - List invoicePathList = getPath(INVOICE_LOCATION, invoiceNumber, invoiceEntity); - List detailPathList = getPath(INVOICE_DETAIL_LOCATION, invoiceNumber, invoiceEntity); + List invoicePathList = platformOrderShippingInvoiceService.getPath(INVOICE_LOCATION, invoiceNumber, invoiceEntity); + List detailPathList = platformOrderShippingInvoiceService.getPath(INVOICE_DETAIL_LOCATION, invoiceNumber, invoiceEntity); boolean invoiceDeleted = false, detailDeleted = false; if(invoicePathList.isEmpty()) { @@ -577,8 +466,8 @@ public class ShippingInvoiceController { for(int i = 0; i < ids.size(); i++) { String invoiceNumber = invoiceNumbers.get(i); String invoiceEntity = clientService.getClientEntity(clientIds.get(i)); - List invoicePathList = getPath(INVOICE_LOCATION, invoiceNumber, invoiceEntity); - List detailPathList = getPath(INVOICE_DETAIL_LOCATION, invoiceNumber, invoiceEntity); + List invoicePathList = platformOrderShippingInvoiceService.getPath(INVOICE_LOCATION, invoiceNumber, invoiceEntity); + List detailPathList = platformOrderShippingInvoiceService.getPath(INVOICE_DETAIL_LOCATION, invoiceNumber, invoiceEntity); if(invoicePathList.isEmpty()) { log.error("FILE NOT FOUND : " + invoiceNumber + ", " + invoiceEntity); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/PlatformOrderShippingInvoiceService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/PlatformOrderShippingInvoiceService.java index 917b28983..99c3c34e9 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/PlatformOrderShippingInvoiceService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/PlatformOrderShippingInvoiceService.java @@ -1,5 +1,7 @@ package org.jeecg.modules.business.service; +import com.aspose.cells.SaveFormat; +import com.aspose.cells.Workbook; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; @@ -32,7 +34,10 @@ import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; +import java.util.stream.Stream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -91,9 +96,13 @@ public class PlatformOrderShippingInvoiceService { @Value("${jeecg.path.shippingInvoiceDir}") private String INVOICE_DIR; - @Value("${jeecg.path.shippingInvoiceDetailDir}") private String INVOICE_DETAIL_DIR; + @Value("${jeecg.path.shippingInvoicePdfDir}") + private String INVOICE_PDF_DIR; + @Value("${jeecg.path.shippingInvoiceDetailPdfDir}") + private String INVOICE_DETAIL_PDF_DIR; + private static final String EXTENSION = ".xlsx"; private final static String[] DETAILS_TITLES = { "Boutique", @@ -470,8 +479,10 @@ public class PlatformOrderShippingInvoiceService { metaData = makeInvoice(param); else metaData = makeCompleteInvoicePostShipping(param, "post"); + + convertToPdf(metaData.getInvoiceCode(), "invoice"); invoiceList.add(metaData); - } catch (UserException | IOException | ParseException e) { + } catch (Exception e) { invoiceList.add(new InvoiceMetaData("", "error", entry.getKey(), e.getMessage())); log.error(e.getMessage()); } @@ -480,6 +491,107 @@ public class PlatformOrderShippingInvoiceService { return invoiceList; } + + /** Finds the absolute path of invoice file by recursively walking the directory and it's subdirectories + * + * @param dirPath + * @param invoiceNumber + * @return List of paths for the file but should only find one result + */ + public List getPath(String dirPath, String invoiceNumber) { + List pathList = new ArrayList<>(); + //Recursively list all files + //The walk() method returns a Stream by walking the file tree beginning with a given starting file/directory in a depth-first manner. + try (Stream stream = Files.walk(Paths.get(dirPath))) { + pathList = stream.map(Path::normalize) + .filter(Files::isRegularFile) // directories, hidden files and files without extension are not included + .filter(path -> path.getFileName().toString().contains(invoiceNumber)) + .filter(path -> path.getFileName().toString().endsWith(EXTENSION)) + .collect(Collectors.toList()); + } + catch(IOException e) { + e.printStackTrace(); + } + return pathList; + } + + /** Finds the absolute path of invoice file by recursively walking the directory and it's subdirectories + * + * @param dirPath + * @param invoiceNumber + * @return List of paths for the file but should only find one result + */ + public List getPath(String dirPath, String invoiceNumber, String invoiceEntity) { + List pathList = new ArrayList<>(); + //Recursively list all files + //The walk() method returns a Stream by walking the file tree beginning with a given starting file/directory in a depth-first manner. + try (Stream stream = Files.walk(Paths.get(dirPath))) { + pathList = stream.map(Path::normalize) + .filter(Files::isRegularFile) // directories, hidden files and files without extension are not included + .filter(path -> path.getFileName().toString().contains(invoiceNumber)) + .filter(path -> path.getFileName().toString().contains(invoiceEntity)) + .filter(path -> path.getFileName().toString().endsWith(EXTENSION)) + .collect(Collectors.toList()); + } + catch(IOException e) { + e.printStackTrace(); + } + return pathList; + } + + /** + * Finds the absolute path of invoice file and return the path + * @param invoiceNumber + * @param filetype if it's an invoice or invoice detail + * @return String returns the path of the invoice file + */ + public String getInvoiceList(String invoiceNumber, String filetype) { + log.info("Invoice number : " + invoiceNumber); + List pathList = new ArrayList<>(); + if(filetype.equals("invoice")) { + log.info("File asked is of type invoice"); + pathList = getPath(INVOICE_DIR, invoiceNumber); + } + if(filetype.equals("detail")) { + log.info("File asked is of type invoice detail"); + pathList = getPath(INVOICE_DETAIL_DIR, invoiceNumber); + } + if(pathList.isEmpty()) { + log.error("NO INVOICE FILE FOUND : " + invoiceNumber); + return "ERROR"; + } + else { + for (Path path : pathList) { + log.info(path.toString()); + } + return pathList.get(0).toString(); + } + } + public String convertToPdf(String invoiceNumber, String fileType) throws Exception { + String excelFilePath = getInvoiceList(invoiceNumber, fileType);// (C:\PATH\filename.xlsx) + + if(!excelFilePath.equals("ERROR")) { + String pdfFilePath= INVOICE_PDF_DIR + "/" + invoiceNumber + ".pdf"; + if(fileType.equals("invoice")){ + pdfFilePath = INVOICE_PDF_DIR + "/Invoice N°" + invoiceNumber + ".pdf"; + } + if(fileType.equals("detail")) { + pdfFilePath = INVOICE_DETAIL_PDF_DIR + "/Détail_calcul_de_facture_" + invoiceNumber + ".pdf"; + } + + Pattern p = Pattern.compile("^(.*)[\\/\\\\](.*)(\\.[a-z]+)"); //group(1): "C:\PATH" , group(2) : "filename", group(3): ".xlsx" + Matcher m = p.matcher(excelFilePath); + if (m.matches()) { + pdfFilePath = INVOICE_PDF_DIR + "/" + m.group(2) + ".pdf"; + } + // Créé un classeur pour charger le fichier Excel + Workbook workbook = new Workbook(excelFilePath); + // On enregistre le document au format PDF + workbook.save(pdfFilePath, SaveFormat.PDF); + return pdfFilePath; + } + return "ERROR"; + } @Transactional public String zipInvoices(List invoiceList) throws IOException { log.info("Zipping Invoices ...");