From 72585fb117463bf6f26324b7e8e139c86d13c7ba Mon Sep 17 00:00:00 2001
From: 李白 <7387820+wjli_13439841639@user.noreply.gitee.com>
Date: 星期三, 13 五月 2026 17:38:03 +0800
Subject: [PATCH] 开会后对客商排产计划,销售人员的整体修改

---
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractPaymentScheduleProcessServiceImpl.java |  181 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 181 insertions(+), 0 deletions(-)

diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractPaymentScheduleProcessServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractPaymentScheduleProcessServiceImpl.java
new file mode 100644
index 0000000..4e6bf29
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractPaymentScheduleProcessServiceImpl.java
@@ -0,0 +1,181 @@
+package com.by4cloud.platformx.business.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.util.ObjUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.by4cloud.platformx.business.dto.ContractPaymentScheduleProcessAddDTO;
+import com.by4cloud.platformx.business.entity.Contract;
+import com.by4cloud.platformx.business.entity.ContractPaymentSchedule;
+import com.by4cloud.platformx.business.entity.ContractPaymentScheduleProcess;
+import com.by4cloud.platformx.business.entity.PaymentConfirm;
+import com.by4cloud.platformx.business.mapper.ContractMapper;
+import com.by4cloud.platformx.business.mapper.ContractPaymentScheduleMapper;
+import com.by4cloud.platformx.business.mapper.ContractPaymentScheduleProcessMapper;
+import com.by4cloud.platformx.business.mapper.PaymentConfirmMapper;
+import com.by4cloud.platformx.business.service.ContractPaymentScheduleProcessService;
+import com.by4cloud.platformx.business.vo.ContractPaymentScheduleVo;
+import com.by4cloud.platformx.business.vo.ScheduleProcessVo;
+import com.by4cloud.platformx.common.core.util.R;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 灞ョ害鑺傜偣
+ *
+ * @author syt
+ * @date 2026-05-11 11:10:26
+ */
+@Service
+@RequiredArgsConstructor
+public class ContractPaymentScheduleProcessServiceImpl extends ServiceImpl<ContractPaymentScheduleProcessMapper, ContractPaymentScheduleProcess> implements ContractPaymentScheduleProcessService {
+
+	private final ContractPaymentScheduleMapper contractPaymentScheduleMapper;
+	private final ContractPaymentScheduleProcessMapper processMapper;
+	private final ContractMapper contractMapper;
+	private final PaymentConfirmMapper paymentConfirmMapper;
+
+	@Override
+	public R add(ContractPaymentScheduleProcessAddDTO addDTO) {
+		ContractPaymentSchedule schedule = contractPaymentScheduleMapper.selectById(addDTO.getScheduleId());
+		if (ObjUtil.isNull(schedule)){
+			return R.failed("灞ョ害闃舵涓庡悎鍚屼笉涓�鑷达紝璇疯仈绯绘妧鏈汉鍛�");
+		}
+		//鍚堝悓
+		Contract contract = contractMapper.selectById(schedule.getContractId());
+		//鏂板褰撳墠闃舵搴旀敹
+		PaymentConfirm currentConfim = new PaymentConfirm();
+		currentConfim.setBusinessType(schedule.getStageName()+"搴旀敹");
+		currentConfim.setBusGuestId(contract.getPartyAId());
+		currentConfim.setBusGuestName(contract.getPartyA());
+		currentConfim.setContractId(contract.getId());
+		currentConfim.setContractName(contract.getContractName());
+		currentConfim.setContractNo(contract.getContractNo());
+		currentConfim.setScheduleId(schedule.getId());
+		currentConfim.setScheduleName(schedule.getStageName());
+		currentConfim.setConfirmTime(addDTO.getProcessDate());
+		currentConfim.setTransationAmount(schedule.getPlannedAmount());
+		currentConfim.setReceivableAmount(schedule.getPlannedAmount());
+		PaymentConfirm lastConfirm = paymentConfirmMapper.selectOne(Wrappers.<PaymentConfirm>lambdaQuery().eq(PaymentConfirm::getContractId,contract.getId())
+				.orderByDesc(PaymentConfirm::getCreateTime).last("limit 1"));
+		BigDecimal lastTotal = new BigDecimal("0");
+		if(ObjUtil.isNotNull(lastConfirm)){
+			lastTotal = lastConfirm.getTotalAmount();
+		}
+		currentConfim.setTotalAmount(lastTotal.subtract(currentConfim.getReceivableAmount()));
+		paymentConfirmMapper.insert(currentConfim);
+		//灞ョ害
+		ContractPaymentScheduleProcess contractPaymentScheduleProcess = BeanUtil.copyProperties(addDTO,ContractPaymentScheduleProcess.class);
+		contractPaymentScheduleProcess.setContractId(schedule.getContractId());
+		contractPaymentScheduleProcess.setContractName(schedule.getContractName());
+		contractPaymentScheduleProcess.setScheduleId(schedule.getId());
+		contractPaymentScheduleProcess.setScheduleName(schedule.getStageName());
+		baseMapper.insert(contractPaymentScheduleProcess);
+		//鏇存柊褰撳墠闃舵
+		if (ObjUtil.isNull(schedule.getEffectiveDate())) {
+			schedule.setEffectiveDate(DateUtil.offsetDay(addDTO.getProcessDate(),schedule.getAgreedDays()));
+			contractPaymentScheduleMapper.updateById(schedule);
+		}
+		//鏌ヨ鏄惁鏈変箣鍓嶉樁娈�
+		ContractPaymentSchedule beforeSchedule = contractPaymentScheduleMapper.selectOne(Wrappers.<ContractPaymentSchedule>lambdaQuery().eq(ContractPaymentSchedule::getContractId, schedule.getContractId())
+				.lt(ContractPaymentSchedule::getStageOrder, schedule.getStageOrder()).orderByDesc(ContractPaymentSchedule::getCreateTime).last("limit 1"));
+		if (ObjUtil.isNotNull(beforeSchedule)){
+			beforeSchedule.setEffectiveEndDate(DateUtil.offsetDay(addDTO.getProcessDate(),beforeSchedule.getAgreedDays()));
+			contractPaymentScheduleMapper.updateById(beforeSchedule);
+			//涔嬪墠闃舵鏄惁鏀舵瀹屾垚
+//			if (beforeSchedule.getPaymentStatus()!=2){
+//				//鏂板涔嬪墠闃舵瓒呮湡
+//				PaymentConfirm beforeConfim = new PaymentConfirm();
+//				beforeConfim.setBusinessType("搴旀敹瓒呮湡");
+//				beforeConfim.setBusGuestId(contract.getPartyAId());
+//				beforeConfim.setBusGuestName(contract.getPartyA());
+//				beforeConfim.setContractId(contract.getId());
+//				beforeConfim.setContractName(contract.getContractName());
+//				beforeConfim.setContractNo(contract.getContractNo());
+//				beforeConfim.setScheduleId(schedule.getId());
+//				beforeConfim.setScheduleName(schedule.getStageName());
+//				beforeConfim.setConfirmTime(addDTO.getProcessDate());
+//				beforeConfim.setTransationAmount(schedule.getPlannedAmount());
+//				PaymentConfirm newLastConfirm = paymentConfirmMapper.selectOne(Wrappers.<PaymentConfirm>lambdaQuery().eq(PaymentConfirm::getContractId,contract.getId())
+//						.orderByDesc(PaymentConfirm::getCreateTime).last("limit 1"));
+//				beforeConfim.setOverdueAmount(StrUtil.equals(schedule.getPaymentStatus()+"","0")?
+//						schedule.getPlannedAmount():
+//						schedule.getPlannedAmount().subtract(schedule.getActualAmount()));
+//				beforeConfim.setTotalAmount(newLastConfirm.getTotalAmount());
+//				paymentConfirmMapper.insert(beforeConfim);
+//			}
+
+		}
+		//鏌ヨ鏄惁鏈夊悗缁樁娈�
+		List<ContractPaymentSchedule> afterSchedule = contractPaymentScheduleMapper.selectList(Wrappers.<ContractPaymentSchedule>lambdaQuery()
+				.eq(ContractPaymentSchedule::getContractId, schedule.getContractId())
+				.gt(ContractPaymentSchedule::getStageOrder, schedule.getStageOrder()));
+		if (ArrayUtil.isNotEmpty(afterSchedule.toArray())&&afterSchedule.size()==1){
+			//鏈�鍚庨樁娈电敓鏁堟椂闂�
+			ContractPaymentSchedule endSchedule = afterSchedule.get(0);
+			endSchedule.setEffectiveDate(DateUtil.offsetDay(addDTO.getProcessDate(),endSchedule.getAgreedDays()));
+			endSchedule.setEffectiveEndDate(contract.getExpirationDate());
+			contractPaymentScheduleMapper.updateById(endSchedule);
+			//褰撳墠闃舵鐢熸晥鏃堕棿
+			schedule.setEffectiveDate(DateUtil.offsetDay(addDTO.getProcessDate(),schedule.getAgreedDays()));
+			schedule.setEffectiveEndDate(endSchedule.getEffectiveDate());
+			contractPaymentScheduleMapper.updateById(schedule);
+			//鏈�鍚庨樁娈靛簲鏀�
+			PaymentConfirm newConfim = new PaymentConfirm();
+			newConfim.setBusinessType(endSchedule.getStageName()+"搴旀敹");
+			newConfim.setBusGuestId(contract.getPartyAId());
+			newConfim.setBusGuestName(contract.getPartyA());
+			newConfim.setContractId(contract.getId());
+			newConfim.setContractName(contract.getContractName());
+			newConfim.setContractNo(contract.getContractNo());
+			newConfim.setScheduleId(endSchedule.getId());
+			newConfim.setScheduleName(schedule.getStageName());
+			newConfim.setConfirmTime(addDTO.getProcessDate());
+			newConfim.setTransationAmount(endSchedule.getPlannedAmount());
+			newConfim.setReceivableAmount(endSchedule.getPlannedAmount());
+			PaymentConfirm lastNewConfirm = paymentConfirmMapper.selectOne(Wrappers.<PaymentConfirm>lambdaQuery().eq(PaymentConfirm::getContractId,contract.getId())
+					.orderByDesc(PaymentConfirm::getCreateTime).last("limit 1"));
+			BigDecimal lastNewTotal = new BigDecimal("0");
+			if(ObjUtil.isNotNull(lastNewConfirm)){
+				lastNewTotal = lastNewConfirm.getTotalAmount();
+			}
+			newConfim.setTotalAmount(lastNewTotal.subtract(newConfim.getReceivableAmount()));
+			paymentConfirmMapper.insert(newConfim);
+		}else {
+			schedule.setEffectiveEndDate(contract.getExpirationDate());
+			contractPaymentScheduleMapper.updateById(schedule);
+		}
+		return R.ok();
+	}
+
+	@Override
+	public R selectScheduleProcess(Long id) {
+		MPJLambdaWrapper<ContractPaymentSchedule> wrapper = new MPJLambdaWrapper<ContractPaymentSchedule>()
+				.select(ContractPaymentSchedule::getId,ContractPaymentSchedule::getStageName,ContractPaymentSchedule::getEffectiveDate,
+						ContractPaymentSchedule::getPlannedAmount,ContractPaymentSchedule::getPlannedAmount,
+						ContractPaymentSchedule::getEffectiveEndDate,ContractPaymentSchedule::getPaymentDate,
+						ContractPaymentSchedule::getPaymentStatus,ContractPaymentSchedule::getActualAmount)
+				.eq(ContractPaymentSchedule::getContractId,id)
+				.orderByAsc(ContractPaymentSchedule::getCreateTime);
+		List<ContractPaymentScheduleVo> scheduleVoList = contractPaymentScheduleMapper.selectJoinList(ContractPaymentScheduleVo.class,wrapper);
+		if (ArrayUtil.isEmpty(scheduleVoList.toArray())){
+			scheduleVoList.stream().forEach(contractPaymentScheduleVo -> {
+				List<ContractPaymentScheduleProcess> paymentScheduleProcessList = processMapper.selectList(Wrappers.<ContractPaymentScheduleProcess>lambdaQuery()
+						.eq(ContractPaymentScheduleProcess::getContractId,contractPaymentScheduleVo.getId())
+						.orderByAsc(ContractPaymentScheduleProcess::getCreateTime));
+				if (ArrayUtil.isNotEmpty(paymentScheduleProcessList.toArray())){
+					contractPaymentScheduleVo.setProcessVoList(BeanUtil.copyToList(paymentScheduleProcessList, ScheduleProcessVo.class));
+				}
+			});
+		}
+		return R.ok(scheduleVoList);
+	}
+}
\ No newline at end of file

--
Gitblit v1.9.1