From 63bcb5f79633ac359af16db738731d1d316ca611 Mon Sep 17 00:00:00 2001
From: chenrui <1187576398@qq.com>
Date: 星期三, 04 六月 2025 11:15:51 +0800
Subject: [PATCH] 销售台账/开票登记功能开发

---
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java  |    4 ++--
 src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java                          |    4 ++++
 src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java |    5 +++--
 src/main/resources/mapper/sales/SalesLedgerMapper.xml                          |    1 +
 src/main/java/com/ruoyi/sales/pojo/InvoiceRegistrationProduct.java             |    4 ++--
 src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java                     |   16 ++++++++++++----
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java         |    7 +++++--
 src/main/java/com/ruoyi/sales/pojo/SalesLedger.java                            |    4 ++++
 8 files changed, 33 insertions(+), 12 deletions(-)

diff --git a/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java b/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
index 1e79daa..e873834 100644
--- a/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
+++ b/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
@@ -3,8 +3,10 @@
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.sales.pojo.CommonFile;
 import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.time.LocalDate;
 import java.util.Date;
 import java.util.List;
 
@@ -28,4 +30,6 @@
     private List<CommonFile> SalesLedgerFiles;
 
     private Integer Type;
+    @ApiModelProperty(value = "绛捐鏃ユ湡")
+    private LocalDate executionDate;
 }
diff --git a/src/main/java/com/ruoyi/sales/pojo/InvoiceRegistrationProduct.java b/src/main/java/com/ruoyi/sales/pojo/InvoiceRegistrationProduct.java
index 3e683d8..ecfb880 100644
--- a/src/main/java/com/ruoyi/sales/pojo/InvoiceRegistrationProduct.java
+++ b/src/main/java/com/ruoyi/sales/pojo/InvoiceRegistrationProduct.java
@@ -54,10 +54,10 @@
     private String invoiceType;
 
     @ApiModelProperty(value = "寮�绁ㄦ暟")
-    private Integer invoiceNum;
+    private BigDecimal invoiceNum;
 
     @ApiModelProperty(value = "鏈紑绁ㄦ暟")
-    private Integer noInvoiceNum;
+    private BigDecimal noInvoiceNum;
 
     @ApiModelProperty(value = "寮�绁ㄩ噾棰�")
     private BigDecimal invoiceAmount;
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
index 472c53b..8378012 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
@@ -1,6 +1,7 @@
 package com.ruoyi.sales.pojo;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.Date;
 
 import com.baomidou.mybatisplus.annotation.*;
@@ -102,5 +103,8 @@
     @TableField(exist = false)
     @ApiModelProperty(value = "鏈紑绁ㄩ噾棰�(鍏�)")
     private BigDecimal noInvoiceAmountTotal;
+
+    @ApiModelProperty(value = "绛捐鏃ユ湡")
+    private LocalDate executionDate;
 }
 
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
index 4c11359..3949cd7 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -113,10 +113,10 @@
     private BigDecimal futureTicketsAmount;
 
     @ApiModelProperty(value = "寮�绁ㄦ暟")
-    private Integer invoiceNum;
+    private BigDecimal invoiceNum;
 
     @ApiModelProperty(value = "鏈紑绁ㄦ暟")
-    private Integer noInvoiceNum;
+    private BigDecimal noInvoiceNum;
 
     @ApiModelProperty(value = "寮�绁ㄩ噾棰�")
     private BigDecimal invoiceAmount;
@@ -126,7 +126,7 @@
 
     @ApiModelProperty(value = "鏈寮�绁ㄦ暟")
     @TableField(exist = false)
-    private Integer currentInvoiceNum;
+    private BigDecimal currentInvoiceNum;
 
     @TableField(exist = false)
     @ApiModelProperty(value = "鏈寮�绁ㄩ噾棰�")
@@ -144,5 +144,13 @@
 
     @ApiModelProperty(value = "鍒濆鏈紑绁ㄦ暟")
     @TableField(exist = false)
-    private Integer originalNoInvoiceNum;
+    private BigDecimal originalNoInvoiceNum;
+
+    @ApiModelProperty(value = "涓存椂鏈紑绁ㄦ暟")
+    @TableField(exist = false)
+    private BigDecimal tempNoInvoiceNum;
+
+    @ApiModelProperty(value = "涓存椂鏈紑绁ㄩ噾棰�")
+    @TableField(exist = false)
+    private BigDecimal tempnoInvoiceAmount;
 }
diff --git a/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java
index 7f8bd60..a21870a 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java
@@ -25,6 +25,7 @@
 import org.springframework.util.ObjectUtils;
 
 import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -58,8 +59,8 @@
         if(CollectionUtils.isNotEmpty(productData)){
             for (SalesLedgerProduct productDatum : productData) {
                 // 濡傛灉寮�绁ㄦ暟涓�0 璺宠繃
-                Integer currentInvoiceNum = productDatum.getCurrentInvoiceNum();
-                if(null == currentInvoiceNum || currentInvoiceNum == 0){
+                BigDecimal currentInvoiceNum = productDatum.getCurrentInvoiceNum();
+                if(null != currentInvoiceNum && BigDecimal.ZERO.compareTo(currentInvoiceNum) == 0){
                     continue;
                 }
                 InvoiceRegistrationProduct invoiceRegistrationProduct = new InvoiceRegistrationProduct();
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
index 76c74ac..f2cac8e 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -63,11 +63,11 @@
             // 缁熻寮�绁ㄧ櫥璁颁骇鍝佺殑宸插紑绁ㄦ暟/宸插紑绁ㄩ噾棰�
             if(!CollectionUtils.isEmpty(invoiceRegistrationProductDtoList)){
                 for (SalesLedgerProduct ledgerProduct : salesLedgerProducts) {
-                    int invoiceNum = 0;
+                    BigDecimal invoiceNum = BigDecimal.ZERO;
                     BigDecimal invoiceAmount = BigDecimal.ZERO;
                     for (InvoiceRegistrationProductDto registrationProductDto : invoiceRegistrationProductDtoList) {
                         if(ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()){
-                            invoiceNum += registrationProductDto.getInvoiceNum();
+                            invoiceNum =  invoiceNum.add(registrationProductDto.getInvoiceNum());
                             invoiceAmount = invoiceAmount.add(registrationProductDto.getInvoiceAmount());
                         }
                     }
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 08189ff..0470a92 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -98,6 +98,9 @@
         List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper);
         for (SalesLedgerProduct product : products) {
             product.setOriginalNoInvoiceNum(product.getNoInvoiceNum());
+            // 鎻愪緵涓存椂鏈紑绁ㄦ暟锛屾湭寮�绁ㄩ噾棰濅緵鍓嶆璁$畻
+            product.setTempnoInvoiceAmount(product.getNoInvoiceAmount());
+            product.setTempNoInvoiceNum(product.getNoInvoiceNum());
         }
 
         // 3.鏌ヨ涓婁紶鏂囦欢
@@ -447,7 +450,7 @@
         if (!insertList.isEmpty()) {
             for (SalesLedgerProduct salesLedgerProduct : insertList) {
                 salesLedgerProduct.setType(type);
-                salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity().intValue());
+                salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity());
                 salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxInclusiveTotalPrice());
                 salesLedgerProductMapper.insert(salesLedgerProduct);
             }
@@ -493,7 +496,7 @@
             List<Integer> existingSequences = salesLedgerMapper.selectSequencesByDate(datePart);
             int nextSequence = findFirstMissingSequence(existingSequences);
 
-            return datePart + String.format("%02d", nextSequence);
+            return datePart + String.format("%03d", nextSequence);
         } finally {
             // 3. 閲婃斁閿侊紙浣跨敤Lua鑴氭湰淇濊瘉鍘熷瓙鎬э紝閬垮厤璇垹鍏朵粬绾跨▼鐨勯攣锛�
             String luaScript = "if redis.call('GET', KEYS[1]) == ARGV[1] then return redis.call('DEL', KEYS[1]) else return 0 end";
diff --git a/src/main/resources/mapper/sales/SalesLedgerMapper.xml b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
index bb39257..1ac7fa7 100644
--- a/src/main/resources/mapper/sales/SalesLedgerMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -28,6 +28,7 @@
             T1.attachment_materials,
             T1.tenant_id,
             T1.contract_amount,
+            T1.execution_date,
             T2.nick_name AS entry_person_name
         FROM
             sales_ledger T1

--
Gitblit v1.9.3