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/ContractServiceImpl.java |   40 ++++++++++++++++++++++++++++++++++------
 1 files changed, 34 insertions(+), 6 deletions(-)

diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java
index 081447a..c21a77e 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java
@@ -52,6 +52,7 @@
 		contract.setPartyBId(SecurityUtils.getUser().getCompId());
 		contract.setPartyB(SecurityUtils.getUser().getCompName());
 		contract.setContractNo(ContractNumberGenerator.generateContractNumber());
+		contract.setPaidAmount(new BigDecimal("0"));
 		contract.setBillingStatus("0");
 		contract.setErpPushFlag("0");
 		List<Contract> contracts;
@@ -122,6 +123,7 @@
 		contract.setContractNo(ContractNumberGenerator.generateContractNumber());
 		contract.setBillingStatus("0");
 		contract.setErpPushFlag("0");
+		contract.setPaidAmount(new BigDecimal("0"));
 		List<Contract> contracts;
 		contracts = baseMapper.selectList(Wrappers.<Contract>lambdaQuery().eq(Contract::getContractNo,contract.getContractNo()));
 		while (ArrayUtil.isNotEmpty(contracts.toArray())){
@@ -226,7 +228,9 @@
 				lastNewTotal = lastNewConfirm.getTotalAmount();
 			}
 			paymentConfirm.setTotalAmount(lastNewTotal.subtract(paymentConfirm.getReceivableAmount()));
-			paymentConfirmMapper.insert(paymentConfirm);
+			if (fitstSchedule.getPaymentRatio().compareTo(new BigDecimal("0"))>0){
+				paymentConfirmMapper.insert(paymentConfirm);
+			}
 			//鏂板鍚堝悓灞ョ害璁板綍
 			ContractPaymentScheduleProcess process = new ContractPaymentScheduleProcess();
 			process.setContractId(contract.getId());
@@ -238,7 +242,7 @@
 			//褰撳墠涓哄悎鍚屾渶鍚庨樁娈�
 			PaymentConfirm newConfirm = paymentConfirmMapper.selectOne(Wrappers.<PaymentConfirm>lambdaQuery().eq(PaymentConfirm::getContractId,contract.getId())
 					.orderByDesc(PaymentConfirm::getCreateTime).last("limit 1"));
-			if (newConfirm.getTotalAmount().compareTo(new BigDecimal("0"))>=0){
+			if (ObjUtil.isNotNull(newConfirm)&&newConfirm.getTotalAmount().compareTo(new BigDecimal("0"))>=0){
 				//鏈夐浠樹笖瓒呰繃搴旀敹 鍏抽棴鍚堝悓鐘舵��
 				contract.setContractStatus(3);
 				baseMapper.updateById(contract);
@@ -277,7 +281,9 @@
 				lastNewTotal = lastNewConfirm.getTotalAmount();
 			}
 			paymentConfirm.setTotalAmount(lastNewTotal.subtract(paymentConfirm.getReceivableAmount()));
-			paymentConfirmMapper.insert(paymentConfirm);
+			if (fitstSchedule.getPaymentRatio().compareTo(new BigDecimal("0"))>0) {
+				paymentConfirmMapper.insert(paymentConfirm);
+			}
 		}
 		//鏌ヨ鏄惁鏈夊悗缁樁娈�
 		List<ContractPaymentSchedule> afterSchedule = contractPaymentScheduleMapper.selectList(Wrappers.<ContractPaymentSchedule>lambdaQuery()
@@ -316,7 +322,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());
@@ -369,7 +377,7 @@
 				//鍒ゆ柇褰撳墠闃舵鏄惁宸茬敓鎴愪笂闃舵搴旀敹瓒呮湡
 				PaymentConfirm oiverdueConfirm = paymentConfirmMapper.selectOne(Wrappers.<PaymentConfirm>lambdaQuery().eq(PaymentConfirm::getScheduleId, contractPaymentSchedule.getId())
 						.eq(PaymentConfirm::getBusinessType, "搴旀敹瓒呮湡"));
-				if (ObjUtil.isNull(oiverdueConfirm)) {
+				if (ObjUtil.isNull(oiverdueConfirm)&&overdueConfirm.getTransationAmount().compareTo(new BigDecimal("0"))>0) {
 					overdueConfirm.setCompId(contractPaymentSchedule.getCompId());
 					paymentConfirmMapper.insert(overdueConfirm);
 				}
@@ -390,7 +398,9 @@
 						.eq(CurrentOverdue::getScheduleId,currentOverdue.getScheduleId()).last("limit 1"));
 				if (ObjUtil.isNull(overdue)){
 					currentOverdue.setCompId(contractPaymentSchedule.getCompId());
-					currentOverdueMapper.insert(currentOverdue);
+					if (currentOverdue.getReceivableAmount().compareTo(new BigDecimal("0"))>0){
+						currentOverdueMapper.insert(currentOverdue);
+					}
 				}else {
 					overdue.setOverdueDuration(BigDecimal.valueOf(DateUtil.betweenDay(contractPaymentSchedule.getEffectiveEndDate(),new Date(),true)));
 					currentOverdueMapper.updateById(overdue);
@@ -407,4 +417,22 @@
 		baseMapper.updateById(contract);
 		return R.ok();
 	}
+
+	@Override
+	public R copyNewContract(Long id) {
+		Contract oldContract = baseMapper.selectById(id);
+		Contract newContract = BeanUtil.copyProperties(oldContract,Contract.class,"id","createTime");
+		newContract.setContractNo(ContractNumberGenerator.generateContractNumber());
+		newContract.setPaidAmount(new BigDecimal("0"));
+		newContract.setBillingStatus("0");
+		newContract.setErpPushFlag("0");
+		List<Contract> contracts;
+		contracts = baseMapper.selectList(Wrappers.<Contract>lambdaQuery().eq(Contract::getContractNo,newContract.getContractNo()));
+		while (ArrayUtil.isNotEmpty(contracts.toArray())){
+			newContract.setContractNo(ContractNumberGenerator.generateContractNumber());
+			contracts = baseMapper.selectList(Wrappers.<Contract>lambdaQuery().eq(Contract::getContractNo,newContract.getContractNo()));
+		}
+		baseMapper.insert(newContract);
+		return R.ok();
+	}
 }

--
Gitblit v1.9.1