liyong
3 天以前 6ed42390d7231b0d26700898ee2922732043effa
src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java
@@ -5,6 +5,7 @@
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.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.vo.FileVo;
import com.ruoyi.sales.dto.InvoiceLedgerDto;
@@ -92,7 +93,7 @@
            BigDecimal currentNoInvoiceNum = invoiceRegistrationProduct.getNoInvoiceNum().add(invoiceRegistrationProduct.getInvoiceNum()).subtract(invoiceNum);
            BigDecimal currentNoInvoiceAmount = invoiceRegistrationProduct.getNoInvoiceAmount().add(invoiceRegistrationProduct.getInvoiceAmount()).subtract(productDto.getInvoiceTotal());
            invoiceRegistrationProduct.setInvoiceNum(invoiceNum);
            invoiceRegistrationProduct.setInvoiceAmount(productDto.getInvoiceAmount());
            invoiceRegistrationProduct.setInvoiceAmount(productDto.getInvoiceTotal());
            invoiceRegistrationProduct.setNoInvoiceNum(currentNoInvoiceNum);
            invoiceRegistrationProduct.setNoInvoiceAmount(currentNoInvoiceAmount);
            invoiceRegistrationProductMapper.updateById(invoiceRegistrationProduct);
@@ -301,7 +302,11 @@
     */
    @Override
    public IPage<InvoiceRegistrationProductDto> registrationProductPage(Page page, InvoiceRegistrationProductDto registrationProductDto) {
        return invoiceRegistrationProductMapper.invoiceRegistrationProductPage(page,registrationProductDto);
        IPage<InvoiceRegistrationProductDto> invoiceRegistrationProductDtoIPage = invoiceRegistrationProductMapper.invoiceRegistrationProductPage(page, registrationProductDto);
        if (registrationProductDto.getStatus()) {
            invoiceRegistrationProductDtoIPage.getRecords().removeIf(invoiceRegistrationProduct -> !StringUtils.isEmpty(invoiceRegistrationProduct.getInvoiceNo()));
        }
        return invoiceRegistrationProductDtoIPage;
    }
    /**
@@ -341,13 +346,39 @@
        if(!CollectionUtils.isEmpty(receiptPaymentList)){
            throw new RuntimeException("请先删除回款记录");
        }
        // 判断是否有开票台账
        // 判断是否有开票登记记录
        InvoiceRegistrationProduct invoiceRegistrationProduct = invoiceRegistrationProductMapper.selectById(invoiceRegistrationProductId);
        if(ObjectUtils.isEmpty(invoiceRegistrationProduct)){
            throw new RuntimeException("开票台账查找失败");
            throw new RuntimeException("开票登记记录查找失败");
        }
        // 判断该开票台账是否未当月,如果为当月直接删除否则新增一条相反负数数据
        QueryWrapper<InvoiceLedger> ledgerQueryWrapper = new QueryWrapper<>();
        ledgerQueryWrapper.eq("invoice_registration_product_id", invoiceRegistrationProductId);
        InvoiceLedger invoiceLedger = invoiceLedgerMapper.selectOne(ledgerQueryWrapper);
        if(ObjectUtils.isEmpty(invoiceLedger)){
            throw new RuntimeException("开票台账查找失败");
        }
        if( invoiceLedger.getInvoiceDate() == null){
            dealCurrentMonthDel(invoiceRegistrationProductId,invoiceRegistrationProduct);
            return;
        }
        // 获取当前日期
        LocalDate today = LocalDate.now();
        // 使用YearMonth比较年份和月份是否相同
        boolean equalsFlag = YearMonth.from(invoiceLedger.getInvoiceDate()).equals(YearMonth.from(today));
        if(equalsFlag){
            dealCurrentMonthDel(invoiceRegistrationProductId,invoiceRegistrationProduct);
        }else {
            dealOtherMonthDel(invoiceRegistrationProduct,invoiceLedger);
        }
    }
    /**
     * 处理当月开票台账删除
     * @param invoiceRegistrationProductId
     * @param invoiceRegistrationProduct
     */
    private void dealCurrentMonthDel(Integer invoiceRegistrationProductId,InvoiceRegistrationProduct invoiceRegistrationProduct){
        // 删除开票台账
        QueryWrapper<InvoiceLedger> delMapper = new QueryWrapper<>();
        delMapper.eq("invoice_registration_product_id", invoiceRegistrationProductId);
@@ -358,6 +389,7 @@
        queryWrapper.eq("sales_ledger_product_id", invoiceRegistrationProduct.getSalesLedgerProductId());
        queryWrapper.orderByAsc("create_time");
        List<InvoiceRegistrationProduct> invoiceRegistrationProductList = invoiceRegistrationProductMapper.selectList(queryWrapper);
//        InvoiceRegistrationProduct invoiceRegistrationProduct = invoiceRegistrationProductMapper.selectById(invoiceRegistrationProductId);
        int index =  -1;
        for (int i = 0; i < invoiceRegistrationProductList.size(); i++) {
            InvoiceRegistrationProduct currentInvoiceRegProduct = invoiceRegistrationProductList.get(i);
@@ -389,9 +421,57 @@
            salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity());
            salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxInclusiveTotalPrice());
        }else {
            salesLedgerProduct.setNoInvoiceNum(newInvoiceRegistrationProductList.get(newInvoiceRegistrationProductList.size()-1).getNoInvoiceNum());
            salesLedgerProduct.setNoInvoiceAmount(newInvoiceRegistrationProductList.get(newInvoiceRegistrationProductList.size()-1).getNoInvoiceAmount());
            salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getNoInvoiceNum().add(invoiceRegistrationProduct.getInvoiceNum()));
            salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getNoInvoiceAmount().add(invoiceRegistrationProduct.getInvoiceAmount()));
        }
        salesLedgerProductMapper.updateById(salesLedgerProduct);
    }
    /**
     * 处理其他月份开票台账删除
     * @param invoiceRegistrationProduct
     * @param invoiceLedger
     */
    private void dealOtherMonthDel(InvoiceRegistrationProduct invoiceRegistrationProduct,InvoiceLedger invoiceLedger ){
        InvoiceRegistrationProduct copyRegProduct = new InvoiceRegistrationProduct();
        BeanUtils.copyProperties(invoiceRegistrationProduct, copyRegProduct);
        BigDecimal invoiceNum = copyRegProduct.getInvoiceNum().negate();
        BigDecimal invoiceAmount = copyRegProduct.getInvoiceAmount().negate();
        // invoice_registration_product
        // 删除开票登记并回滚
        QueryWrapper<InvoiceRegistrationProduct> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("sales_ledger_id", invoiceRegistrationProduct.getSalesLedgerId());
        queryWrapper.eq("sales_ledger_product_id", invoiceRegistrationProduct.getSalesLedgerProductId());
        queryWrapper.orderByAsc("create_time");
        List<InvoiceRegistrationProduct> invoiceRegistrationProductList = invoiceRegistrationProductMapper.selectList(queryWrapper);
        InvoiceRegistrationProduct lastInvoiceRegistrationProduct = invoiceRegistrationProductList.get(invoiceRegistrationProductList.size() - 1);
        BigDecimal noInvoiceNum = lastInvoiceRegistrationProduct.getNoInvoiceNum().subtract(invoiceNum);
        BigDecimal noInvoiceAmount = lastInvoiceRegistrationProduct.getNoInvoiceAmount().subtract(invoiceAmount);
        copyRegProduct.setInvoiceNum(invoiceNum);
        copyRegProduct.setInvoiceAmount(invoiceAmount);
        copyRegProduct.setNoInvoiceNum(noInvoiceNum);
        copyRegProduct.setNoInvoiceAmount(noInvoiceAmount);
        copyRegProduct.setId(null);
        invoiceRegistrationProductMapper.insert(copyRegProduct);
        // 复制开票台账
        InvoiceLedger invoiceLedgerCopy = new InvoiceLedger();
        BeanUtils.copyProperties(invoiceLedger, invoiceLedgerCopy);
        invoiceLedgerCopy.setInvoiceRegistrationProductId(copyRegProduct.getId());
        BigDecimal invoiceTotal = invoiceLedgerCopy.getInvoiceTotal().negate();
        invoiceLedgerCopy.setInvoiceTotal(invoiceTotal);
        invoiceLedgerCopy.setId(null);
        invoiceLedgerCopy.setInvoiceDate(LocalDate.now());
        invoiceLedgerMapper.insert(invoiceLedgerCopy);
        // 更新sales_leger_product
        QueryWrapper<SalesLedgerProduct> salesLedgerProductQueryWrapper = new QueryWrapper<>();
        salesLedgerProductQueryWrapper.eq("id", invoiceRegistrationProduct.getSalesLedgerProductId());
        SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectOne(salesLedgerProductQueryWrapper);
        salesLedgerProduct.setNoInvoiceNum(noInvoiceNum);
        salesLedgerProduct.setNoInvoiceAmount(noInvoiceAmount);
        BigDecimal newInvoiceNum = salesLedgerProduct.getInvoiceNum().add(invoiceNum);
        BigDecimal newInvocieAmount = salesLedgerProduct.getInvoiceAmount().add(invoiceAmount);
        salesLedgerProduct.setInvoiceNum(newInvoiceNum);
        salesLedgerProduct.setInvoiceAmount(newInvocieAmount);
        salesLedgerProductMapper.updateById(salesLedgerProduct);
    }
}