yaowanxin
2 天以前 e83d4cecece6e8677392229e996dea22bbe2d1e9
src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
@@ -1,8 +1,13 @@
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.core.toolkit.ObjectUtils;
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.common.enums.SalesLedgerType;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
@@ -10,6 +15,7 @@
import com.ruoyi.other.mapper.TempFileMapper;
import com.ruoyi.other.pojo.TempFile;
import com.ruoyi.purchase.dto.PaymentRegistrationDto;
import com.ruoyi.purchase.dto.PurchaseLedgerDto;
import com.ruoyi.purchase.dto.TicketRegistrationDto;
import com.ruoyi.purchase.mapper.PaymentRegistrationMapper;
import com.ruoyi.purchase.mapper.ProductRecordMapper;
@@ -23,6 +29,8 @@
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
import com.ruoyi.sales.pojo.CommonFile;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.sales.service.ISalesLedgerProductService;
import com.ruoyi.sales.service.impl.SalesLedgerProductServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
@@ -70,6 +78,9 @@
    private final ProductRecordMapper productRecordMapper;
    @Autowired
    private ISalesLedgerProductService salesLedgerProductService;
    @Autowired
    private PaymentRegistrationMapper paymentRegistrationMapper;
    @Value("${file.upload-dir}")
@@ -86,20 +97,21 @@
        }
        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())){
                        BigDecimal paymentAmountTotal = paymentRegistrationDto.getPaymentAmountTotal();
                        BigDecimal invoiceAmount = registration.getInvoiceAmount();
                        registration.setPaymentAmountTotal(paymentAmountTotal);
                        BigDecimal subtractAmount = invoiceAmount.subtract(paymentAmountTotal);
                        registration.setUnPaymentAmountTotal(subtractAmount);
                    if (registration.getId().equals(paymentRegistrationDto.getTicketRegistrationId())) {
                        paymentAmountTotal = paymentRegistrationDto.getPaymentAmountTotal();
                        break;
                    }
                }
                BigDecimal invoiceAmount = registration.getInvoiceAmount();
                BigDecimal subtractAmount = invoiceAmount.subtract(paymentAmountTotal);
                registration.setPaymentAmountTotal(paymentAmountTotal);
                registration.setUnPaymentAmountTotal(subtractAmount);
            }
        }
@@ -135,13 +147,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);
@@ -254,8 +266,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()
@@ -263,6 +275,61 @@
                        entry -> underlineToCamel(entry.getKey()),
                        Map.Entry::getValue))
        ).collect(Collectors.toList());
    }
    @Override
    public IPage<TicketRegistration> selectTicketRegistrationListPage(Page page, TicketRegistration ticketRegistration) {
        LambdaQueryWrapper<TicketRegistration> queryWrapper = new LambdaQueryWrapper<>();
        if (StringUtils.isNotBlank(ticketRegistration.getPurchaseContractNumber())) {
            queryWrapper.like(TicketRegistration::getPurchaseContractNumber, ticketRegistration.getPurchaseContractNumber())
                    .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())) {
            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())) {
                        paymentAmountTotal = paymentRegistrationDto.getPaymentAmountTotal();
                        break;
                    }
                }
                BigDecimal invoiceAmount = registration.getInvoiceAmount();
                BigDecimal subtractAmount = invoiceAmount.subtract(paymentAmountTotal);
                registration.setPaymentAmountTotal(paymentAmountTotal);
                registration.setUnPaymentAmountTotal(subtractAmount);
            }
        }
        if (!ObjectUtils.isEmpty(ticketRegistration.getStatus())) {
            if (ticketRegistration.getStatus()) {
                ticketRegistrationIPage.getRecords().removeIf(receiptPaymentDto1 -> new BigDecimal("0.00").equals(receiptPaymentDto1.getUnPaymentAmountTotal()));
            }
        }
        return ticketRegistrationIPage;
    }
    @Override
    public PurchaseLedgerDto getPuargeById(Long id) {
        PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(id);
        PurchaseLedgerDto purchaseLedgerDto = new PurchaseLedgerDto();
        BeanUtils.copyProperties(purchaseLedger, purchaseLedgerDto);
        SalesLedgerProduct salesLedgerProduct = new SalesLedgerProduct();
        salesLedgerProduct.setSalesLedgerId(id);
        salesLedgerProduct.setType(SalesLedgerType.SALES_LEDGER_TYPE_SALES_LEDGER.getValue());
        List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductService.selectSalesLedgerProductList(salesLedgerProduct);
        purchaseLedgerDto.setProductData(salesLedgerProducts);
        List<CommonFile> commonFiles = commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>()
                .eq(CommonFile::getType, FileNameType.PURCHASELEDGER.getValue())
                .eq(CommonFile::getCommonId, id));
        purchaseLedgerDto.setSalesLedgerFiles(commonFiles);
        return purchaseLedgerDto;
    }
    private void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products, Integer type) {
@@ -297,16 +364,17 @@
                }
                // 计算 futureTickets(直接使用 BigDecimal 计算,避免精度丢失)
                product.setFutureTickets(
                        product.getQuantity()
                                .subtract(BigDecimal.valueOf(product.getTicketsNum()))
                );
//                product.setFutureTickets(
//                        product.getQuantity()
//                                .subtract(product.getTicketsNum())
//                );
                // 计算 futureTicketsAmount
                product.setFutureTicketsAmount(
                        product.getTaxInclusiveTotalPrice()
                                .subtract(product.getTicketsAmount())
                );
//                product.setFutureTicketsAmount(
//                        product.getTaxInclusiveTotalPrice()
//                                .subtract(product.getTicketsAmount())
//                );
                product.setType(type);
                salesLedgerProductMapper.updateById(product);
            });