From d1903c17568e1c373ca37a8baddbefbc330d12bf Mon Sep 17 00:00:00 2001 From: chenrui <1187576398@qq.com> Date: 星期一, 26 五月 2025 16:31:35 +0800 Subject: [PATCH] 开票台账功能修改 --- src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml | 3 + src/main/java/com/ruoyi/project/system/service/ISysDeptService.java | 7 ++ src/main/resources/mapper/sales/ReceiptPaymentMapper.xml | 4 src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java | 4 + src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java | 8 ++ src/main/java/com/ruoyi/sales/mapper/InvoiceLedgerMapper.java | 7 ++ src/main/java/com/ruoyi/sales/pojo/SalesLedger.java | 5 + src/main/java/com/ruoyi/common/config/IgnoreTableConfig.java | 3 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java | 38 +++++++++++- src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java | 25 ++++++++ src/main/java/com/ruoyi/sales/dto/InvoiceLedgerDto.java | 3 + src/main/java/com/ruoyi/project/system/controller/SysUserController.java | 5 + src/main/java/com/ruoyi/project/system/service/impl/SysDeptServiceImpl.java | 10 +++ src/main/resources/mapper/sales/InvoiceLedgerMapper.xml | 17 +++++ src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java | 3 + src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java | 7 ++ src/main/resources/mapper/system/SysUserMapper.xml | 2 src/main/resources/mapper/system/SysDeptMapper.xml | 19 ++++++ 18 files changed, 160 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/ruoyi/common/config/IgnoreTableConfig.java b/src/main/java/com/ruoyi/common/config/IgnoreTableConfig.java index d299d21..a458ca6 100644 --- a/src/main/java/com/ruoyi/common/config/IgnoreTableConfig.java +++ b/src/main/java/com/ruoyi/common/config/IgnoreTableConfig.java @@ -29,7 +29,6 @@ IGNORE_TABLES.add("sales_ledger_file"); IGNORE_TABLES.add("temp_file"); IGNORE_TABLES.add("common_file"); - - + IGNORE_TABLES.add("DepartmentHierarchy"); } } diff --git a/src/main/java/com/ruoyi/project/system/controller/SysUserController.java b/src/main/java/com/ruoyi/project/system/controller/SysUserController.java index 16794a3..79b0c99 100644 --- a/src/main/java/com/ruoyi/project/system/controller/SysUserController.java +++ b/src/main/java/com/ruoyi/project/system/controller/SysUserController.java @@ -140,6 +140,11 @@ } user.setCreateBy(getUsername()); user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); + // 鏌ヨ椤跺眰閮ㄩ棬鐖秈d鍋氫负绉熸埛tenant_id + Long tenantId = deptService.maxLevelDeptId(user.getDeptId()); + if(tenantId != null){ + user.setTenantId(tenantId.intValue()); + } return toAjax(userService.insertUser(user)); } diff --git a/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java b/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java index 31223c8..0b4dae4 100644 --- a/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java +++ b/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java @@ -115,4 +115,11 @@ * @return 缁撴灉 */ public int deleteDeptById(Long deptId); + + /** + * 鏌ヨ椤跺眰閮ㄩ棬id + * @param deptId + * @return + */ + Long maxLevelDeptId(Long deptId); } diff --git a/src/main/java/com/ruoyi/project/system/service/ISysDeptService.java b/src/main/java/com/ruoyi/project/system/service/ISysDeptService.java index abb72d1..77eda76 100644 --- a/src/main/java/com/ruoyi/project/system/service/ISysDeptService.java +++ b/src/main/java/com/ruoyi/project/system/service/ISysDeptService.java @@ -121,4 +121,11 @@ * @return 缁撴灉 */ public int deleteDeptById(Long deptId); + + /** + * 鏌ヨ椤跺眰閮ㄩ棬id + * @param deptId + * @return + */ + Long maxLevelDeptId(Long deptId); } diff --git a/src/main/java/com/ruoyi/project/system/service/impl/SysDeptServiceImpl.java b/src/main/java/com/ruoyi/project/system/service/impl/SysDeptServiceImpl.java index a96a5ae..eae688f 100644 --- a/src/main/java/com/ruoyi/project/system/service/impl/SysDeptServiceImpl.java +++ b/src/main/java/com/ruoyi/project/system/service/impl/SysDeptServiceImpl.java @@ -294,6 +294,16 @@ } /** + * 鏌ヨ椤跺眰閮ㄩ棬id + * @param deptId + * @return + */ + @Override + public Long maxLevelDeptId(Long deptId) { + return deptMapper.maxLevelDeptId(deptId); + } + + /** * 閫掑綊鍒楄〃 */ private void recursionFn(List<SysDept> list, SysDept t) diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java index a85c360..c7b7ccf 100644 --- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java +++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java @@ -6,16 +6,21 @@ import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.framework.web.page.TableDataInfo; +import com.ruoyi.sales.dto.InvoiceLedgerDto; import com.ruoyi.sales.dto.SalesLedgerDto; +import com.ruoyi.sales.mapper.InvoiceLedgerMapper; import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.sales.service.ICommonFileService; import com.ruoyi.sales.service.ISalesLedgerService; import lombok.AllArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.util.List; +import java.util.stream.Collectors; /** * 閿�鍞彴璐ontroller @@ -32,6 +37,9 @@ private ICommonFileService commonFileService; + @Autowired + private InvoiceLedgerMapper invoiceLedgerMapper; + /** * 鏌ヨ閿�鍞彴璐﹀垪琛� */ @@ -39,6 +47,23 @@ public TableDataInfo list(SalesLedgerDto salesLedgerDto) { startPage(); List<SalesLedger> list = salesLedgerService.selectSalesLedgerList(salesLedgerDto); + // 璁$畻宸插紑绁ㄩ噾棰�/鏈紑绁ㄩ噾棰�(宸插~鍐欏彂绁ㄩ噾棰濅负鍑�) + if(CollectionUtils.isEmpty(list)){ + return getDataTable(list); + } + List<Long> salesLedgerIds = list.stream().map(SalesLedger::getId).collect(Collectors.toList()); + List<InvoiceLedgerDto> invoiceLedgerDtoList = invoiceLedgerMapper.invoicedTotal(salesLedgerIds); + if(CollectionUtils.isEmpty(invoiceLedgerDtoList)){ + return getDataTable(list); + } + for (SalesLedger salesLedger : list) { + for (InvoiceLedgerDto invoiceLedgerDto : invoiceLedgerDtoList) { + if (salesLedger.getId().intValue() == invoiceLedgerDto.getSalesLedgerId()) { + BigDecimal noInvoiceAmountTotal = salesLedger.getContractAmount().subtract(invoiceLedgerDto.getInvoiceTotal()); + salesLedger.setNoInvoiceAmountTotal(noInvoiceAmountTotal); + } + } + } return getDataTable(list); } diff --git a/src/main/java/com/ruoyi/sales/dto/InvoiceLedgerDto.java b/src/main/java/com/ruoyi/sales/dto/InvoiceLedgerDto.java index 123ae25..c93e934 100644 --- a/src/main/java/com/ruoyi/sales/dto/InvoiceLedgerDto.java +++ b/src/main/java/com/ruoyi/sales/dto/InvoiceLedgerDto.java @@ -39,4 +39,7 @@ @ApiModelProperty(value = "閿�鍞悎鍚屽彿") private String salesContractNo; + + @ApiModelProperty(value = "閿�鍞悎鍚孖D") + private Integer salesLedgerId; } diff --git a/src/main/java/com/ruoyi/sales/mapper/InvoiceLedgerMapper.java b/src/main/java/com/ruoyi/sales/mapper/InvoiceLedgerMapper.java index 7729ad1..a797024 100644 --- a/src/main/java/com/ruoyi/sales/mapper/InvoiceLedgerMapper.java +++ b/src/main/java/com/ruoyi/sales/mapper/InvoiceLedgerMapper.java @@ -50,4 +50,11 @@ */ InvoiceRegistrationProductDto invoiceLedgerProductInfo(Integer id); + /** + * 鏍规嵁閿�鍞悎鍚岃绠楀凡寮�绁ㄩ噾棰� + * @param salesLedgerIds + * @return + */ + List<InvoiceLedgerDto> invoicedTotal(List<Long> salesLedgerIds); + } diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java index 2ebf084..def5e39 100644 --- a/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java +++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** @@ -93,5 +94,9 @@ */ @Excel(name = "鍚堝悓閲戦") private BigDecimal contractAmount; + + @TableField(exist = false) + @ApiModelProperty(value = "鏈紑绁ㄩ噾棰�(鍏�)") + private BigDecimal noInvoiceAmountTotal; } diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java index 7c73d97..4c11359 100644 --- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java +++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java @@ -141,4 +141,8 @@ * 浜у搧瑙勬牸id */ private Long productModelId; + + @ApiModelProperty(value = "鍒濆鏈紑绁ㄦ暟") + @TableField(exist = false) + private Integer originalNoInvoiceNum; } diff --git a/src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java index 696f72e..55a2f7a 100644 --- a/src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java +++ b/src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java @@ -210,11 +210,17 @@ if(CollectionUtils.isEmpty(invoiceLedgerDto.getFileList())){ throw new RuntimeException("缂哄皯鏂囦欢淇℃伅"); } + QueryWrapper<InvoiceLedger> ledgerQueryWrapper = new QueryWrapper<>(); + ledgerQueryWrapper.eq("invoice_registration_product_id", invoiceLedgerDto.getId()); + InvoiceLedger invoiceLedger = invoiceLedgerMapper.selectOne(ledgerQueryWrapper); + if(ObjectUtils.isEmpty(invoiceLedger)){ + throw new RuntimeException("寮�绁ㄥ彴璐︽湭鐧昏"); + } List<FileVo> fileList = invoiceLedgerDto.getFileList(); fileList.forEach(fileVo -> { InvoiceLedgerFile invoiceLedgerFile = new InvoiceLedgerFile(); BeanUtils.copyProperties(fileVo, invoiceLedgerFile); - invoiceLedgerFile.setInvoiceLedgerId(invoiceLedgerDto.getId()); + invoiceLedgerFile.setInvoiceLedgerId(invoiceLedger.getId()); invoiceLedgerFileMapper.insert(invoiceLedgerFile); }); } diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java index b34d193..76c74ac 100644 --- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java +++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java @@ -1,25 +1,28 @@ 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.extension.service.impl.ServiceImpl; import com.ruoyi.purchase.mapper.PurchaseLedgerMapper; import com.ruoyi.purchase.pojo.PurchaseLedger; +import com.ruoyi.sales.dto.InvoiceRegistrationProductDto; +import com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper; import com.ruoyi.sales.mapper.SalesLedgerMapper; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; +import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.sales.pojo.SalesLedgerProduct; import com.ruoyi.sales.service.ISalesLedgerProductService; import lombok.AllArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import java.lang.reflect.Field; import java.math.BigDecimal; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; -import java.util.Set; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -39,6 +42,9 @@ private PurchaseLedgerMapper purchaseLedgerMapper; + @Autowired + private InvoiceRegistrationProductMapper invoiceRegistrationProductMapper; + @Override public SalesLedgerProduct selectSalesLedgerProductById(Long id) { return salesLedgerProductMapper.selectById(id); @@ -49,7 +55,29 @@ LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerProduct.getSalesLedgerId()) .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType()); - return salesLedgerProductMapper.selectList(queryWrapper); + List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(queryWrapper); + if(!CollectionUtils.isEmpty(salesLedgerProducts)){ + InvoiceRegistrationProductDto invoiceRegistrationProductDto = new InvoiceRegistrationProductDto(); + invoiceRegistrationProductDto.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId().intValue()); + List<InvoiceRegistrationProductDto> invoiceRegistrationProductDtoList = invoiceRegistrationProductMapper.invoiceRegistrationProductList(invoiceRegistrationProductDto); + // 缁熻寮�绁ㄧ櫥璁颁骇鍝佺殑宸插紑绁ㄦ暟/宸插紑绁ㄩ噾棰� + if(!CollectionUtils.isEmpty(invoiceRegistrationProductDtoList)){ + for (SalesLedgerProduct ledgerProduct : salesLedgerProducts) { + int invoiceNum = 0; + BigDecimal invoiceAmount = BigDecimal.ZERO; + for (InvoiceRegistrationProductDto registrationProductDto : invoiceRegistrationProductDtoList) { + if(ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()){ + invoiceNum += registrationProductDto.getInvoiceNum(); + invoiceAmount = invoiceAmount.add(registrationProductDto.getInvoiceAmount()); + } + } + ledgerProduct.setInvoiceNum(invoiceNum); + ledgerProduct.setInvoiceAmount(invoiceAmount); + } + } + + } + return salesLedgerProducts; } @Override diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java index 1b33c06..00495e0 100644 --- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java +++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java @@ -100,6 +100,9 @@ LambdaQueryWrapper<SalesLedgerProduct> productWrapper = new LambdaQueryWrapper<>(); productWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedger.getId()); List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper); + for (SalesLedgerProduct product : products) { + product.setOriginalNoInvoiceNum(product.getNoInvoiceNum()); + } // 3.鏌ヨ涓婁紶鏂囦欢 LambdaQueryWrapper<CommonFile> salesLedgerFileWrapper = new LambdaQueryWrapper<>(); diff --git a/src/main/resources/mapper/sales/InvoiceLedgerMapper.xml b/src/main/resources/mapper/sales/InvoiceLedgerMapper.xml index 7bc19bd..8a33701 100644 --- a/src/main/resources/mapper/sales/InvoiceLedgerMapper.xml +++ b/src/main/resources/mapper/sales/InvoiceLedgerMapper.xml @@ -167,5 +167,22 @@ WHERE T1.id = #{id} </select> + <select id="invoicedTotal" resultType="com.ruoyi.sales.dto.InvoiceLedgerDto"> + SELECT + IFNULL(SUM(T1.invoice_total),0) AS invoice_total, + T2.sales_ledger_id + FROM + invoice_ledger T1 + LEFT JOIN invoice_registration_product T2 ON T1.invoice_registration_product_id = T2.id + <where> + AND T2.sales_ledger_id IN + <foreach collection="salesLedgerIds" item="item" open="(" close=")" separator=","> + #{item} + </foreach> + </where> + GROUP BY + T2.sales_ledger_id + </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 index f414e75..cf13c1e 100644 --- a/src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml +++ b/src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml @@ -33,6 +33,9 @@ <if test="invoiceRegistrationProductDto.invoiceRegistrationId != null"> invoice_registration_id = #{invoiceRegistrationProductDto.invoiceRegistrationId} </if> + <if test="invoiceRegistrationProductDto.salesLedgerId != null"> + sales_ledger_id = #{invoiceRegistrationProductDto.salesLedgerId} + </if> </where> </select> diff --git a/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml b/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml index 8d185da..a20ea15 100644 --- a/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml +++ b/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml @@ -29,7 +29,7 @@ AND T4.customer_id = #{receiptPaymentDto.customerId} </if> </where> - ORDER BY T1.receipt_payment_date ASC + ORDER BY T1.create_time ASC </select> <select id="receiptPaymentInfo" resultType="com.ruoyi.sales.dto.ReceiptPaymentDto"> @@ -138,7 +138,7 @@ T4.customer_id = #{customerId} ORDER BY - T1.receipt_payment_date ASC + T1.create_time ASC LIMIT #{total} ) AS limited_rows </select> diff --git a/src/main/resources/mapper/system/SysDeptMapper.xml b/src/main/resources/mapper/system/SysDeptMapper.xml index 6f70f9d..5a7052d 100644 --- a/src/main/resources/mapper/system/SysDeptMapper.xml +++ b/src/main/resources/mapper/system/SysDeptMapper.xml @@ -156,4 +156,23 @@ update sys_dept set del_flag = '2' where dept_id = #{deptId} </delete> + <select id="maxLevelDeptId"> + WITH RECURSIVE DepartmentHierarchy AS ( + SELECT dept_id, parent_id + FROM sys_dept + WHERE dept_id = #{deptId} + + UNION ALL + + -- 閫掑綊鎯呭喌锛氬姞鍏ュ綋鍓嶉儴闂ㄧ殑鐖剁骇閮ㄩ棬 + SELECT d.dept_id, d.parent_id + FROM sys_dept d + INNER JOIN DepartmentHierarchy dh ON d.dept_id = dh.parent_id + ) + -- 鏌ヨ鏈�椤剁骇鐨勭埗绾ч儴闂↖D + SELECT dept_id as top_level_department_id + FROM DepartmentHierarchy + WHERE parent_id = 100; + </select> + </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/system/SysUserMapper.xml b/src/main/resources/mapper/system/SysUserMapper.xml index b4e8f37..fcd4016 100644 --- a/src/main/resources/mapper/system/SysUserMapper.xml +++ b/src/main/resources/mapper/system/SysUserMapper.xml @@ -157,6 +157,7 @@ <if test="status != null and status != ''">status,</if> <if test="createBy != null and createBy != ''">create_by,</if> <if test="remark != null and remark != ''">remark,</if> + <if test="tenantId != null ">tenant_id,</if> create_time )values( <if test="userId != null and userId != ''">#{userId},</if> @@ -171,6 +172,7 @@ <if test="status != null and status != ''">#{status},</if> <if test="createBy != null and createBy != ''">#{createBy},</if> <if test="remark != null and remark != ''">#{remark},</if> + <if test="tenantId != null ">#{tenantId},</if> sysdate() ) </insert> -- Gitblit v1.9.3