From 384afc642959a961988f11f1d885f7e42146eafa Mon Sep 17 00:00:00 2001 From: wwb <782276617@qq.com> Date: Fri, 24 Jul 2026 17:34:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DeliveryOrderServiceImpl.java | 20 ++- .../saleorder/SaleOrderServiceImpl.java | 47 ++++-- .../StatementAccountServiceImpl.java | 134 +++++++++--------- .../cn/hangtag/module/oms/util/PDFUtils.java | 34 +++++ 4 files changed, 156 insertions(+), 79 deletions(-) create mode 100644 hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/util/PDFUtils.java diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/deliveryorder/DeliveryOrderServiceImpl.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/deliveryorder/DeliveryOrderServiceImpl.java index 29af64f..dd9e1d5 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/deliveryorder/DeliveryOrderServiceImpl.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/deliveryorder/DeliveryOrderServiceImpl.java @@ -20,6 +20,7 @@ import cn.hangtag.module.oms.dal.mysql.productinfo.ProductInfoMapper; import cn.hangtag.module.oms.serialnumber.CodingRulesUtils; import cn.hangtag.module.oms.service.customer.CustomerService; import cn.hangtag.module.oms.service.productinfo.ProductInfoService; +import cn.hangtag.module.oms.util.PDFUtils; import cn.hangtag.module.system.dal.dataobject.user.AdminUserDO; import cn.hangtag.module.system.service.user.AdminUserService; import cn.hutool.core.collection.ListUtil; @@ -209,9 +210,11 @@ public class DeliveryOrderServiceImpl implements DeliveryOrderService { @Override public void generatePdf(HttpServletResponse response, List ids) throws IOException { List delFiles = new ArrayList<>(); - List files = new ArrayList<>(); + List mergePdfFiles = new ArrayList<>(); + String pathUrl = System.getProperty("user.dir") + "/pdffile"; List deliveryOrders = deliveryOrderMapper.selectList(DeliveryOrderDO::getId, ids); for (DeliveryOrderDO deliveryOrder : deliveryOrders) { + List files = new ArrayList<>(); List entrys = getDeliveryOrderEntryListByParentId(deliveryOrder.getId()); List> split = ListUtil.split(entrys, 6); int pageIndex = 1; @@ -219,7 +222,6 @@ public class DeliveryOrderServiceImpl implements DeliveryOrderService { String htmlContent = generateHtmlContent(deliveryOrder, entrys2,pageIndex); //docker生成路径 - String pathUrl = System.getProperty("user.dir") + "/pdffile"; String fileName = StrUtil.format(pathUrl + "/DeliveryOrder_{}", deliveryOrder.getBillno() + "_" + pageIndex); //主宿机生成路径 String fileName2 = StrUtil.format(pdfPath + "/DeliveryOrder_{}", deliveryOrder.getBillno() + "_" + pageIndex); @@ -245,14 +247,24 @@ public class DeliveryOrderServiceImpl implements DeliveryOrderService { delFiles.add(templatePath); pageIndex++; } + + try { + String mergePdfFileName = StrUtil.format(pathUrl + "/DeliveryOrders_{}.pdf", deliveryOrder.getBillno()); + PDFUtils.mergePdf(files,mergePdfFileName); + mergePdfFiles.add(FileUtil.file(mergePdfFileName)); + delFiles.add(mergePdfFileName); + } catch (Exception e) { + e.printStackTrace(); + } } - String pathUrl = System.getProperty("user.dir") + "/pdffile"; + + String zipFileName = StrUtil.format(pathUrl + "/DeliveryOrder_{}", new Date().getTime()); // 压缩到的位置 File zipFile = new File(zipFileName + ".zip"); - ZipUtil.zip(zipFile, false, files.toArray(new File[files.size()])); + ZipUtil.zip(zipFile, false, mergePdfFiles.toArray(new File[mergePdfFiles.size()])); //downloadZip(zipFile,response); diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleorder/SaleOrderServiceImpl.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleorder/SaleOrderServiceImpl.java index bddcf95..7d1a33c 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleorder/SaleOrderServiceImpl.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/saleorder/SaleOrderServiceImpl.java @@ -61,6 +61,7 @@ import cn.hangtag.module.oms.service.product.ProductPriceService; import cn.hangtag.module.oms.service.productinfo.ProductInfoService; import cn.hangtag.module.oms.service.salecontract.SaleContractService; import cn.hangtag.module.oms.service.saleordersku.SaleOrderSkuService; +import cn.hangtag.module.oms.util.PDFUtils; import cn.hangtag.module.system.dal.dataobject.brand.UserBrandDO; import cn.hangtag.module.system.dal.dataobject.user.AdminUserDO; import cn.hangtag.module.system.dal.mysql.brand.UserBrandMapper; @@ -175,6 +176,9 @@ public class SaleOrderServiceImpl implements SaleOrderService { @Value("${oms.partybAddress}") private String partybAddress; + @Value("${oms.phone}") + private String phone; + @Value("${pdfPath}") private String pdfPath; @@ -515,12 +519,25 @@ public class SaleOrderServiceImpl implements SaleOrderService { pageIndex++; } + + + String pathUrl = System.getProperty("user.dir") + "/pdffile"; String zipFileName = StrUtil.format(pathUrl + "/SaleContract_{}0", new Date().getTime()); + List mergePdfFiles = new ArrayList<>(); + try { + String mergePdfFileName = StrUtil.format(pathUrl + "/SaleContracts_{}.pdf", saleOrder.getBillno()); + PDFUtils.mergePdf(files,mergePdfFileName); + mergePdfFiles.add(FileUtil.file(mergePdfFileName)); + delFiles.add(mergePdfFileName); + } catch (Exception e) { + e.printStackTrace(); + } + // 压缩到的位置 File zipFile = new File(zipFileName + ".zip"); - ZipUtil.zip(zipFile, false, files.toArray(new File[files.size()])); + ZipUtil.zip(zipFile, false, mergePdfFiles.toArray(new File[mergePdfFiles.size()])); //发送消息 @@ -676,7 +693,7 @@ public class SaleOrderServiceImpl implements SaleOrderService { context.setVariable("bizDate", DateUtil.date(saleContract.getBizdate()).toDateStr()); context.setVariable("customerNo", customer.getNumber()); context.setVariable("headUserName", saleContract.getHead()); - context.setVariable("phone", saleContract.getPhone()); + context.setVariable("phone", phone); context.setVariable("fax", saleContract.getFax()); context.setVariable("clerk", saleContract.getClerk()); context.setVariable("saleOrderNo", saleContract.getCustomerBuyNo()); @@ -736,21 +753,23 @@ public class SaleOrderServiceImpl implements SaleOrderService { @Override public void generatePdf(HttpServletResponse response, List ids) throws IOException { List delFiles = new ArrayList<>(); - List files = new ArrayList<>(); + + List mergePdfFiles = new ArrayList<>(); + String pathUrl = System.getProperty("user.dir") + "/pdffile"; List saleOrders = saleOrderMapper.selectList(SaleOrderDO::getId, ids); for (SaleOrderDO saleOrder : saleOrders) { List entrys = getSaleOrderEntryListByParentId(saleOrder.getId()); SaleContractSaveReqVO saleContractVO = toSaleContractVO(saleOrder, entrys); SaleContractDO saleContract = BeanUtils.toBean(saleContractVO, SaleContractDO.class); List saleContractEntrys = BeanUtils.toBean(saleContractVO.getSaleContractEntrys(), SaleContractEntryDO.class); - + List files = new ArrayList<>(); List> split = ListUtil.split(saleContractEntrys, 6); int pageIndex = 1; for (List saleContractEntryDOS : split) { String htmlContent = generateHtmlContent(saleContract, saleContractEntryDOS,pageIndex); //docker生成路径 - String pathUrl = System.getProperty("user.dir") + "/pdffile"; + String fileName = StrUtil.format(pathUrl + "/SaleContract_{}", saleOrder.getBillno()+"_"+pageIndex); //主宿机生成路径 String fileName2 = StrUtil.format(pdfPath + "/SaleContract_{}", saleOrder.getBillno()+"_"+pageIndex); @@ -775,14 +794,22 @@ public class SaleOrderServiceImpl implements SaleOrderService { delFiles.add(templatePath); pageIndex++; } + + try { + String mergePdfFileName = StrUtil.format(pathUrl + "/SaleContracts_{}.pdf", saleOrder.getBillno()); + PDFUtils.mergePdf(files,mergePdfFileName); + mergePdfFiles.add(FileUtil.file(mergePdfFileName)); + delFiles.add(mergePdfFileName); + } catch (Exception e) { + e.printStackTrace(); + } } - String pathUrl = System.getProperty("user.dir") + "/pdffile"; String zipFileName = StrUtil.format(pathUrl + "/SaleContract_{}", new Date().getTime()); // 压缩到的位置 File zipFile = new File(zipFileName + ".zip"); - ZipUtil.zip(zipFile, false, files.toArray(new File[files.size()])); + ZipUtil.zip(zipFile, false, mergePdfFiles.toArray(new File[mergePdfFiles.size()])); //downloadZip(zipFile,response); @@ -1428,7 +1455,11 @@ public class SaleOrderServiceImpl implements SaleOrderService { if (FuncUtil.isEmpty(billno)) { billno = getNewContractCode2(); }*/ - saveReqVO.setBillno(saleOrder.getSaleContractCode()); + String saleContractCodePrefix = saleOrder.getSaleContractCodePrefix(); + if(saleContractCodePrefix==null){ + saleContractCodePrefix = ""; + } + saveReqVO.setBillno(saleContractCodePrefix+saleOrder.getSaleContractCode()); saveReqVO.setCustomerId(saleOrder.getCustomerId()); saveReqVO.setCustomerName(customer.getName()); saveReqVO.setCustomerBuyNo(saleOrder.getContractCode()); diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/statementaccount/StatementAccountServiceImpl.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/statementaccount/StatementAccountServiceImpl.java index 59b607b..2f686a8 100644 --- a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/statementaccount/StatementAccountServiceImpl.java +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/service/statementaccount/StatementAccountServiceImpl.java @@ -186,73 +186,73 @@ public class StatementAccountServiceImpl implements StatementAccountService { @Transactional(rollbackFor = Exception.class) @Override public void generateStatementAccountData() { - //查询当月数据,按客户分组创建对账单 - LambdaQueryWrapper lambdaQueryWrapperx = new LambdaQueryWrapper<>(); - lambdaQueryWrapperx.between(DeliveryOrderDO::getDate, DateUtil.beginOfMonth(DateUtil.date()),DateUtil.endOfMonth(DateUtil.date())); - List deliveryOrders = deliveryOrderMapper.selectList(lambdaQueryWrapperx); - Map> groupCustomerMap = new HashMap<>(); - - for (DeliveryOrderDO deliveryOrder : deliveryOrders) {//按客户分组 - if(groupCustomerMap.containsKey(deliveryOrder.getCustomerId())){ - List list = groupCustomerMap.get(deliveryOrder.getCustomerId()); - list.add(deliveryOrder); - groupCustomerMap.put(deliveryOrder.getCustomerId(), list); - }else { - groupCustomerMap.put(deliveryOrder.getCustomerId(), Stream.of(deliveryOrder).collect(Collectors.toList())); - } - } - - for (Long customerId : groupCustomerMap.keySet()) { - List deliveryOrders2 = groupCustomerMap.get(customerId); - List listentrys = new ArrayList<>(); - for (DeliveryOrderDO deliveryOrder : deliveryOrders2) { - //创建对账单 - StatementAccountSaveReqVO saveReqVO = new StatementAccountSaveReqVO(); - boolean isAdd = true; - //查询是否存在重复数据 - LambdaQueryWrapper lambdaQueryWrapper2 = new LambdaQueryWrapper<>(); - lambdaQueryWrapper2.eq(StatementAccountDO::getCustomerId,customerId); - lambdaQueryWrapper2.between(StatementAccountDO::getDate, DateUtil.beginOfMonth(DateUtil.date()),DateUtil.endOfMonth(DateUtil.date())); - List statementAccounts2 = statementAccountMapper.selectList(lambdaQueryWrapper2); - if(!statementAccounts2.isEmpty()){ - StatementAccountDO statementAccountDO = statementAccounts2.get(0); - saveReqVO.setId(statementAccountDO.getId()); - saveReqVO.setBillno(statementAccountDO.getBillno()); - saveReqVO.setCustomerId(statementAccountDO.getCustomerId()); - saveReqVO.setDate(statementAccountDO.getDate()); - isAdd = false; - }else { - DateTime date = DateUtil.beginOfMonth(new Date(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli())); - saveReqVO.setBillno(getNewBillNo()); - saveReqVO.setDate(date.toLocalDateTime()); - } - saveReqVO.setCustomerId(deliveryOrder.getCustomerId()); - List deliveryOrderEntrys = deliveryOrderService.getDeliveryOrderEntryListByParentId(deliveryOrder.getId()); - for (DeliveryOrderEntryDO deliveryOrderEntry : deliveryOrderEntrys) { - StatementAccountEntryDO saveEntry = new StatementAccountEntryDO(); - saveEntry.setSaleContractNo(deliveryOrder.getSaleContractNo()); - saveEntry.setOrderDate(deliveryOrder.getSaleorderDate()); - saveEntry.setDeliveryNo(deliveryOrder.getBillno()); - saveEntry.setDeliveryDate(deliveryOrder.getDate()); - saveEntry.setMaterialId(deliveryOrderEntry.getMaterialId()); - saveEntry.setMaterialCode(deliveryOrderEntry.getMaterialNumber()); - saveEntry.setMaterialName(deliveryOrderEntry.getMaterialName()); - saveEntry.setQty(deliveryOrderEntry.getQty()); - saveEntry.setPrice(deliveryOrderEntry.getPrice()); - saveEntry.setCurrency(deliveryOrderEntry.getCurrency()); - saveEntry.setAmount(deliveryOrderEntry.getPrice().multiply(BigDecimal.valueOf(deliveryOrderEntry.getQty())).setScale(2, RoundingMode.HALF_UP)); - saveEntry.setContact(deliveryOrder.getContact()); - saveEntry.setUnit(deliveryOrderEntry.getUnit()); - listentrys.add(saveEntry); - } - saveReqVO.setStatementAccountEntrys(listentrys); - if(!isAdd){ - updateStatementAccount(saveReqVO); - }else { - createStatementAccount(saveReqVO); - } - } - } +// //查询当月数据,按客户分组创建对账单 +// LambdaQueryWrapper lambdaQueryWrapperx = new LambdaQueryWrapper<>(); +// lambdaQueryWrapperx.between(DeliveryOrderDO::getDate, DateUtil.beginOfMonth(DateUtil.date()),DateUtil.endOfMonth(DateUtil.date())); +// List deliveryOrders = deliveryOrderMapper.selectList(lambdaQueryWrapperx); +// Map> groupCustomerMap = new HashMap<>(); +// +// for (DeliveryOrderDO deliveryOrder : deliveryOrders) {//按客户分组 +// if(groupCustomerMap.containsKey(deliveryOrder.getCustomerId())){ +// List list = groupCustomerMap.get(deliveryOrder.getCustomerId()); +// list.add(deliveryOrder); +// groupCustomerMap.put(deliveryOrder.getCustomerId(), list); +// }else { +// groupCustomerMap.put(deliveryOrder.getCustomerId(), Stream.of(deliveryOrder).collect(Collectors.toList())); +// } +// } +// +// for (Long customerId : groupCustomerMap.keySet()) { +// List deliveryOrders2 = groupCustomerMap.get(customerId); +// List listentrys = new ArrayList<>(); +// for (DeliveryOrderDO deliveryOrder : deliveryOrders2) { +// //创建对账单 +// StatementAccountSaveReqVO saveReqVO = new StatementAccountSaveReqVO(); +// boolean isAdd = true; +// //查询是否存在重复数据 +// LambdaQueryWrapper lambdaQueryWrapper2 = new LambdaQueryWrapper<>(); +// lambdaQueryWrapper2.eq(StatementAccountDO::getCustomerId,customerId); +// lambdaQueryWrapper2.between(StatementAccountDO::getDate, DateUtil.beginOfMonth(DateUtil.date()),DateUtil.endOfMonth(DateUtil.date())); +// List statementAccounts2 = statementAccountMapper.selectList(lambdaQueryWrapper2); +// if(!statementAccounts2.isEmpty()){ +// StatementAccountDO statementAccountDO = statementAccounts2.get(0); +// saveReqVO.setId(statementAccountDO.getId()); +// saveReqVO.setBillno(statementAccountDO.getBillno()); +// saveReqVO.setCustomerId(statementAccountDO.getCustomerId()); +// saveReqVO.setDate(statementAccountDO.getDate()); +// isAdd = false; +// }else { +// DateTime date = DateUtil.beginOfMonth(new Date(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli())); +// saveReqVO.setBillno(getNewBillNo()); +// saveReqVO.setDate(date.toLocalDateTime()); +// } +// saveReqVO.setCustomerId(deliveryOrder.getCustomerId()); +// List deliveryOrderEntrys = deliveryOrderService.getDeliveryOrderEntryListByParentId(deliveryOrder.getId()); +// for (DeliveryOrderEntryDO deliveryOrderEntry : deliveryOrderEntrys) { +// StatementAccountEntryDO saveEntry = new StatementAccountEntryDO(); +// saveEntry.setSaleContractNo(deliveryOrder.getSaleContractNo()); +// saveEntry.setOrderDate(deliveryOrder.getSaleorderDate()); +// saveEntry.setDeliveryNo(deliveryOrder.getBillno()); +// saveEntry.setDeliveryDate(deliveryOrder.getDate()); +// saveEntry.setMaterialId(deliveryOrderEntry.getMaterialId()); +// saveEntry.setMaterialCode(deliveryOrderEntry.getMaterialNumber()); +// saveEntry.setMaterialName(deliveryOrderEntry.getMaterialName()); +// saveEntry.setQty(deliveryOrderEntry.getQty()); +// saveEntry.setPrice(deliveryOrderEntry.getPrice()); +// saveEntry.setCurrency(deliveryOrderEntry.getCurrency()); +// saveEntry.setAmount(deliveryOrderEntry.getPrice().multiply(BigDecimal.valueOf(deliveryOrderEntry.getQty())).setScale(2, RoundingMode.HALF_UP)); +// saveEntry.setContact(deliveryOrder.getContact()); +// saveEntry.setUnit(deliveryOrderEntry.getUnit()); +// listentrys.add(saveEntry); +// } +// saveReqVO.setStatementAccountEntrys(listentrys); +// if(!isAdd){ +// updateStatementAccount(saveReqVO); +// }else { +// createStatementAccount(saveReqVO); +// } +// } +// } } diff --git a/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/util/PDFUtils.java b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/util/PDFUtils.java new file mode 100644 index 0000000..0f88fcc --- /dev/null +++ b/hangtag-module-oms/hangtag-module-oms-biz/src/main/java/cn/hangtag/module/oms/util/PDFUtils.java @@ -0,0 +1,34 @@ +package cn.hangtag.module.oms.util; + +import org.apache.pdfbox.multipdf.PDFMergerUtility; +import org.apache.pdfbox.pdmodel.PDDocument; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +/** + * JDK1.8 PDF合并工具 PDFBox + */ +public class PDFUtils { + + /** + * 合并多个PDF文件到新文件 + * @param sourceFiles 待合并pdf路径集合 + * @param targetPath 输出pdf路径 + * @throws Exception IO、文件解析异常 + */ + public static void mergePdf(List sourceFiles, String targetPath) throws Exception { + PDFMergerUtility merger = new PDFMergerUtility(); + merger.setDestinationFileName(targetPath); + + for (File file : sourceFiles) { + if (!file.exists() || file.length() <= 0) { + throw new RuntimeException("PDF文件不存在或为空:" + file.getPath()); + } + merger.addSource(file); + } + // 执行合并,传null使用默认内存流 + merger.mergeDocuments(null); + } +}