This commit is contained in:
wwb 2026-07-24 17:34:30 +08:00
parent 2828519f1c
commit 384afc6429
4 changed files with 156 additions and 79 deletions

View File

@ -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<Long> ids) throws IOException {
List<String> delFiles = new ArrayList<>();
List<File> files = new ArrayList<>();
List<File> mergePdfFiles = new ArrayList<>();
String pathUrl = System.getProperty("user.dir") + "/pdffile";
List<DeliveryOrderDO> deliveryOrders = deliveryOrderMapper.selectList(DeliveryOrderDO::getId, ids);
for (DeliveryOrderDO deliveryOrder : deliveryOrders) {
List<File> files = new ArrayList<>();
List<DeliveryOrderEntryDO> entrys = getDeliveryOrderEntryListByParentId(deliveryOrder.getId());
List<List<DeliveryOrderEntryDO>> 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);

View File

@ -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<File> 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<Long> ids) throws IOException {
List<String> delFiles = new ArrayList<>();
List<File> files = new ArrayList<>();
List<File> mergePdfFiles = new ArrayList<>();
String pathUrl = System.getProperty("user.dir") + "/pdffile";
List<SaleOrderDO> saleOrders = saleOrderMapper.selectList(SaleOrderDO::getId, ids);
for (SaleOrderDO saleOrder : saleOrders) {
List<SaleOrderEntryDO> entrys = getSaleOrderEntryListByParentId(saleOrder.getId());
SaleContractSaveReqVO saleContractVO = toSaleContractVO(saleOrder, entrys);
SaleContractDO saleContract = BeanUtils.toBean(saleContractVO, SaleContractDO.class);
List<SaleContractEntryDO> saleContractEntrys = BeanUtils.toBean(saleContractVO.getSaleContractEntrys(), SaleContractEntryDO.class);
List<File> files = new ArrayList<>();
List<List<SaleContractEntryDO>> split = ListUtil.split(saleContractEntrys, 6);
int pageIndex = 1;
for (List<SaleContractEntryDO> 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());

View File

@ -186,73 +186,73 @@ public class StatementAccountServiceImpl implements StatementAccountService {
@Transactional(rollbackFor = Exception.class)
@Override
public void generateStatementAccountData() {
//查询当月数据按客户分组创建对账单
LambdaQueryWrapper<DeliveryOrderDO> lambdaQueryWrapperx = new LambdaQueryWrapper<>();
lambdaQueryWrapperx.between(DeliveryOrderDO::getDate, DateUtil.beginOfMonth(DateUtil.date()),DateUtil.endOfMonth(DateUtil.date()));
List<DeliveryOrderDO> deliveryOrders = deliveryOrderMapper.selectList(lambdaQueryWrapperx);
Map<Long,List<DeliveryOrderDO>> groupCustomerMap = new HashMap<>();
for (DeliveryOrderDO deliveryOrder : deliveryOrders) {//按客户分组
if(groupCustomerMap.containsKey(deliveryOrder.getCustomerId())){
List<DeliveryOrderDO> 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<DeliveryOrderDO> deliveryOrders2 = groupCustomerMap.get(customerId);
List<StatementAccountEntryDO> listentrys = new ArrayList<>();
for (DeliveryOrderDO deliveryOrder : deliveryOrders2) {
//创建对账单
StatementAccountSaveReqVO saveReqVO = new StatementAccountSaveReqVO();
boolean isAdd = true;
//查询是否存在重复数据
LambdaQueryWrapper<StatementAccountDO> lambdaQueryWrapper2 = new LambdaQueryWrapper<>();
lambdaQueryWrapper2.eq(StatementAccountDO::getCustomerId,customerId);
lambdaQueryWrapper2.between(StatementAccountDO::getDate, DateUtil.beginOfMonth(DateUtil.date()),DateUtil.endOfMonth(DateUtil.date()));
List<StatementAccountDO> 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<DeliveryOrderEntryDO> 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<DeliveryOrderDO> lambdaQueryWrapperx = new LambdaQueryWrapper<>();
// lambdaQueryWrapperx.between(DeliveryOrderDO::getDate, DateUtil.beginOfMonth(DateUtil.date()),DateUtil.endOfMonth(DateUtil.date()));
// List<DeliveryOrderDO> deliveryOrders = deliveryOrderMapper.selectList(lambdaQueryWrapperx);
// Map<Long,List<DeliveryOrderDO>> groupCustomerMap = new HashMap<>();
//
// for (DeliveryOrderDO deliveryOrder : deliveryOrders) {//按客户分组
// if(groupCustomerMap.containsKey(deliveryOrder.getCustomerId())){
// List<DeliveryOrderDO> 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<DeliveryOrderDO> deliveryOrders2 = groupCustomerMap.get(customerId);
// List<StatementAccountEntryDO> listentrys = new ArrayList<>();
// for (DeliveryOrderDO deliveryOrder : deliveryOrders2) {
// //创建对账单
// StatementAccountSaveReqVO saveReqVO = new StatementAccountSaveReqVO();
// boolean isAdd = true;
// //查询是否存在重复数据
// LambdaQueryWrapper<StatementAccountDO> lambdaQueryWrapper2 = new LambdaQueryWrapper<>();
// lambdaQueryWrapper2.eq(StatementAccountDO::getCustomerId,customerId);
// lambdaQueryWrapper2.between(StatementAccountDO::getDate, DateUtil.beginOfMonth(DateUtil.date()),DateUtil.endOfMonth(DateUtil.date()));
// List<StatementAccountDO> 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<DeliveryOrderEntryDO> 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);
// }
// }
// }
}

View File

@ -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<File> 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);
}
}