| | |
| | | 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.exception.base.BaseException; |
| | | import com.ruoyi.common.utils.DateUtils; |
| | |
| | | import com.ruoyi.common.utils.bean.BeanUtils; |
| | | import com.ruoyi.other.mapper.TempFileMapper; |
| | | import com.ruoyi.other.pojo.TempFile; |
| | | import com.ruoyi.purchase.dto.PaymentRegistrationDto; |
| | | import com.ruoyi.purchase.dto.TicketRegistrationDto; |
| | | import com.ruoyi.purchase.mapper.PaymentRegistrationMapper; |
| | | import com.ruoyi.purchase.mapper.ProductRecordMapper; |
| | | import com.ruoyi.purchase.mapper.PurchaseLedgerMapper; |
| | | import com.ruoyi.purchase.mapper.TicketRegistrationMapper; |
| | |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.io.FilenameUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | |
| | | |
| | | private final ProductRecordMapper productRecordMapper; |
| | | |
| | | @Autowired |
| | | private PaymentRegistrationMapper paymentRegistrationMapper; |
| | | |
| | | @Value("${file.upload-dir}") |
| | | private String uploadDir; |
| | | |
| | |
| | | .like(TicketRegistration::getSupplierName, ticketRegistration.getSupplierName()) |
| | | .eq(TicketRegistration::getIssueDate, ticketRegistration.getIssueDate()); |
| | | } |
| | | return ticketRegistrationMapper.selectList(queryWrapper); |
| | | List<TicketRegistration> ticketRegistrationList = ticketRegistrationMapper.selectList(queryWrapper); |
| | | // 计算已付款金额 |
| | | 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())){ |
| | | paymentAmountTotal = paymentRegistrationDto.getPaymentAmountTotal(); |
| | | break; |
| | | } |
| | | } |
| | | BigDecimal invoiceAmount = registration.getInvoiceAmount(); |
| | | BigDecimal subtractAmount = invoiceAmount.subtract(paymentAmountTotal); |
| | | registration.setPaymentAmountTotal(paymentAmountTotal); |
| | | registration.setUnPaymentAmountTotal(subtractAmount); |
| | | } |
| | | } |
| | | |
| | | return ticketRegistrationList; |
| | | } |
| | | |
| | | @Override |
| | |
| | | ).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()) |
| | | .eq(TicketRegistration::getIssueDate, ticketRegistration.getIssueDate()); |
| | | } |
| | | 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); |
| | | } |
| | | } |
| | | |
| | | return ticketRegistrationIPage; |
| | | } |
| | | |
| | | private void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products, Integer type) { |
| | | if (products == null || products.isEmpty()) { |
| | | return; |
| | |
| | | // 计算 futureTickets(直接使用 BigDecimal 计算,避免精度丢失) |
| | | product.setFutureTickets( |
| | | product.getQuantity() |
| | | .subtract(BigDecimal.valueOf(product.getTicketsNum())) |
| | | .longValueExact() // 使用 exact 方法确保无小数部分 |
| | | .subtract(product.getTicketsNum()) |
| | | ); |
| | | |
| | | // 计算 futureTicketsAmount |