From 47806d9e390ee00e1d29ad1da8c1aa908882a758 Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期二, 11 八月 2026 14:43:59 +0800
Subject: [PATCH] 用河南鹤壁代码覆盖山西长治
---
src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java | 126 ++++++++++++++++++-----------------------
1 files changed, 56 insertions(+), 70 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 0b0c6cd..1c27133 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
@@ -16,17 +16,14 @@
import com.ruoyi.basic.pojo.CustomerUser;
import com.ruoyi.basic.service.*;
import com.ruoyi.basic.vo.CustomerVo;
+import com.ruoyi.common.utils.AmountUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
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.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;
@@ -38,6 +35,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;
@@ -54,11 +52,7 @@
@Slf4j
public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> implements ICustomerService {
@Autowired
- private SalesLedgerMapper salesLedgerMapper;
- @Autowired
- private SalesQuotationMapper salesQuotationMapper;
- @Autowired
- private ReturnManagementMapper returnManagementMapper;
+ private SalesLedgerMapper salesLedgerMapper;
@Autowired
private CustomerMapper customerMapper;
@@ -212,7 +206,6 @@
public int updateCustomer(Customer customer) {
LoginUser loginUser = SecurityUtils.getLoginUser();
Long tenantId = loginUser.getTenantId();
- validateCustomerEditPermission(customer.getId());
customer.setTenantId(tenantId);
return customerMapper.updateById(customer);
}
@@ -227,26 +220,12 @@
@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(
+ /*List<Customer> assignedPools = customerMapper.selectList(
new QueryWrapper<Customer>().lambda()
.in(Customer::getId, idList)
.eq(Customer::getType, 1).
@@ -254,7 +233,7 @@
);
if (!assignedPools.isEmpty()) {
throw new RuntimeException("瀹㈡埛妗f涓嬫湁宸插垎閰嶇殑鍏捣瀹㈡埛锛岃鍏堟敹鍥�");
- }
+ }*/
// 鍒犻櫎瀹㈡埛鐨勫悓鏃朵篃闇�瑕佸垹闄ゅ搴旂殑瀹㈡埛璺熼殢銆侀檮浠跺拰鍥炶鎻愰啋
for (Long id : ids) {
customerFollowUpService.deleteByCustomerId(id);
@@ -294,11 +273,11 @@
}
// 鏍规嵁 type 鍙傛暟璁剧疆瀹㈡埛绫诲瀷锛堢娴�/鍏捣锛�
- if (type != null) {
+ /*if (type != null) {
userList.forEach(customer -> {
customer.setType(type);
});
- }
+ }*/
this.saveOrUpdateBatch(userList);
return R.ok(true);
} catch (Exception e) {
@@ -342,7 +321,6 @@
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);
@@ -405,52 +383,60 @@
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);
+ IPage<CustomerTransactionsVo> p = customerMapper.customewTransactions(page, customerName);
+ List<CustomerTransactionsVo> records = p.getRecords();
+ if (!CollectionUtils.isEmpty(records)) {
+ List<Long> customerIds = records.stream().map(CustomerTransactionsVo::getCustomerId).collect(Collectors.toList());
+ List<Map<String, Object>> shippedAmountList = customerMapper.getShippedAmountByCustomerIds(customerIds);
+ Map<Long, BigDecimal> shippedAmountMap = new HashMap<>();
+ for (Map<String, Object> map : shippedAmountList) {
+ if (map.get("outboundAmount") != null) {
+ shippedAmountMap.put(((Number) map.get("customerId")).longValue(), new BigDecimal(String.valueOf(map.get("outboundAmount"))));
+ }
+ }
+ for (CustomerTransactionsVo vo : records) {
+ BigDecimal outboundAmount = shippedAmountMap.getOrDefault(vo.getCustomerId(), BigDecimal.ZERO);
+ vo.setShippedAmount(outboundAmount);
+ BigDecimal contractAmounts = vo.getContractAmounts() == null ? BigDecimal.ZERO : vo.getContractAmounts();
+ BigDecimal unshippedAmount = contractAmounts.subtract(outboundAmount);
+ if (unshippedAmount.compareTo(BigDecimal.ZERO) < 0) {
+ unshippedAmount = BigDecimal.ZERO;
+ }
+ vo.setUnshippedAmount(unshippedAmount);
+ AmountUtils.normalizeCustomerTransaction(vo);
+ }
+ }
+ return p;
}
@Override
public IPage<CustomerTransactionsDetailsVo> customewTransactionsDetails(Page page, Long customerId) {
- return customerMapper.customewTransactionsDetails(page, customerId);
+ IPage<CustomerTransactionsDetailsVo> p = customerMapper.customewTransactionsDetails(page, customerId);
+ List<CustomerTransactionsDetailsVo> records = p.getRecords();
+ if (!CollectionUtils.isEmpty(records)) {
+ List<Long> salesLedgerIds = records.stream().map(CustomerTransactionsDetailsVo::getSalesLedgerId).collect(Collectors.toList());
+ List<Map<String, Object>> shippedAmountList = customerMapper.getShippedAmountBySalesLedgerIds(salesLedgerIds);
+ Map<Long, BigDecimal> shippedAmountMap = new HashMap<>();
+ for (Map<String, Object> map : shippedAmountList) {
+ if (map.get("outboundAmount") != null) {
+ shippedAmountMap.put(((Number) map.get("salesLedgerId")).longValue(), new BigDecimal(String.valueOf(map.get("outboundAmount"))));
+ }
+ }
+ for (CustomerTransactionsDetailsVo vo : records) {
+ BigDecimal outboundAmount = shippedAmountMap.getOrDefault(vo.getSalesLedgerId(), BigDecimal.ZERO);
+ vo.setShippedAmount(outboundAmount);
+ BigDecimal contractAmount = vo.getContractAmount() == null ? BigDecimal.ZERO : vo.getContractAmount();
+ BigDecimal unshippedAmount = contractAmount.subtract(outboundAmount);
+ if (unshippedAmount.compareTo(BigDecimal.ZERO) < 0) {
+ unshippedAmount = BigDecimal.ZERO;
+ }
+ vo.setUnshippedAmount(unshippedAmount);
+ AmountUtils.normalizeCustomerTransactionDetail(vo);
+ }
+ }
+ return p;
}
/**
--
Gitblit v1.9.3