chenrui
3 天以前 05de62989998157eab6ae4809ec3a45db6783e10
开票台账删除功能修改
已修改1个文件
80 ■■■■■ 文件已修改
src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java
@@ -92,7 +92,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);
@@ -341,13 +341,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);
@@ -394,4 +420,52 @@
        }
        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);
    }
}