From 19a443e8ebbd084f24e9194c1736e114c51b82ca Mon Sep 17 00:00:00 2001 From: gaorl Date: Wed, 5 Apr 2023 18:24:03 +0800 Subject: [PATCH] =?UTF-8?q?feature=EF=BC=9A1=E3=80=81=E4=BA=A4=E6=8E=A5?= =?UTF-8?q?=E5=8D=95=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dxhy/order/model/page/OrderListQuery.java | 2 +- .../order/invoice/config/InvoiceConfig.java | 3 + .../invoice/controller/InvoiceController.java | 52 +++++++- .../excel/ExportInvoiceSignInfoEnum.java | 54 ++++++-- .../service/OrderInvoiceInfoService.java | 3 + .../impl/OrderInvoiceInfoServiceImpl.java | 56 ++++++++- .../order/invoice/utils/PDFExportUtil.java | 117 ++++++++++++++++++ .../mybatis/mapper/OrderInvoiceInfoMapper.xml | 4 +- 8 files changed, 272 insertions(+), 19 deletions(-) create mode 100644 order-management-invoice/src/main/java/com/dxhy/order/invoice/utils/PDFExportUtil.java diff --git a/order-management-common/src/main/java/com/dxhy/order/model/page/OrderListQuery.java b/order-management-common/src/main/java/com/dxhy/order/model/page/OrderListQuery.java index 7d465024..15b5b997 100644 --- a/order-management-common/src/main/java/com/dxhy/order/model/page/OrderListQuery.java +++ b/order-management-common/src/main/java/com/dxhy/order/model/page/OrderListQuery.java @@ -296,6 +296,6 @@ public class OrderListQuery { */ private String dyzt; - private String orderInfoIds; + private String ids; } diff --git a/order-management-invoice/src/main/java/com/dxhy/order/invoice/config/InvoiceConfig.java b/order-management-invoice/src/main/java/com/dxhy/order/invoice/config/InvoiceConfig.java index 7d449fa7..78e34d71 100644 --- a/order-management-invoice/src/main/java/com/dxhy/order/invoice/config/InvoiceConfig.java +++ b/order-management-invoice/src/main/java/com/dxhy/order/invoice/config/InvoiceConfig.java @@ -83,6 +83,9 @@ public class InvoiceConfig { */ @Value("${order.url.skhdUrl:}") public String interfaceSkhdUrl; + + @Value("${order.print.tempPath}") + public String printTempPath; /** diff --git a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/controller/InvoiceController.java b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/controller/InvoiceController.java index f62d1e91..a5798010 100644 --- a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/controller/InvoiceController.java +++ b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/controller/InvoiceController.java @@ -1,7 +1,14 @@ package com.dxhy.order.invoice.module.invoice.controller; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.UUID; +import com.dxhy.order.constant.ConfigureConstant; import com.dxhy.order.constant.OrderInfoContentEnum; import com.dxhy.order.constant.OrderManagementConstant; +import com.dxhy.order.invoice.config.InvoiceConfig; +import com.dxhy.order.invoice.module.invoice.model.PrintInvoiceRequest; +import com.dxhy.order.invoice.utils.PdfUtil; import com.dxhy.order.model.InvoiceKpdInfo; import com.dxhy.order.model.OrderInvoiceInfo; import com.dxhy.order.model.PageUtils; @@ -24,10 +31,9 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.*; /** * 订单发票控制层 @@ -47,6 +53,19 @@ public class InvoiceController { @Resource private InvoiceKpdInfoService invoiceKpdInfoService; + + @Resource + private InvoiceConfig config; + + private final String fileNamePrefix = "交付单PDF"; + /** + * 文件名后缀 + */ + private final String fileNameSurfix = ".pdf"; + /** + * 文件名中间分隔符 + */ + private final String fileSplit = "_"; /** * 在使用 @@ -76,6 +95,31 @@ public class InvoiceController { return R.ok().put("page", pageUtils).put("numMap", queryCountInvoiceBO); } + + @PostMapping(value = "/printSignInvoice") + @ApiOperation(value = "交付单打印", notes = "发票查询-交付单打印") + @SysLog(operation = "交付单打印", operationDesc = "发票打印", key = "发票打印") + public void printSignInvoice(@RequestBody OrderListQuery orderBatchQuery,HttpServletRequest request, HttpServletResponse response) { + log.info("{}交付单打印请求参数:{}", LOGGER_MSG, JsonUtils.getInstance().toJsonString(orderBatchQuery)); + String printTempPath = config.getPrintTempPath(); + + if(Objects.isNull(orderBatchQuery) || StringUtils.isNotBlank(orderBatchQuery.getIds())){ + log.error("{}请求参数为空", LOGGER_MSG); + } else { + response.setHeader("Content-disposition", "inline;filename="+ "printInvoice.pdf"); + response.setContentType(ConfigureConstant.STRING_APPLICATION_PDF); + try { + String[] toDay = DateUtil.today().split("-"); + String file = orderInvoiceInfoService.signInvoicePrint(printTempPath + "excelFile/" + toDay[0] + "/" + + toDay[1] + "/" + toDay[2] + "/" + fileNamePrefix + fileSplit + UUID.randomUUID() + fileNameSurfix , Arrays.asList(orderBatchQuery.getIds().split(","))); + log.debug("交付单打印base64文件流{}",file); + response.getOutputStream().write(file.getBytes()); + + } catch (Exception e) { + e.printStackTrace(); + } + } + } @ApiOperation(value = "发票信息明细查询", notes = "订单发票管理-查询发票明细列表") @SysLog(operation = "发票信息明细查询", operationDesc = "发票信息明细查询", key = "订单发票管理") diff --git a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/excel/ExportInvoiceSignInfoEnum.java b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/excel/ExportInvoiceSignInfoEnum.java index c1fc948c..46af04aa 100644 --- a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/excel/ExportInvoiceSignInfoEnum.java +++ b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/excel/ExportInvoiceSignInfoEnum.java @@ -15,17 +15,18 @@ public enum ExportInvoiceSignInfoEnum { * Excel导出发票主信息 * 必须按照顺序存放,否则会异常 */ - EXCEL_EXPORT_INVOICE_KPRQ("0", "kprq", "开票日期"), - EXCEL_EXPORT_INVOICE_XHFMC("1", "xhfMc", "销方单位名称"), - EXCEL_EXPORT_INVOICE_GHFMC("2", "ghfMc", "购方单位名称"), - EXCEL_EXPORT_INVOICE_FPDM("3", "fpdm", "发票代码"), - EXCEL_EXPORT_INVOICE_FPHM("4", "fphm", "发票号码"), - EXCEL_EXPORT_INVOICE_HJJE("5", "hjbhsje", "不含税金额"), - EXCEL_EXPORT_INVOICE_HJSE("6", "kpse", "税额"), - EXCEL_EXPORT_INVOICE_JSHJ("7", "kphjje", "价税合计金额"), - EXCEL_EXPORT_INVOICE_FPLX("8", "mark", "备注"), - EXCEL_EXPORT_INVOICE_XHFNSRSBH("9", "signName", "交接人"), - EXCEL_EXPORT_INVOICE_GHFNSRSBH("10", "signDate", "交接日期"); + EXCEL_EXPORT_INVOICE_XH("0", "xh", "序号",1f), + EXCEL_EXPORT_INVOICE_KPRQ("1", "kprq", "开票日期",2f), + EXCEL_EXPORT_INVOICE_XHFMC("2", "xhfMc", "销方单位名称",3f), + EXCEL_EXPORT_INVOICE_GHFMC("3", "ghfMc", "购方单位名称",3f), + EXCEL_EXPORT_INVOICE_FPDM("4", "fpdm", "发票代码",2f), + EXCEL_EXPORT_INVOICE_FPHM("5", "fphm", "发票号码",2f), + EXCEL_EXPORT_INVOICE_HJJE("6", "hjbhsje", "不含税金额",2f), + EXCEL_EXPORT_INVOICE_HJSE("7", "kpse", "税额",2f), + EXCEL_EXPORT_INVOICE_JSHJ("8", "kphjje", "价税合计金额",2f), + EXCEL_EXPORT_INVOICE_FPLX("9", "bz", "备注",4f), + EXCEL_EXPORT_INVOICE_XHFNSRSBH("10", "signName", "交接人",2f), + EXCEL_EXPORT_INVOICE_GHFNSRSBH("11", "signDate", "交接日期",2f); /** * key @@ -41,6 +42,10 @@ public enum ExportInvoiceSignInfoEnum { * 表格头名称 */ private final String cellName; + /** + * 列表宽度 + */ + private final float columnWidths; public String getKey() { return key; @@ -54,10 +59,15 @@ public enum ExportInvoiceSignInfoEnum { return cellName; } - ExportInvoiceSignInfoEnum(String key, String value, String cellName) { + public float getColumnWidths() { + return columnWidths; + } + + ExportInvoiceSignInfoEnum(String key, String value, String cellName,float columnWidths) { this.key = key; this.value = value; this.cellName = cellName; + this.columnWidths = columnWidths; } public static ExportInvoiceSignInfoEnum getCodeValue(String key) { @@ -78,6 +88,26 @@ public enum ExportInvoiceSignInfoEnum { } return resultList; } + + public static List getCellNames() { + + List resultList = new ArrayList<>(); + for (ExportInvoiceSignInfoEnum item : values()) { + resultList.add(item.getCellName()); + } + return resultList; + } + public static float[] getcolumnWidths() { + + float[] resultList = new float[12]; + int i = 0; + for (ExportInvoiceSignInfoEnum item : values()) { + resultList[i] = item.getColumnWidths(); + i++; + } + return resultList; + } + } diff --git a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/OrderInvoiceInfoService.java b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/OrderInvoiceInfoService.java index e6970ef3..92fc458f 100644 --- a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/OrderInvoiceInfoService.java +++ b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/OrderInvoiceInfoService.java @@ -10,6 +10,7 @@ import com.dxhy.order.invoice.module.invoice.model.FileDownLoad; import com.dxhy.order.invoice.module.invoice.model.bo.QueryCountInvoiceBO; import com.dxhy.order.invoice.module.invoice.model.vo.*; +import java.io.File; import java.io.OutputStream; import java.util.Date; import java.util.List; @@ -276,5 +277,7 @@ public interface OrderInvoiceInfoService { * @param rabbitMqCommonInvoice */ void processDataAfterInvoice(RabbitMqCommonInvoice rabbitMqCommonInvoice); + + String signInvoicePrint(String excelFile, List ids) throws Exception; } diff --git a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/impl/OrderInvoiceInfoServiceImpl.java b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/impl/OrderInvoiceInfoServiceImpl.java index 8a56d6e0..3aacc4e6 100644 --- a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/impl/OrderInvoiceInfoServiceImpl.java +++ b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/impl/OrderInvoiceInfoServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONObject; import com.dxhy.base.file.common.ExcelReadContext; import com.dxhy.base.file.handle.ExcelExportHandle; import com.dxhy.order.baseservice.config.BaseServiceConfig; @@ -33,6 +34,7 @@ import com.dxhy.order.invoice.module.invoicespecial.service.SpecialInvoiceRevers import com.dxhy.order.invoice.utils.BusinessExcelUtil; import com.dxhy.order.invoice.utils.HttpInvoiceRequestUtil; import com.dxhy.order.invoice.utils.HttpInvoiceRequestUtilQd; +import com.dxhy.order.invoice.utils.PDFExportUtil; import com.dxhy.order.invoice.utils.generateinvoice.PdfProducer; import com.dxhy.order.model.*; import com.dxhy.order.model.qd.QdFileDownloadRequest; @@ -55,8 +57,11 @@ import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; import java.util.zip.ZipEntry; @@ -597,7 +602,6 @@ public class OrderInvoiceInfoServiceImpl implements OrderInvoiceInfoService { exportInvoiceInfo.setBz(StringUtils.isNotBlank(orderInvoiceDetail.getBz()) ? orderInvoiceDetail.getBz() : ""); exportInvoiceInfo.setKpxm(StringUtils.isNotBlank(orderInvoiceDetail.getKpxm()) ? orderInvoiceDetail.getKpxm() : ""); exportInvoiceInfo.setBmbbbh(StringUtils.isNotBlank(orderInvoiceDetail.getBmbbbh()) ? orderInvoiceDetail.getBmbbbh() : ""); - exportInvoiceInfo.setMark(""); exportInvoiceInfo.setSignName(""); exportInvoiceInfo.setSignDate(""); @@ -1129,6 +1133,56 @@ public class OrderInvoiceInfoServiceImpl implements OrderInvoiceInfoService { } } + /** + * 交接单打印 + * @param ids + * @return + */ + @Override + public String signInvoicePrint(String excelFile, List ids) throws Exception{ + cicleExport(ids,1,excelFile); + File file = new File(excelFile); + FileInputStream fis = new FileInputStream(file); + byte[] bytes = new byte[fis.available()]; + fis.read(bytes); // 读取到 byte 里面 + fis.close(); + file.delete(); + return Base64Encoding.encodeToString(bytes); + } + + private boolean cicleExport(List ids, int curr, String excelFile) throws Exception { + List titleColumns = ExportInvoiceSignInfoEnum.getCellNames(); + List values = ExportInvoiceSignInfoEnum.getValues(); + float[] floats = ExportInvoiceSignInfoEnum.getcolumnWidths(); + + // 查询指定页数的数据 + PageHelper.startPage(curr, 500); + List orderInvoiceDetails = orderInvoiceInfoMapper.selectInvoiceByIds(ids); + PageInfo pageInfo = new PageInfo<>(orderInvoiceDetails); + + // 用于页面展示 + List resultList = pageInfo.getList(); + boolean hasNext = pageInfo.isHasNextPage(); + + boolean firstPage = false; + if (curr == 1) { + firstPage = true; + } +// String title = "购方名称:" + pramsMap.get("gfmc") + " 税款所属期:" +// + pramsMap.get("skssq") + " " + " 购方税号:" + pramsMap.get("gfTaxNo"); + // 数据不是最后一页 + if (hasNext) { + int nextPage = pageInfo.getNextPage(); + // 写入当前页数据 + PDFExportUtil.pdfExport("交接单导出", excelFile, "", resultList, titleColumns,values, floats, firstPage, false); + // 更新页数 + return cicleExport(ids, nextPage, excelFile); + } else { + // 写入最后一页数据 + PDFExportUtil.pdfExport("交接单导出", excelFile, "", resultList, titleColumns,values, floats, firstPage, true); + return false; + } + } /** diff --git a/order-management-invoice/src/main/java/com/dxhy/order/invoice/utils/PDFExportUtil.java b/order-management-invoice/src/main/java/com/dxhy/order/invoice/utils/PDFExportUtil.java new file mode 100644 index 00000000..31ea72a8 --- /dev/null +++ b/order-management-invoice/src/main/java/com/dxhy/order/invoice/utils/PDFExportUtil.java @@ -0,0 +1,117 @@ +package com.dxhy.order.invoice.utils; + +import com.dxhy.order.model.OrderInvoiceDetail; +import com.itextpdf.text.*; +import com.itextpdf.text.pdf.*; +import org.springframework.stereotype.Component; + +import java.io.FileOutputStream; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +/** + * @author Gy Chen + * @date 2021/3/17 + */ +@Component +@SuppressWarnings({"AliDeprecation", "AlibabaUndefineMagicConstant"}) +public class PDFExportUtil { + private static PdfWriter writer; + private static ArrayList listRow; + private static PdfPTable table; + + public static void pdfExport(String fileTitle, String filePath, String titleName, List dataList, + List titleColumns,List titleValues, float[] columnWidths, boolean firstPage, boolean lastPage) { + Document document = new Document(PageSize.A4); + try { + + // 中文字体,解决中文不能显示问题 + BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); + // 正文字体风格 + Font contextFont = new Font(bfChinese, 10, Font.NORMAL); + if (firstPage) { + + // 两列的表 + table = new PdfPTable(titleColumns.size()); + // 宽度100%填充 + table.setWidthPercentage(100); + // 前间距 + table.setSpacingBefore(10f); + // 后间距 + table.setSpacingAfter(10f); + listRow = table.getRows(); + // 设置列宽比例 1:3 + table.setWidths(columnWidths); + // 一行两格 + PdfPCell[] cells1 = new PdfPCell[titleColumns.size()]; + PdfPRow row1 = new PdfPRow(cells1); + for (int i = 0; i < titleColumns.size(); i++) { + cells1[i] = new PdfPCell(new Paragraph(titleColumns.get(i), contextFont)); + cells1[i].setUseAscender(true); + cells1[i].setUseDescender(true); + cells1[i].setHorizontalAlignment(Element.ALIGN_CENTER); + } + + listRow.add(row1); + } + + for (Object data : dataList) { + // 一行两格 + PdfPCell[] cells1 = new PdfPCell[titleColumns.size()]; + PdfPRow row1 = new PdfPRow(cells1); + int i = 0; + + for (String columnsName : titleValues) { + String getMethodName = "get" + columnsName.substring(0, 1).toUpperCase() + columnsName.substring(1); + Method declaredMethod = data.getClass().getDeclaredMethod(getMethodName); + String columnsData= (String)declaredMethod.invoke(data); + cells1[i] = new PdfPCell(new Paragraph(columnsData, contextFont)); + cells1[i].setUseAscender(true); + cells1[i].setUseDescender(true); + if (i == 6 || i == 7 || i == 8) { + cells1[i].setHorizontalAlignment(Element.ALIGN_RIGHT); + } else { + cells1[i].setHorizontalAlignment(Element.ALIGN_LEFT); + } + i++; + } + listRow.add(row1); + } + if (lastPage) { + document = new Document(new RectangleReadOnly(842.0F, 595.0F)); + // 新建一个pdf文件 + writer = PdfWriter.getInstance(document, new FileOutputStream(filePath)); + document.open(); + // 红标题字体风格 + Font redTitleFont = new Font(bfChinese, 20, Font.BOLD, BaseColor.BLACK); + // 红标题抬头 + Paragraph redTitle = new Paragraph(fileTitle, redTitleFont); + // 居中 + redTitle.setAlignment(Element.ALIGN_CENTER); + // 文档中加入红标题字段 + document.add(redTitle); + + // 标题字体风格 + Font titleFont = new Font(bfChinese, 12, Font.NORMAL); + // 标题内容 + Paragraph title = new Paragraph(titleName, titleFont); + // 离上一段落(标题)空的行数 + title.setSpacingBefore(25); + // 设置标题格式对齐方式 + title.setAlignment(Element.ALIGN_LEFT); + // 文档中加入标题字段 + document.add(title); + // 把表格添加到文件中 + document.add(table); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (lastPage) { + document.close(); + writer.close(); + } + } + } +} diff --git a/order-management-invoice/src/main/resources/mybatis/mapper/OrderInvoiceInfoMapper.xml b/order-management-invoice/src/main/resources/mybatis/mapper/OrderInvoiceInfoMapper.xml index c3062937..926f2a23 100644 --- a/order-management-invoice/src/main/resources/mybatis/mapper/OrderInvoiceInfoMapper.xml +++ b/order-management-invoice/src/main/resources/mybatis/mapper/OrderInvoiceInfoMapper.xml @@ -1602,9 +1602,11 @@ oii.fphm, oii.hjbhsje, oii.kpse, - oii.kphjje + oii.kphjje, + oi.bz FROM order_invoice_info oii + left join order_info oi on oii.order_info_id = oi.id where oii.id in