From 7e9fe51df4f324988a86a62e79a26b43d387cb1a Mon Sep 17 00:00:00 2001 From: chenrui <1187576398@qq.com> Date: 星期一, 12 五月 2025 16:27:51 +0800 Subject: [PATCH] 开票登记前后端联调 --- src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java | 76 +++++++++++++-- src/main/java/com/ruoyi/sales/excel/InvoiceRegisAndProductExcelDto.java | 73 ++++++++++++++ src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java | 11 ++ src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationMapper.java | 9 + src/main/java/com/ruoyi/sales/service/InvoiceRegistrationService.java | 17 +++ src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java | 2 src/main/resources/mapper/sales/InvoiceRegistrationMapper.xml | 65 ++++++++++-- src/main/java/com/ruoyi/sales/controller/InvoiceRegistrationController.java | 29 +++++ src/main/java/com/ruoyi/common/config/IgnoreTableConfig.java | 2 src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationDto.java | 10 ++ src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationProductMapper.java | 2 11 files changed, 266 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/ruoyi/common/config/IgnoreTableConfig.java b/src/main/java/com/ruoyi/common/config/IgnoreTableConfig.java index 116fec3..79ae6d6 100644 --- a/src/main/java/com/ruoyi/common/config/IgnoreTableConfig.java +++ b/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"); } } diff --git a/src/main/java/com/ruoyi/sales/controller/InvoiceRegistrationController.java b/src/main/java/com/ruoyi/sales/controller/InvoiceRegistrationController.java index 00e1e88..f344ac6 100644 --- a/src/main/java/com/ruoyi/sales/controller/InvoiceRegistrationController.java +++ b/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); + } } diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java index 1c934a1..19122e8 100644 --- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java +++ b/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); + } } diff --git a/src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationDto.java b/src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationDto.java index 92d95fa..235a534 100644 --- a/src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationDto.java +++ b/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; + } diff --git a/src/main/java/com/ruoyi/sales/excel/InvoiceRegisAndProductExcelDto.java b/src/main/java/com/ruoyi/sales/excel/InvoiceRegisAndProductExcelDto.java new file mode 100644 index 0000000..8f042c6 --- /dev/null +++ b/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; + + +} diff --git a/src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationMapper.java b/src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationMapper.java index 88a3ebf..54425c4 100644 --- a/src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationMapper.java +++ b/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(); } diff --git a/src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationProductMapper.java b/src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationProductMapper.java index 754a7d7..6173459 100644 --- a/src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationProductMapper.java +++ b/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); - } diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java index 3d33354..79c397e 100644 --- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java +++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java @@ -59,7 +59,7 @@ * 绋庣巼 */ @Excel(name = "绋庣巼") - private String taxRate; + private BigDecimal taxRate; /** * 鍚◣鍗曚环 diff --git a/src/main/java/com/ruoyi/sales/service/InvoiceRegistrationService.java b/src/main/java/com/ruoyi/sales/service/InvoiceRegistrationService.java index 8cdd13d..6313b93 100644 --- a/src/main/java/com/ruoyi/sales/service/InvoiceRegistrationService.java +++ b/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); } diff --git a/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java index 012792a..3130872 100644 --- a/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java +++ b/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,19 +43,30 @@ */ @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(CollectionUtils.isNotEmpty(productDtoList)){ - for (InvoiceRegistrationProductDto invoiceRegistrationProductDto : productDtoList) { - InvoiceRegistrationProduct invoiceRegistrationProduct = new InvoiceRegistrationProduct(); - BeanUtils.copyProperties(invoiceRegistrationProductDto, invoiceRegistrationProduct); - invoiceRegistrationProduct.setInvoiceRegistrationId(invoiceRegistration.getId()); - invoiceRegistrationProductMapper.insert(invoiceRegistrationProduct); + // 鏂板寮�绁ㄧ櫥璁� + if(invoiceRegistrationDto.getId() == null){ + invoiceRegistrationMapper.insert(invoiceRegistration); + // 鏂板寮�绁ㄤ骇鍝佺櫥璁� + if(CollectionUtils.isNotEmpty(productDtoList)){ + for (InvoiceRegistrationProductDto invoiceRegistrationProductDto : productDtoList) { + InvoiceRegistrationProduct invoiceRegistrationProduct = new InvoiceRegistrationProduct(); + 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, "寮�绁ㄧ櫥璁颁俊鎭�"); + } } diff --git a/src/main/resources/mapper/sales/InvoiceRegistrationMapper.xml b/src/main/resources/mapper/sales/InvoiceRegistrationMapper.xml index b263bb6..45f6109 100644 --- a/src/main/resources/mapper/sales/InvoiceRegistrationMapper.xml +++ b/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> \ No newline at end of file -- Gitblit v1.9.3