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>