From 684e4306a08feeae188070f264148e6765da8dcf Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期日, 20 九月 2026 19:25:15 +0800
Subject: [PATCH] feat(account): 更新往来付款回款流水表及接口
---
src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java | 140 ++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 128 insertions(+), 12 deletions(-)
diff --git a/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
index 09c2a46..78cb8ba 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
@@ -21,8 +21,15 @@
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.security.LoginUser;
import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.procurementrecord.mapper.ReturnManagementMapper;
+import com.ruoyi.procurementrecord.pojo.ReturnManagement;
+import com.ruoyi.sales.dto.CustomerDepositAmountDto;
import com.ruoyi.sales.mapper.SalesLedgerMapper;
+import com.ruoyi.sales.mapper.SalesQuotationMapper;
import com.ruoyi.sales.pojo.SalesLedger;
+import com.ruoyi.sales.pojo.SalesQuotation;
+import com.ruoyi.sales.vo.CustomerTransactionsDetailsVo;
+import com.ruoyi.sales.vo.CustomerTransactionsVo;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
@@ -32,6 +39,7 @@
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
+import java.math.BigDecimal;
import java.time.ZoneId;
import java.util.*;
import java.util.stream.Collectors;
@@ -48,7 +56,11 @@
@Slf4j
public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> implements ICustomerService {
@Autowired
- private SalesLedgerMapper salesLedgerMapper;
+ private SalesLedgerMapper salesLedgerMapper;
+ @Autowired
+ private SalesQuotationMapper salesQuotationMapper;
+ @Autowired
+ private ReturnManagementMapper returnManagementMapper;
@Autowired
private CustomerMapper customerMapper;
@@ -107,7 +119,37 @@
customerVo.setFollowUpList(followUpDtoList);
}
+ fillDepositAmount(Collections.singletonList(customerVo));
+
return customerVo;
+ }
+
+ /**
+ * 濉唬鍌ㄩ噾棰濓紙璇ュ鎴峰叏閮ㄣ�岀被鍨�=浠e偍銆嶇殑閿�鍞彴璐﹀悎鍚岄噾棰濈疮璁★級骞跺垽鏂槸鍚﹀凡瓒呬俊鎵樺熀閲�
+ */
+ private void fillDepositAmount(List<CustomerVo> records) {
+ if (CollectionUtils.isEmpty(records)) {
+ return;
+ }
+ List<Long> customerIds = records.stream()
+ .map(CustomerVo::getId)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+ Map<Long, BigDecimal> depositAmountMap = customerIds.isEmpty()
+ ? Collections.emptyMap()
+ : salesLedgerMapper.selectDepositAmountByCustomerIds(customerIds).stream()
+ .filter(item -> item.getCustomerId() != null)
+ .collect(Collectors.toMap(
+ CustomerDepositAmountDto::getCustomerId,
+ item -> item.getDepositTotalAmount() == null ? BigDecimal.ZERO : item.getDepositTotalAmount(),
+ (existing, replacement) -> existing));
+
+ records.forEach(customer -> {
+ BigDecimal depositTotalAmount = depositAmountMap.getOrDefault(customer.getId(), BigDecimal.ZERO);
+ customer.setDepositTotalAmount(depositTotalAmount);
+ customer.setExceedsTrustFund(customer.getTrustFund() != null
+ && depositTotalAmount.compareTo(customer.getTrustFund()) > 0);
+ });
}
/**
@@ -158,6 +200,8 @@
c.setUserIds(userIds);
}
});
+
+ fillDepositAmount(records);
}
return customerPage;
@@ -202,6 +246,7 @@
public int updateCustomer(Customer customer) {
LoginUser loginUser = SecurityUtils.getLoginUser();
Long tenantId = loginUser.getTenantId();
+ validateCustomerEditPermission(customer.getId());
customer.setTenantId(tenantId);
return customerMapper.updateById(customer);
}
@@ -216,10 +261,24 @@
@Transactional(rollbackFor = Exception.class)
public int deleteCustomerByIds(Long[] ids) {
List<Long> idList = Arrays.asList(ids);
+ // 妫�鏌ユ槸鍚︽湁閿�鍞彴璐﹀叧鑱�
List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(new QueryWrapper<SalesLedger>().lambda().in(SalesLedger::getCustomerId, idList));
if (!salesLedgers.isEmpty()) {
- throw new RuntimeException("瀹㈡埛妗f涓嬫湁閿�鍞悎鍚岋紝璇峰厛鍒犻櫎閿�鍞悎鍚�");
+ throw new RuntimeException("瀹㈡埛妗f涓嬫湁閿�鍞彴璐︼紝璇峰厛鍒犻櫎閿�鍞彴璐�");
}
+
+ // 妫�鏌ユ槸鍚︽湁閿�鍞��璐у叧鑱�
+ List<ReturnManagement> returnManagements = returnManagementMapper.selectList(new QueryWrapper<ReturnManagement>().lambda().in(ReturnManagement::getCustomerId, idList));
+ if (!returnManagements.isEmpty()) {
+ throw new RuntimeException("瀹㈡埛妗f涓嬫湁閿�鍞��璐э紝璇峰厛鍒犻櫎閿�鍞��璐�");
+ }
+
+ // 妫�鏌ユ槸鍚︽湁閿�鍞姤浠峰叧鑱�
+ List<SalesQuotation> salesQuotations = salesQuotationMapper.selectList(new QueryWrapper<SalesQuotation>().lambda().in(SalesQuotation::getCustomerId, idList));
+ if (!salesQuotations.isEmpty()) {
+ throw new RuntimeException("瀹㈡埛妗f涓嬫湁閿�鍞姤浠凤紝璇峰厛鍒犻櫎閿�鍞姤浠�");
+ }
+
// 鏌ヨ鏄惁鏈夊凡鍒嗛厤鐨勫叕娴峰鎴�
List<Customer> assignedPools = customerMapper.selectList(
new QueryWrapper<Customer>().lambda()
@@ -285,18 +344,26 @@
@Override
public List<Map<String, Object>> customerList(Customer customer) {
- LambdaQueryWrapper<Customer> queryWrapper = Wrappers.lambdaQuery();
- queryWrapper.select(Customer::getId, Customer::getCustomerName, Customer::getTaxpayerIdentificationNumber);
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ Long loginUserId = loginUser.getUserId();
+ CustomerDto query = new CustomerDto();
+ if (customer != null) {
+ BeanUtils.copyProperties(customer, query);
+ }
- // 鑾峰彇鍘熷鏌ヨ缁撴灉
- List<Map<String, Object>> result = customerMapper.selectMaps(queryWrapper);
+ // 澶嶇敤瀹㈡埛鍒楄〃鐨勫彲瑙佹�ц鍒欙紝閬垮厤鎶婂埆浜虹殑绉佹捣瀹㈡埛鏆撮湶缁欏綋鍓嶈处鍙�
+ List<CustomerVo> visibleCustomers = customerMapper.list(query, loginUserId);
+ if (CollectionUtils.isEmpty(visibleCustomers)) {
+ return Collections.emptyList();
+ }
- // 灏嗕笅鍒掔嚎鍛藉悕杞崲涓洪┘宄板懡鍚�
- return result.stream().map(map -> map.entrySet().stream()
- .collect(Collectors.toMap(
- entry -> underlineToCamel(entry.getKey()),
- Map.Entry::getValue))
- ).collect(Collectors.toList());
+ return visibleCustomers.stream().map(item -> {
+ Map<String, Object> map = new LinkedHashMap<>();
+ map.put("id", item.getId());
+ map.put("customerName", item.getCustomerName());
+ map.put("taxpayerIdentificationNumber", item.getTaxpayerIdentificationNumber());
+ return map;
+ }).collect(Collectors.toList());
}
// 鍒嗛厤鍏捣瀹㈡埛缁欑娴�
@@ -317,6 +384,7 @@
public void recycleCustomer(CustomerDto customerDto) {
Customer customer = customerMapper.selectById(customerDto.getId());
if (customer.getType() == 1 && customer.getIsAssigned() == 1) { // 鍏捣涓斿凡鍒嗛厤
+ validatePublicSeaRecyclePermission(customer.getId());
customer.setIsAssigned(0);
customer.setUsageStatus(0L);
customer.setUsageUser(0L);
@@ -379,6 +447,54 @@
return this.updateById(customer);
}
+ private void validateCustomerEditPermission(Long customerId) {
+ Customer customer = customerMapper.selectById(customerId);
+ if (customer == null) {
+ throw new RuntimeException("瀹㈡埛妗f涓嶅瓨鍦�");
+ }
+ if (!hasSalesModuleReference(customerId)) {
+ return;
+ }
+ if (Objects.equals(customer.getType(), 0)) {
+ throw new RuntimeException("宸茶閿�鍞ā鍧楀紩鐢ㄧ殑绉佹捣瀹㈡埛涓嶈兘缂栬緫");
+ }
+ if (Objects.equals(customer.getType(), 1) && Objects.equals(customer.getIsAssigned(), 1)) {
+ throw new RuntimeException("宸查鐢ㄥ苟涓旇閿�鍞ā鍧楀紩鐢ㄧ殑鍏捣瀹㈡埛涓嶈兘缂栬緫");
+ }
+ }
+
+ private void validatePublicSeaRecyclePermission(Long customerId) {
+ if (hasSalesModuleReference(customerId)) {
+ throw new RuntimeException("宸查鐢ㄥ苟涓旇閿�鍞ā鍧楀紩鐢ㄧ殑鍏捣瀹㈡埛涓嶈兘鍥炴敹");
+ }
+ }
+
+ private boolean hasSalesModuleReference(Long customerId) {
+ Long salesLedgerCount = salesLedgerMapper.selectCount(new QueryWrapper<SalesLedger>().lambda()
+ .eq(SalesLedger::getCustomerId, customerId));
+ if (salesLedgerCount != null && salesLedgerCount > 0) {
+ return true;
+ }
+ Long salesQuotationCount = salesQuotationMapper.selectCount(new QueryWrapper<SalesQuotation>().lambda()
+ .eq(SalesQuotation::getCustomerId, customerId));
+ if (salesQuotationCount != null && salesQuotationCount > 0) {
+ return true;
+ }
+ Long returnManagementCount = returnManagementMapper.selectCount(new QueryWrapper<ReturnManagement>().lambda()
+ .eq(ReturnManagement::getCustomerId, customerId));
+ return returnManagementCount != null && returnManagementCount > 0;
+ }
+
+ @Override
+ public IPage<CustomerTransactionsVo> customewTransactions(Page page, String customerName) {
+ return customerMapper.customewTransactions(page, customerName);
+ }
+
+ @Override
+ public IPage<CustomerTransactionsDetailsVo> customewTransactionsDetails(Page page, Long customerId) {
+ return customerMapper.customewTransactionsDetails(page, customerId);
+ }
+
/**
* 涓嬪垝绾垮懡鍚嶈浆椹煎嘲鍛藉悕
*/
--
Gitblit v1.9.3