diff --git a/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/controller/XhpcInvoiceController.java b/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/controller/XhpcInvoiceController.java index ec2a649c..dfe50cd5 100644 --- a/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/controller/XhpcInvoiceController.java +++ b/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/controller/XhpcInvoiceController.java @@ -15,7 +15,9 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.Arrays; import java.util.List; import java.util.Map; @@ -43,9 +45,12 @@ public class XhpcInvoiceController extends BaseController { * @since version-1.0 */ @GetMapping("/excel") - public AjaxResult exportExcel(@RequestParam("invoiceIds") List invoiceIds) { - //todo 将指定发票信息导入到excel表中,然后返回出去 - return AjaxResult.success("https://xhpc-bucket1.oss-cn-hangzhou.aliyuncs.com/69852145895461/202109151137358636985214589546101.png"); + public AjaxResult exportExcel(@RequestParam("invoiceIds") String invoiceIds, HttpServletResponse response) throws IOException { + //处理字符串,转换成数组 + String[] ids = invoiceIds.split(","); + List resultList = Arrays.asList(ids); + xhpcInvoiceService.exportExcel(resultList, response); + return AjaxResult.success(); } @@ -62,7 +67,7 @@ public class XhpcInvoiceController extends BaseController { @PostMapping("/pdf") public AjaxResult uploadPdf(MultipartFile invoicePdf) throws IOException { - String filename = "electronicInvoice" + DateUtils.dateTimeNow() + ".pdf"; + String filename = "electricInvoice" + DateUtils.dateTimeNow() + ".pdf"; // 上传文件到阿里云 OSSClient ossClient = new OSSClient(environment.getProperty("oss.endpoint"), environment.getProperty("oss.access-key"), environment.getProperty("oss.secret-key")); // 放置到哪个块中去,key为目录,file为文件 diff --git a/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/domain/ExcelInvoiceRow.java b/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/domain/ExcelInvoiceRow.java new file mode 100644 index 00000000..6035bedf --- /dev/null +++ b/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/domain/ExcelInvoiceRow.java @@ -0,0 +1,47 @@ +package com.xhpc.invoice.domain; + +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 用于存储导出发票的一行记录的Bean类 + * + * @author WH + * @date 2021/12/30 14:13 + * @since version-1.0 + */ +@Data +@NoArgsConstructor +public class ExcelInvoiceRow { + + private Integer rowsNumber; + private String invoiceType; + private String receiveEmail; + private String titleType; + private String titleContent; + private String dutyNumber; + private String invoiceContent; + private String invoiceOrderElectricTotalMoney; + private String invoiceOrderServiceTotalMoney; + private String firmAddress; + private String firmPhone; + private String firmBank; + private String firmBankAccount; + private String isShowDate; + private String userNotes; + private String creatorType; + private String iCreateTime; + private String invoicingTime; + private String drawer; + private String financeNotes; + private String electricInvoiceUrl; + private String isRead; + private String historySerialNumber; + private String powerPriceTotal; + private String servicePriceTotal; + private String promotionDiscount; + private String historyActPrice; + private String hCreateTime; + private String chargingMode; + +} diff --git a/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/mapper/XhpcInvoiceMapper.java b/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/mapper/XhpcInvoiceMapper.java index 4974e0b7..638a9cad 100644 --- a/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/mapper/XhpcInvoiceMapper.java +++ b/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/mapper/XhpcInvoiceMapper.java @@ -1,6 +1,7 @@ package com.xhpc.invoice.mapper; import com.xhpc.invoice.domain.AllInvoiceOrdersRequest; +import com.xhpc.invoice.domain.ExcelInvoiceRow; import com.xhpc.invoice.domain.InvoiceHistoryRecordsRequest; import com.xhpc.invoice.domain.InvoiceToUserRequest; import com.xhpc.invoice.pojo.XhpcInvoice; @@ -176,4 +177,15 @@ public interface XhpcInvoiceMapper { */ void updateByInvoiceId(Long invoiceId); + /** + * 获取发票内容 + * + * @param invoiceId 发票id + * @return 专门用于放置到Excel中Map + * @author WH + * @date 2021/12/30 18:08 + * @since version-1.0 + */ + List selectExcelInvoiceById(Long invoiceId); + } \ No newline at end of file diff --git a/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/service/XhpcInvoiceService.java b/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/service/XhpcInvoiceService.java index 92cd12d4..5b73a643 100644 --- a/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/service/XhpcInvoiceService.java +++ b/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/service/XhpcInvoiceService.java @@ -2,6 +2,10 @@ package com.xhpc.invoice.service; import com.xhpc.invoice.domain.*; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; + /** * 用于处理发票相关请求的Service * @@ -133,4 +137,16 @@ public interface XhpcInvoiceService { */ Long findNotReadCount(Long creatorId, Integer creatorType); + /** + * 导出所有发票记录(已开与未开)到Excel中 + * + * @param invoiceIds 发票id + * @param response 响应的response + * @throws IOException 该Response对象不存在时,抛出该异常对象 + * @author WH + * @date 2021/12/30 10:16 + * @since version-1.0 + */ + void exportExcel(List invoiceIds, HttpServletResponse response) throws IOException; + } diff --git a/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/service/impl/XhpcInvoiceServiceImpl.java b/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/service/impl/XhpcInvoiceServiceImpl.java index 52e0cd11..ecadba21 100644 --- a/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/service/impl/XhpcInvoiceServiceImpl.java +++ b/xhpc-modules/xhpc-invoice/src/main/java/com/xhpc/invoice/service/impl/XhpcInvoiceServiceImpl.java @@ -1,6 +1,5 @@ package com.xhpc.invoice.service.impl; -import cn.hutool.core.collection.CollUtil; import cn.hutool.extra.mail.MailUtil; import cn.hutool.http.HttpUtil; import cn.hutool.poi.excel.ExcelUtil; @@ -22,7 +21,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; import java.io.File; +import java.io.IOException; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -481,22 +482,94 @@ public class XhpcInvoiceServiceImpl implements XhpcInvoiceService { * 导出所有发票记录(已开与未开)到Excel中 * * @param invoiceIds 发票id + * @param response 响应对象 * @author WH * @date 2021/12/30 10:16 * @since version-1.0 */ @Override - public void exportExcel(List invoiceIds) { - - Integer integer = invoiceIds.get(0); - //获取要导出的发票记录 - XhpcInvoice xhpcInvoice = xhpcInvoiceMapper.selectByPrimaryKey(Long.valueOf(integer)); - List rows = CollUtil.newArrayList(xhpcInvoice); - //写出记录到excel表中 - ExcelWriter writer = ExcelUtil.getWriter("d:/writeTest.xlsx"); - writer.write(rows); - writer.close(); + public void exportExcel(List invoiceIds, HttpServletResponse response) throws IOException { + //创建Excel写入对象 + ExcelWriter writer = ExcelUtil.getWriter("record.xlsx"); + //设置单元格标题别名 + setExcelCellName(writer); + //定义每一行的行号(1,2,3,4...) + int rowsNumber = 1; + //设定初始合并行参数(即第一行该从哪行开始合并,合并几行) + int rowStart = 1; + int lastRow = 0; + for (String invoiceId : invoiceIds) { + List excelInvoiceRows = xhpcInvoiceMapper.selectExcelInvoiceById(Long.valueOf(invoiceId)); + //往记录中塞入行号 + for (ExcelInvoiceRow excelInvoiceRow : excelInvoiceRows) { + excelInvoiceRow.setRowsNumber(rowsNumber); + } + //写入记录 + writer.write(excelInvoiceRows); + int invoiceCount = excelInvoiceRows.size(); + //如果写入的发票记录只有一个,就不合并单元格,增加合并行索引,为下面需要合并的行做准备。 + if (invoiceCount == 1) { + lastRow = lastRow + 1; + rowStart = rowStart + 1; + } else { + //计算每条要合并发票记录的行的最后一个行号 + lastRow = lastRow + invoiceCount; + //合并单元格 + for (int columnIndex = 0; columnIndex <= 21; columnIndex++) { + writer.merge(rowStart, lastRow, columnIndex, columnIndex, null, false); + } + //计算每条要合并发票记录的行的第一个行号 + rowStart = rowStart + invoiceCount; + } + rowsNumber++; + } + //设置文件类型 + response.setContentType(ExcelUtil.XLSX_CONTENT_TYPE); + //让浏览器下载 + response.addHeader("Content-Disposition", "attachment;filename=" + "invoiceRecord.xlsx"); //设置返回的文件名称 //写入到Response中 + writer.flush(response.getOutputStream(), true); + } + + /** + * 设置生成的Excel表格单元格标题 + * + * @param writer Excel写入器 + * @author WH + * @date 2021/12/31 11:10 + * @since version-1.0 + */ + private void setExcelCellName(ExcelWriter writer) { + + writer.addHeaderAlias("rowsNumber", "序号"); + writer.addHeaderAlias("invoiceType", "发票类型"); + writer.addHeaderAlias("receiveEmail", "接收邮箱"); + writer.addHeaderAlias("titleType", "抬头类型"); + writer.addHeaderAlias("titleContent", "抬头内容"); + writer.addHeaderAlias("dutyNumber", "税号"); + writer.addHeaderAlias("invoiceContent", "发票内容"); + writer.addHeaderAlias("invoiceOrderElectricTotalMoney", "总电量金额"); + writer.addHeaderAlias("invoiceOrderServiceTotalMoney", "总服务费金额"); + writer.addHeaderAlias("firmAddress", "地址"); + writer.addHeaderAlias("firmPhone", "电话号码"); + writer.addHeaderAlias("firmBank", "开户行"); + writer.addHeaderAlias("firmBankAccount", "银行开户账号"); + writer.addHeaderAlias("isShowDate", "用户是否要求展示交易日期"); + writer.addHeaderAlias("userNotes", "用户备注"); + writer.addHeaderAlias("creatorType", "用户类型"); + writer.addHeaderAlias("iCreateTime", "发票申请时间"); + writer.addHeaderAlias("invoicingTime", "发票开票时间"); + writer.addHeaderAlias("drawer", "开票人"); + writer.addHeaderAlias("financeNotes", "财物备注"); + writer.addHeaderAlias("electricInvoiceUrl", "电子发票地址"); + writer.addHeaderAlias("isRead", "用户是否阅读发票信息"); + writer.addHeaderAlias("historySerialNumber", "订单编号"); + writer.addHeaderAlias("powerPriceTotal", "订单电费"); + writer.addHeaderAlias("servicePriceTotal", "订单服务费"); + writer.addHeaderAlias("promotionDiscount", "折扣费用"); + writer.addHeaderAlias("historyActPrice", "用户实际支付金额"); + writer.addHeaderAlias("hCreateTime", "订单创建时间"); + writer.addHeaderAlias("chargingMode", "订单来源"); } diff --git a/xhpc-modules/xhpc-invoice/src/main/resources/mapper/XhpcInvoiceMapper.xml b/xhpc-modules/xhpc-invoice/src/main/resources/mapper/XhpcInvoiceMapper.xml index ce830f28..05f75e36 100644 --- a/xhpc-modules/xhpc-invoice/src/main/resources/mapper/XhpcInvoiceMapper.xml +++ b/xhpc-modules/xhpc-invoice/src/main/resources/mapper/XhpcInvoiceMapper.xml @@ -188,6 +188,48 @@ AND creator_id = #{creatorId} AND creator_type = #{creatorType} + delete from xhpc_invoice