src/main/java/com/ruoyi/purchase/dto/PaymentRegistrationDto.java
@@ -36,4 +36,7 @@ private String registrant; private String searchText; // 已付款总金额 private BigDecimal paymentAmountTotal; } src/main/java/com/ruoyi/purchase/mapper/PaymentRegistrationMapper.java
@@ -37,4 +37,11 @@ * @return 付款登记集合 */ public List<PaymentRegistrationDto> paymentHistoryList(@Param("params") PaymentRegistrationDto paymentRegistrationDto); /** * 计算每张发票的已开票金额 * @param ticketRegistrationIds * @return */ public List<PaymentRegistrationDto> countPaymentTotalByTicketRegId(List<Long> ticketRegistrationIds); } src/main/java/com/ruoyi/purchase/pojo/TicketRegistration.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @@ -132,4 +133,11 @@ @TableField(fill = FieldFill.INSERT) private Long tenantId; @ApiModelProperty(value = "已付款总金额") @TableField(exist = false) private BigDecimal paymentAmountTotal; @ApiModelProperty(value = "未付款总金额") @TableField(exist = false) private BigDecimal unPaymentAmountTotal; } src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -374,10 +374,12 @@ .eq(SalesLedgerProduct::getType, 2); List<SalesLedgerProduct> productList = salesLedgerProductMapper.selectList(queryWrapper); productList.forEach(product -> { product.setFutureTickets(product.getFutureTickets() != null ? product.getFutureTickets() : product.getQuantity().longValue()); product.setFutureTickets(product.getFutureTickets() != null ? product.getFutureTickets() : product.getQuantity()); product.setFutureTicketsAmount(product.getFutureTicketsAmount() != null ? product.getFutureTicketsAmount() : product.getTaxInclusiveTotalPrice()); product.setTicketsNum(null); product.setTicketsAmount(null); product.setTempFutureTickets(product.getFutureTickets()); product.setTempFutureTicketsAmount(product.getFutureTicketsAmount()); }); resultDto.setProductData(productList); return resultDto; src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
@@ -9,7 +9,9 @@ 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; @@ -24,6 +26,7 @@ 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; @@ -66,6 +69,9 @@ private final ProductRecordMapper productRecordMapper; @Autowired private PaymentRegistrationMapper paymentRegistrationMapper; @Value("${file.upload-dir}") private String uploadDir; @@ -78,7 +84,26 @@ .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) { 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); break; } } } } return ticketRegistrationList; } @Override @@ -275,7 +300,6 @@ product.setFutureTickets( product.getQuantity() .subtract(BigDecimal.valueOf(product.getTicketsNum())) .longValueExact() // 使用 exact 方法确保无小数部分 ); // 计算 futureTicketsAmount src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -105,7 +105,7 @@ /** * 未来票数 */ private Long futureTickets; private BigDecimal futureTickets; /** * 未来票金额(元) @@ -153,4 +153,12 @@ @ApiModelProperty(value = "临时未开票金额") @TableField(exist = false) private BigDecimal tempnoInvoiceAmount; @ApiModelProperty(value = "临时未来票数") @TableField(exist = false) private BigDecimal tempFutureTickets; @ApiModelProperty(value = "临时未来票金额") @TableField(exist = false) private BigDecimal tempFutureTicketsAmount; } src/main/resources/mapper/purchase/PaymentRegistrationMapper.xml
@@ -110,4 +110,19 @@ ORDER BY T1.payment_date,T1.create_time DESC </select> <select id="countPaymentTotalByTicketRegId" resultType="com.ruoyi.purchase.dto.PaymentRegistrationDto"> SELECT IFNULL(SUM(current_payment_amount),0) AS paymentAmountTotal, ticket_registration_id FROM payment_registration <where> ticket_registration_id IN <foreach collection="ticketRegistrationIds" separator="," open="(" close=")" item="item"> #{item} </foreach> </where> GROUP BY ticket_registration_id </select> </mapper>