From 390b4243dff25a50f1d3302228e7dd16e9c2f18a Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期三, 14 五月 2025 17:56:24 +0800
Subject: [PATCH] 1.合同金额优化 2.来票台账

---
 src/main/java/com/ruoyi/purchase/mapper/PurchaseLedgerMapper.java                |    4 
 src/main/java/com/ruoyi/purchase/service/IInvoicePurchaseService.java            |   21 +++
 src/main/java/com/ruoyi/purchase/service/impl/InvoicePurchaseServiceImpl.java    |   45 +++++++
 src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java                      |    4 
 src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java     |   17 ++
 src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml                      |   12 ++
 src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java                    |    6 +
 src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java |    1 
 src/main/java/com/ruoyi/purchase/controller/InvoicePurchaseController.java       |   73 ++++++++++++
 src/main/java/com/ruoyi/purchase/dto/InvoicePurchaseDto.java                     |    7 +
 src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java        |    2 
 src/main/java/com/ruoyi/purchase/mapper/InvoicePurchaseMapper.java               |   14 ++
 src/main/java/com/ruoyi/purchase/pojo/InvoicePurchase.java                       |   98 ++++++++++++++++
 13 files changed, 299 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/ruoyi/purchase/controller/InvoicePurchaseController.java b/src/main/java/com/ruoyi/purchase/controller/InvoicePurchaseController.java
new file mode 100644
index 0000000..256f9c5
--- /dev/null
+++ b/src/main/java/com/ruoyi/purchase/controller/InvoicePurchaseController.java
@@ -0,0 +1,73 @@
+package com.ruoyi.purchase.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.purchase.pojo.InvoicePurchase;
+import com.ruoyi.purchase.service.IInvoicePurchaseService;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.framework.web.page.TableDataInfo;
+
+/**
+ * 鍙戠エ淇℃伅Controller
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/purchase/invoice")
+public class InvoicePurchaseController extends BaseController {
+
+    private IInvoicePurchaseService invoicePurchaseService;
+
+    /**
+     * 鏌ヨ鍙戠エ淇℃伅鍒楄〃
+     */
+    @GetMapping("/list")
+    public TableDataInfo list(InvoicePurchase invoicePurchase) {
+        startPage();
+        List<InvoicePurchase> list = invoicePurchaseService.selectInvoicePurchaseList(invoicePurchase);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭鍙戠エ淇℃伅鍒楄〃
+     */
+    @Log(title = "鍙戠エ淇℃伅", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, InvoicePurchase invoicePurchase) {
+        List<InvoicePurchase> list = invoicePurchaseService.selectInvoicePurchaseList(invoicePurchase);
+        ExcelUtil<InvoicePurchase> util = new ExcelUtil<InvoicePurchase>(InvoicePurchase.class);
+        util.exportExcel(response, list, "鍙戠エ淇℃伅鏁版嵁");
+    }
+
+    /**
+     * 鏂板淇敼鍙戠エ淇℃伅
+     */
+    @Log(title = "鍙戠エ淇℃伅", businessType = BusinessType.INSERT)
+    @PostMapping   ("/addOrUpdateInvoice")
+    public AjaxResult addOrUpdateInvoice(@RequestBody InvoicePurchase invoicePurchase) {
+        return toAjax(invoicePurchaseService.addOrUpdateInvoice(invoicePurchase));
+    }
+
+    /**
+     * 鍒犻櫎鍙戠エ淇℃伅
+     */
+    @Log(title = "鍙戠エ淇℃伅", businessType = BusinessType.DELETE)
+    @DeleteMapping("/delInvoice")
+    public AjaxResult remove(@RequestBody Long[] ids) {
+        return toAjax(invoicePurchaseService.delInvoice(ids));
+    }
+}
diff --git a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
index 1e210f0..3eddb4c 100644
--- a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
+++ b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
@@ -69,7 +69,7 @@
     }
 
     /**
-     * 鏌ヨ閿�鍞彴璐﹀拰浜у搧鐖跺瓙鍒楄〃
+     * 鏌ヨ閲囪喘鍙拌处鍜屼骇鍝佺埗瀛愬垪琛�
      */
     @GetMapping("/getPurchaseById")
     public PurchaseLedgerDto getPurchaseById(PurchaseLedgerDto purchaseLedgerDto) {
diff --git a/src/main/java/com/ruoyi/purchase/dto/InvoicePurchaseDto.java b/src/main/java/com/ruoyi/purchase/dto/InvoicePurchaseDto.java
new file mode 100644
index 0000000..8a51b96
--- /dev/null
+++ b/src/main/java/com/ruoyi/purchase/dto/InvoicePurchaseDto.java
@@ -0,0 +1,7 @@
+package com.ruoyi.purchase.dto;
+
+import lombok.Data;
+
+@Data
+public class InvoicePurchaseDto {
+}
diff --git a/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java b/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
index 6a9b1e8..cddb7b8 100644
--- a/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
+++ b/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
@@ -91,6 +91,10 @@
     private List<String> tempFileIds;
 
     private List<SalesLedgerFile> SalesLedgerFiles;
+    /**
+     * 涓氬姟鍛樻墜鏈哄彿
+     */
+    private String phoneNumber;
 
     /**
      * 涓氬姟鍛榠d
diff --git a/src/main/java/com/ruoyi/purchase/mapper/InvoicePurchaseMapper.java b/src/main/java/com/ruoyi/purchase/mapper/InvoicePurchaseMapper.java
new file mode 100644
index 0000000..39f245a
--- /dev/null
+++ b/src/main/java/com/ruoyi/purchase/mapper/InvoicePurchaseMapper.java
@@ -0,0 +1,14 @@
+package com.ruoyi.purchase.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.purchase.pojo.InvoicePurchase;
+
+/**
+ * 鍙戠エ淇℃伅Mapper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+public interface InvoicePurchaseMapper extends BaseMapper<InvoicePurchase> {
+}
diff --git a/src/main/java/com/ruoyi/purchase/mapper/PurchaseLedgerMapper.java b/src/main/java/com/ruoyi/purchase/mapper/PurchaseLedgerMapper.java
index 1328588..dc2b362 100644
--- a/src/main/java/com/ruoyi/purchase/mapper/PurchaseLedgerMapper.java
+++ b/src/main/java/com/ruoyi/purchase/mapper/PurchaseLedgerMapper.java
@@ -3,6 +3,9 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.purchase.pojo.PurchaseLedger;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
 
 /**
  * 閲囪喘鍙拌处Mapper鎺ュ彛
@@ -12,4 +15,5 @@
  */
 public interface PurchaseLedgerMapper extends BaseMapper<PurchaseLedger> {
 
+    int updateContractAmountById(@Param("id") Long id, @Param("totalTaxInclusiveAmount") BigDecimal totalTaxInclusiveAmount);
 }
diff --git a/src/main/java/com/ruoyi/purchase/pojo/InvoicePurchase.java b/src/main/java/com/ruoyi/purchase/pojo/InvoicePurchase.java
new file mode 100644
index 0000000..5097798
--- /dev/null
+++ b/src/main/java/com/ruoyi/purchase/pojo/InvoicePurchase.java
@@ -0,0 +1,98 @@
+package com.ruoyi.purchase.pojo;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import lombok.Data;
+
+/**
+ * 鍙戠エ淇℃伅瀵硅薄 invoice_purchase
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+@TableName("invoice_purchase")
+@Data
+public class InvoicePurchase {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 涓婚敭ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 閲囪喘鍚堝悓鍙�
+     */
+    @Excel(name = "閲囪喘鍚堝悓鍙�")
+    private String purchaseContractNo;
+
+    /**
+     * 閿�鍞悎鍚屽彿
+     */
+    @Excel(name = "閿�鍞悎鍚屽彿")
+    private String salesContractNo;
+
+    /**
+     * 渚涘簲鍟嗗悕绉�
+     */
+    @Excel(name = "渚涘簲鍟嗗悕绉�")
+    private String supplierName;
+
+    /**
+     * 鍙戠エ鍙�
+     */
+    @Excel(name = "鍙戠エ鍙�")
+    private String invoiceNumber;
+
+    /**
+     * 鍙戠エ閲戦锛堝厓锛�
+     */
+    @Excel(name = "鍙戠エ閲戦", readConverterExp = "鍏�=")
+    private BigDecimal invoiceAmount;
+
+    /**
+     * 绋庣巼
+     */
+    @Excel(name = "绋庣巼")
+    private BigDecimal taxRate;
+
+    /**
+     * 寮�绁ㄤ汉
+     */
+    @Excel(name = "寮�绁ㄤ汉")
+    private String issuer;
+
+    /**
+     * 寮�绁ㄦ棩鏈�
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "寮�绁ㄦ棩鏈�", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date issueDate;
+
+    /**
+     * 鍙戠エ鏂囦欢锛圥DF鏍煎紡锛�
+     */
+    @Excel(name = "鍙戠エ鏂囦欢", readConverterExp = "P=DF鏍煎紡")
+    private String invoiceFile;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createdAt;
+
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date updatedAt;
+    
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+}
diff --git a/src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java b/src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java
index b74d863..1452949 100644
--- a/src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java
+++ b/src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java
@@ -1,5 +1,6 @@
 package com.ruoyi.purchase.pojo;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 import com.baomidou.mybatisplus.annotation.*;
@@ -91,6 +92,11 @@
      */
     private Long salesLedgerId;
 
+    /**
+     * 鍚堝悓閲戦锛堜骇鍝佸惈绋庢�讳环锛�
+     */
+    private BigDecimal contractAmount;
+
     @TableField(fill = FieldFill.INSERT)
     private Long tenantId;
 
diff --git a/src/main/java/com/ruoyi/purchase/service/IInvoicePurchaseService.java b/src/main/java/com/ruoyi/purchase/service/IInvoicePurchaseService.java
new file mode 100644
index 0000000..ae99e9d
--- /dev/null
+++ b/src/main/java/com/ruoyi/purchase/service/IInvoicePurchaseService.java
@@ -0,0 +1,21 @@
+package com.ruoyi.purchase.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.purchase.pojo.InvoicePurchase;
+
+import java.util.List;
+
+/**
+ * 鍙戠エ淇℃伅Service鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+public interface IInvoicePurchaseService extends IService<InvoicePurchase> {
+    List<InvoicePurchase> selectInvoicePurchaseList(InvoicePurchase invoicePurchase);
+
+    int delInvoice(Long[] ids);
+
+    int addOrUpdateInvoice(InvoicePurchase invoicePurchase);
+}
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/InvoicePurchaseServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/InvoicePurchaseServiceImpl.java
new file mode 100644
index 0000000..f9a2487
--- /dev/null
+++ b/src/main/java/com/ruoyi/purchase/service/impl/InvoicePurchaseServiceImpl.java
@@ -0,0 +1,45 @@
+package com.ruoyi.purchase.service.impl;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.purchase.mapper.InvoicePurchaseMapper;
+import com.ruoyi.purchase.pojo.InvoicePurchase;
+import com.ruoyi.purchase.service.IInvoicePurchaseService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 鍙戠エ淇℃伅Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+@Service
+@AllArgsConstructor
+public class InvoicePurchaseServiceImpl extends ServiceImpl<InvoicePurchaseMapper, InvoicePurchase> implements IInvoicePurchaseService {
+
+    private InvoicePurchaseMapper invoicePurchaseMapper;
+
+    @Override
+    public List<InvoicePurchase> selectInvoicePurchaseList(InvoicePurchase invoicePurchase) {
+        return invoicePurchaseMapper.selectList(new LambdaQueryWrapper<>());
+    }
+
+    @Override
+    public int delInvoice(Long[] ids) {
+        return invoicePurchaseMapper.deleteBatchIds(Arrays.asList(ids));
+    }
+
+    @Override
+    public int addOrUpdateInvoice(InvoicePurchase invoicePurchase) {
+        if (invoicePurchase.getId() == null) {
+            return invoicePurchaseMapper.insert(invoicePurchase);
+        } else {
+            return invoicePurchaseMapper.updateById(invoicePurchase);
+        }
+    }
+}
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 1074d31..f49faf8 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -28,6 +28,7 @@
 import org.springframework.stereotype.Service;
 
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -108,7 +109,6 @@
         List<SalesLedgerProduct> productList = purchaseLedgerDto.getProductData();
         if (productList != null && !productList.isEmpty()) {
             handleSalesLedgerProducts(purchaseLedger.getId(), productList, purchaseLedgerDto.getType());
-
         }
 
         // 5. 杩佺Щ涓存椂鏂囦欢鍒版寮忕洰褰�
@@ -141,6 +141,18 @@
                 salesLedgerProduct.setType(type);
                 salesLedgerProductMapper.insert(salesLedgerProduct);
             }
+        }
+
+        // 璁$畻鎬诲惈绋庨噾棰�
+        BigDecimal totalTaxInclusiveAmount = products.stream()
+                .map(SalesLedgerProduct::getTaxInclusiveTotalPrice)
+                .filter(Objects::nonNull)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        // 鏇存柊涓昏〃鐨勬�婚噾棰濆瓧娈�
+        if (salesLedgerId != null) {
+            // 鐩存帴鏇存柊鎸囧畾ID鐨勮褰曠殑contractAmount瀛楁涓簍otalTaxInclusiveAmount
+            purchaseLedgerMapper.updateContractAmountById(salesLedgerId, totalTaxInclusiveAmount);
         }
     }
 
@@ -256,9 +268,6 @@
 
         // 鑾峰彇鍘熷鏌ヨ缁撴灉
         List<Map<String, Object>> result = purchaseLedgerMapper.selectMaps(queryWrapper);
-
-        //鏌ヨ閿�鍞悎鍚屽彿
-
 
         // 灏嗕笅鍒掔嚎鍛藉悕杞崲涓洪┘宄板懡鍚�
         return result.stream().map(map -> map.entrySet().stream()
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 ef3bc4d..4e39558 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
@@ -59,6 +59,7 @@
         ticketRegistration.setPurchaseContractNumber(purchaseLedger.getPurchaseContractNumber());
         ticketRegistration.setBusinessPerson(sysUser.getNickName());
         ticketRegistration.setTenantId(purchaseLedger.getTenantId());
+        ticketRegistration.setContractAmount(purchaseLedger.getContractAmount());
 
         // 澶勭悊瀛愯〃鏁版嵁
         List<SalesLedgerProduct> productData = ticketRegistrationDto.getProductData(); 
diff --git a/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml b/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
new file mode 100644
index 0000000..f007228
--- /dev/null
+++ b/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
@@ -0,0 +1,12 @@
+<?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.PurchaseLedgerMapper">
+
+    <update id="updateContractAmountById">
+        UPDATE purchase_ledger
+        SET contract_amount = #{totalTaxInclusiveAmount}
+        WHERE id = #{id}
+    </update>
+</mapper>
\ No newline at end of file

--
Gitblit v1.9.3