chenrui
2025-05-12 7e9fe51df4f324988a86a62e79a26b43d387cb1a
开票登记前后端联调
已修改10个文件
已添加1个文件
282 ■■■■■ 文件已修改
src/main/java/com/ruoyi/common/config/IgnoreTableConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/controller/InvoiceRegistrationController.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationDto.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/excel/InvoiceRegisAndProductExcelDto.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationProductMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/InvoiceRegistrationService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sales/InvoiceRegistrationMapper.xml 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/config/IgnoreTableConfig.java
@@ -25,6 +25,6 @@
        IGNORE_TABLES.add("sys_logininfor");
        IGNORE_TABLES.add("sys_post");
        IGNORE_TABLES.add("sys_user_post");
        IGNORE_TABLES.add("sales_ledger_product");
    }
}
src/main/java/com/ruoyi/sales/controller/InvoiceRegistrationController.java
@@ -8,6 +8,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@RestController
@@ -22,9 +23,9 @@
     * @param invoiceRegistrationDto
     * @return
     */
    @PostMapping("/add")
    public AjaxResult invoiceRegistrationAdd(@RequestBody InvoiceRegistrationDto invoiceRegistrationDto) {
        invoiceRegistrationService.invoiceRegistrationAdd(invoiceRegistrationDto);
    @PostMapping("/saveOrUpdate")
    public AjaxResult invoiceRegistrationSaveOrUpdate(@RequestBody InvoiceRegistrationDto invoiceRegistrationDto) {
        invoiceRegistrationService.invoiceRegistrationSaveOrUpdate(invoiceRegistrationDto);
        return AjaxResult.success();
    }
@@ -34,7 +35,7 @@
     * @return
     */
    @DeleteMapping("/del")
    public AjaxResult invoiceRegistrationDel(@RequestParam List<Integer> ids) {
    public AjaxResult invoiceRegistrationDel(@RequestBody  List<Integer> ids) {
        invoiceRegistrationService.invoiceRegistrationDel(ids);
        return AjaxResult.success();
    }
@@ -70,4 +71,24 @@
    public AjaxResult invoiceRegistrationProductList(InvoiceRegistrationProductDto invoiceRegistrationProductDto) {
        return AjaxResult.success(invoiceRegistrationService.invoiceRegistrationProductList(invoiceRegistrationProductDto));
    }
    /**
     * å¼€ç¥¨ç™»è®°äº§å“è¯¦æƒ…
     * @param id
     * @return
     */
    @GetMapping("/detail")
    public AjaxResult invoiceRegistrationDetail(Integer id) {
        return AjaxResult.success(invoiceRegistrationService.invoiceRegistrationDetail(id));
    }
    /**
     * å¼€ç¥¨ç™»è®°å¯¼å‡º
     * @param response
     * @param invoiceRegistrationDto
     */
    @PostMapping("/export")
    public void invoiceRegistrationExport(HttpServletResponse response, InvoiceRegistrationDto invoiceRegistrationDto) {
        invoiceRegistrationService.invoiceRegistrationExport(response, invoiceRegistrationDto);
    }
}
src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -86,4 +86,15 @@
        }
        return toAjax(salesLedgerService.deleteSalesLedgerByIds(ids));
    }
    /**
     * æŸ¥è¯¢é”€å”®å°è´¦ä¸åˆ†é¡µ
     * @param salesLedgerDto
     * @return
     */
    @GetMapping("/listNoPage")
    public AjaxResult listNoPage(SalesLedgerDto salesLedgerDto){
        List<SalesLedger> list = salesLedgerService.selectSalesLedgerList(salesLedgerDto);
        return AjaxResult.success(list);
    }
}
src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationDto.java
@@ -5,6 +5,7 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
@@ -13,4 +14,13 @@
    @ApiModelProperty(name = "开票登记产品集合")
    private List<InvoiceRegistrationProductDto> productDtoList;
    @ApiModelProperty(name = "客户合同号")
    private String customerContractNo;
    @ApiModelProperty(name = "客户名称")
    private String customerName;
    @ApiModelProperty(name = "合同金额")
    private BigDecimal contractAmount;
}
src/main/java/com/ruoyi/sales/excel/InvoiceRegisAndProductExcelDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,73 @@
package com.ruoyi.sales.excel;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class InvoiceRegisAndProductExcelDto {
    @Excel(name = "销售合同号")
    private String salesContractNo;
    @Excel(name = "客户合同号")
    private String customerContractNo;
    @Excel(name = "客户名称")
    private String customerName;
    @Excel(name =  "业务员")
    private String salesman;
    @Excel(name = "项目名称")
    private String projectName;
    @Excel(name =  "合同金额")
    private BigDecimal contractAmount;
    @Excel(name =  "产品大类")
    private String productCategory;
    @Excel(name =  "规格型号")
    private String specificationModel;
    @Excel(name =  "单位")
    private String unit;
    @Excel(name =  "数量")
    private BigDecimal quantity;
    @Excel(name =  "税率%")
    private BigDecimal taxRate;
    @Excel(name = "含税单价")
    private BigDecimal taxInclusiveUnitPrice;
    @Excel(name = "含税总价")
    private BigDecimal taxInclusiveTotalPrice;
    @Excel(name ="不含税总价")
    private BigDecimal taxExclusiveTotalPrice;
    @Excel(name ="发票类型")
    private String invoiceType;
    @Excel(name ="开票数")
    private Integer invoiceNum;
    @Excel(name ="未开票数")
    private Integer noInvoiceNum;
    @Excel(name ="开票金额")
    private BigDecimal invoiceAmount;
    @Excel(name ="未开票金额")
    private BigDecimal noInvoiceAmount;
}
src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationMapper.java
@@ -4,8 +4,11 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.sales.dto.InvoiceRegistrationDto;
import com.ruoyi.sales.excel.InvoiceRegisAndProductExcelDto;
import com.ruoyi.sales.pojo.InvoiceRegistration;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface InvoiceRegistrationMapper extends BaseMapper<InvoiceRegistration> {
@@ -16,4 +19,10 @@
     * @return
     */
    IPage<InvoiceRegistrationDto> invoiceRegistrationListPage(Page page, @Param("invoiceRegistrationDto") InvoiceRegistrationDto invoiceRegistrationDto);
    /**
     * å¼€ç¥¨ç™»è®°å¯¼å‡ºæ•°æ®æŸ¥è¯¢
     * @return
     */
    List<InvoiceRegisAndProductExcelDto> invoiceRegisAndProductExcelDtoList();
}
src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationProductMapper.java
@@ -1,6 +1,7 @@
package com.ruoyi.sales.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.sales.dto.InvoiceRegistrationDto;
import com.ruoyi.sales.dto.InvoiceRegistrationProductDto;
import com.ruoyi.sales.pojo.InvoiceRegistrationProduct;
import org.apache.ibatis.annotations.Param;
@@ -15,5 +16,4 @@
     * @return
     */
    List<InvoiceRegistrationProductDto> invoiceRegistrationProductList(@Param("invoiceRegistrationProductDto") InvoiceRegistrationProductDto invoiceRegistrationProductDto);
}
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -59,7 +59,7 @@
     * ç¨Žçއ
     */
    @Excel(name = "税率")
    private String taxRate;
    private BigDecimal taxRate;
    /**
     * å«ç¨Žå•ä»·
src/main/java/com/ruoyi/sales/service/InvoiceRegistrationService.java
@@ -6,6 +6,7 @@
import com.ruoyi.sales.dto.InvoiceRegistrationProductDto;
import org.springframework.web.bind.annotation.RequestBody;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
public interface InvoiceRegistrationService {
@@ -15,7 +16,7 @@
     * @param invoiceRegistrationDto
     * @return
     */
    void invoiceRegistrationAdd(InvoiceRegistrationDto invoiceRegistrationDto);
    void invoiceRegistrationSaveOrUpdate(InvoiceRegistrationDto invoiceRegistrationDto);
    /**
     * å¼€ç¥¨ç™»è®°åˆ é™¤
@@ -46,4 +47,18 @@
     * @return
     */
    List<InvoiceRegistrationProductDto> invoiceRegistrationProductList(InvoiceRegistrationProductDto invoiceRegistrationProductDto);
    /**
     * å¼€ç¥¨ç™»è®°è¯¦æƒ…
     * @param id
     * @return
     */
    InvoiceRegistrationDto invoiceRegistrationDetail(Integer id);
    /**
     * å¼€ç¥¨ç™»è®°å¯¼å‡º
     * @param response
     * @param invoiceRegistrationDto
     */
    void invoiceRegistrationExport(HttpServletResponse response, InvoiceRegistrationDto invoiceRegistrationDto);
}
src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java
@@ -1,11 +1,15 @@
package com.ruoyi.sales.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.basic.excel.SupplierManageExcelDto;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.sales.dto.InvoiceRegistrationDto;
import com.ruoyi.sales.dto.InvoiceRegistrationProductDto;
import com.ruoyi.sales.excel.InvoiceRegisAndProductExcelDto;
import com.ruoyi.sales.mapper.InvoiceRegistrationMapper;
import com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper;
import com.ruoyi.sales.pojo.InvoiceRegistration;
@@ -16,7 +20,11 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class InvoiceRegistrationServiceImpl extends ServiceImpl<InvoiceRegistrationMapper, InvoiceRegistration> implements InvoiceRegistrationService {
@@ -35,12 +43,13 @@
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void invoiceRegistrationAdd(InvoiceRegistrationDto invoiceRegistrationDto) {
    public void invoiceRegistrationSaveOrUpdate(InvoiceRegistrationDto invoiceRegistrationDto) {
        InvoiceRegistration invoiceRegistration = new InvoiceRegistration();
        BeanUtils.copyProperties(invoiceRegistrationDto, invoiceRegistration);
        // æ–°å¢žå¼€ç¥¨ç™»è®°
        invoiceRegistrationMapper.insert(invoiceRegistration);
        List<InvoiceRegistrationProductDto> productDtoList = invoiceRegistrationDto.getProductDtoList();
        // æ–°å¢žå¼€ç¥¨ç™»è®°
        if(invoiceRegistrationDto.getId() == null){
            invoiceRegistrationMapper.insert(invoiceRegistration);
        // æ–°å¢žå¼€ç¥¨äº§å“ç™»è®°
        if(CollectionUtils.isNotEmpty(productDtoList)){
            for (InvoiceRegistrationProductDto invoiceRegistrationProductDto : productDtoList) {
@@ -48,6 +57,16 @@
                BeanUtils.copyProperties(invoiceRegistrationProductDto, invoiceRegistrationProduct);
                invoiceRegistrationProduct.setInvoiceRegistrationId(invoiceRegistration.getId());
                invoiceRegistrationProductMapper.insert(invoiceRegistrationProduct);
                }
            }
        // å¼€ç¥¨ç™»è®°ä¿®æ”¹
        }else {
            if(CollectionUtils.isNotEmpty(productDtoList)){
                for (InvoiceRegistrationProductDto invoiceRegistrationProductDto : productDtoList) {
                    InvoiceRegistrationProduct invoiceRegistrationProduct = new InvoiceRegistrationProduct();
                    BeanUtils.copyProperties(invoiceRegistrationProductDto, invoiceRegistrationProduct);
                    invoiceRegistrationProductMapper.updateById(invoiceRegistrationProduct);
                }
            }
        }
    }
@@ -109,4 +128,41 @@
    public List<InvoiceRegistrationProductDto> invoiceRegistrationProductList(InvoiceRegistrationProductDto invoiceRegistrationProductDto) {
        return invoiceRegistrationProductMapper.invoiceRegistrationProductList(invoiceRegistrationProductDto);
    }
    /**
     * å¼€ç¥¨ç™»è®°è¯¦æƒ…
     * @param id
     * @return
     */
    @Override
    public InvoiceRegistrationDto invoiceRegistrationDetail(Integer id) {
        InvoiceRegistration invoiceRegistration = invoiceRegistrationMapper.selectById(id);
        if(ObjectUtils.isEmpty(invoiceRegistration)){
            throw new RuntimeException("开票登记信息查找失败");
        }
        InvoiceRegistrationDto invoiceRegistrationDto = new InvoiceRegistrationDto();
        BeanUtils.copyProperties(invoiceRegistration, invoiceRegistrationDto);
        QueryWrapper<InvoiceRegistrationProduct> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("invoice_registration_id", id);
        List<InvoiceRegistrationProduct> invoiceRegistrationProductList = invoiceRegistrationProductMapper.selectList(queryWrapper);
        List<InvoiceRegistrationProductDto> invoiceRegistrationProductDtoList = invoiceRegistrationProductList.stream().map(item -> {
            InvoiceRegistrationProductDto invoiceRegistrationProductDto = new InvoiceRegistrationProductDto();
            BeanUtils.copyProperties(item, invoiceRegistrationProductDto);
            return invoiceRegistrationProductDto;
        }).collect(Collectors.toList());
        invoiceRegistrationDto.setProductDtoList(invoiceRegistrationProductDtoList);
        return invoiceRegistrationDto;
    }
    /**
     * å¼€ç¥¨ç™»è®°å¯¼å‡º
     * @param response
     * @param invoiceRegistrationDto
     */
    @Override
    public void invoiceRegistrationExport(HttpServletResponse response, InvoiceRegistrationDto invoiceRegistrationDto) {
        List<InvoiceRegisAndProductExcelDto> invoiceRegisAndProductExcelDtoList = invoiceRegistrationMapper.invoiceRegisAndProductExcelDtoList();
        ExcelUtil<InvoiceRegisAndProductExcelDto> util = new ExcelUtil<InvoiceRegisAndProductExcelDto>(InvoiceRegisAndProductExcelDto.class);
        util.exportExcel(response, invoiceRegisAndProductExcelDtoList, "开票登记信息");
    }
}
src/main/resources/mapper/sales/InvoiceRegistrationMapper.xml
@@ -5,17 +5,58 @@
<mapper namespace="com.ruoyi.sales.mapper.InvoiceRegistrationMapper">
    <select id="invoiceRegistrationListPage" resultType="com.ruoyi.sales.dto.InvoiceRegistrationDto">
        SELECT
            id              ,
            sales_ledger_id   ,
            sales_contract_no ,
            customer_id       ,
            salesman          ,
            project_name      ,
            create_time       ,
            create_user       ,
            update_time       ,
            update_user       ,
            tenant_id
        FROM invoice_registration
            T1.id              ,
            T1.sales_ledger_id   ,
            T1.sales_contract_no ,
            T1.customer_id       ,
            T1.salesman          ,
            T1.project_name      ,
            T1.create_time       ,
            T1.create_user       ,
            T1.update_time       ,
            T1.update_user       ,
            T1.tenant_id,
            T2.customer_contract_no,
            T3.customer_name,
            T2.contract_amount
        FROM invoice_registration T1
        LEFT JOIN sales_ledger T2 ON T1.sales_ledger_id = T2.id
        LEFT JOIN customer T3 ON T1.customer_id = T3.id
    </select>
    <select id="invoiceRegisAndProductExcelDtoList" resultType="com.ruoyi.sales.excel.InvoiceRegisAndProductExcelDto">
        SELECT
            T1.id              ,
            T1.sales_ledger_id   ,
            T1.sales_contract_no ,
            T1.customer_id       ,
            T1.salesman          ,
            T1.project_name      ,
            T1.create_time       ,
            T1.create_user       ,
            T1.update_time       ,
            T1.update_user       ,
            T1.tenant_id,
            T2.customer_contract_no,
            T3.customer_name,
            T2.contract_amount,
            T4.product_category,
            T4.specification_model,
            T4.unit,
            T4.quantity,
            T4.tax_rate,
            T4.tax_inclusive_unit_price,
            T4.tax_inclusive_total_price,
            T4.tax_exclusive_total_price,
            T4.invoice_type,
            T4.invoice_num,
            T4.invoice_amount,
            T4.no_invoice_num,
            T4.no_invoice_amount
        FROM invoice_registration T1
                 JOIN sales_ledger T2 ON T1.sales_ledger_id = T2.id
                 JOIN customer T3 ON T1.customer_id = T3.id
                JOIN invoice_registration_product T4 ON T1.id = T4.invoice_registration_id
        ORDER BY T1.id ASC
    </select>
</mapper>