From 7403a0bb5b6c69a830c326aa7bc4fa720d23477a Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期四, 23 四月 2026 11:21:03 +0800
Subject: [PATCH] 导出销售台账送货单
---
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 102 insertions(+), 5 deletions(-)
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
index c5699b6..53dfed7 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -244,6 +244,105 @@
throw new BaseException("鏈壘鍒板搴旈攢鍞彴璐︽暟鎹�");
}
+ // 鏍规嵁閿�鍞彴璐︽暟閲忓喅瀹氬鍑烘柟寮�
+ if (salesLedgerList.size() == 1) {
+ // 鍗曚釜閿�鍞彴璐︼紝鐩存帴瀵煎嚭xlsx鏂囦欢
+ exportSingleShippingNote(response, salesLedgerList.get(0));
+ } else {
+ // 澶氫釜閿�鍞彴璐︼紝鐢熸垚鍘嬬缉鍖�
+ exportBatchShippingNote(response, salesLedgerList);
+ }
+ }
+
+ /**
+ * 瀵煎嚭鍗曚釜閫佽揣鍗�
+ */
+ private void exportSingleShippingNote(HttpServletResponse response, SalesLedger ledger) {
+ try {
+ // 璁剧疆鍝嶅簲澶�
+ String fileName = String.format("閫佽揣鍗昣%s.xlsx",
+ Optional.ofNullable(ledger.getSalesContractNo()).orElse(String.valueOf(ledger.getId())));
+ response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+ response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
+ response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
+
+ // 鏌ヨ鏄庣粏
+ SalesLedgerProduct cond = new SalesLedgerProduct();
+ cond.setSalesLedgerId(ledger.getId());
+ List<SalesLedgerProduct> productList = salesLedgerProductServiceImpl.selectSalesLedgerProductList(cond);
+
+ // 鑷姩搴忓彿+鐗╂枡缂栫爜璧嬪��
+ for (int i = 0; i < productList.size(); i++) {
+ SalesLedgerProduct product = productList.get(i);
+ if (product != null) {
+ product.setSerialNumber(i + 1);
+ product.setOrderNo(ledger.getSalesContractNo());
+ Long productModelId = product.getProductModelId();
+ if (productModelId != null) {
+ ProductModel productModel = productModelMapper.selectById(productModelId);
+ if (productModel != null) {
+ product.setMaterialCode(productModel.getMaterialCode());
+ }
+ }
+ }
+ }
+
+ // 鍏宠仈瀹㈡埛淇℃伅
+ Customer customer = customerMapper.selectById(ledger.getCustomerId());
+
+ // 璁$畻鎬诲悎璁�
+ BigDecimal totalQuantity = BigDecimal.ZERO;
+ for (SalesLedgerProduct product : productList) {
+ totalQuantity = totalQuantity.add(product.getQuantity() == null ? BigDecimal.ZERO : product.getQuantity());
+ }
+
+ // 缁勮椤堕儴闈欐�佹暟鎹�
+ Map<String, Object> dataMap = new HashMap<>();
+ dataMap.put("customerName", ledger.getCustomerName());
+ dataMap.put("companyAddress", customer.getCompanyAddress());
+ dataMap.put("contactPerson", customer.getContactPerson());
+ dataMap.put("contactPhone", customer.getContactPhone());
+ dataMap.put("companyPhone", customer.getCompanyPhone());
+ dataMap.put("salesContractNo", ledger.getSalesContractNo());
+ dataMap.put("deliveryDate", formatDate(LocalDate.now()));
+ dataMap.put("totalQuantity", totalQuantity);
+
+ // 浣跨敤妯℃澘鐢熸垚Excel
+ InputStream templateIs = this.getClass().getResourceAsStream("/static/shipping-note.xlsx");
+ if (templateIs == null) {
+ throw new BaseException("妯℃澘鏂囦欢涓嶅瓨鍦�");
+ }
+
+ ExcelWriter writer = EasyExcel.write(response.getOutputStream()).withTemplate(templateIs).build();
+ WriteSheet sheet = EasyExcel.writerSheet().build();
+
+ // 鍏堝~鍏呮暟鎹紙鍖呮嫭鍚堣锛�
+ writer.fill(dataMap, sheet);
+
+ // 鍐嶅~鍏呬骇鍝佸垪琛�
+ if (!productList.isEmpty()) {
+ FillConfig fillConfig = FillConfig.builder()
+ .forceNewRow(Boolean.TRUE)
+ .build();
+ writer.fill(productList, fillConfig, sheet);
+ }
+
+ writer.finish();
+ templateIs.close();
+ } catch (BaseException e) {
+ log.error("瀵煎嚭澶辫触:{}", e.getMessage(), e);
+ throw e;
+ } catch (Exception e) {
+ log.error("瀵煎嚭寮傚父", e);
+ throw new BaseException("瀵煎嚭澶辫触锛�" + e.getMessage());
+ }
+ }
+
+ /**
+ * 鎵归噺瀵煎嚭閫佽揣鍗曚负鍘嬬缉鍖�
+ */
+ private void exportBatchShippingNote(HttpServletResponse response, List<SalesLedger> salesLedgerList) {
+ // 璁剧疆鍝嶅簲澶�
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment;filename=閫佽揣鍗�.zip");
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
@@ -292,6 +391,7 @@
dataMap.put("companyPhone", customer.getCompanyPhone());
dataMap.put("salesContractNo", ledger.getSalesContractNo());
dataMap.put("deliveryDate", formatDate(LocalDate.now()));
+ dataMap.put("totalQuantity", totalQuantity);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
InputStream templateIs = this.getClass().getResourceAsStream("/static/shipping-note.xlsx");
@@ -300,16 +400,13 @@
WriteSheet sheet = EasyExcel.writerSheet().build();
// 鍏堝~鍏呮暟鎹紙鍖呮嫭鍚堣锛�
- Map<String, Object> totalMap = new HashMap<>();
- totalMap.put("totalQuantity", totalQuantity);
- dataMap.putAll(totalMap);
writer.fill(dataMap, sheet);
// 鍐嶅~鍏呬骇鍝佸垪琛�
if (!productList.isEmpty()) {
FillConfig fillConfig = FillConfig.builder()
- .forceNewRow(Boolean.TRUE)
- .build();
+ .forceNewRow(Boolean.TRUE)
+ .build();
writer.fill(productList, fillConfig, sheet);
}
--
Gitblit v1.9.3