From d7c69d76e9c81464c698199b90ec4a339a18b257 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期五, 27 三月 2026 16:06:17 +0800
Subject: [PATCH] feat: 销售订单标签打印

---
 src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java    |    7 +++
 src/main/java/com/ruoyi/sales/dto/SalesLabelDto.java                   |   41 ++++++++++++++++++++
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java |   56 ++++++++++++++++++++++++++++
 src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java         |    1 
 4 files changed, 105 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
index c961cff..09d9c23 100644
--- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -388,4 +388,11 @@
         return AjaxResult.success(dto);
     }
 
+    @GetMapping("/salesLabel/{salesLedgerId}")
+    @ApiOperation("鎵撳嵃璁㈠崟鏍囩")
+    public AjaxResult salesLabel(@PathVariable Long salesLedgerId) {
+        List<SalesLabelDto> list = salesLedgerService.salesLabel(salesLedgerId);
+        return AjaxResult.success(list);
+    }
+
 }
diff --git a/src/main/java/com/ruoyi/sales/dto/SalesLabelDto.java b/src/main/java/com/ruoyi/sales/dto/SalesLabelDto.java
new file mode 100644
index 0000000..bfc92f2
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/dto/SalesLabelDto.java
@@ -0,0 +1,41 @@
+package com.ruoyi.sales.dto;
+
+/**
+ * <br>
+ *
+ * </br>
+ *
+ * @author deslrey
+ * @version 1.0
+ * @since 2026/03/27 15:55
+ */
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * <br>
+ * 閿�鍞爣绛綝to
+ * </br>
+ *
+ * @author deslrey
+ * @version 1.0
+ * @since 2026/03/27 15:55
+ */
+@Data
+public class SalesLabelDto {
+
+    @ApiModelProperty("瀹㈡埛鍚嶇О")
+    private String customerName;
+
+    @ApiModelProperty("閿�鍞鍗曠紪鍙�")
+    private String salesContractNo;
+
+    @ApiModelProperty("浜у搧鍚嶇О")
+    private String productName;
+
+    @ApiModelProperty("瑙勬牸(瀹�*楂�=鏁伴噺)")
+    private String specification;
+
+    @ApiModelProperty("妤煎眰缂栧彿/鍦板潃")
+    private String floorCode;
+}
diff --git a/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java b/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
index 23a675c..e8440af 100644
--- a/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
+++ b/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
@@ -65,4 +65,5 @@
 
     SalesInvoicesDto salesInvoices(List<Long> salesLedgerIds);
 
+    List<SalesLabelDto> salesLabel(Long salesLedgerId);
 }
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 025fe60..04f3a3a 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -1306,6 +1306,62 @@
         return dto;
     }
 
+    @Override
+    public List<SalesLabelDto> salesLabel(Long salesLedgerId) {
+        if (salesLedgerId == null) {
+            throw new ServiceException("鎵撳嵃鏍囩澶辫触,鏁版嵁涓嶈兘涓虹┖");
+        }
+        SalesLedger salesLedger = baseMapper.selectById(salesLedgerId);
+        if (salesLedger == null) {
+            throw new ServiceException("鎵撳嵃澶辫触,閿�鍞鍗曚笉瀛樺湪");
+        }
+
+        // 鏌ヨ浜у搧鍒楄〃
+        List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(
+                new LambdaQueryWrapper<SalesLedgerProduct>().eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerId));
+
+        // 鏌ヨ瀹㈡埛鍦板潃
+        String fullAddress = "";
+        if (salesLedger.getCustomerId() != null) {
+            Customer customer = customerMapper.selectById(salesLedger.getCustomerId());
+            if (customer != null) {
+                StringBuilder addressSb = new StringBuilder();
+                if (customer.getRegionsId() != null) {
+                    CustomerRegions regions = customerRegionsService.getById(customer.getRegionsId());
+                    if (regions != null) {
+                        addressSb.append(regions.getRegionsName());
+                    }
+                }
+                if (StringUtils.isNotEmpty(customer.getCompanyAddress())) {
+                    addressSb.append(customer.getCompanyAddress());
+                }
+                fullAddress = addressSb.toString();
+            }
+        }
+
+        List<SalesLabelDto> list = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(products)) {
+            for (SalesLedgerProduct p : products) {
+                SalesLabelDto dto = new SalesLabelDto();
+                dto.setCustomerName(salesLedger.getCustomerName());
+                dto.setSalesContractNo(salesLedger.getSalesContractNo());
+                dto.setProductName(p.getProductCategory());
+
+                // 瀹�*楂�=鏁伴噺
+                String specification = (p.getWidth() != null ? p.getWidth().stripTrailingZeros().toPlainString() : "0") + "*" +
+                        (p.getHeight() != null ? p.getHeight().stripTrailingZeros().toPlainString() : "0") + "=" +
+                        (p.getQuantity() != null ? p.getQuantity().stripTrailingZeros().toPlainString() : "0");
+                dto.setSpecification(specification);
+
+                // 瀹㈡埛鍦板潃 + 妤煎眰缂栧彿
+                dto.setFloorCode(fullAddress + (StringUtils.isNotEmpty(p.getFloorCode()) ? " " + p.getFloorCode() : ""));
+                list.add(dto);
+            }
+        }
+
+        return list;
+    }
+
     private int findFirstMissingSequence(List<Integer> sequences) {
         if (sequences.isEmpty()) {
             return 1;

--
Gitblit v1.9.3