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 | 72 ++++++++++++++++++++++++++++++-----
1 files changed, 61 insertions(+), 11 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 16eef79..fda5910 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/ProductRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/ProductRecordServiceImpl.java
@@ -2,6 +2,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.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.enums.FileNameType;
@@ -10,8 +11,10 @@
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;
@@ -22,7 +25,9 @@
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;
/**
@@ -64,28 +69,56 @@
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.getTicketRegistrationId())
+ 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) {
- SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(productRecordDto.getSaleLedgerProjectId());
ProductRecord productRecord = productRecordMapper.selectById(productRecordDto.getId());
+ if (productRecord == null) return AjaxResult.error("璁板綍涓嶅瓨鍦�");
+
+ // 鏇存柊浜у搧鍙拌处
+ SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(productRecord.getSaleLedgerProjectId());
if (salesLedgerProduct != null) {
- salesLedgerProduct.setFutureTicketsAmount(salesLedgerProduct.getFutureTicketsAmount().add(productRecord.getTicketsAmount()).subtract(productRecordDto.getTicketsAmount()));
- salesLedgerProduct.setFutureTickets(salesLedgerProduct.getFutureTickets().add(productRecord.getTicketsNum().subtract(productRecordDto.getTicketsNum())));
+ // 鏈潵绁ㄩ噾棰� = 鍘熸湭鏉ョエ閲戦 + 鏃ц閲戦 - 鏂拌閲戦
+ 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);
}
- PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(productRecord.getPurchaseLedgerId());
- if (purchaseLedger != null) {
- purchaseLedger.setReceiptPaymentAmount(purchaseLedger.getReceiptPaymentAmount());
+
+ // 鏇存柊鏉ョエ鐧昏
+ 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);
+
+ BeanUtils.copyProperties(productRecordDto, productRecord);
+ // 閲嶆柊璁$畻鏈潵绁ㄩ噾棰濓紙鏍规嵁鍓╀綑绁ㄦ暟 * 鍗曚环锛�
productRecord.setFutureTicketsAmount(productRecord.getFutureTickets().multiply(productRecord.getTaxInclusiveUnitPrice()));
productRecordMapper.updateById(productRecord);
@@ -93,8 +126,25 @@
}
@Override
- public ProductRecordDto getProductRecordById(Long id) {
- ProductRecordDto productRecordDto = productRecordMapper.getProductRecordById(id);
- return productRecordDto;
+ 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