maven
10 小时以前 f752dd141b632d2f7243c2fd750f0b54ff19dba6
src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -10,15 +10,15 @@
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.production.mapper.SalesLedgerWorkMapper;
import com.ruoyi.production.pojo.SalesLedgerWork;
import com.ruoyi.sales.dto.InvoiceLedgerDto;
import com.ruoyi.sales.dto.SalesLedgerDto;
import com.ruoyi.sales.mapper.InvoiceLedgerMapper;
import com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper;
import com.ruoyi.sales.mapper.ReceiptPaymentMapper;
import com.ruoyi.sales.pojo.InvoiceLedger;
import com.ruoyi.sales.pojo.InvoiceRegistrationProduct;
import com.ruoyi.sales.pojo.ReceiptPayment;
import com.ruoyi.sales.pojo.SalesLedger;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
import com.ruoyi.sales.pojo.*;
import com.ruoyi.sales.service.ICommonFileService;
import com.ruoyi.sales.service.ISalesLedgerService;
import lombok.AllArgsConstructor;
@@ -28,10 +28,7 @@
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -57,6 +54,12 @@
    @Autowired
    private ReceiptPaymentMapper receiptPaymentMapper;
    @Autowired
    private SalesLedgerProductMapper salesLedgerProductMapper;
    @Autowired
    private SalesLedgerWorkMapper salesLedgerWorkMapper;
    /**
     * 查询销售台账列表
@@ -205,20 +208,54 @@
        }
        List<Long> salesLedgerIds = iPage.getRecords().stream().map(SalesLedger::getId).collect(Collectors.toList());
        List<InvoiceLedgerDto> invoiceLedgerDtoList = invoiceLedgerMapper.invoicedTotal(salesLedgerIds);
        if(CollectionUtils.isEmpty(invoiceLedgerDtoList)){
            iPage.setTotal(iPage.getRecords().size());
            return iPage;
        }
        // 计算回款金额,待回款金额
        List<InvoiceRegistrationProduct> invoiceRegistrationProducts = invoiceRegistrationProductMapper.selectList(new LambdaQueryWrapper<InvoiceRegistrationProduct>()
                .in(InvoiceRegistrationProduct::getSalesLedgerId, salesLedgerIds));
        List<InvoiceLedger> invoiceLedgers = invoiceLedgerMapper.selectList(new LambdaQueryWrapper<InvoiceLedger>()
                .in(InvoiceLedger::getInvoiceRegistrationProductId, invoiceRegistrationProducts.stream().map(InvoiceRegistrationProduct::getId).collect(Collectors.toList())));
        List<InvoiceLedger> invoiceLedgers = new ArrayList<>();
        if(!CollectionUtils.isEmpty(invoiceRegistrationProducts)){
            invoiceLedgers = invoiceLedgerMapper.selectList(new LambdaQueryWrapper<InvoiceLedger>()
                    .in(InvoiceLedger::getInvoiceRegistrationProductId, invoiceRegistrationProducts.stream().map(InvoiceRegistrationProduct::getId).collect(Collectors.toList())));
        }
        List<ReceiptPayment> receiptPayments = new ArrayList<>();
        if(!CollectionUtils.isEmpty(invoiceLedgers)){
            receiptPayments = receiptPaymentMapper.selectList(new LambdaQueryWrapper<ReceiptPayment>()
                    .in(ReceiptPayment::getInvoiceLedgerId, invoiceLedgers.stream().map(InvoiceLedger::getId).collect(Collectors.toList())));
        }
        // 获取销售产品数量
        List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper
                .selectList(new LambdaQueryWrapper<SalesLedgerProduct>()
                        .eq(SalesLedgerProduct::getType, 1)
                        .in(SalesLedgerProduct::getSalesLedgerId, salesLedgerIds));
        Map<Long, BigDecimal> salesLedgerProductCountMap = new HashMap<>();
        if (!CollectionUtils.isEmpty(salesLedgerProducts)) {
            salesLedgerProductCountMap = salesLedgerProducts
                    .stream()
                    .filter(Objects::nonNull)
                    .collect(Collectors.groupingBy(
                            SalesLedgerProduct::getSalesLedgerId,
                            Collectors.reducing(
                                    BigDecimal.ZERO,
                                    SalesLedgerProduct::getQuantity,
                                    BigDecimal::add
                            )
                    ));
        }
        // 获取销售产品生产报工数量
        List<SalesLedgerWork> salesLedgerWorks = salesLedgerWorkMapper.selectList(new LambdaQueryWrapper<SalesLedgerWork>()
                .in(SalesLedgerWork::getSalesLedgerId, salesLedgerIds));
        Map<Long, BigDecimal> salesLedgerWorkCountMap = new HashMap<>();
        if (!CollectionUtils.isEmpty(salesLedgerWorks)) {
            salesLedgerWorkCountMap = salesLedgerWorks
                    .stream()
                    .filter(Objects::nonNull)
                    .collect(Collectors.groupingBy(
                            SalesLedgerWork::getSalesLedgerId,
                            Collectors.reducing(
                                    BigDecimal.ZERO,
                                    SalesLedgerWork::getFinishedNum,
                                    BigDecimal::add
                            )
                    ));
        }
        for (SalesLedger salesLedger : iPage.getRecords()) {
            boolean existFlag = false;
@@ -258,13 +295,16 @@
                salesLedger.setNoInvoiceAmountTotal(salesLedger.getContractAmount());
            }
            salesLedger.setInvoiceTotal(invoiceTotal);
            // 判断是否是生产完成
            salesLedger.setProductionStatus(salesLedgerProductCountMap.get(salesLedger.getId()) == null ? "未开始" : salesLedgerProductCountMap.get(salesLedger.getId()).compareTo(salesLedgerWorkCountMap.get(salesLedger.getId())) > 0 ? "生产中" : "已完成");
        }
        if (ObjectUtils.isNotEmpty(salesLedgerDto.getStatus())) {
            if (salesLedgerDto.getStatus()) {
                iPage.getRecords().removeIf(salesLedger -> Objects.equals(salesLedger.getNoInvoiceAmountTotal(), new BigDecimal("0.00")));
                iPage.setTotal(iPage.getRecords().size());
            }
        }
        iPage.setTotal(iPage.getRecords().size());
        return iPage;
    }
}