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.pojo.ReceiptPayment;
|
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.List;
|
import java.util.Objects;
|
|
@Service
|
public class ReceiptPaymentServiceImpl extends ServiceImpl<ReceiptPaymentMapper,ReceiptPayment> implements ReceiptPaymentService {
|
|
@Autowired
|
private ReceiptPaymentMapper receiptPaymentMapper;
|
|
/**
|
* 回款登记新增
|
* @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<Integer> ids) {
|
LambdaQueryWrapper<ReceiptPayment> delQuery = new LambdaQueryWrapper<>();
|
delQuery.in(ReceiptPayment::getId, ids);
|
return receiptPaymentMapper.delete(delQuery);
|
}
|
|
/**
|
* 回款登记分页查询
|
* @param page
|
* @param receiptPaymentDto
|
* @return
|
*/
|
@Override
|
public IPage<ReceiptPaymentDto> 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<ReceiptPaymentDto> 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<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 totalContractAmount = receiptPayments.stream()
|
.map(ReceiptPayment::getReceiptPaymentAmount)
|
.filter(Objects::nonNull)
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
return totalContractAmount;
|
}
|
|
/**
|
* 查询已经绑定发票的开票台账
|
* @param page
|
* @param receiptPaymentDto
|
* @return
|
*/
|
@Override
|
public IPage<ReceiptPaymentDto> bindInvoiceNoRegPage(Page page, ReceiptPaymentDto receiptPaymentDto) {
|
return receiptPaymentMapper.bindInvoiceNoRegPage(page, receiptPaymentDto);
|
}
|
|
/**
|
* 开票台账详情
|
* @param id
|
* @return
|
*/
|
@Override
|
public InvoiceLedgerDto invoiceInfo(Integer id) {
|
return receiptPaymentMapper.invoiceInfo(id);
|
}
|
}
|