package com.ruoyi.sales.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.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; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; import java.math.BigDecimal; import java.time.LocalDate; import java.time.YearMonth; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @Service public class ReceiptPaymentServiceImpl extends ServiceImpl implements ReceiptPaymentService { @Autowired private ReceiptPaymentMapper receiptPaymentMapper; @Autowired private SalesLedgerMapper salesLedgerMapper; /** * 回款登记新增 * @param receiptPayment * @return */ @Override public int receiptPaymentSaveOrUpdate(ReceiptPayment receiptPayment) { if(null==receiptPayment.getId()){ return receiptPaymentMapper.insert(receiptPayment); }else { return receiptPaymentMapper.updateById(receiptPayment); } } /** * 回款登记修改 * @param receiptPayment * @return */ @Override public int receiptPaymentUpdate(ReceiptPayment receiptPayment) { return receiptPaymentMapper.updateById(receiptPayment); } /** * 回款登记删除 * @param ids * @return */ @Override public int receiptPaymentDel(List ids) { LambdaQueryWrapper delQuery = new LambdaQueryWrapper<>(); delQuery.in(ReceiptPayment::getId, ids); return receiptPaymentMapper.delete(delQuery); } /** * 回款登记分页查询 * @param page * @param receiptPaymentDto * @return */ @Override public IPage receiptPaymentListPage(Page page, ReceiptPaymentDto receiptPaymentDto) { // 计算分页前page.current-1 * limit条数的综合计算已经收回的回款金额 // 计算已经分页的条数 long total = (page.getCurrent() - 1) * page.getSize(); BigDecimal receiptAmount = receiptPaymentMapper.getReceiptAmount(receiptPaymentDto.getCustomerId(), total); if(ObjectUtils.isEmpty(receiptAmount)){ receiptAmount = BigDecimal.ZERO; } IPage iPage = receiptPaymentMapper.receiptPaymentListPage(page, receiptPaymentDto); // 开票总金额 BigDecimal invoiceTotal = CollectionUtils.isEmpty(iPage.getRecords()) ? BigDecimal.ZERO : iPage.getRecords().get(0).getInvoiceTotal(); // 当前应收金额 BigDecimal currentUnReceiptAmount = invoiceTotal.subtract(receiptAmount); for (ReceiptPaymentDto record : iPage.getRecords()) { currentUnReceiptAmount = currentUnReceiptAmount.subtract(record.getReceiptPaymentAmount()); record.setNoReceiptAmount(currentUnReceiptAmount); } return iPage; } /** * 回款登记详情 * @param id * @return */ @Override public ReceiptPaymentDto receiptPaymentInfo(Integer id) { return receiptPaymentMapper.receiptPaymentInfo(id); } @Override public BigDecimal getReceiptAmount() { LocalDate now = LocalDate.now(); YearMonth currentMonth = YearMonth.from(now); // 创建LambdaQueryWrapper LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.ge(ReceiptPayment::getReceiptPaymentDate, currentMonth.atDay(1).atStartOfDay()) // 大于等于本月第一天 .lt(ReceiptPayment::getReceiptPaymentDate, currentMonth.plusMonths(1).atDay(1).atStartOfDay()); // 小于下月第一天 // 执行查询并计算总和 List receiptPayments = receiptPaymentMapper.selectList(queryWrapper); BigDecimal totalContractAmount = receiptPayments.stream() .map(ReceiptPayment::getReceiptPaymentAmount) .filter(Objects::nonNull) .reduce(BigDecimal.ZERO, BigDecimal::add); return totalContractAmount; } /** * 查询已经绑定发票的开票台账 * @param page * @param receiptPaymentDto * @return */ @Override public IPage bindInvoiceNoRegPage(Page page, ReceiptPaymentDto receiptPaymentDto) { return receiptPaymentMapper.bindInvoiceNoRegPage(page, receiptPaymentDto); } /** * 开票台账详情 * @param id * @return */ @Override public InvoiceLedgerDto invoiceInfo(Integer id) { return receiptPaymentMapper.invoiceInfo(id); } @Override public Map getAmountMouth() { List 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 queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.ge(ReceiptPayment::getReceiptPaymentDate, currentMonth.atDay(1).atStartOfDay()) // 大于等于本月第一天 .lt(ReceiptPayment::getReceiptPaymentDate, currentMonth.plusMonths(1).atDay(1).atStartOfDay()); // 小于下月第一天 // 执行查询并计算总和 List receiptPayments = receiptPaymentMapper.selectList(queryWrapper); BigDecimal receiveAmount = receiptPayments.stream() .map(ReceiptPayment::getReceiptPaymentAmount) .filter(Objects::nonNull) .reduce(BigDecimal.ZERO, BigDecimal::add); // 构建结果 Map result = new HashMap<>(); result.put("receiveAmount", receiveAmount); result.put("contractAmount", contractAmount); return result; } }