From 436d2ae994f2ab3553da7f8a2828ef80cf982eae Mon Sep 17 00:00:00 2001 From: chenrui <1187576398@qq.com> Date: 星期四, 08 五月 2025 17:10:39 +0800 Subject: [PATCH] 开票登记功能开发 --- src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml | 38 ++++ src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java | 111 ++++++++++++ src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationProductDto.java | 9 + src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationMapper.java | 19 ++ src/main/java/com/ruoyi/sales/pojo/InvoiceRegistrationProduct.java | 87 +++++++++ src/main/java/com/ruoyi/sales/service/InvoiceRegistrationService.java | 49 +++++ src/main/java/com/ruoyi/sales/pojo/InvoiceRegistration.java | 53 +++++ src/main/resources/mapper/sales/InvoiceRegistrationMapper.xml | 21 ++ src/main/java/com/ruoyi/sales/controller/InvoiceRegistrationController.java | 73 ++++++++ src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationDto.java | 16 + src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationProductMapper.java | 19 ++ 11 files changed, 495 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/ruoyi/sales/controller/InvoiceRegistrationController.java b/src/main/java/com/ruoyi/sales/controller/InvoiceRegistrationController.java new file mode 100644 index 0000000..5dd3c0f --- /dev/null +++ b/src/main/java/com/ruoyi/sales/controller/InvoiceRegistrationController.java @@ -0,0 +1,73 @@ +package com.ruoyi.sales.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.framework.web.domain.AjaxResult; +import com.ruoyi.sales.dto.InvoiceRegistrationDto; +import com.ruoyi.sales.dto.InvoiceRegistrationProductDto; +import com.ruoyi.sales.service.InvoiceRegistrationService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/invoiceRegistration") +public class InvoiceRegistrationController { + + @Autowired + private InvoiceRegistrationService invoiceRegistrationService; + + /** + * 寮�绁ㄧ櫥璁版柊澧� + * @param invoiceRegistrationDto + * @return + */ + @PostMapping("/add") + public AjaxResult invoiceRegistrationAdd(@RequestBody InvoiceRegistrationDto invoiceRegistrationDto) { + invoiceRegistrationService.invoiceRegistrationAdd(invoiceRegistrationDto); + return AjaxResult.success(); + } + + /** + * 寮�绁ㄧ櫥璁板垹闄� + * @param ids + * @return + */ + @DeleteMapping("/del") + public AjaxResult invoiceRegistrationDel(List<Integer> ids) { + invoiceRegistrationService.invoiceRegistrationDel(ids); + return AjaxResult.success(); + } + + /** + * 寮�绁ㄨ褰曚慨鏀� + * @param invoiceRegistrationDto + * @return + */ + @PostMapping("/update") + public AjaxResult invoiceRegistrationUpdate(@RequestBody InvoiceRegistrationDto invoiceRegistrationDto) { + invoiceRegistrationService.invoiceRegistrationUpdate(invoiceRegistrationDto); + return AjaxResult.success(); + } + + /** + * 寮�绁ㄧ櫥璁板垎椤垫煡璇� + * @param page + * @param invoiceRegistrationDto + * @return + */ + @GetMapping("/listPage") + public AjaxResult invoiceRegistrationListPage(Page page, InvoiceRegistrationDto invoiceRegistrationDto) { + return AjaxResult.success(invoiceRegistrationService.invoiceRegistrationListPage(page, invoiceRegistrationDto)); + } + + /** + * 寮�绁ㄧ櫥璁颁骇鍝佹煡璇� + * @param invoiceRegistrationProductDto + * @return + */ + @GetMapping("/productList") + public AjaxResult invoiceRegistrationProductList(InvoiceRegistrationProductDto invoiceRegistrationProductDto) { + return AjaxResult.success(invoiceRegistrationService.invoiceRegistrationProductList(invoiceRegistrationProductDto)); + } +} diff --git a/src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationDto.java b/src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationDto.java new file mode 100644 index 0000000..92d95fa --- /dev/null +++ b/src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationDto.java @@ -0,0 +1,16 @@ +package com.ruoyi.sales.dto; + +import com.ruoyi.sales.pojo.InvoiceRegistration; +import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class InvoiceRegistrationDto extends InvoiceRegistration { + + @ApiModelProperty(name = "寮�绁ㄧ櫥璁颁骇鍝侀泦鍚�") + private List<InvoiceRegistrationProductDto> productDtoList; + +} diff --git a/src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationProductDto.java b/src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationProductDto.java new file mode 100644 index 0000000..9a86ebd --- /dev/null +++ b/src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationProductDto.java @@ -0,0 +1,9 @@ +package com.ruoyi.sales.dto; + +import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; +import lombok.Data; + +@Data +public class InvoiceRegistrationProductDto extends InvoiceRegistrationProduct { + +} diff --git a/src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationMapper.java b/src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationMapper.java new file mode 100644 index 0000000..88a3ebf --- /dev/null +++ b/src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationMapper.java @@ -0,0 +1,19 @@ +package com.ruoyi.sales.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +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.pojo.InvoiceRegistration; +import org.apache.ibatis.annotations.Param; + +public interface InvoiceRegistrationMapper extends BaseMapper<InvoiceRegistration> { + + /** + * 寮�绁ㄧ櫥璁板垎椤垫煡璇� + * @param page + * @param invoiceRegistrationDto + * @return + */ + IPage<InvoiceRegistrationDto> invoiceRegistrationListPage(Page page, @Param("invoiceRegistrationDto") InvoiceRegistrationDto invoiceRegistrationDto); +} diff --git a/src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationProductMapper.java b/src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationProductMapper.java new file mode 100644 index 0000000..754a7d7 --- /dev/null +++ b/src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationProductMapper.java @@ -0,0 +1,19 @@ +package com.ruoyi.sales.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.sales.dto.InvoiceRegistrationProductDto; +import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface InvoiceRegistrationProductMapper extends BaseMapper<InvoiceRegistrationProduct> { + + /** + * 寮�绁ㄧ櫥璁颁骇鍝佹煡璇� + * @param invoiceRegistrationProductDto + * @return + */ + List<InvoiceRegistrationProductDto> invoiceRegistrationProductList(@Param("invoiceRegistrationProductDto") InvoiceRegistrationProductDto invoiceRegistrationProductDto); + +} diff --git a/src/main/java/com/ruoyi/sales/pojo/InvoiceRegistration.java b/src/main/java/com/ruoyi/sales/pojo/InvoiceRegistration.java new file mode 100644 index 0000000..0b8849d --- /dev/null +++ b/src/main/java/com/ruoyi/sales/pojo/InvoiceRegistration.java @@ -0,0 +1,53 @@ +package com.ruoyi.sales.pojo; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +@TableName("invoice_registration") +public class InvoiceRegistration { + + /** + * 搴忓彿 + */ + @TableId(type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "閿�鍞彴璐ales_ledger涓婚敭") + private Integer salesLedgerId; + + @ApiModelProperty(value = "閿�鍞悎鍚屽彿") + private String salesContractNo; + + @ApiModelProperty(value = "瀹㈡埛鍚嶇ОID") + private Integer customerId; + + @ApiModelProperty(value = "涓氬姟鍛�") + private String salesman; + + @ApiModelProperty(value = "椤圭洰鍚嶇О") + private String projectName; + + @ApiModelProperty(value = "鍒涘缓鏃堕棿") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛") + @TableField(fill = FieldFill.INSERT) + private Integer createUser; + + @ApiModelProperty(value = "淇敼鏃堕棿") + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + + @ApiModelProperty(value = "淇敼鐢ㄦ埛") + @TableField(fill = FieldFill.INSERT_UPDATE) + private Integer updateUser; + + @ApiModelProperty(value = "绉熸埛ID") + @TableField(fill = FieldFill.INSERT) + private Integer tenantId; +} diff --git a/src/main/java/com/ruoyi/sales/pojo/InvoiceRegistrationProduct.java b/src/main/java/com/ruoyi/sales/pojo/InvoiceRegistrationProduct.java new file mode 100644 index 0000000..3e683d8 --- /dev/null +++ b/src/main/java/com/ruoyi/sales/pojo/InvoiceRegistrationProduct.java @@ -0,0 +1,87 @@ +package com.ruoyi.sales.pojo; + +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@TableName("invoice_registration_product") +@Data +public class InvoiceRegistrationProduct { + + /** + * 搴忓彿 + */ + @TableId(type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "鍏宠仈閿�鍞彴璐︿富琛ㄤ富閿�") + private Integer salesLedgerId; + + @ApiModelProperty(value = "sales_ledger_product涓婚敭") + private Integer salesLedgerProductId; + + @ApiModelProperty(value = "寮�绁ㄧ櫥璁拌〃invoice_registration涓婚敭") + private Integer invoiceRegistrationId; + + @ApiModelProperty(value = "浜у搧澶х被") + private String productCategory; + + @ApiModelProperty(value = "瑙勬牸鍨嬪彿") + private String specificationModel; + + @ApiModelProperty(value = "鍗曚綅") + private String unit; + + @ApiModelProperty(value = "鏁伴噺") + private BigDecimal quantity; + + @ApiModelProperty(value = "绋庣巼") + private BigDecimal taxRate; + + @ApiModelProperty(value = "鍚◣鍗曚环") + private BigDecimal taxInclusiveUnitPrice; + + @ApiModelProperty(value = "鍚◣鎬讳环") + private BigDecimal taxInclusiveTotalPrice; + + @ApiModelProperty(value = "涓嶅惈绋庢�讳环") + private BigDecimal taxExclusiveTotalPrice; + + @ApiModelProperty(value = "鍙戠エ绫诲瀷") + private String invoiceType; + + @ApiModelProperty(value = "寮�绁ㄦ暟") + private Integer invoiceNum; + + @ApiModelProperty(value = "鏈紑绁ㄦ暟") + private Integer noInvoiceNum; + + @ApiModelProperty(value = "寮�绁ㄩ噾棰�") + private BigDecimal invoiceAmount; + + @ApiModelProperty(value = "鏈紑绁ㄩ噾棰�") + private BigDecimal noInvoiceAmount; + + @ApiModelProperty(value = "鍒涘缓鏃堕棿") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛") + @TableField(fill = FieldFill.INSERT) + private Integer createUser; + + @ApiModelProperty(value = "淇敼鏃堕棿") + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + + @ApiModelProperty(value = "淇敼鐢ㄦ埛") + @TableField(fill = FieldFill.INSERT_UPDATE) + private Integer updateUser; + + @ApiModelProperty(value = "绉熸埛ID") + @TableField(fill = FieldFill.INSERT) + private Integer tenantId; +} diff --git a/src/main/java/com/ruoyi/sales/service/InvoiceRegistrationService.java b/src/main/java/com/ruoyi/sales/service/InvoiceRegistrationService.java new file mode 100644 index 0000000..8cdd13d --- /dev/null +++ b/src/main/java/com/ruoyi/sales/service/InvoiceRegistrationService.java @@ -0,0 +1,49 @@ +package com.ruoyi.sales.service; + +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.dto.InvoiceRegistrationProductDto; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +public interface InvoiceRegistrationService { + + /** + * 寮�绁ㄧ櫥璁版柊澧� + * @param invoiceRegistrationDto + * @return + */ + void invoiceRegistrationAdd(InvoiceRegistrationDto invoiceRegistrationDto); + + /** + * 寮�绁ㄧ櫥璁板垹闄� + * @param ids + * @return + */ + int invoiceRegistrationDel(List<Integer> ids); + + + /** + * 寮�绁ㄨ褰曚慨鏀� + * @param invoiceRegistrationDto + * @return + */ + void invoiceRegistrationUpdate(InvoiceRegistrationDto invoiceRegistrationDto); + + /** + * 寮�绁ㄧ櫥璁板垎椤垫煡璇� + * @param page + * @param invoiceRegistrationDto + * @return + */ + IPage<InvoiceRegistrationDto> invoiceRegistrationListPage(Page page, InvoiceRegistrationDto invoiceRegistrationDto); + + /** + * 寮�绁ㄧ櫥璁颁骇鍝佹煡璇� + * @param invoiceRegistrationProductDto + * @return + */ + List<InvoiceRegistrationProductDto> invoiceRegistrationProductList(InvoiceRegistrationProductDto invoiceRegistrationProductDto); +} diff --git a/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java new file mode 100644 index 0000000..eaf278b --- /dev/null +++ b/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java @@ -0,0 +1,111 @@ +package com.ruoyi.sales.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +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.sales.dto.InvoiceRegistrationDto; +import com.ruoyi.sales.dto.InvoiceRegistrationProductDto; +import com.ruoyi.sales.mapper.InvoiceRegistrationMapper; +import com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper; +import com.ruoyi.sales.pojo.InvoiceRegistration; +import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; +import com.ruoyi.sales.service.InvoiceRegistrationService; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collections; +import java.util.List; + +@Service +public class InvoiceRegistrationServiceImpl extends ServiceImpl<InvoiceRegistrationMapper, InvoiceRegistration> implements InvoiceRegistrationService { + + private InvoiceRegistrationMapper invoiceRegistrationMapper; + + private InvoiceRegistrationProductMapper invoiceRegistrationProductMapper; + + + /** + * 寮�绁ㄧ櫥璁版柊澧� + * @param invoiceRegistrationDto + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void invoiceRegistrationAdd(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); + } + } + } + + /** + * 寮�绁ㄧ櫥璁板垹闄� + * @param ids + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int invoiceRegistrationDel(List<Integer> ids) { + int excuteNum = invoiceRegistrationMapper.deleteBatchIds(ids); + LambdaQueryWrapper<InvoiceRegistrationProduct> delWrapper = new LambdaQueryWrapper<>(); + delWrapper.in(InvoiceRegistrationProduct::getInvoiceRegistrationId, ids); + invoiceRegistrationProductMapper.delete(delWrapper); + return excuteNum; + } + + /** + * 寮�绁ㄨ褰曚慨鏀� + * @param invoiceRegistrationDto + * @return + */ + @Override + public void invoiceRegistrationUpdate(InvoiceRegistrationDto invoiceRegistrationDto) { + InvoiceRegistration invoiceRegistration = new InvoiceRegistration(); + BeanUtils.copyProperties(invoiceRegistrationDto, invoiceRegistration); + // 寮�绁ㄧ櫥璁颁慨鏀� + invoiceRegistrationMapper.updateById(invoiceRegistration); + List<InvoiceRegistrationProductDto> productDtoList = invoiceRegistrationDto.getProductDtoList(); + // 寮�绁ㄤ骇鍝佺櫥璁颁慨鏀� + if(CollectionUtils.isNotEmpty(productDtoList)){ + for (InvoiceRegistrationProductDto invoiceRegistrationProductDto : productDtoList) { + InvoiceRegistrationProduct invoiceRegistrationProduct = new InvoiceRegistrationProduct(); + BeanUtils.copyProperties(invoiceRegistrationProductDto, invoiceRegistrationProduct); + invoiceRegistrationProductMapper.updateById(invoiceRegistrationProduct); + } + } + } + + /** + * 寮�绁ㄧ櫥璁板垎椤垫煡璇� + * @param page + * @param invoiceRegistrationDto + * @return + */ + @Override + public IPage<InvoiceRegistrationDto> invoiceRegistrationListPage(Page page, InvoiceRegistrationDto invoiceRegistrationDto) { + return null; + } + + /** + * 寮�绁ㄧ櫥璁颁骇鍝佹煡璇� + * @param invoiceRegistrationProductDto + * @return + */ + @Override + public List<InvoiceRegistrationProductDto> invoiceRegistrationProductList(InvoiceRegistrationProductDto invoiceRegistrationProductDto) { + return Collections.emptyList(); + } +} diff --git a/src/main/resources/mapper/sales/InvoiceRegistrationMapper.xml b/src/main/resources/mapper/sales/InvoiceRegistrationMapper.xml new file mode 100644 index 0000000..b263bb6 --- /dev/null +++ b/src/main/resources/mapper/sales/InvoiceRegistrationMapper.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<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 + </select> +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml b/src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml new file mode 100644 index 0000000..5a6b7c1 --- /dev/null +++ b/src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper"> + + <select id="invoiceRegistrationProductList" resultType="com.ruoyi.sales.dto.InvoiceRegistrationDto"> + SELECT + id , + sales_ledger_id , + sales_ledger_product_id , + invoice_registration_id , + product_category , + specification_model , + unit , + quantity , + tax_rate , + tax_inclusive_unit_price , + tax_inclusive_total_price , + tax_exclusive_total_price , + invoice_type , + invoice_num , + invoice_amount , + no_invoice_num , + no_invoice_amount , + create_time , + create_user , + update_time , + update_user , + tenant_id , + FROM invoice_registration_product + <where> + <if test="invoiceRegistrationProductDto.invoiceRegistrationId != null"> + invoice_registration_id = #{invoiceRegistrationProductDto.invoiceRegistrationId} + </if> + </where> + </select> +</mapper> \ No newline at end of file -- Gitblit v1.9.3