src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java
@@ -3,6 +3,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.sales.dto.InvoiceLedgerDto; import com.ruoyi.sales.dto.InvoiceRegistrationProductDto; import com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper; import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; import com.ruoyi.sales.service.InvoiceLedgerService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -19,14 +22,17 @@ @Autowired private InvoiceLedgerService invoiceLedgerService; @Autowired private InvoiceRegistrationProductMapper invoiceRegistrationProductMapper; /** * 开票台账新增 * @param invoiceLedgerDto * @param productDto * @return */ @PostMapping("/saveOrUpdate") public AjaxResult invoiceLedgerSaveOrUpdate(@RequestBody InvoiceLedgerDto invoiceLedgerDto) { invoiceLedgerService.invoiceLedgerSaveOrUpdate(invoiceLedgerDto); public AjaxResult invoiceLedgerSaveOrUpdate(@RequestBody InvoiceRegistrationProductDto productDto) { invoiceLedgerService.invoiceLedgerSaveOrUpdate(productDto); return AjaxResult.success(); } @@ -146,4 +152,25 @@ } } /** * 产品开票记录查询 * @param page * @param registrationProductDto * @return */ @GetMapping("/registrationProductPage") public AjaxResult registrationProductPage(Page page, InvoiceRegistrationProductDto registrationProductDto) { return AjaxResult.success(invoiceLedgerService.registrationProductPage(page,registrationProductDto)); } /** * 产品开票详情 * @param id * @return */ @GetMapping("/invoiceLedgerProductInfo") public AjaxResult invoiceLedgerProductDetail(Integer id) { return AjaxResult.success(invoiceLedgerService.invoiceLedgerProductDetail(id)); } } src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationProductDto.java
@@ -1,9 +1,49 @@ package com.ruoyi.sales.dto; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.vo.FileVo; import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDate; import java.util.List; @Data public class InvoiceRegistrationProductDto extends InvoiceRegistrationProduct { @ApiModelProperty(name = "客户合同号") private String customerContractNo; @ApiModelProperty(name = "客户名称") private String customerName; @ApiModelProperty(name = "销售合同号") private String salesContractNo; @ApiModelProperty(name = "附件") private List<FileVo> fileList; @ApiModelProperty(value = "发票号") private String invoiceNo; @ApiModelProperty(value = "发票金额") private BigDecimal invoiceTotal; @ApiModelProperty(value = "开票人") private String invoicePerson; @ApiModelProperty(value = "开票时间") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate invoiceDate; @ApiModelProperty(value = "开票台账id") private Integer invoiceLedgerId; @ApiModelProperty(value = "发票文件名") private String invoiceFileName; } src/main/java/com/ruoyi/sales/mapper/InvoiceLedgerMapper.java
@@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.sales.dto.InvoiceLedgerDto; import com.ruoyi.sales.dto.InvoiceRegistrationProductDto; import com.ruoyi.sales.pojo.InvoiceLedger; import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -41,4 +43,11 @@ */ IPage<InvoiceLedgerDto> invoiceLedgerSalesAccount(Page page, InvoiceLedgerDto invoiceLedgerDto); /** * 产品开票台账详情 * @param id * @return */ InvoiceRegistrationProductDto invoiceLedgerProductInfo(Integer id); } src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationProductMapper.java
@@ -1,7 +1,8 @@ package com.ruoyi.sales.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.sales.dto.InvoiceRegistrationDto; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.sales.dto.InvoiceRegistrationProductDto; import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; import org.apache.ibatis.annotations.Param; @@ -16,4 +17,12 @@ * @return */ List<InvoiceRegistrationProductDto> invoiceRegistrationProductList(@Param("invoiceRegistrationProductDto") InvoiceRegistrationProductDto invoiceRegistrationProductDto); /** * 开票登记产品分页查询 * @param page * @param invoiceRegistrationProductDto * @return */ IPage<InvoiceRegistrationProductDto> invoiceRegistrationProductPage(Page page, @Param("invoiceRegistrationProductDto") InvoiceRegistrationProductDto invoiceRegistrationProductDto); } src/main/java/com/ruoyi/sales/pojo/InvoiceLedger.java
@@ -22,23 +22,14 @@ @TableId(type = IdType.AUTO) private Integer id; @ApiModelProperty(value = "销售台账sales_ledger") private Integer salesLedgerId; @ApiModelProperty(value = "销售合同号") private String salesContractNo; @ApiModelProperty(value = "客户名称ID") private Integer customerId; @ApiModelProperty(value = "invoice_registration_product表主键") private Integer invoiceRegistrationProductId; @ApiModelProperty(value = "发票号") private String invoiceNo; @ApiModelProperty(value = "发票金额") private BigDecimal invoiceAmount; @ApiModelProperty(value = "税率") private BigDecimal taxRate; private BigDecimal invoiceTotal; @ApiModelProperty(value = "开票人") private String invoicePerson; src/main/java/com/ruoyi/sales/service/InvoiceLedgerService.java
@@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.vo.FileVo; import com.ruoyi.sales.dto.InvoiceLedgerDto; import com.ruoyi.sales.dto.InvoiceRegistrationProductDto; import com.ruoyi.sales.pojo.InvoiceLedgerFile; import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; @@ -15,10 +17,10 @@ /** * 开票台账新增 * @param invoiceLedgerDto * @param productDto * @return */ int invoiceLedgerSaveOrUpdate( InvoiceLedgerDto invoiceLedgerDto); int invoiceLedgerSaveOrUpdate( InvoiceRegistrationProductDto productDto); /** * 开票台账删除 @@ -87,4 +89,19 @@ IPage<InvoiceLedgerDto> invoiceLedgerSalesAccount(Page page, InvoiceLedgerDto invoiceLedgerDto); BigDecimal getInvoiceAmount(); /** * 开票登记产品分页查询 * @param page * @param registrationProductDto * @return */ IPage<InvoiceRegistrationProductDto> registrationProductPage(Page page, InvoiceRegistrationProductDto registrationProductDto); /** * 产品开票台账详情 * @param id * @return */ InvoiceRegistrationProductDto invoiceLedgerProductDetail(Integer id); } src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java
@@ -8,12 +8,15 @@ import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.vo.FileVo; import com.ruoyi.sales.dto.InvoiceLedgerDto; import com.ruoyi.sales.dto.InvoiceRegistrationProductDto; import com.ruoyi.sales.excel.InvoiceLedgerExcelDto; import com.ruoyi.sales.mapper.InvoiceLedgerFileMapper; 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.InvoiceLedgerFile; import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; import com.ruoyi.sales.pojo.ReceiptPayment; import com.ruoyi.sales.service.InvoiceLedgerService; import org.apache.commons.collections4.CollectionUtils; @@ -30,6 +33,7 @@ import java.math.BigDecimal; import java.time.LocalDate; import java.time.YearMonth; import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.UUID; @@ -48,36 +52,48 @@ private InvoiceLedgerFileMapper invoiceLedgerFileMapper; @Autowired private ReceiptPaymentMapper receiptPaymentMapper; private InvoiceRegistrationProductMapper invoiceRegistrationProductMapper; /** * 开票台账新增 * @param invoiceLedgerDto * @param productDto * @return */ @Override @Transactional(rollbackFor = Exception.class) public int invoiceLedgerSaveOrUpdate(InvoiceLedgerDto invoiceLedgerDto) { InvoiceLedger invoiceLedger = new InvoiceLedger(); BeanUtils.copyProperties(invoiceLedgerDto, invoiceLedger); public int invoiceLedgerSaveOrUpdate(InvoiceRegistrationProductDto productDto) { // 判断是否已经新增开票台账 QueryWrapper<InvoiceLedger> ledgerQueryWrapper = new QueryWrapper<>(); ledgerQueryWrapper.eq("invoice_registration_product_id", productDto.getId()); InvoiceLedger invoiceLedger = invoiceLedgerMapper.selectOne(ledgerQueryWrapper); int result; if(invoiceLedgerDto.getId() == null){ if(ObjectUtils.isEmpty(invoiceLedger)){ invoiceLedger = new InvoiceLedger(); invoiceLedger.setInvoiceRegistrationProductId(productDto.getId()); invoiceLedger.setInvoiceNo(productDto.getInvoiceNo()); invoiceLedger.setInvoiceTotal(productDto.getInvoiceTotal()); invoiceLedger.setInvoiceDate(productDto.getInvoiceDate()); invoiceLedger.setInvoicePerson(productDto.getInvoicePerson()); result = invoiceLedgerMapper.insert(invoiceLedger); }else { invoiceLedger.setInvoiceNo(productDto.getInvoiceNo()); invoiceLedger.setInvoiceTotal(productDto.getInvoiceTotal()); invoiceLedger.setInvoiceDate(productDto.getInvoiceDate()); invoiceLedger.setInvoicePerson(productDto.getInvoicePerson()); result = invoiceLedgerMapper.updateById(invoiceLedger); //删除所有附件关联 LambdaQueryWrapper<InvoiceLedgerFile> delWrapper = new LambdaQueryWrapper<>(); delWrapper.eq(InvoiceLedgerFile::getInvoiceLedgerId, invoiceLedgerDto.getId()); delWrapper.eq(InvoiceLedgerFile::getInvoiceLedgerId, invoiceLedger.getId()); invoiceLedgerFileMapper.delete(delWrapper); } List<FileVo> fileList = invoiceLedgerDto.getFileList(); List<FileVo> fileList = productDto.getFileList(); if(CollectionUtils.isNotEmpty(fileList)){ fileList.forEach(fileVo -> { for (FileVo fileVo : fileList) { InvoiceLedgerFile invoiceLedgerFile = new InvoiceLedgerFile(); BeanUtils.copyProperties(fileVo, invoiceLedgerFile); invoiceLedgerFile.setInvoiceLedgerId(invoiceLedger.getId()); invoiceLedgerFileMapper.insert(invoiceLedgerFile); }); } } return result; } @@ -226,20 +242,20 @@ @Override public IPage<InvoiceLedgerDto> invoiceLedgerSalesAccount(Page page, InvoiceLedgerDto invoiceLedgerDto) { IPage<InvoiceLedgerDto> invoiceLedgerDtoIPage = invoiceLedgerMapper.invoiceLedgerSalesAccount(page, invoiceLedgerDto); for (InvoiceLedgerDto record : invoiceLedgerDtoIPage.getRecords()) { QueryWrapper<ReceiptPayment> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("customer_id", record.getCustomerId()); List<ReceiptPayment> receiptPaymentList = receiptPaymentMapper.selectList(queryWrapper); BigDecimal totalAmount = BigDecimal.ZERO; if(!CollectionUtils.isEmpty(receiptPaymentList)){ for (ReceiptPayment receiptPayment : receiptPaymentList) { totalAmount = totalAmount.add(receiptPayment.getInvoiceAmount()); } } BigDecimal unReceiptPaymentAmount = record.getInvoiceAmount().subtract(totalAmount); record.setReceiptPaymentAmount(totalAmount); record.setUnReceiptPaymentAmount(unReceiptPaymentAmount); } // for (InvoiceLedgerDto record : invoiceLedgerDtoIPage.getRecords()) { // QueryWrapper<ReceiptPayment> queryWrapper = new QueryWrapper<>(); // queryWrapper.eq("customer_id", record.getCustomerId()); // List<ReceiptPayment> receiptPaymentList = receiptPaymentMapper.selectList(queryWrapper); // BigDecimal totalAmount = BigDecimal.ZERO; // if(!CollectionUtils.isEmpty(receiptPaymentList)){ // for (ReceiptPayment receiptPayment : receiptPaymentList) { // totalAmount = totalAmount.add(receiptPayment.getInvoiceAmount()); // } // } // BigDecimal unReceiptPaymentAmount = record.getInvoiceAmount().subtract(totalAmount); // record.setReceiptPaymentAmount(totalAmount); // record.setUnReceiptPaymentAmount(unReceiptPaymentAmount); // } return invoiceLedgerDtoIPage; } @@ -256,12 +272,48 @@ // 执行查询并计算总和 List<InvoiceLedger> invoiceLedgers = invoiceLedgerMapper.selectList(queryWrapper); BigDecimal totalContractAmount = invoiceLedgers.stream() .map(InvoiceLedger::getInvoiceAmount) .filter(Objects::nonNull) .reduce(BigDecimal.ZERO, BigDecimal::add); // BigDecimal totalContractAmount = invoiceLedgers.stream() // .map(InvoiceLedger::getInvoiceAmount) // .filter(Objects::nonNull) // .reduce(BigDecimal.ZERO, BigDecimal::add); // // return totalContractAmount; return null; } return totalContractAmount; /** * 开票登记产品分页查询 * @param page * @param registrationProductDto * @return */ @Override public IPage<InvoiceRegistrationProductDto> registrationProductPage(Page page, InvoiceRegistrationProductDto registrationProductDto) { return invoiceRegistrationProductMapper.invoiceRegistrationProductPage(page,registrationProductDto); } /** * 产品开票台账详情 * @param id * @return */ @Override public InvoiceRegistrationProductDto invoiceLedgerProductDetail(Integer id) { InvoiceRegistrationProductDto invoiceRegistrationProductDto = invoiceLedgerMapper.invoiceLedgerProductInfo(id); if(ObjectUtils.isEmpty(invoiceRegistrationProductDto)){ throw new RuntimeException("产品开票台账查找失败"); } // 查询附件 QueryWrapper<InvoiceLedgerFile> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("invoice_ledger_id", invoiceRegistrationProductDto.getInvoiceLedgerId()); List<InvoiceLedgerFile> invoiceLedgerFileList = invoiceLedgerFileMapper.selectList(queryWrapper); List<FileVo> fileList = invoiceLedgerFileList.stream().map(item -> { FileVo fileVo = new FileVo(); BeanUtils.copyProperties(item, fileVo); return fileVo; }).collect(Collectors.toList()); invoiceRegistrationProductDto.setFileList(fileList); return invoiceRegistrationProductDto; } } src/main/resources/mapper/sales/InvoiceLedgerMapper.xml
@@ -122,5 +122,43 @@ T2.customer_name; </select> <select id="invoiceLedgerProductInfo" resultType="com.ruoyi.sales.dto.InvoiceRegistrationProductDto"> SELECT T1.id , T1.sales_ledger_id , T1.sales_ledger_product_id , T1.invoice_registration_id , T1.product_category , T1.specification_model , T1.unit , T1.quantity , T1.tax_rate , T1.tax_inclusive_unit_price , T1.tax_inclusive_total_price , T1.tax_exclusive_total_price , T1.invoice_type , T1.invoice_num , T1.invoice_amount , T1.no_invoice_num , T1.no_invoice_amount , T1.create_time , T1.create_user , T1.update_time , T1.update_user , T1.tenant_id, T2.sales_contract_no, T2.customer_contract_no, T2.customer_name, T3.invoice_no, T3.invoice_total, T3.invoice_person, T3.invoice_date, T3.id AS invoice_ledger_id FROM invoice_registration_product T1 LEFT JOIN sales_ledger T2 ON T1.sales_ledger_id = T2.id LEFT JOIN invoice_ledger T3 ON T1.id = T3.invoice_registration_product_id WHERE T1.id = #{id} </select> </mapper> src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml
@@ -35,4 +35,48 @@ </if> </where> </select> <select id="invoiceRegistrationProductPage" resultType="com.ruoyi.sales.dto.InvoiceRegistrationProductDto"> SELECT T1.id , T1.sales_ledger_id , T1.sales_ledger_product_id , T1.invoice_registration_id , T1.product_category , T1.specification_model , T1.unit , T1.quantity , T1.tax_rate , T1.tax_inclusive_unit_price , T1.tax_inclusive_total_price , T1.tax_exclusive_total_price , T1.invoice_type , T1.invoice_num , T1.invoice_amount , T1.no_invoice_num , T1.no_invoice_amount , T1.create_time , T1.create_user , T1.update_time , T1.update_user , T1.tenant_id, T2.sales_contract_no, T2.customer_contract_no, T2.customer_name, T3.invoice_no, T3.invoice_total, T3.invoice_person, T3.invoice_date, T4.invoiceFileName FROM invoice_registration_product T1 LEFT JOIN sales_ledger T2 ON T1.sales_ledger_id = T2.id LEFT JOIN invoice_ledger T3 ON T1.id = T3.invoice_registration_product_id LEFT JOIN ( SELECT invoice_ledger_id, GROUP_CONCAT( name ORDER BY id ASC SEPARATOR ' | ') AS invoiceFileName FROM invoice_ledger_file GROUP BY invoice_ledger_id ) T4 ON T4.invoice_ledger_id = T3.id ORDER BY T1.create_time DESC </select> </mapper>