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