From 4e9f2f18aa6d4e4efe11645e251b713869fa9746 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期四, 12 二月 2026 14:08:59 +0800
Subject: [PATCH] fix: 修改来票登记时计算来票登记表的总金额错误

---
 src/main/java/com/ruoyi/purchase/service/impl/ProductRecordServiceImpl.java |  111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 111 insertions(+), 0 deletions(-)

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..fda5910 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/ProductRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/ProductRecordServiceImpl.java
@@ -1,14 +1,33 @@
 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.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.enums.FileNameType;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.purchase.dto.ProductRecordDto;
 import com.ruoyi.purchase.dto.TicketRegistrationDto;
 import com.ruoyi.purchase.mapper.ProductRecordMapper;
+import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
+import com.ruoyi.purchase.mapper.TicketRegistrationMapper;
 import com.ruoyi.purchase.pojo.ProductRecord;
+import com.ruoyi.purchase.pojo.PurchaseLedger;
+import com.ruoyi.purchase.pojo.TicketRegistration;
 import com.ruoyi.purchase.service.IProductRecordService;
+import com.ruoyi.sales.mapper.CommonFileMapper;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.CommonFile;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -21,7 +40,15 @@
 @AllArgsConstructor
 public class ProductRecordServiceImpl extends ServiceImpl<ProductRecordMapper, ProductRecord> implements IProductRecordService {
 
+    @Autowired
     private ProductRecordMapper productRecordMapper;
+
+    @Autowired
+    private CommonFileMapper commonFileMapper;
+    @Autowired
+    private SalesLedgerProductMapper salesLedgerProductMapper;
+    @Autowired
+    private PurchaseLedgerMapper purchaseLedgerMapper;
 
 
     /**
@@ -36,4 +63,88 @@
                 .eq(ProductRecord::getType, "2"));
     }
 
+    @Override
+    public IPage<ProductRecordDto> productRecordPage(Page page, TicketRegistrationDto ticketRegistrationDto) {
+        IPage<ProductRecordDto> productRecordDtoIPage1 = productRecordMapper.productRecordPage(page, ticketRegistrationDto);
+        page.setSize(productRecordDtoIPage1.getTotal());
+        IPage<ProductRecordDto> productRecordDtoIPage = productRecordMapper.productRecordPage(page, ticketRegistrationDto);
+        productRecordDtoIPage.getRecords().forEach(productRecordDto -> {
+            productRecordDto.setCommonFiles(commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>().eq(CommonFile::getCommonId, productRecordDto.getId())
+                    .eq(CommonFile::getType, FileNameType.PURCHASELEDGER.getValue())));
+        });
+        return productRecordDtoIPage;
+    }
+
+    private final TicketRegistrationMapper ticketRegistrationMapper;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult updateRecord(ProductRecordDto productRecordDto) {
+        ProductRecord productRecord = productRecordMapper.selectById(productRecordDto.getId());
+        if (productRecord == null) return AjaxResult.error("璁板綍涓嶅瓨鍦�");
+
+        //  鏇存柊浜у搧鍙拌处
+        SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(productRecord.getSaleLedgerProjectId());
+        if (salesLedgerProduct != null) {
+            // 鏈潵绁ㄩ噾棰� = 鍘熸湭鏉ョエ閲戦 + 鏃ц閲戦 - 鏂拌閲戦
+            BigDecimal futureTicketsAmount = salesLedgerProduct.getFutureTicketsAmount()
+                    .add(productRecord.getTicketsAmount())
+                    .subtract(productRecordDto.getTicketsAmount());
+            salesLedgerProduct.setFutureTicketsAmount(futureTicketsAmount);
+
+            // 鏈潵绁ㄦ暟 = 鍘熸湭鏉ョエ鏁� + 鏃ц鏁伴噺 - 鏂拌鏁伴噺
+            BigDecimal futureTickets = salesLedgerProduct.getFutureTickets()
+                    .add(productRecord.getTicketsNum())
+                    .subtract(productRecordDto.getTicketsNum());
+            salesLedgerProduct.setFutureTickets(futureTickets);
+
+            // 鏇存柊浜у搧琛ㄦ湰娆℃暟鍊�
+            salesLedgerProduct.setTicketsAmount(productRecordDto.getTicketsAmount());
+            salesLedgerProduct.setTicketsNum(productRecordDto.getTicketsNum());
+            salesLedgerProductMapper.updateById(salesLedgerProduct);
+        }
+
+        //  鏇存柊鏉ョエ鐧昏
+        TicketRegistration ticketRegistration = ticketRegistrationMapper.selectById(productRecord.getTicketRegistrationId());
+        if (ticketRegistration != null) {
+            // 閲戦 = 鏂伴噾棰� - 鏃ч噾棰�
+            BigDecimal amountDiff = productRecordDto.getTicketsAmount().subtract(productRecord.getTicketsAmount());
+            // 鎬婚噾棰� = 鍘熸�婚噾棰� + 宸��
+            ticketRegistration.setInvoiceAmount(ticketRegistration.getInvoiceAmount().add(amountDiff));
+            // 鏇存柊鍙戠エ鍙�
+            ticketRegistration.setInvoiceNumber(productRecordDto.getInvoiceNumber());
+
+            ticketRegistrationMapper.updateById(ticketRegistration);
+        }
+
+        BeanUtils.copyProperties(productRecordDto, productRecord);
+        // 閲嶆柊璁$畻鏈潵绁ㄩ噾棰濓紙鏍规嵁鍓╀綑绁ㄦ暟 * 鍗曚环锛�
+        productRecord.setFutureTicketsAmount(productRecord.getFutureTickets().multiply(productRecord.getTaxInclusiveUnitPrice()));
+        productRecordMapper.updateById(productRecord);
+
+        return AjaxResult.success("淇敼鎴愬姛");
+    }
+
+    @Override
+    public ProductRecordDto getProductRecordById(ProductRecordDto productRecordDto) {
+        List<ProductRecordDto> productRecordDtoList = productRecordMapper.getProductRecordById(productRecordDto);
+        if (CollectionUtils.isNotEmpty(productRecordDtoList)) {
+            ProductRecordDto productRecordDto1 = productRecordDtoList.stream()
+                    .filter(item -> item.getId().equals(productRecordDto.getId()))
+                    .findFirst()
+                    .orElse(null);
+            // 杩囨护鍑轰笌浼犲叆鐨� productRecordDto 涓婚敭鐩稿悓鐨勮褰�
+            BigDecimal reduce = productRecordDtoList
+                    .stream()
+                    .filter(item -> item.getProductModelId().equals(productRecordDto.getProductModelId()))
+                    .map(ProductRecordDto::getTicketsNum)
+                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            if (productRecordDto1 != null) {
+                productRecordDto1.setFutureTickets(productRecordDto1.getQuantity().subtract(reduce));
+                productRecordDto1.setFutureTicketsAmount(productRecordDto1.getFutureTickets().multiply(productRecordDto1.getTaxInclusiveUnitPrice()));
+            }
+            return productRecordDto1;
+        }
+        return null;
+    }
 }

--
Gitblit v1.9.3