chenrui
3 天以前 83383b2b94d34c1986769d20c8cdd6149e46739c
开票登记编辑功能开发
已修改1个文件
84 ■■■■■ 文件已修改
src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java
@@ -11,9 +11,7 @@
import com.ruoyi.sales.dto.InvoiceRegistrationProductDto;
import com.ruoyi.sales.excel.InvoiceLedgerExcelDto;
import com.ruoyi.sales.mapper.*;
import com.ruoyi.sales.pojo.InvoiceLedger;
import com.ruoyi.sales.pojo.InvoiceLedgerFile;
import com.ruoyi.sales.pojo.ReceiptPayment;
import com.ruoyi.sales.pojo.*;
import com.ruoyi.sales.service.InvoiceLedgerService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
@@ -29,6 +27,7 @@
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.YearMonth;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
@@ -52,6 +51,9 @@
    @Autowired
    private ReceiptPaymentMapper receiptPaymentMapper;
    @Autowired
    private SalesLedgerProductMapper salesLedgerProductMapper;
    /**
     * 开票台账新增
     * @param productDto
@@ -74,6 +76,27 @@
            invoiceLedger.setInvoicePerson(productDto.getInvoicePerson());
            result = invoiceLedgerMapper.insert(invoiceLedger);
        }else {
            // 修改sale_leger_product
            InvoiceRegistrationProduct invoiceRegistrationProduct = invoiceRegistrationProductMapper.selectById(productDto.getId());
            SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(invoiceRegistrationProduct.getSalesLedgerProductId());
            BigDecimal invoiceNum = productDto.getInvoiceTotal().divide(invoiceRegistrationProduct.getTaxInclusiveTotalPrice(), 2, BigDecimal.ROUND_HALF_UP);
            //计算 未开票数/未开票金额
            BigDecimal noInvoiceAmount = salesLedgerProduct.getNoInvoiceAmount().add(invoiceRegistrationProduct.getInvoiceAmount()).subtract(productDto.getInvoiceTotal());
            BigDecimal noInvoiceNum = salesLedgerProduct.getNoInvoiceNum().add(invoiceRegistrationProduct.getInvoiceNum()).subtract(invoiceNum);
            salesLedgerProduct.setNoInvoiceAmount(noInvoiceAmount);
            salesLedgerProduct.setNoInvoiceNum(noInvoiceNum);
            salesLedgerProductMapper.updateById(salesLedgerProduct);
            // 修改当前产品开票登记记录数据
            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.setNoInvoiceNum(currentNoInvoiceNum);
            invoiceRegistrationProduct.setNoInvoiceAmount(currentNoInvoiceAmount);
            invoiceRegistrationProductMapper.updateById(invoiceRegistrationProduct);
            invoiceLedger.setInvoiceNo(productDto.getInvoiceNo());
            invoiceLedger.setInvoiceTotal(productDto.getInvoiceTotal());
            invoiceLedger.setInvoiceDate(productDto.getInvoiceDate());
@@ -318,10 +341,57 @@
        if(!CollectionUtils.isEmpty(receiptPaymentList)){
            throw new RuntimeException("请先删除回款记录");
        }
        // 判断是否有开票台账
        InvoiceRegistrationProduct invoiceRegistrationProduct = invoiceRegistrationProductMapper.selectById(invoiceRegistrationProductId);
        if(ObjectUtils.isEmpty(invoiceRegistrationProduct)){
            throw new RuntimeException("开票台账查找失败");
        }
        // 判断该开票台账是否未当月,如果为当月直接删除否则新增一条相反负数数据
        // 删除开票台账
        // 删除开票登记
        // 回滚已开票数量
        QueryWrapper<InvoiceLedger> delMapper = new QueryWrapper<>();
        delMapper.eq("invoice_registration_product_id", invoiceRegistrationProductId);
        invoiceLedgerMapper.delete(delMapper);
        // 删除开票登记并回滚
        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);
        int index =  -1;
        for (int i = 0; i < invoiceRegistrationProductList.size(); i++) {
            InvoiceRegistrationProduct currentInvoiceRegProduct = invoiceRegistrationProductList.get(i);
            if(invoiceRegistrationProduct.getId() == currentInvoiceRegProduct.getId()){
                index = i;
            }
        }
        if(index == -1){
            return;
        }
        for (int i = index + 1; i < invoiceRegistrationProductList.size(); i++) {
            InvoiceRegistrationProduct currentInvoiceRegProduct = invoiceRegistrationProductList.get(i);
            // 回滚未开票数/未开票金额
            BigDecimal noInvoiceAmount = currentInvoiceRegProduct.getNoInvoiceAmount().add(invoiceRegistrationProduct.getInvoiceAmount());
            BigDecimal noInvoiceNum = currentInvoiceRegProduct.getNoInvoiceNum().add(invoiceRegistrationProduct.getInvoiceNum());
            currentInvoiceRegProduct.setNoInvoiceAmount(noInvoiceAmount);
            currentInvoiceRegProduct.setNoInvoiceNum(noInvoiceNum);
            invoiceRegistrationProductMapper.updateById(currentInvoiceRegProduct);
        }
        invoiceRegistrationProductMapper.deleteById(invoiceRegistrationProductId);
        // 修改sale_product数据
        SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(invoiceRegistrationProduct.getSalesLedgerProductId());
        QueryWrapper<InvoiceRegistrationProduct> newQueryWrapper = new QueryWrapper<>();
        queryWrapper.eq("sales_ledger_id", invoiceRegistrationProduct.getSalesLedgerId());
        queryWrapper.eq("sales_ledger_product_id", invoiceRegistrationProduct.getSalesLedgerProductId());
        queryWrapper.orderByAsc("create_time");
        List<InvoiceRegistrationProduct> newInvoiceRegistrationProductList = invoiceRegistrationProductMapper.selectList(newQueryWrapper);
        if(CollectionUtils.isEmpty(newInvoiceRegistrationProductList)){
            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());
        }
        salesLedgerProductMapper.updateById(salesLedgerProduct);
    }
}