src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ruoyi/sales/dto/CustomerInteractionDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ruoyi/sales/mapper/ReceiptPaymentMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ruoyi/sales/service/ReceiptPaymentService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/mapper/sales/ReceiptPaymentMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java
@@ -288,6 +288,8 @@ detailPagination.put("pageSize", detailPageSize); detailPagination.put("pages", (int) Math.ceil((double) totalDetails / detailPageSize)); // åºä»éé¢é»è¾ä¸éç¨ååé颿¹æ å票éé¢å仿¬¾éé¢ payableAmount = invoiceAmount.subtract(paymentAmount); res.put("invoiceAmount", invoiceAmount); res.put("payableAmount", payableAmount); res.put("paymentAmount", paymentAmount); @@ -374,7 +376,6 @@ Collectors.toList() ) ); BigDecimal amountDateTotal = BigDecimal.ZERO; for (LocalDate localDate : dateListMap.keySet()) { BigDecimal currentPaymentAmount = BigDecimal.ZERO; BigDecimal invoiceAmount = BigDecimal.ZERO; src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java
@@ -54,14 +54,13 @@ } /** * 忬¾ç»è®°å页æ¥è¯¢ * @param page * 客æ·å¾æ¥è®°å½æ¥è¯¢ * @param receiptPaymentDto * @return */ @GetMapping("/listPage") public AjaxResult receiptPaymentListPage (Page page, ReceiptPaymentDto receiptPaymentDto) { return AjaxResult.success(receiptPaymentService.receiptPaymentListPage(page,receiptPaymentDto)); @GetMapping("/customerInteractions") public AjaxResult customerInteractions (ReceiptPaymentDto receiptPaymentDto) { return AjaxResult.success(receiptPaymentService.customerInteractions(receiptPaymentDto)); } /** src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -178,12 +178,20 @@ return iPage; } for (SalesLedger salesLedger : iPage.getRecords()) { boolean existFlag = false; BigDecimal noInvoiceAmountTotal = BigDecimal.ZERO; for (InvoiceLedgerDto invoiceLedgerDto : invoiceLedgerDtoList) { if (salesLedger.getId().intValue() == invoiceLedgerDto.getSalesLedgerId()) { BigDecimal noInvoiceAmountTotal = salesLedger.getContractAmount().subtract(invoiceLedgerDto.getInvoiceTotal()); salesLedger.setNoInvoiceAmountTotal(noInvoiceAmountTotal); noInvoiceAmountTotal = salesLedger.getContractAmount().subtract(invoiceLedgerDto.getInvoiceTotal()); existFlag = true; break; } } if(existFlag){ salesLedger.setNoInvoiceAmountTotal(noInvoiceAmountTotal); }else { salesLedger.setNoInvoiceAmountTotal(salesLedger.getContractAmount()); } } return iPage; } src/main/java/com/ruoyi/sales/dto/CustomerInteractionDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,25 @@ package com.ruoyi.sales.dto; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDate; @Data public class CustomerInteractionDto { /** å¼ç¥¨éé¢ */ private BigDecimal invoiceAmount; /** 忬¾éé¢ */ private BigDecimal receiptAmount; /** åºæ¶éé¢ */ private BigDecimal unReceiptAmount; /** åçæ¥æ */ private LocalDate happenTime; /** ç±»å 1 å票ç»è®° 0 忬¾ç»è®° */ private int type; } src/main/java/com/ruoyi/sales/mapper/ReceiptPaymentMapper.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.sales.dto.CustomerInteractionDto; import com.ruoyi.sales.dto.InvoiceLedgerDto; import com.ruoyi.sales.dto.ReceiptPaymentDto; import com.ruoyi.sales.pojo.ReceiptPayment; @@ -50,4 +51,10 @@ */ IPage<ReceiptPaymentDto> receiptPaymentHistoryListPage(Page page,@Param("params") ReceiptPaymentDto receiptPaymentDto); /** * 客æ·å¾æ¥è®°å½æ¥è¯¢ * @param receiptPaymentDto * @return */ List<CustomerInteractionDto> customerInteractions (ReceiptPaymentDto receiptPaymentDto); } src/main/java/com/ruoyi/sales/service/ReceiptPaymentService.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.sales.dto.CustomerInteractionDto; import com.ruoyi.sales.dto.InvoiceLedgerDto; import com.ruoyi.sales.dto.ReceiptPaymentDto; import com.ruoyi.sales.pojo.ReceiptPayment; @@ -77,4 +78,11 @@ * æ¥è¯¢å款记å½å页 */ IPage<ReceiptPaymentDto> receiptPaymentHistoryListPage(Page page, ReceiptPaymentDto receiptPaymentDto); /** * 客æ·å¾æ¥è®°å½æ¥è¯¢ * @param receiptPaymentDto * @return */ List<CustomerInteractionDto> customerInteractions (ReceiptPaymentDto receiptPaymentDto); } src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java
@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.purchase.dto.PaymentHistoryRecordVo; import com.ruoyi.sales.dto.CustomerInteractionDto; import com.ruoyi.sales.dto.InvoiceLedgerDto; import com.ruoyi.sales.dto.ReceiptPaymentDto; import com.ruoyi.sales.mapper.ReceiptPaymentMapper; @@ -20,6 +22,7 @@ import java.time.LocalDate; import java.time.YearMonth; import java.util.*; import java.util.stream.Collectors; @Service public class ReceiptPaymentServiceImpl extends ServiceImpl<ReceiptPaymentMapper,ReceiptPayment> implements ReceiptPaymentService { @@ -190,4 +193,53 @@ public IPage<ReceiptPaymentDto> receiptPaymentHistoryListPage(Page page, ReceiptPaymentDto receiptPaymentDto) { return receiptPaymentMapper.receiptPaymentHistoryListPage(page, receiptPaymentDto); } /** * 客æ·å¾æ¥è®°å½æ¥è¯¢ * @param receiptPaymentDto * @return */ @Override public List<CustomerInteractionDto> customerInteractions(ReceiptPaymentDto receiptPaymentDto) { ArrayList<CustomerInteractionDto> result = new ArrayList<>(); List<CustomerInteractionDto> customerInteractionDtos = receiptPaymentMapper.customerInteractions(receiptPaymentDto); if(CollectionUtils.isEmpty(customerInteractionDtos)){ return result; } // åºæ¶æ»éé¢éé¢è®¡ç® BigDecimal amountTotal = BigDecimal.ZERO; Map<LocalDate, List<CustomerInteractionDto>> dateListMap = customerInteractionDtos.stream().collect( Collectors.groupingBy( CustomerInteractionDto::getHappenTime, LinkedHashMap::new, Collectors.toList() ) ); for (LocalDate localDate : dateListMap.keySet()) { BigDecimal currentReceiptAmount = BigDecimal.ZERO; BigDecimal invoiceAmount = BigDecimal.ZERO; BigDecimal currentDateTotal = BigDecimal.ZERO; List<CustomerInteractionDto> customerInteractionDtoList = dateListMap.get(localDate); // 计ç®å½å¤©æ¶æ¬¾æ° currentReceiptAmount = customerInteractionDtoList.stream() .filter(item ->item.getType() == 0) .map(CustomerInteractionDto::getReceiptAmount) .reduce(BigDecimal.ZERO,BigDecimal::add); // 计ç®å½å¤©å¼ç¥¨æ° invoiceAmount = customerInteractionDtoList.stream() .filter(item ->item.getType() == 1) .map(CustomerInteractionDto::getInvoiceAmount) .reduce(BigDecimal.ZERO,BigDecimal::add); // 计ç®å½æ¥æ±æ» currentDateTotal = currentDateTotal.add(invoiceAmount).subtract(currentReceiptAmount); CustomerInteractionDto customerInteractionDto = new CustomerInteractionDto(); customerInteractionDto.setHappenTime(localDate); customerInteractionDto.setInvoiceAmount(invoiceAmount); customerInteractionDto.setReceiptAmount(currentReceiptAmount); amountTotal = amountTotal.add(currentDateTotal); customerInteractionDto.setUnReceiptAmount(amountTotal); result.add(customerInteractionDto); } return result; } } src/main/resources/mapper/sales/ReceiptPaymentMapper.xml
@@ -188,4 +188,51 @@ ORDER BY T1.receipt_payment_date DESC </select> <select id="customerInteractions" resultType="com.ruoyi.sales.dto.CustomerInteractionDto"> SELECT * FROM ( SELECT receipt_payment_amount AS receiptAmount, receipt_payment_date AS happenTime, 0 AS type, 0 AS invoiceAmount FROM receipt_payment WHERE invoice_ledger_id IN ( SELECT id FROM invoice_ledger WHERE invoice_registration_product_id IN ( SELECT id FROM invoice_registration_product WHERE sales_ledger_id IN ( SELECT id FROM sales_ledger WHERE customer_id = #{customerId} ))) UNION SELECT 0 AS receiptAmount, invoice_date AS happenTime, 1 AS type, invoice_total AS invoiceAmount FROM invoice_ledger WHERE invoice_registration_product_id IN ( SELECT id FROM invoice_registration_product WHERE sales_ledger_id IN ( SELECT id FROM sales_ledger WHERE customer_id = #{customerId} )) AND invoice_date IS NOT NULL ) T1 ORDER BY T1.happenTime ASC </select> </mapper>