chenrui
5 天以前 83383b2b94d34c1986769d20c8cdd6149e46739c
src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java
@@ -4,10 +4,13 @@
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.sales.dto.CustomerInteractionDto;
import com.ruoyi.sales.dto.InvoiceLedgerDto;
import com.ruoyi.sales.dto.ReceiptPaymentDto;
import com.ruoyi.sales.mapper.ReceiptPaymentMapper;
import com.ruoyi.sales.mapper.SalesLedgerMapper;
import com.ruoyi.sales.pojo.ReceiptPayment;
import com.ruoyi.sales.pojo.SalesLedger;
import com.ruoyi.sales.service.ReceiptPaymentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -17,14 +20,17 @@
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.YearMonth;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class ReceiptPaymentServiceImpl extends ServiceImpl<ReceiptPaymentMapper,ReceiptPayment> implements ReceiptPaymentService {
    @Autowired
    private ReceiptPaymentMapper receiptPaymentMapper;
    @Autowired
    private SalesLedgerMapper salesLedgerMapper;
    /**
     * 回款登记新增
@@ -140,4 +146,107 @@
    public InvoiceLedgerDto invoiceInfo(Integer id) {
        return receiptPaymentMapper.invoiceInfo(id);
    }
    @Override
    public Map<String,BigDecimal> getAmountMouth() {
        List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(null);
        BigDecimal contractAmount = salesLedgers.stream().map(SalesLedger::getContractAmount)
                .filter(Objects::nonNull)
                .reduce(BigDecimal.ZERO, BigDecimal::add);
        LocalDate now = LocalDate.now();
        YearMonth currentMonth = YearMonth.from(now);
        // 创建LambdaQueryWrapper
        LambdaQueryWrapper<ReceiptPayment> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.ge(ReceiptPayment::getReceiptPaymentDate, currentMonth.atDay(1).atStartOfDay())  // 大于等于本月第一天
                .lt(ReceiptPayment::getReceiptPaymentDate, currentMonth.plusMonths(1).atDay(1).atStartOfDay()); // 小于下月第一天
        // 执行查询并计算总和
        List<ReceiptPayment> receiptPayments = receiptPaymentMapper.selectList(queryWrapper);
        BigDecimal receiveAmount = receiptPayments.stream()
                .map(ReceiptPayment::getReceiptPaymentAmount)
                .filter(Objects::nonNull)
                .reduce(BigDecimal.ZERO, BigDecimal::add);
        // 构建结果
        Map<String, BigDecimal> result = new HashMap<>();
        result.put("receiveAmount", receiveAmount);
        result.put("contractAmount", contractAmount);
        return result;
    }
    /**
     * 查询回款记录
     */
    @Override
    public List<ReceiptPaymentDto> receiptPaymentHistoryList(ReceiptPaymentDto receiptPaymentDto) {
        return receiptPaymentMapper.receiptPaymentHistoryList(receiptPaymentDto);
    }
    /**
     * 查询回款记录分页
     */
    @Override
    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;
    }
    /**
     * 查询回款记录分页
     */
    @Override
    public List<ReceiptPaymentDto> receiptPaymentHistoryListNoPage(ReceiptPaymentDto receiptPaymentDto) {
        return receiptPaymentMapper.receiptPaymentHistoryListNoPage( receiptPaymentDto);
    }
}