From b70eec17ac045cdc2de640092c96037f1e7b0d2e Mon Sep 17 00:00:00 2001
From: shinnosuke <tantao@1hoper.com>
Date: 星期二, 23 六月 2026 16:06:37 +0800
Subject: [PATCH] 新增了部分v2.0 p1功能
---
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java | 92 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 92 insertions(+), 0 deletions(-)
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java
index cfb6986..d43bb3b 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java
@@ -14,6 +14,7 @@
import com.ruoyi.common.security.annotation.Logical;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.order.api.model.TOrderInvoice;
import com.ruoyi.order.api.query.TOrderInvoiceQuery;
import com.ruoyi.order.api.vo.TOrderInvoiceVO;
@@ -37,7 +38,10 @@
import java.io.*;
import java.net.URL;
import java.net.URLEncoder;
+import java.time.LocalDateTime;
import java.util.*;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
/**
* <p>
@@ -86,9 +90,29 @@
TOrderInvoice orderInvoice = orderInvoiceService.getById(dto.getId());
orderInvoice.setInvoiceUrl(dto.getInvoiceUrl());
orderInvoice.setStatus(3);
+ orderInvoice.setBillingTime(LocalDateTime.now());
+ Long userId = SecurityUtils.getUserId();
+ orderInvoice.setBillingUserId(userId == null ? null : userId.intValue());
orderInvoiceService.updateById(orderInvoice);
dto.setMailBox(orderInvoice.getMailbox());
appUserClient.uploadPdf(dto);
+ return AjaxResult.success();
+ }
+
+ @RequiresPermissions(value = {"/invoiceManagement/accept_hear_case"}, logical = Logical.OR)
+ @PostMapping("/cancel")
+ @ApiOperation(value = "取消开票申请", tags = {"管理后台-发票管理"})
+ public AjaxResult<String> cancel(@RequestBody TOrderInvoice dto){
+ TOrderInvoice orderInvoice = orderInvoiceService.getById(dto.getId());
+ if (orderInvoice == null) {
+ return AjaxResult.error("开票申请不存在");
+ }
+ if (Integer.valueOf(3).equals(orderInvoice.getStatus())) {
+ return AjaxResult.error("已完成开票不能取消");
+ }
+ orderInvoice.setStatus(4);
+ orderInvoice.setCancelTime(LocalDateTime.now());
+ orderInvoiceService.updateById(orderInvoice);
return AjaxResult.success();
}
@@ -114,6 +138,9 @@
for (TOrderInvoiceVO orderInvoiceVO : list) {
OrderInvoiceExport orderInvoiceExport = new OrderInvoiceExport();
BeanUtils.copyProperties(orderInvoiceVO,orderInvoiceExport);
+ if (orderInvoiceVO.getCreateTime()!=null){
+ orderInvoiceExport.setApplyTime(DateUtils.localDateTimeToString(orderInvoiceVO.getCreateTime()));
+ }
if (orderInvoiceVO.getBillingTime()!=null){
orderInvoiceExport.setBillingTime(DateUtils.localDateTimeToString(orderInvoiceVO.getBillingTime()));
}
@@ -142,6 +169,71 @@
}
}
}
+
+ /**
+ * 下载开票申请,单个返回 Excel,多个返回 zip。
+ */
+ @RequiresPermissions(value = {"/invoiceManagement/export"}, logical = Logical.OR)
+ @ApiOperation(value = "下载开票申请", tags = {"管理后台-发票管理"})
+ @Log(title = "下载开票申请", businessType = BusinessType.EXPORT)
+ @PutMapping("/downloadApplication")
+ public void downloadApplication(@RequestBody TOrderInvoiceQuery query) {
+ List<TOrderInvoiceVO> list = orderInvoiceService.export(query);
+ HttpServletResponse response = WebUtils.response();
+ try {
+ if (list.size() == 1) {
+ writeInvoiceWorkbook(response, list.get(0), buildInvoiceFileName(list.get(0)));
+ return;
+ }
+ response.setCharacterEncoding("utf-8");
+ response.setContentType("application/zip");
+ response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("开票申请.zip", "utf-8"));
+ try (ZipOutputStream zipOutputStream = new ZipOutputStream(response.getOutputStream())) {
+ for (TOrderInvoiceVO invoice : list) {
+ Workbook workbook = buildInvoiceWorkbook(invoice);
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ workbook.write(outputStream);
+ workbook.close();
+ zipOutputStream.putNextEntry(new ZipEntry(buildInvoiceFileName(invoice)));
+ zipOutputStream.write(outputStream.toByteArray());
+ zipOutputStream.closeEntry();
+ }
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void writeInvoiceWorkbook(HttpServletResponse response, TOrderInvoiceVO invoice, String fileName) throws IOException {
+ response.setContentType("application/vnd.ms-excel;charset=UTF-8");
+ response.setCharacterEncoding("utf-8");
+ response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
+ response.setHeader("Pragma", "no-cache");
+ response.setHeader("Cache-Control", "no-cache");
+ Workbook workbook = buildInvoiceWorkbook(invoice);
+ try (ServletOutputStream outputStream = response.getOutputStream()) {
+ workbook.write(outputStream);
+ }
+ workbook.close();
+ }
+
+ private Workbook buildInvoiceWorkbook(TOrderInvoiceVO invoice) {
+ OrderInvoiceExport export = new OrderInvoiceExport();
+ BeanUtils.copyProperties(invoice, export);
+ if (invoice.getCreateTime() != null) {
+ export.setApplyTime(DateUtils.localDateTimeToString(invoice.getCreateTime()));
+ }
+ if (invoice.getBillingTime() != null) {
+ export.setBillingTime(DateUtils.localDateTimeToString(invoice.getBillingTime()));
+ }
+ return ExcelExportUtil.exportExcel(new ExportParams(), OrderInvoiceExport.class, Collections.singletonList(export));
+ }
+
+ private String buildInvoiceFileName(TOrderInvoiceVO invoice) {
+ String title = invoice.getName() == null ? "开票申请" : invoice.getName();
+ String phone = invoice.getUserPhone() == null ? "" : invoice.getUserPhone();
+ return title + phone + ".xls";
+ }
@ResponseBody
@GetMapping("/getMyOrderInvoiceList")
--
Gitblit v1.7.1