feature:1、交接单打印

release
gaorl 2 years ago
parent 2f90e6d436
commit 19a443e8eb
  1. 2
      order-management-common/src/main/java/com/dxhy/order/model/page/OrderListQuery.java
  2. 3
      order-management-invoice/src/main/java/com/dxhy/order/invoice/config/InvoiceConfig.java
  3. 52
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/controller/InvoiceController.java
  4. 54
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/excel/ExportInvoiceSignInfoEnum.java
  5. 3
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/OrderInvoiceInfoService.java
  6. 56
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/impl/OrderInvoiceInfoServiceImpl.java
  7. 117
      order-management-invoice/src/main/java/com/dxhy/order/invoice/utils/PDFExportUtil.java
  8. 4
      order-management-invoice/src/main/resources/mybatis/mapper/OrderInvoiceInfoMapper.xml

@ -296,6 +296,6 @@ public class OrderListQuery {
*/
private String dyzt;
private String orderInfoIds;
private String ids;
}

@ -83,6 +83,9 @@ public class InvoiceConfig {
*/
@Value("${order.url.skhdUrl:}")
public String interfaceSkhdUrl;
@Value("${order.print.tempPath}")
public String printTempPath;
/**

@ -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 = "订单发票管理")

@ -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<String> getCellNames() {
List<String> 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;
}
}

@ -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<String> ids) throws Exception;
}

@ -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<String> 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<String> ids, int curr, String excelFile) throws Exception {
List<String> titleColumns = ExportInvoiceSignInfoEnum.getCellNames();
List<String> values = ExportInvoiceSignInfoEnum.getValues();
float[] floats = ExportInvoiceSignInfoEnum.getcolumnWidths();
// 查询指定页数的数据
PageHelper.startPage(curr, 500);
List<OrderInvoiceDetail> orderInvoiceDetails = orderInvoiceInfoMapper.selectInvoiceByIds(ids);
PageInfo<OrderInvoiceDetail> pageInfo = new PageInfo<>(orderInvoiceDetails);
// 用于页面展示
List<OrderInvoiceDetail> 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;
}
}
/**

@ -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<PdfPRow> listRow;
private static PdfPTable table;
public static void pdfExport(String fileTitle, String filePath, String titleName, List<OrderInvoiceDetail> dataList,
List<String> titleColumns,List<String> 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();
}
}
}
}

@ -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
<foreach collection="ids" item="id" open="(" separator="," close=")">

Loading…
Cancel
Save