shiyunteng
2026-05-18 2d22e2697a48b6061745e674c20359fef4280052
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/PaymentConfirmServiceImpl.java
@@ -13,7 +13,6 @@
import com.by4cloud.platformx.business.mapper.HistoryOverdueMapper;
import com.by4cloud.platformx.business.mapper.PaymentConfirmMapper;
import com.by4cloud.platformx.business.service.BusinessCustomerService;
import com.by4cloud.platformx.business.service.ContractPaymentScheduleService;
import com.by4cloud.platformx.business.service.ContractService;
import com.by4cloud.platformx.business.service.PaymentConfirmService;
import com.by4cloud.platformx.common.core.util.R;
@@ -23,6 +22,7 @@
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
 * 收款确认
@@ -98,6 +98,7 @@
         if (ArrayUtil.isNotEmpty(scheduleList.toArray())){
            BigDecimal remain = addDTO.getTransationAmount();
            for (ContractPaymentSchedule schedule:scheduleList) {
               BigDecimal lastRemain = remain;
               remain = remain.subtract(StrUtil.equals(schedule.getPaymentStatus()+"","0")?schedule.getPlannedAmount():
                     schedule.getPlannedAmount().subtract(schedule.getActualAmount()));
               if (remain.compareTo(new BigDecimal("0"))>=0){
@@ -112,16 +113,34 @@
                     //新增逾期历史
                     HistoryOverdue historyOverdue = BeanUtil.copyProperties(currentOverdue,HistoryOverdue.class,"id");
                     historyOverdue.setPaymentTime(addDTO.getConfirmTime());
                     historyOverdue.setCompId(schedule.getCompId());
                     historyOverdueMapper.insert(historyOverdue);
                     //删除当前逾期
                     currentOverdueMapper.deleteById(currentOverdue);
                  }
               }else {
                  schedule.setActualAmount(StrUtil.equals(schedule.getPaymentStatus()+"","0")?schedule.getPlannedAmount().add(remain):
                        schedule.getPlannedAmount().subtract(schedule.getActualAmount()).add(remain));
                        schedule.getActualAmount().add(lastRemain));
                  schedule.setPaymentDate(addDTO.getConfirmTime());
                  schedule.setPaymentStatus(1);
                  contractPaymentScheduleMapper.updateById(schedule);
                  //查询是否有当前逾期
                  CurrentOverdue currentOverdue = currentOverdueMapper.selectOne(Wrappers.<CurrentOverdue>lambdaQuery().eq(CurrentOverdue::getScheduleId,schedule.getId())
                        .eq(CurrentOverdue::getContractId,schedule.getContractId()).last("limit 1"));
                  if (ObjUtil.isNotNull(currentOverdue)){
                     //新增逾期历史
                     HistoryOverdue historyOverdue = BeanUtil.copyProperties(currentOverdue,HistoryOverdue.class,"id");
                     historyOverdue.setReceivableAmount(lastRemain);
                     historyOverdue.setPaymentTime(addDTO.getConfirmTime());
                     historyOverdue.setCompId(schedule.getCompId());
                     historyOverdueMapper.insert(historyOverdue);
                     //查询历史已付逾期金额
                     List<HistoryOverdue> historyOverdueList = historyOverdueMapper.selectList(Wrappers.<HistoryOverdue>lambdaQuery().eq(HistoryOverdue::getScheduleId,currentOverdue.getScheduleId()));
                     BigDecimal hisTotal = historyOverdueList.stream().map(item->item.getReceivableAmount()).reduce(BigDecimal.ZERO,BigDecimal::add);
                     //更新当前逾期
                     currentOverdue.setReceivableAmount(schedule.getPlannedAmount().subtract(hisTotal));
                     currentOverdueMapper.updateById(currentOverdue);
                  }
                  break;
               }
            }
@@ -150,6 +169,14 @@
         entity.setConfirmTime(new Date());
         baseMapper.insert(entity);
      }
      // 查询所有付款阶段是否都付款完成
      List<ContractPaymentSchedule> scheduleList = contractPaymentScheduleMapper.selectList(Wrappers.<ContractPaymentSchedule>lambdaQuery().eq(ContractPaymentSchedule::getContractId,contract.getId()));
      if (ArrayUtil.isNotEmpty(scheduleList.toArray())){
         if (scheduleList.stream().allMatch(item -> Objects.equals(item.getPaymentStatus(), 2))){
            contract.setContractStatus(3);
            contractService.updateById(contract);
         };
      }
      return R.ok();
   }
}