src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationProductRecordMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationRecordMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ruoyi/sales/pojo/InvoiceRegistrationProductRecord.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ruoyi/sales/pojo/InvoiceRegistrationRecord.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/mapper/sales/InvoiceRegistrationMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/ruoyi/sales/dto/InvoiceRegistrationDto.java
@@ -23,4 +23,7 @@ @ApiModelProperty(name = "ååéé¢") private BigDecimal contractAmount; @ApiModelProperty(name = "æªå¼ç¥¨éé¢") private BigDecimal noInvoiceAmountTotal; } src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationProductRecordMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ 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 com.ruoyi.sales.pojo.InvoiceRegistrationProductRecord; import org.apache.ibatis.annotations.Param; import java.util.List; public interface InvoiceRegistrationProductRecordMapper extends BaseMapper<InvoiceRegistrationProductRecord> { } src/main/java/com/ruoyi/sales/mapper/InvoiceRegistrationRecordMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ 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.excel.InvoiceRegisAndProductExcelDto; import com.ruoyi.sales.pojo.InvoiceRegistration; import com.ruoyi.sales.pojo.InvoiceRegistrationRecord; import org.apache.ibatis.annotations.Param; import java.util.List; public interface InvoiceRegistrationRecordMapper extends BaseMapper<InvoiceRegistrationRecord> { } src/main/java/com/ruoyi/sales/pojo/InvoiceRegistrationProductRecord.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_record") @Data public class InvoiceRegistrationProductRecord { /** * åºå· */ @TableId(type = IdType.AUTO) private Integer id; @ApiModelProperty(value = "å ³èéå®å°è´¦ä¸»è¡¨ä¸»é®") private Integer salesLedgerId; @ApiModelProperty(value = "sales_ledger_product主é®") private Integer salesLedgerProductId; @ApiModelProperty(value = "å¼ç¥¨ç»è®°è¡¨invoice_registration_record主é®") private Integer invoiceRegistrationRecordId; @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; } src/main/java/com/ruoyi/sales/pojo/InvoiceRegistrationRecord.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_record") public class InvoiceRegistrationRecord { /** * åºå· */ @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 = "ä¸å¡å") 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; } src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** @@ -101,12 +102,24 @@ private BigDecimal ticketsAmount; /** * æªæ¥ç¥¨æ° * æªå¼ç¥¨æ° */ private Long futureTickets; /** * æªæ¥ç¥¨éé¢(å ) * æªå¼ç¥¨éé¢(å ) */ private BigDecimal futureTicketsAmount; @ApiModelProperty(value = "å¼ç¥¨æ°") private Integer invoiceNum; @ApiModelProperty(value = "æªå¼ç¥¨æ°") private Integer noInvoiceNum; @ApiModelProperty(value = "å¼ç¥¨éé¢") private BigDecimal invoiceAmount; @ApiModelProperty(value = "æªå¼ç¥¨éé¢") private BigDecimal noInvoiceAmount; } src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java
@@ -12,8 +12,12 @@ import com.ruoyi.sales.excel.InvoiceRegisAndProductExcelDto; import com.ruoyi.sales.mapper.InvoiceRegistrationMapper; import com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper; import com.ruoyi.sales.mapper.InvoiceRegistrationProductRecordMapper; import com.ruoyi.sales.mapper.InvoiceRegistrationRecordMapper; import com.ruoyi.sales.pojo.InvoiceRegistration; import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; import com.ruoyi.sales.pojo.InvoiceRegistrationProductRecord; import com.ruoyi.sales.pojo.InvoiceRegistrationRecord; import com.ruoyi.sales.service.InvoiceRegistrationService; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.BeanUtils; @@ -23,6 +27,7 @@ import org.springframework.util.ObjectUtils; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.util.List; import java.util.stream.Collectors; @@ -35,6 +40,12 @@ @Autowired private InvoiceRegistrationProductMapper invoiceRegistrationProductMapper; @Autowired private InvoiceRegistrationRecordMapper invoiceRegistrationRecordMapper; @Autowired private InvoiceRegistrationProductRecordMapper invoiceRegistrationProductRecordMapper; /** * å¼ç¥¨ç»è®°æ°å¢ @@ -44,29 +55,71 @@ @Override @Transactional(rollbackFor = Exception.class) public void invoiceRegistrationSaveOrUpdate(InvoiceRegistrationDto invoiceRegistrationDto) { InvoiceRegistration invoiceRegistration = new InvoiceRegistration(); BeanUtils.copyProperties(invoiceRegistrationDto, invoiceRegistration); List<InvoiceRegistrationProductDto> productDtoList = invoiceRegistrationDto.getProductDtoList(); // æ°å¢å¼ç¥¨ç»è®° if(invoiceRegistrationDto.getId() == null){ invoiceRegistrationMapper.insert(invoiceRegistration); // æ°å¢å¼ç¥¨äº§åç»è®° Integer salesLedgerId = invoiceRegistrationDto.getSalesLedgerId(); if (null == salesLedgerId){ throw new RuntimeException("æªå ³èéå®åå"); } QueryWrapper<InvoiceRegistration> inRegWrapper = new QueryWrapper<>(); inRegWrapper.eq("sales_ledger_id", salesLedgerId); InvoiceRegistration invoiceRegistration = invoiceRegistrationMapper.selectOne(inRegWrapper); Integer invoiceRegistrationId = null; // 夿æ¯å¦å·²ç»åè¿ç»è®°ï¼å¦ææåå¹¶ï¼å¦ææ²¡ææ°å¢ if(ObjectUtils.isEmpty(invoiceRegistration)){ InvoiceRegistration insertInvocieReg = new InvoiceRegistration(); BeanUtils.copyProperties(invoiceRegistrationDto, insertInvocieReg); invoiceRegistrationMapper.insert(insertInvocieReg); invoiceRegistrationId = insertInvocieReg.getId(); }else { invoiceRegistrationId = invoiceRegistration.getId(); } // æ¥è¯¢äº§åæ¯å¦å·²ç»ç»è®° if(CollectionUtils.isNotEmpty(productDtoList)){ QueryWrapper<InvoiceRegistrationProduct> inRegProductWrapper = new QueryWrapper<>(); inRegProductWrapper.eq("invoice_registration_id", invoiceRegistrationId); List<InvoiceRegistrationProduct> invoiceRegistrationProductList = invoiceRegistrationProductMapper.selectList(inRegProductWrapper); if(CollectionUtils.isNotEmpty(invoiceRegistrationProductList)){ // æ¹éæ´æ° for (InvoiceRegistrationProduct invoiceRegistrationProduct : invoiceRegistrationProductList) { for (InvoiceRegistrationProductDto invoiceRegistrationProductDto : productDtoList) { if( null != invoiceRegistrationProductDto.getId() && null != invoiceRegistrationProduct.getSalesLedgerProductId() && invoiceRegistrationProductDto.getId() == invoiceRegistrationProduct.getSalesLedgerProductId().longValue() ){ // 计ç®å·²å¼ç¥¨æ° invoiceRegistrationProduct.setInvoiceNum(invoiceRegistrationProduct.getInvoiceNum() + invoiceRegistrationProductDto.getInvoiceNum()); // 计ç®å·²å¼ç¥¨éé¢ invoiceRegistrationProduct.setInvoiceAmount(invoiceRegistrationProduct.getInvoiceAmount().add(invoiceRegistrationProductDto.getInvoiceAmount())); // // è®¡ç®æªå¼ç¥¨æ° invoiceRegistrationProduct.setNoInvoiceNum(invoiceRegistrationProductDto.getNoInvoiceNum()); // // è®¡ç®æªå¼ç¥¨éé¢ å«ç¨æ»ä»·-å¼ç¥¨éé¢ invoiceRegistrationProduct.setNoInvoiceAmount(invoiceRegistrationProductDto.getNoInvoiceAmount()); invoiceRegistrationProductMapper.updateById(invoiceRegistrationProduct); } } } }else { // æ¹éæå ¥ for (InvoiceRegistrationProductDto invoiceRegistrationProductDto : productDtoList) { InvoiceRegistrationProduct invoiceRegistrationProduct = new InvoiceRegistrationProduct(); BeanUtils.copyProperties(invoiceRegistrationProductDto, invoiceRegistrationProduct); invoiceRegistrationProduct.setInvoiceRegistrationId(invoiceRegistration.getId()); invoiceRegistrationProduct.setInvoiceRegistrationId(invoiceRegistrationId); invoiceRegistrationProduct.setSalesLedgerProductId(invoiceRegistrationProductDto.getId()); invoiceRegistrationProduct.setId(null); invoiceRegistrationProductMapper.insert(invoiceRegistrationProduct); } } // å¼ç¥¨ç»è®°ä¿®æ¹ }else { } // ä¿åæ¬æ¬¡å¼ç¥¨ç»è®°è®°å½ InvoiceRegistrationRecord invoiceRegistrationRecord = new InvoiceRegistrationRecord(); BeanUtils.copyProperties(invoiceRegistrationDto, invoiceRegistrationRecord); invoiceRegistrationRecordMapper.insert(invoiceRegistrationRecord); if(CollectionUtils.isNotEmpty(productDtoList)){ for (InvoiceRegistrationProductDto invoiceRegistrationProductDto : productDtoList) { InvoiceRegistrationProduct invoiceRegistrationProduct = new InvoiceRegistrationProduct(); BeanUtils.copyProperties(invoiceRegistrationProductDto, invoiceRegistrationProduct); invoiceRegistrationProductMapper.updateById(invoiceRegistrationProduct); } InvoiceRegistrationProductRecord invoiceRegistrationProductRecord = new InvoiceRegistrationProductRecord(); BeanUtils.copyProperties(invoiceRegistrationProductDto, invoiceRegistrationProductRecord); invoiceRegistrationProductRecord.setInvoiceRegistrationRecordId(invoiceRegistrationRecord.getId()); invoiceRegistrationProductRecord.setSalesLedgerProductId(invoiceRegistrationProductDto.getId()); invoiceRegistrationProductRecord.setId(null); invoiceRegistrationProductRecordMapper.insert(invoiceRegistrationProductRecord); } } } src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -1,6 +1,7 @@ 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.mapper.BaseMapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -13,9 +14,11 @@ import com.ruoyi.other.pojo.TempFile; import com.ruoyi.sales.dto.SalesLedgerDto; import com.ruoyi.sales.mapper.CommonFileMapper; import com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper; import com.ruoyi.sales.mapper.SalesLedgerMapper; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; import com.ruoyi.sales.pojo.CommonFile; import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.sales.pojo.SalesLedgerProduct; import com.ruoyi.sales.service.ISalesLedgerService; @@ -23,11 +26,13 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FilenameUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.DefaultRedisScript; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import java.io.IOException; import java.lang.reflect.Field; @@ -66,6 +71,9 @@ private final TempFileMapper tempFileMapper; @Autowired private InvoiceRegistrationProductMapper invoiceRegistrationProductMapper; @Value("${file.upload-dir}") private String uploadDir; @@ -95,6 +103,30 @@ LambdaQueryWrapper<SalesLedgerProduct> productWrapper = new LambdaQueryWrapper<>(); productWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedger.getId()); List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper); // æ¥è¯¢æªå¼ç¥¨éé¢/æªå¼ç¥¨æ° if (CollectionUtils.isNotEmpty(products)) { QueryWrapper<InvoiceRegistrationProduct> productQueryWrapper = new QueryWrapper<>(); List<Long> productIds = products.stream().map(SalesLedgerProduct::getId).collect(Collectors.toList()); productQueryWrapper.in("sales_ledger_product_id", productIds); List<InvoiceRegistrationProduct> invoiceRegistrationProductList = invoiceRegistrationProductMapper.selectList(productQueryWrapper); if(CollectionUtils.isNotEmpty(invoiceRegistrationProductList)){ for (SalesLedgerProduct product : products) { for (InvoiceRegistrationProduct invoiceRegistrationProduct : invoiceRegistrationProductList) { Integer salesLedgerProductId = invoiceRegistrationProduct.getSalesLedgerProductId(); Long id = product.getId(); if( null != id && null != salesLedgerProductId && id == salesLedgerProductId.longValue()){ product.setFutureTickets(Long.valueOf(invoiceRegistrationProduct.getNoInvoiceNum())); product.setFutureTicketsAmount(invoiceRegistrationProduct.getNoInvoiceAmount()); } } } }else { for (SalesLedgerProduct product : products) { product.setFutureTickets(product.getQuantity().longValue()); product.setFutureTicketsAmount(product.getTaxInclusiveTotalPrice()); } } } // 3.æ¥è¯¢ä¸ä¼ æä»¶ LambdaQueryWrapper<CommonFile> salesLedgerFileWrapper = new LambdaQueryWrapper<>(); @@ -237,7 +269,6 @@ if (salesLedgerDto.getTempFileIds() != null && !salesLedgerDto.getTempFileIds().isEmpty()) { migrateTempFilesToFormal(salesLedger.getId(), salesLedgerDto.getTempFileIds()); } return 1; } catch (IOException e) { throw new BaseException("æä»¶è¿ç§»å¤±è´¥: " + e.getMessage()); src/main/resources/mapper/sales/InvoiceRegistrationMapper.xml
@@ -18,10 +18,20 @@ T1.tenant_id, T2.customer_contract_no, T3.customer_name, T2.contract_amount T2.contract_amount, CASE WHEN T4.noInvoiceAmountTotal IS NULL THEN 0 ELSE T4.noInvoiceAmountTotal END AS noInvoiceAmountTotal 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 LEFT JOIN ( SELECT SUM( no_invoice_amount ) AS noInvoiceAmountTotal , invoice_registration_id FROM invoice_registration_product GROUP BY invoice_registration_id ) T4 ON T1.id = T4.invoice_registration_id </select> <select id="invoiceRegisAndProductExcelDtoList" resultType="com.ruoyi.sales.excel.InvoiceRegisAndProductExcelDto">