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())){
@@ -193,14 +195,14 @@
      if (r1.getCode() == 1) {
         return R.failed("流程启动失败");
      }
      contract.setContractStatus(2);
      contract.setContractStatus(1);
      baseMapper.updateById(contract);
      return R.ok();
   }
   public void takeEffect(Long id) {
      Contract contract = baseMapper.selectById(id);
      contract.setContractStatus(1);
      contract.setContractStatus(2);
      baseMapper.updateById(contract);
      ContractPaymentSchedule fitstSchedule = contractPaymentScheduleMapper.selectOne(Wrappers.<ContractPaymentSchedule>lambdaQuery().eq(ContractPaymentSchedule::getContractId,contract.getId())
            .orderByAsc(ContractPaymentSchedule::getCreateTime).last("limit 1"));
@@ -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);
@@ -399,4 +409,30 @@
      }
      return R.ok();
   }
   @Override
   public R refuseApproval(Long id) {
      Contract contract = baseMapper.selectById(id);
      contract.setContractStatus(0);
      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();
   }
}