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