From 6332b04bc7991a310b13aef044082621d618479a Mon Sep 17 00:00:00 2001
From: shiyunteng <shiyunteng@example.com>
Date: 星期二, 19 五月 2026 17:02:19 +0800
Subject: [PATCH] feat:新增赊销、抵抹账功能 合同新增销售模式字段,新增生成新合同接口 出库:出库多余配件处理

---
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java |   35 ++++++++++++++++++++---------------
 1 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java
index 252dee9..0ec467d 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java
@@ -59,19 +59,16 @@
 		if (ArrayUtil.isEmpty(subjectMatterList.toArray())) {
 			return R.failed("娌℃湁鏌ヨ鍒扮浉鍏冲悎鍚岃鍗�");
 		}
-		Double outTotal = subjectMatterList.stream().mapToDouble(item -> {
-			// 浼樺厛鍒ゆ柇 remainNum
-			if (item.getRemainingQuantity() != null && item.getRemainingQuantity().compareTo(new BigDecimal("0")) > 0) {
-				return item.getRemainingQuantity().doubleValue();
-			} else {
-				// remainNum 涓� null 鎴� 0 鏃讹紝浣跨敤 quantity
-				return item.getQuantity() == null ? 0.0 : item.getQuantity().doubleValue();
-			}
-		}).sum();
-		BigDecimal orderNum = addDTO.getSubjectMatterList().stream().map(OutSubjectMatterAddDTO::getOutBoundNum)
+		List<String> erpCodeList = subjectMatterList.stream().map(ContractSubjectMatter::getMaterialCode).collect(Collectors.toList());
+		BigDecimal orderNum = subjectMatterList.stream().filter(item ->item.getDeliveryStatus()!=2)
+				.map(item ->item.getDeliveryStatus()==0?item.getQuantity():item.getRemainingQuantity())
+				.reduce(BigDecimal.ZERO, BigDecimal::add);
+		BigDecimal outTotal = addDTO.getSubjectMatterList().stream()
+				.filter(item->erpCodeList.contains(item.getSubjectMatterCode()))
+				.map(OutSubjectMatterAddDTO::getOutBoundNum)
 				.filter(num -> num != null) // 杩囨护鎺� null 鍊硷紝闃叉 NullPointerException
 				.reduce(BigDecimal.ZERO, BigDecimal::add);
-		if (new BigDecimal(outTotal).compareTo(orderNum) < 0) {
+		if (outTotal.compareTo(orderNum) > 0) {
 			return R.failed("鍑哄簱鏁伴噺瓒呭嚭鍚堝悓璁㈠崟鏁伴噺");
 		}
 		//褰撳墠鍏ュ簱鏍囩殑鐗�
@@ -203,16 +200,22 @@
 							paymentConfirm.setTransationAmount(paymentConfirm.getTransationAmount().subtract(fhTotalAmount));
 							paymentConfirm.setReceivableAmount(paymentConfirm.getTransationAmount());
 							paymentConfirm.setTotalAmount(lastConfirm.getTotalAmount().subtract(paymentConfirm.getTransationAmount()));
-							paymentConfirmMapper.insert(paymentConfirm);
+							if(schedule.getPaymentRatio().compareTo(new BigDecimal("0"))>0) {
+								paymentConfirmMapper.insert(paymentConfirm);
+							}
 						} else {
 							//涓嶅瓨鍦ㄥ彂璐у簲鏀� 鍑哄簱鎬婚
 							paymentConfirm.setTotalAmount(lastConfirm.getTotalAmount().subtract(paymentConfirm.getTransationAmount()));
-							paymentConfirmMapper.insert(paymentConfirm);
+							if(schedule.getPaymentRatio().compareTo(new BigDecimal("0"))>0) {
+								paymentConfirmMapper.insert(paymentConfirm);
+							}
 						}
 					} else {
 						//鏃犱箣鍓嶉樁娈靛簲鏀�
 						paymentConfirm.setTotalAmount(paymentConfirm.getTransationAmount().multiply(new BigDecimal("-1")));
-						paymentConfirmMapper.insert(paymentConfirm);
+						if(schedule.getPaymentRatio().compareTo(new BigDecimal("0"))>0) {
+							paymentConfirmMapper.insert(paymentConfirm);
+						}
 					}
 
 					//鏇存柊鍙戣揣鍓嶆敹娆剧敓鏁堟椂闂�
@@ -278,7 +281,9 @@
 								lastNewTotal = lastNewConfirm.getTotalAmount();
 							}
 							newConfim.setTotalAmount(lastNewTotal.subtract(newConfim.getReceivableAmount()));
-							paymentConfirmMapper.insert(newConfim);
+							if(endSchedule.getPaymentRatio().compareTo(new BigDecimal("0"))>0) {
+								paymentConfirmMapper.insert(newConfim);
+							}
 						}
 						//鏇存柊鍚堝悓涓嬩釜闃舵
 						contract.setNextScheduleName(endSchedule.getStageName());

--
Gitblit v1.9.1