From 37b697351e8e0a9200eee1276c4081c07588dc10 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期二, 17 六月 2025 20:39:48 +0800
Subject: [PATCH] 未回款金额(元)为NaN修复

---
 src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml             |    7 +
 src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java                            |    2 
 src/main/resources/mapper/sales/SalesLedgerMapper.xml                            |    6 +
 src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java             |    2 
 src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationProductDto.java             |    6 +
 src/main/resources/mapper/purchase/ProductRecordMapper.xml                       |   11 ++
 src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java     |   24 ++++
 src/main/resources/mapper/sales/ReceiptPaymentMapper.xml                         |    6 +
 src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java                    |    6 +
 src/main/java/com/ruoyi/purchase/service/IProductRecordService.java              |    4 
 src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java              |    7 +
 src/main/java/com/ruoyi/purchase/controller/AccountingReportController.java      |   34 ++++++
 src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java        |    8 +
 src/main/java/com/ruoyi/purchase/mapper/InvoicePurchaseMapper.java               |    7 +
 src/main/java/com/ruoyi/basic/controller/SupplierManageController.java           |    6 +
 src/main/java/com/ruoyi/purchase/service/impl/ProductRecordServiceImpl.java      |    8 +
 src/main/java/com/ruoyi/purchase/dto/InvoicePurchaseReportDto.java               |   32 ++++++
 src/main/java/com/ruoyi/purchase/dto/PaymentRegistrationDto.java                 |    4 
 src/main/java/com/ruoyi/purchase/service/IInvoicePurchaseService.java            |    5 +
 src/main/java/com/ruoyi/purchase/service/impl/InvoicePurchaseServiceImpl.java    |    9 +
 src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java         |    5 
 src/main/java/com/ruoyi/purchase/mapper/ProductRecordMapper.java                 |    4 
 src/main/java/com/ruoyi/purchase/controller/TicketRegistrationController.java    |    9 +
 src/main/java/com/ruoyi/sales/dto/ReceiptPaymentDto.java                         |   11 ++
 src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java |   28 +++--
 src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java        |    6 +
 src/main/resources/mapper/purchase/InvoicePurchaseMapper.xml                     |   32 ++++++
 src/main/resources/mapper/purchase/PaymentRegistrationMapper.xml                 |    6 +
 28 files changed, 279 insertions(+), 16 deletions(-)

diff --git a/src/main/java/com/ruoyi/basic/controller/SupplierManageController.java b/src/main/java/com/ruoyi/basic/controller/SupplierManageController.java
index d934e46..b50f88f 100644
--- a/src/main/java/com/ruoyi/basic/controller/SupplierManageController.java
+++ b/src/main/java/com/ruoyi/basic/controller/SupplierManageController.java
@@ -95,7 +95,11 @@
     @PostMapping("/import")
     @Log(title = "渚涘簲鍟嗗鍏�", businessType = BusinessType.IMPORT)
     public AjaxResult importData(MultipartFile file) {
-        return AjaxResult.success(supplierService.importData(file));
+        Boolean b = supplierService.importData(file);
+        if (b) {
+            return AjaxResult.success("瀵煎叆鎴愬姛");
+        }
+        return AjaxResult.error("瀵煎叆澶辫触");
     }
 
 
diff --git a/src/main/java/com/ruoyi/purchase/controller/AccountingReportController.java b/src/main/java/com/ruoyi/purchase/controller/AccountingReportController.java
new file mode 100644
index 0000000..50367c9
--- /dev/null
+++ b/src/main/java/com/ruoyi/purchase/controller/AccountingReportController.java
@@ -0,0 +1,34 @@
+package com.ruoyi.purchase.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.purchase.dto.InvoicePurchaseDto;
+import com.ruoyi.purchase.dto.InvoicePurchaseReportDto;
+import com.ruoyi.purchase.pojo.InvoicePurchase;
+import com.ruoyi.purchase.service.IInvoicePurchaseService;
+import io.swagger.annotations.Api;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@Api(tags = "閲囪喘鎶ヨ〃")
+@RequestMapping("/purchase/report")
+@AllArgsConstructor
+public class AccountingReportController {
+
+    @Autowired
+    private IInvoicePurchaseService invoicePurchaseService;
+
+    @GetMapping("/list")
+    @Log(title = "閲囪喘鎶ヨ〃", businessType = BusinessType.OTHER)
+    public AjaxResult list(Page page, InvoicePurchaseReportDto invoicePurchaseReportDto) {
+        IPage<InvoicePurchaseReportDto> result =invoicePurchaseService.listPurchaseReport(page, invoicePurchaseReportDto);
+        return AjaxResult.success(result);
+    }
+}
diff --git a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
index eb917ec..8f991e3 100644
--- a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
+++ b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
@@ -12,6 +12,7 @@
 import com.ruoyi.purchase.pojo.PurchaseLedger;
 import com.ruoyi.purchase.service.IPurchaseLedgerService;
 import com.ruoyi.sales.service.ISalesLedgerService;
+import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
@@ -136,4 +137,11 @@
     public IPage<PurchaseLedger> listPage(Page page, PurchaseLedger purchaseLedger) {
          return purchaseLedgerService.selectPurchaseLedgerListPage(page ,purchaseLedger);
     }
+
+    @ApiOperation("鐢熸垚閲囪喘搴忓垪鍙�")
+    @GetMapping("/createPurchaseNo")
+    @Log(title = "鐢熸垚閲囪喘搴忓垪鍙�", businessType = BusinessType.OTHER)
+    public String createPurchaseNo() {
+        return purchaseLedgerService.getPurchaseNo();
+    }
 }
diff --git a/src/main/java/com/ruoyi/purchase/controller/TicketRegistrationController.java b/src/main/java/com/ruoyi/purchase/controller/TicketRegistrationController.java
index 93cb18a..7580833 100644
--- a/src/main/java/com/ruoyi/purchase/controller/TicketRegistrationController.java
+++ b/src/main/java/com/ruoyi/purchase/controller/TicketRegistrationController.java
@@ -105,6 +105,15 @@
     }
 
     /**
+     * 鍒嗛〉鏌ヨ浜у搧淇℃伅寮�绁ㄨ褰曞垪琛�
+     */
+    @GetMapping("/productRecordPage")
+    public AjaxResult productRecordPage(Page page, TicketRegistrationDto ticketRegistrationDto) {
+        IPage<ProductRecord> list = productRecordService.productRecordPage(page,ticketRegistrationDto);
+        return AjaxResult.success(list);
+    }
+
+    /**
      * 鏌ヨ鍙戠エ鍙�
      */
     @GetMapping("/getTicketNo")
diff --git a/src/main/java/com/ruoyi/purchase/dto/InvoicePurchaseReportDto.java b/src/main/java/com/ruoyi/purchase/dto/InvoicePurchaseReportDto.java
new file mode 100644
index 0000000..f9b8657
--- /dev/null
+++ b/src/main/java/com/ruoyi/purchase/dto/InvoicePurchaseReportDto.java
@@ -0,0 +1,32 @@
+package com.ruoyi.purchase.dto;
+
+import lombok.Data;
+
+/**
+ * 鎶ヨ〃鍒嗘瀽---椤圭洰鍒╂鼎
+ */
+@Data
+public class InvoicePurchaseReportDto {
+
+    //閿�鍞悎鍚屽彿
+    private String customerContractNo;
+//    瀹㈡埛鍚嶇О
+    private String customerName;
+//    椤圭洰鍚嶇О
+    private String projectName;
+//    鍚堝悓閲戦
+    private String contractAmount;
+//    閲囪喘閲戦
+    private String purchaseAmount;
+
+    private String saleTaxExclusiveTotalPrice;
+
+    private String taxExclusiveTotalPrice;
+//    鍒╂鼎
+    private String balance;
+    //    鍒╂鼎鐜�
+    private String balanceRatio;
+    //    澧炲�肩◣
+    private String balanceAmount;
+
+}
diff --git a/src/main/java/com/ruoyi/purchase/dto/PaymentRegistrationDto.java b/src/main/java/com/ruoyi/purchase/dto/PaymentRegistrationDto.java
index b34494d..0ba914a 100644
--- a/src/main/java/com/ruoyi/purchase/dto/PaymentRegistrationDto.java
+++ b/src/main/java/com/ruoyi/purchase/dto/PaymentRegistrationDto.java
@@ -39,4 +39,8 @@
 
     // 宸蹭粯娆炬�婚噾棰�
     private BigDecimal paymentAmountTotal;
+
+    private String paymentDateStart;
+
+    private String paymentDateEnd;
 }
diff --git a/src/main/java/com/ruoyi/purchase/mapper/InvoicePurchaseMapper.java b/src/main/java/com/ruoyi/purchase/mapper/InvoicePurchaseMapper.java
index 39f245a..36ed16f 100644
--- a/src/main/java/com/ruoyi/purchase/mapper/InvoicePurchaseMapper.java
+++ b/src/main/java/com/ruoyi/purchase/mapper/InvoicePurchaseMapper.java
@@ -2,7 +2,10 @@
 
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ruoyi.purchase.dto.InvoicePurchaseReportDto;
 import com.ruoyi.purchase.pojo.InvoicePurchase;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 鍙戠エ淇℃伅Mapper鎺ュ彛
@@ -11,4 +14,8 @@
  * @date 2025-05-14
  */
 public interface InvoicePurchaseMapper extends BaseMapper<InvoicePurchase> {
+
+
+    IPage<InvoicePurchaseReportDto> selectPurchaseReport(IPage page, @Param("c") InvoicePurchaseReportDto invoicePurchaseReportDto);
+
 }
diff --git a/src/main/java/com/ruoyi/purchase/mapper/ProductRecordMapper.java b/src/main/java/com/ruoyi/purchase/mapper/ProductRecordMapper.java
index d4570fb..0f81a0e 100644
--- a/src/main/java/com/ruoyi/purchase/mapper/ProductRecordMapper.java
+++ b/src/main/java/com/ruoyi/purchase/mapper/ProductRecordMapper.java
@@ -1,6 +1,9 @@
 package com.ruoyi.purchase.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.purchase.dto.TicketRegistrationDto;
 import com.ruoyi.purchase.pojo.ProductRecord;
 
 /**
@@ -11,4 +14,5 @@
  */
 public interface ProductRecordMapper extends BaseMapper<ProductRecord> {
 
+    IPage<ProductRecord> productRecordPage(Page page, TicketRegistrationDto ticketRegistrationDto);
 }
diff --git a/src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java b/src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java
index d4b49c2..d742bc8 100644
--- a/src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java
+++ b/src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java
@@ -140,4 +140,10 @@
     @ApiModelProperty(value = "鏈粯娆炬�婚噾棰�")
     @TableField(exist = false)
     private BigDecimal unPaymentAmountTotal;
+
+    @TableField(exist = false)
+    private Boolean status;
+
+    private String issueDateStart;
+    private String issueDateEnd;
 }
diff --git a/src/main/java/com/ruoyi/purchase/service/IInvoicePurchaseService.java b/src/main/java/com/ruoyi/purchase/service/IInvoicePurchaseService.java
index fe664f8..41e8198 100644
--- a/src/main/java/com/ruoyi/purchase/service/IInvoicePurchaseService.java
+++ b/src/main/java/com/ruoyi/purchase/service/IInvoicePurchaseService.java
@@ -1,8 +1,11 @@
 package com.ruoyi.purchase.service;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.purchase.dto.InvoicePurchaseDto;
+import com.ruoyi.purchase.dto.InvoicePurchaseReportDto;
 import com.ruoyi.purchase.pojo.InvoicePurchase;
 
 import java.io.IOException;
@@ -24,4 +27,6 @@
     InvoicePurchaseDto getInvoiceById(InvoicePurchaseDto invoicePurchaseDto);
 
     List<InvoicePurchase> selectInvoicePurchaseLists(InvoicePurchase invoicePurchase);
+
+    IPage<InvoicePurchaseReportDto> listPurchaseReport(Page page, InvoicePurchaseReportDto invoicePurchaseReportDto);
 }
diff --git a/src/main/java/com/ruoyi/purchase/service/IProductRecordService.java b/src/main/java/com/ruoyi/purchase/service/IProductRecordService.java
index 0eee184..17805a2 100644
--- a/src/main/java/com/ruoyi/purchase/service/IProductRecordService.java
+++ b/src/main/java/com/ruoyi/purchase/service/IProductRecordService.java
@@ -1,5 +1,7 @@
 package com.ruoyi.purchase.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.purchase.dto.TicketRegistrationDto;
 import com.ruoyi.purchase.pojo.ProductRecord;
@@ -15,4 +17,6 @@
 public interface IProductRecordService extends IService<ProductRecord> {
 
     List<ProductRecord> selectProductRecordList(TicketRegistrationDto ticketRegistrationDto);
+
+    IPage<ProductRecord> productRecordPage(Page page, TicketRegistrationDto ticketRegistrationDto);
 }
diff --git a/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java b/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
index e1978f1..2190972 100644
--- a/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
+++ b/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
@@ -37,4 +37,6 @@
     IPage<PurchaseLedger> selectPurchaseLedgerListPage(IPage ipage, PurchaseLedger purchaseLedger);
 
     List<InvoiceRegistrationProduct> getProductBySalesNo(Long id);
+
+    String getPurchaseNo();
 }
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/InvoicePurchaseServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/InvoicePurchaseServiceImpl.java
index ee93b39..1c8f326 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/InvoicePurchaseServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/InvoicePurchaseServiceImpl.java
@@ -2,13 +2,16 @@
 
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.other.mapper.TempFileMapper;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysUserMapper;
 import com.ruoyi.purchase.dto.InvoicePurchaseDto;
+import com.ruoyi.purchase.dto.InvoicePurchaseReportDto;
 import com.ruoyi.purchase.mapper.InvoicePurchaseMapper;
 import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
 import com.ruoyi.purchase.pojo.InvoicePurchase;
@@ -158,4 +161,10 @@
     public List<InvoicePurchase> selectInvoicePurchaseLists(InvoicePurchase invoicePurchase) {
         return invoicePurchaseMapper.selectList(new LambdaQueryWrapper<>());
     }
+
+    @Override
+    public IPage<InvoicePurchaseReportDto> listPurchaseReport(Page page, InvoicePurchaseReportDto invoicePurchaseReportDto) {
+
+        return invoicePurchaseMapper.selectPurchaseReport(page, invoicePurchaseReportDto);
+    }
 }
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/ProductRecordServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/ProductRecordServiceImpl.java
index 96f2ff0..b3959b9 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/ProductRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/ProductRecordServiceImpl.java
@@ -1,6 +1,8 @@
 package com.ruoyi.purchase.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.purchase.dto.TicketRegistrationDto;
 import com.ruoyi.purchase.mapper.ProductRecordMapper;
@@ -36,4 +38,10 @@
                 .eq(ProductRecord::getType, "2"));
     }
 
+    @Override
+    public IPage<ProductRecord> productRecordPage(Page page, TicketRegistrationDto ticketRegistrationDto) {
+
+        return productRecordMapper.productRecordPage(page, ticketRegistrationDto);
+    }
+
 }
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
index ac9691b..ffe7f4f 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -38,6 +38,7 @@
 import org.apache.commons.io.FilenameUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;
@@ -50,6 +51,7 @@
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -85,6 +87,8 @@
     private final ProductRecordMapper productRecordMapper;
 
     private final InvoiceRegistrationProductMapper invoiceRegistrationProductMapper;
+
+    private final StringRedisTemplate redisTemplate;
 
     @Value("${file.upload-dir}")
     private String uploadDir;
@@ -440,6 +444,26 @@
         return invoiceRegistrationProducts;
     }
 
+    @Override
+    public String getPurchaseNo() {
+        // 鐢熸垚鏃ユ湡鍓嶇紑锛堜緥濡傦細CG20250405锛�
+        String purchaseNo = "CG" + LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+
+        // 鏋勫缓 Redis Key锛堟寜澶╁垎闅旓級
+        String redisKey = "purchase_no:" + LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE);
+
+        // 鑾峰彇褰撳墠搴忓彿骞堕�掑锛堝師瀛愭搷浣滐級
+        Long sequence = redisTemplate.opsForValue().increment(redisKey);
+
+        // 璁剧疆杩囨湡鏃堕棿锛堟鏃ュけ鏁堬紝闃叉鍐椾綑鏁版嵁锛�
+        if (sequence == 1) {
+            redisTemplate.expire(redisKey, 1, TimeUnit.DAYS);
+        }
+
+        // 杩斿洖瀹屾暣缂栧彿锛堝 CG202504050001锛�
+        return purchaseNo + String.format("%03d", sequence);
+    }
+
     /**
      * 涓嬪垝绾垮懡鍚嶈浆椹煎嘲鍛藉悕
      */
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
index a1272c3..d154370 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.exception.base.BaseException;
@@ -88,13 +89,13 @@
         }
         List<TicketRegistration> ticketRegistrationList = ticketRegistrationMapper.selectList(queryWrapper);
         // 璁$畻宸蹭粯娆鹃噾棰�
-        if(CollectionUtils.isNotEmpty(ticketRegistrationList)){
+        if (CollectionUtils.isNotEmpty(ticketRegistrationList)) {
             List<Long> ids = ticketRegistrationList.stream().map(TicketRegistration::getId).collect(Collectors.toList());
             List<PaymentRegistrationDto> paymentRegistrationDtoList = paymentRegistrationMapper.countPaymentTotalByTicketRegId(ids);
             for (TicketRegistration registration : ticketRegistrationList) {
                 BigDecimal paymentAmountTotal = BigDecimal.ZERO;
                 for (PaymentRegistrationDto paymentRegistrationDto : paymentRegistrationDtoList) {
-                    if(registration.getId().equals(paymentRegistrationDto.getTicketRegistrationId())){
+                    if (registration.getId().equals(paymentRegistrationDto.getTicketRegistrationId())) {
                         paymentAmountTotal = paymentRegistrationDto.getPaymentAmountTotal();
                         break;
                     }
@@ -138,13 +139,13 @@
 
         // 6. 澧炲姞閲囪喘鍙拌处浜у搧寮�绁ㄨ褰�
         List<SalesLedgerProduct> salesLedgerProducts = ticketRegistrationDto.getProductData();
-        if (CollectionUtils.isNotEmpty(salesLedgerProducts)){
+        if (CollectionUtils.isNotEmpty(salesLedgerProducts)) {
             for (SalesLedgerProduct salesLedgerProduct : salesLedgerProducts) {
                 ProductRecord productRecord = new ProductRecord();
                 productRecord.setTicketRegistrationId(ticketRegistration.getId());
                 productRecord.setPurchaseLedgerId(ticketRegistrationDto.getPurchaseLedgerId());
                 productRecord.setCreatedAt(DateUtils.getNowDate());
-                BeanUtils.copyProperties(salesLedgerProduct,productRecord);
+                BeanUtils.copyProperties(salesLedgerProduct, productRecord);
                 productRecord.setId(null);
                 productRecord.setType("2");
                 productRecordMapper.insert(productRecord);
@@ -257,8 +258,8 @@
     @Override
     public List getTicketNo(TicketRegistrationDto ticketRegistrationDto) {
         LambdaQueryWrapper<TicketRegistration> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.select(TicketRegistration::getId,TicketRegistration::getInvoiceNumber,TicketRegistration::getInvoiceAmount)
-                .eq(TicketRegistration::getPurchaseLedgerId,ticketRegistrationDto.getId());
+        queryWrapper.select(TicketRegistration::getId, TicketRegistration::getInvoiceNumber, TicketRegistration::getInvoiceAmount)
+                .eq(TicketRegistration::getPurchaseLedgerId, ticketRegistrationDto.getId());
         List<Map<String, Object>> result = ticketRegistrationMapper.selectMaps(queryWrapper);
         // 灏嗕笅鍒掔嚎鍛藉悕杞崲涓洪┘宄板懡鍚�
         return result.stream().map(map -> map.entrySet().stream()
@@ -273,18 +274,20 @@
         LambdaQueryWrapper<TicketRegistration> queryWrapper = new LambdaQueryWrapper<>();
         if (StringUtils.isNotBlank(ticketRegistration.getPurchaseContractNumber())) {
             queryWrapper.like(TicketRegistration::getPurchaseContractNumber, ticketRegistration.getPurchaseContractNumber())
-                    .like(TicketRegistration::getSupplierName, ticketRegistration.getSupplierName())
-                    .eq(TicketRegistration::getIssueDate, ticketRegistration.getIssueDate());
+                    .like(TicketRegistration::getSupplierName, ticketRegistration.getSupplierName());
+        }
+        if (ObjectUtils.isEmpty(ticketRegistration.getIssueDateStart())&&ObjectUtils.isEmpty(ticketRegistration.getIssueDateEnd())) {
+            queryWrapper.between(TicketRegistration::getIssueDate,LocalDate.parse(ticketRegistration.getIssueDateStart(), DateTimeFormatter.ofPattern("yyyy-MM-dd")), LocalDate.parse(ticketRegistration.getIssueDateEnd(), DateTimeFormatter.ofPattern("yyyy-MM-dd")));
         }
         IPage<TicketRegistration> ticketRegistrationIPage = ticketRegistrationMapper.selectPage(page, queryWrapper);
         // 璁$畻宸蹭粯娆鹃噾棰�
-        if(CollectionUtils.isNotEmpty(ticketRegistrationIPage.getRecords())){
+        if (CollectionUtils.isNotEmpty(ticketRegistrationIPage.getRecords())) {
             List<Long> ids = ticketRegistrationIPage.getRecords().stream().map(TicketRegistration::getId).collect(Collectors.toList());
             List<PaymentRegistrationDto> paymentRegistrationDtoList = paymentRegistrationMapper.countPaymentTotalByTicketRegId(ids);
             for (TicketRegistration registration : ticketRegistrationIPage.getRecords()) {
                 BigDecimal paymentAmountTotal = BigDecimal.ZERO;
                 for (PaymentRegistrationDto paymentRegistrationDto : paymentRegistrationDtoList) {
-                    if(registration.getId().equals(paymentRegistrationDto.getTicketRegistrationId())){
+                    if (registration.getId().equals(paymentRegistrationDto.getTicketRegistrationId())) {
                         paymentAmountTotal = paymentRegistrationDto.getPaymentAmountTotal();
                         break;
                     }
@@ -295,7 +298,12 @@
                 registration.setUnPaymentAmountTotal(subtractAmount);
             }
         }
+        if (!ObjectUtils.isEmpty(ticketRegistration.getStatus())) {
 
+            if (ticketRegistration.getStatus()) {
+                ticketRegistrationIPage.getRecords().removeIf(receiptPaymentDto1 -> new BigDecimal("0.00").equals(receiptPaymentDto1.getUnPaymentAmountTotal()));
+            }
+        }
         return ticketRegistrationIPage;
     }
 
diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
index 79bde14..b5296d9 100644
--- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -1,6 +1,7 @@
 package com.ruoyi.sales.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
@@ -22,6 +23,7 @@
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -196,6 +198,11 @@
             }
             salesLedger.setInvoiceTotal(invoiceTotal);
         }
+        if (ObjectUtils.isNotEmpty(salesLedgerDto.getStatus())) {
+            if (salesLedgerDto.getStatus()==1) {
+                iPage.getRecords().removeIf(salesLedger -> !Objects.equals(salesLedger.getNoInvoiceAmountTotal(), new BigDecimal("0.00")));
+            }
+        }
         return iPage;
     }
 }
diff --git a/src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationProductDto.java b/src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationProductDto.java
index 6edc5f0..8f3c175 100644
--- a/src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationProductDto.java
+++ b/src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationProductDto.java
@@ -1,5 +1,6 @@
 package com.ruoyi.sales.dto;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.vo.FileVo;
 import com.ruoyi.sales.pojo.InvoiceRegistrationProduct;
@@ -40,6 +41,11 @@
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     private LocalDate invoiceDate;
 
+    @TableField(exist = false)
+    private String invoiceDateStart;
+    @TableField(exist = false)
+    private String invoiceDateEnd;
+
     @ApiModelProperty(value = "寮�绁ㄥ彴璐d")
     private Integer invoiceLedgerId;
 
diff --git a/src/main/java/com/ruoyi/sales/dto/ReceiptPaymentDto.java b/src/main/java/com/ruoyi/sales/dto/ReceiptPaymentDto.java
index f46e99d..eb16ede 100644
--- a/src/main/java/com/ruoyi/sales/dto/ReceiptPaymentDto.java
+++ b/src/main/java/com/ruoyi/sales/dto/ReceiptPaymentDto.java
@@ -1,10 +1,12 @@
 package com.ruoyi.sales.dto;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.ruoyi.sales.pojo.ReceiptPayment;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 
 @Data
 public class ReceiptPaymentDto extends ReceiptPayment {
@@ -45,4 +47,13 @@
     @ApiModelProperty(value = "寰呭洖娆鹃噾棰�")
     private BigDecimal noReceiptAmount;
 
+    @TableField(exist = false)
+    private Boolean status;
+
+    @TableField(exist = false)
+    private String receiptPaymentDateStart;
+    @TableField(exist = false)
+    private String receiptPaymentDateEnd;
+
+
 }
diff --git a/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java b/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
index e873834..3f57720 100644
--- a/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
+++ b/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
@@ -32,4 +32,6 @@
     private Integer Type;
     @ApiModelProperty(value = "绛捐鏃ユ湡")
     private LocalDate executionDate;
+
+    private Integer status;
 }
diff --git a/src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java
index a67ec3a..125ed83 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java
@@ -384,6 +384,7 @@
         queryWrapper.eq("sales_ledger_product_id", invoiceRegistrationProduct.getSalesLedgerProductId());
         queryWrapper.orderByAsc("create_time");
         List<InvoiceRegistrationProduct> invoiceRegistrationProductList = invoiceRegistrationProductMapper.selectList(queryWrapper);
+//        InvoiceRegistrationProduct invoiceRegistrationProduct = invoiceRegistrationProductMapper.selectById(invoiceRegistrationProductId);
         int index =  -1;
         for (int i = 0; i < invoiceRegistrationProductList.size(); i++) {
             InvoiceRegistrationProduct currentInvoiceRegProduct = invoiceRegistrationProductList.get(i);
@@ -415,8 +416,8 @@
             salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity());
             salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxInclusiveTotalPrice());
         }else {
-            salesLedgerProduct.setNoInvoiceNum(newInvoiceRegistrationProductList.get(newInvoiceRegistrationProductList.size()-1).getNoInvoiceNum());
-            salesLedgerProduct.setNoInvoiceAmount(newInvoiceRegistrationProductList.get(newInvoiceRegistrationProductList.size()-1).getNoInvoiceAmount());
+            salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getNoInvoiceNum().add(invoiceRegistrationProduct.getInvoiceNum()));
+            salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getNoInvoiceAmount().add(invoiceRegistrationProduct.getInvoiceAmount()));
         }
         salesLedgerProductMapper.updateById(salesLedgerProduct);
     }
diff --git a/src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java
index c2b0619..e6f459a 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java
@@ -134,7 +134,11 @@
      */
     @Override
     public IPage<ReceiptPaymentDto> bindInvoiceNoRegPage(Page page, ReceiptPaymentDto receiptPaymentDto) {
-        return receiptPaymentMapper.bindInvoiceNoRegPage(page, receiptPaymentDto);
+        IPage<ReceiptPaymentDto> receiptPaymentDtoIPage = receiptPaymentMapper.bindInvoiceNoRegPage(page, receiptPaymentDto);
+        if (receiptPaymentDto.getStatus()) {
+            receiptPaymentDtoIPage.getRecords().removeIf(receiptPaymentDto1 -> new BigDecimal("0.00").equals(receiptPaymentDto1.getNoReceiptAmount()));
+        }
+        return receiptPaymentDtoIPage;
     }
 
     /**
diff --git a/src/main/resources/mapper/purchase/InvoicePurchaseMapper.xml b/src/main/resources/mapper/purchase/InvoicePurchaseMapper.xml
new file mode 100644
index 0000000..9a04b88
--- /dev/null
+++ b/src/main/resources/mapper/purchase/InvoicePurchaseMapper.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.purchase.mapper.InvoicePurchaseMapper">
+
+
+    <select id="selectPurchaseReport" resultType="com.ruoyi.purchase.dto.InvoicePurchaseReportDto">
+        select sl.customer_contract_no,
+               sl.customer_name,
+               sl.project_name,
+               sl.contract_amount,
+               pl.contract_amount as purchase_amount,
+               sum(slp.tax_exclusive_total_price) as sale_tax_exclusive_total_price,
+               sum(pr.tax_exclusive_total_price) as tax_exclusive_total_price,
+               (sl.contract_amount-pl.contract_amount) as balance,
+        CONCAT(FORMAT((sl.contract_amount - pl.contract_amount) / sl.contract_amount * 100, 2), '%') AS balance_ratio,
+               sl.contract_amount-sum(slp.tax_exclusive_total_price)-(pl.contract_amount-sum(pr.tax_exclusive_total_price)) as balance_amount
+        from purchase_ledger pl
+                 left join sales_ledger sl on pl.sales_ledger_id = sl.id
+                 left join product_record pr on pr.purchase_ledger_id = pl.id
+                 left join sales_ledger_product slp on slp.sales_ledger_id = sl.id
+
+        group by sl.customer_contract_no, sl.customer_name, sl.project_name, sl.contract_amount, pl.contract_amount
+        having sl.customer_contract_no is not null
+        <where>
+            <if test="c.customerName != null and c.customerName != ''">
+                and sl.customer_name like concat('%',#{c.customerName},'%')
+            </if>
+        </where>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/purchase/PaymentRegistrationMapper.xml b/src/main/resources/mapper/purchase/PaymentRegistrationMapper.xml
index 61bbdfc..88c8a85 100644
--- a/src/main/resources/mapper/purchase/PaymentRegistrationMapper.xml
+++ b/src/main/resources/mapper/purchase/PaymentRegistrationMapper.xml
@@ -167,6 +167,12 @@
             <if test="params.searchText != null and params.searchText != '' ">
                 AND T2.supplier_name LIKE CONCAT('%',#{params.searchText},'%')
             </if>
+            <if test="params.paymentDateStart != null and params.paymentDateStart !='' ">
+                AND T1.payment_date &gt;= STR_TO_DATE(#{params.paymentDateStart},'yyyy-MM-dd')
+            </if>
+            <if test="params.paymentDateEnd != null and params.paymentDateEnd !='' ">
+                AND T1.payment_date &gt;= STR_TO_DATE(#{params.paymentDateEnd},'yyyy-MM-dd')
+            </if>
         </where>
         ORDER BY T1.payment_date,T1.create_time DESC
     </select>
diff --git a/src/main/resources/mapper/purchase/ProductRecordMapper.xml b/src/main/resources/mapper/purchase/ProductRecordMapper.xml
new file mode 100644
index 0000000..c135606
--- /dev/null
+++ b/src/main/resources/mapper/purchase/ProductRecordMapper.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.purchase.mapper.ProductRecordMapper">
+
+
+    <select id="productRecordPage" resultType="com.ruoyi.purchase.pojo.ProductRecord">
+
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml b/src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml
index 9a68cb3..cab5382 100644
--- a/src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml
+++ b/src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml
@@ -107,8 +107,11 @@
                      T2.customer_name LIKE CONCAT('%',#{invoiceRegistrationProductDto.searchText},'%')
                      )
             </if>
-            <if test="invoiceRegistrationProductDto.invoiceDate != null">
-                AND T3.invoice_date = #{invoiceRegistrationProductDto.invoiceDate}
+            <if test="invoiceRegistrationProductDto.invoiceDateStart != null and invoiceRegistrationProductDto.invoiceDateStart != ''">
+                AND T3.invoice_date &gt;= STR_TO_DATE(#{invoiceRegistrationProductDto.invoiceDateStart}, '%Y-%m-%d')
+            </if>
+            <if test="invoiceRegistrationProductDto.invoiceDateEnd != null and invoiceRegistrationProductDto.invoiceDateEnd != ''">
+                AND T3.invoice_date &lt; STR_TO_DATE(#{invoiceRegistrationProductDto.invoiceDateEnd}, '%Y-%m-%d')
             </if>
         </where>
         ORDER BY T1.create_time DESC
diff --git a/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml b/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml
index 3e288af..a73f338 100644
--- a/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml
+++ b/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml
@@ -184,6 +184,12 @@
             <if test="params.searchText != null and params.searchText != '' ">
                 T5.customer_name LIKE CONCAT('%',#{params.searchText},'%')
             </if>
+            <if test="params.receiptPaymentDateStart != null and params.receiptPaymentDateStart != '' ">
+                AND T1.receipt_payment_date &gt;= STR_TO_DATE(#{params.receiptPaymentDateStart},'yyyy-mm-dd')
+            </if>
+            <if test="params.receiptPaymentDateEnd != null and params.receiptPaymentDateEnd != '' ">
+                AND T1.receipt_payment_date &lt; STR_TO_DATE(#{params.receiptPaymentDateEnd}, '%Y-%m-%d')
+            </if>
         </where>
         ORDER BY T1.receipt_payment_date DESC
     </select>
diff --git a/src/main/resources/mapper/sales/SalesLedgerMapper.xml b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
index a9ad438..118d092 100644
--- a/src/main/resources/mapper/sales/SalesLedgerMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -64,6 +64,12 @@
             <if test="salesLedgerDto.customerName != null and salesLedgerDto.customerName != '' ">
                 T1.customer_name LIKE CONCAT('%',#{salesLedgerDto.customerName},'%')
             </if>
+            <if test="salesLedgerDto.customerContractNo != null and salesLedgerDto.customerContractNo != '' ">
+                T1.sales_contract_no LIKE CONCAT('%',#{salesLedgerDto.customerContractNo},'%')
+            </if>
+            <if test="salesLedgerDto.projectName != null and salesLedgerDto.projectName != '' ">
+                T1.project_name LIKE CONCAT('%',#{salesLedgerDto.projectName},'%')
+            </if>
         </where>
     </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.3