shiyunteng
2026-05-25 633a003d232e37c79b7135ccda35eda1c69952c6
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java
@@ -97,7 +97,7 @@
            int currentIndex = index.getAndIncrement();
            ContractPaymentSchedule schedule = BeanUtil.copyProperties(contractPaymentScheduleAddDTO, ContractPaymentSchedule.class);
            if (contractPaymentScheduleAddDTO.getStageName().equals("合同签订")){
               schedule.setEffectiveDate(DateUtil.offsetDay(contract.getSignDate(),contractPaymentScheduleAddDTO.getAgreedDays()));
               schedule.setEffectiveEndDate(DateUtil.offsetDay(contract.getSignDate(), contractPaymentScheduleAddDTO.getAgreedDays()));
            }
            if (ObjUtil.isNotNull(schedule.getEffectiveDate())) {
               if (schedule.getEffectiveDate().before(DateUtil.date())) {
@@ -106,7 +106,11 @@
                  schedule.setFulfillmentStatus(0);
               }
            }
            if (contractPaymentScheduleAddDTO.getPaymentRatio().compareTo(new BigDecimal("0")) > 0) {
            schedule.setPaymentStatus(0);
            }else {
               schedule.setPaymentStatus(3);
            }
            schedule.setContractId(contract.getId());
            schedule.setContractName(contract.getContractName());
            schedule.setPlannedAmount(contract.getAmount().multiply(schedule.getPaymentRatio().divide(new BigDecimal("100"))));
@@ -123,7 +127,6 @@
         });
      }
      return R.ok();
@@ -172,6 +175,11 @@
            schedule.setContractName(contract.getContractName());
            schedule.setPlannedAmount(contract.getAmount().multiply(schedule.getPaymentRatio().divide(new BigDecimal("100"))));
            schedule.setStageOrder(currentIndex);
            if (contractPaymentScheduleAddDTO.getPaymentRatio().compareTo(new BigDecimal("0")) > 0) {
               schedule.setPaymentStatus(0);
            }else {
               schedule.setPaymentStatus(3);
            }
            contractPaymentScheduleMapper.insert(schedule);
            if (contractPaymentScheduleAddDTO.getStageName().equals("货到签收")){
               contract.setArrivalScheduleId(schedule.getId());
@@ -267,14 +275,8 @@
         //最后阶段生效时间
         ContractPaymentSchedule endSchedule = afterSchedule.get(0);
         if (StrUtil.equals(endSchedule.getStageName(),"质保金")){
            endSchedule.setEffectiveDate(DateUtil.offsetDay(new Date(),endSchedule.getAgreedDays()));
            endSchedule.setEffectiveEndDate(contract.getExpirationDate());
            contractPaymentScheduleMapper.updateById(endSchedule);
            //第一阶段生效时间
            fitstSchedule.setEffectiveDate(DateUtil.offsetDay(contract.getSignDate(),fitstSchedule.getAgreedDays()));
            fitstSchedule.setEffectiveEndDate(endSchedule.getEffectiveDate());
            contractPaymentScheduleMapper.updateById(fitstSchedule);
//            endSchedule.setEffectiveEndDate(DateUtil.offsetDay(new Date(),endSchedule.getAgreedDays()));
//            contractPaymentScheduleMapper.updateById(endSchedule);
            //最后阶段应收
            PaymentConfirm newConfim = new PaymentConfirm();
            newConfim.setBusinessType(endSchedule.getStageName()+"应收");
@@ -305,18 +307,17 @@
      }
      if(ArrayUtil.isNotEmpty(afterSchedule.toArray())&&afterSchedule.size()>1){
         //第一阶段生效时间
         fitstSchedule.setEffectiveDate(DateUtil.offsetDay(contract.getSignDate(),fitstSchedule.getAgreedDays()));
         contractPaymentScheduleMapper.updateById(fitstSchedule);
//         fitstSchedule.setEffectiveEndDate(DateUtil.offsetDay(contract.getSignDate(),fitstSchedule.getAgreedDays()));
//         contractPaymentScheduleMapper.updateById(fitstSchedule);
         //更新合同下个阶段
         contract.setNextScheduleName(afterSchedule.get(0).getStageName());
         baseMapper.updateById(contract);
      }
      //只有当前合同签字阶段
      if(ArrayUtil.isEmpty(afterSchedule.toArray())){
         fitstSchedule.setEffectiveDate(DateUtil.offsetDay(contract.getSignDate(),fitstSchedule.getAgreedDays()));
         fitstSchedule.setEffectiveEndDate(contract.getExpirationDate());
         contractPaymentScheduleMapper.updateById(fitstSchedule);
      }
//      if(ArrayUtil.isEmpty(afterSchedule.toArray())){
//         fitstSchedule.setEffectiveEndDate(DateUtil.offsetDay(contract.getSignDate(),fitstSchedule.getAgreedDays()));
//         contractPaymentScheduleMapper.updateById(fitstSchedule);
//      }
   }
   private void savePaymentConfirm(Contract contract, ContractPaymentSchedule schedule) {
@@ -393,7 +394,8 @@
   public R genCurrentOverdue() {
      List<ContractPaymentSchedule> scheduleList = contractPaymentScheduleMapper.selectList(Wrappers.<ContractPaymentSchedule>lambdaQuery()
            .lt(ContractPaymentSchedule::getEffectiveEndDate, DateUtil.today())
            .ne(ContractPaymentSchedule::getPaymentStatus,"2"));
            .ne(ContractPaymentSchedule::getPaymentStatus, "2")
            .ne(ContractPaymentSchedule::getPaymentStatus,3));
      if (ArrayUtil.isNotEmpty(scheduleList.toArray())){
         scheduleList.stream().forEach(contractPaymentSchedule -> {
            Contract contract = baseMapper.selectById(contractPaymentSchedule.getContractId());