shiyunteng
2026-05-27 0527f90adf2aea086af681fb8f3dbf49c0a5ed31
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java
@@ -55,6 +55,8 @@
   private final PaymentConfirmMapper paymentConfirmMapper;
   private final CurrentOverdueMapper currentOverdueMapper;
   private final BusinessCustomerMapper businessCustomerMapper;
   private final MeterReadRecordMapper meterReadRecordMapper;
   private final ContractExecDateMapper contractExecDateMapper;
   private final RemoteFlowProcessService remoteFlowProcessService;
   private final ContractTemplateMapper contractTemplateMapper;
   private final RemoteDeptService remoteDeptService;
@@ -88,7 +90,20 @@
            subjectMatter.setDeliveryStatus(0);
            subjectMatter.setTotalAmount(contractSubjectMatterAddDTO.getQuantity().multiply(contractSubjectMatterAddDTO.getUnitPrice()));
            contractSubjectMatterMapper.insert(subjectMatter);
            //水电类必须有初次表号
            if (StrUtil.isNotEmpty(contractSubjectMatterAddDTO.getMeterReadCode()) &&
                  ObjUtil.isNotNull(contractSubjectMatterAddDTO.getMeterReadNum())) {
               MeterReadRecord record = BeanUtil.copyProperties(contractSubjectMatterAddDTO, MeterReadRecord.class,"id");
               record.setContractId(contract.getId());
               record.setMatterId(subjectMatter.getId());
               record.setContractName(contract.getContractName());
               record.setBusGuestId(contract.getPartyAId());
               record.setBusGuestName(contract.getPartyA());
               record.setMeterReadTime(new Date());
               meterReadRecordMapper.insert(record);
            }
         });
      }
      if (ArrayUtil.isNotEmpty(addDTO.getContractPaymentSchedule())) {
@@ -128,6 +143,9 @@
      }
      if (StrUtil.isNotEmpty(addDTO.getContractCategory()) && StrUtil.equals(addDTO.getContractCategory(), "water_house")) {
      }
      return R.ok();
   }
@@ -228,6 +246,64 @@
      Contract contract = baseMapper.selectById(id);
      contract.setContractStatus(2);
      baseMapper.updateById(contract);
      if (StrUtil.isNotEmpty(contract.getContractCategory()) && StrUtil.equals(contract.getContractCategory(), "water_house")) {
         List<ContractSubjectMatter> subjectMatterList = contractSubjectMatterMapper.selectList(Wrappers.<ContractSubjectMatter>lambdaQuery()
               .eq(ContractSubjectMatter::getContractId,id));
         if (ArrayUtil.isNotEmpty(subjectMatterList.toArray())) {
            subjectMatterList.stream().forEach(contractSubjectMatter -> {
               //循环日期
               Date execDate0 = DateUtil.offsetDay(contract.getSignDate(), contract.getExecDay());
               for (int i = 0; i < contract.getExecTimes(); i++) {
                  if (StrUtil.equals(contract.getExecFrequency(), "1")) {
                     Date execDatei = DateUtil.offsetWeek(execDate0, i);
                     ContractExecDate execDate = new ContractExecDate();
                     execDate.setContractId(contract.getId());
                     execDate.setMatterId(contractSubjectMatter.getId());
                     execDate.setExecDate(execDatei);
                     execDate.setGenFlag("0");
                     contractExecDateMapper.insert(execDate);
                  }
                  if (StrUtil.equals(contract.getExecFrequency(), "2")) {
                     Date execDatei = DateUtil.offsetMonth(execDate0, i );
                     ContractExecDate execDate = new ContractExecDate();
                     execDate.setContractId(contract.getId());
                     execDate.setMatterId(contractSubjectMatter.getId());
                     execDate.setExecDate(execDatei);
                     execDate.setGenFlag("0");
                     contractExecDateMapper.insert(execDate);
                  }
                  if (StrUtil.equals(contract.getExecFrequency(), "3")) {
                     Date execDatei = DateUtil.offsetMonth(execDate0, i * 3);
                     ContractExecDate execDate = new ContractExecDate();
                     execDate.setContractId(contract.getId());
                     execDate.setMatterId(contractSubjectMatter.getId());
                     execDate.setExecDate(execDatei);
                     execDate.setGenFlag("0");
                     contractExecDateMapper.insert(execDate);
                  }
                  if (StrUtil.equals(contract.getExecFrequency(), "4")) {
                     Date execDatei = DateUtil.offsetMonth(execDate0, i * 6);
                     ContractExecDate execDate = new ContractExecDate();
                     execDate.setContractId(contract.getId());
                     execDate.setMatterId(contractSubjectMatter.getId());
                     execDate.setExecDate(execDatei);
                     execDate.setGenFlag("0");
                     contractExecDateMapper.insert(execDate);
                  }
                  if (StrUtil.equals(contract.getExecFrequency(), "5")) {
                     Date execDatei = DateUtil.offsetYear(execDate0, i);
                     ContractExecDate execDate = new ContractExecDate();
                     execDate.setContractId(contract.getId());
                     execDate.setMatterId(contractSubjectMatter.getId());
                     execDate.setExecDate(execDatei);
                     execDate.setGenFlag("0");
                     contractExecDateMapper.insert(execDate);
                  }
               }
            });
         }
      } else {
      ContractPaymentSchedule fitstSchedule = contractPaymentScheduleMapper.selectOne(Wrappers.<ContractPaymentSchedule>lambdaQuery().eq(ContractPaymentSchedule::getContractId, contract.getId())
            .orderByAsc(ContractPaymentSchedule::getCreateTime).last("limit 1"));
      if (fitstSchedule.getStageName().equals("合同签订")) {
@@ -318,6 +394,7 @@
//         fitstSchedule.setEffectiveEndDate(DateUtil.offsetDay(contract.getSignDate(),fitstSchedule.getAgreedDays()));
//         contractPaymentScheduleMapper.updateById(fitstSchedule);
//      }
      }
   }
   private void savePaymentConfirm(Contract contract, ContractPaymentSchedule schedule) {
@@ -592,4 +669,63 @@
         e.printStackTrace();
      }
   }
   @Override
   public R genCycleReceiced() {
      List<ContractExecDate> execDateList = contractExecDateMapper.selectList(Wrappers.<ContractExecDate>lambdaQuery()
            .le(ContractExecDate::getExecDate, DateUtil.today()).eq(ContractExecDate::getGenFlag,"0"));
      if (ArrayUtil.isNotEmpty(execDateList.toArray())) {
         execDateList.stream().forEach(contractExecDate -> {
            Contract contract = baseMapper.selectById(contractExecDate.getContractId());
            ContractSubjectMatter subjectMatter = contractSubjectMatterMapper.selectOne(Wrappers.<ContractSubjectMatter>lambdaQuery()
                  .eq(ContractSubjectMatter::getContractId, contractExecDate.getContractId())
                  .eq(ContractSubjectMatter::getId, contractExecDate.getMatterId()));
            //生成抄表单
            if (StrUtil.isNotEmpty(subjectMatter.getMeterReadCode()) &&
                  ObjUtil.isNotNull(subjectMatter.getMeterReadNum())) {
               MeterReadRecord record = BeanUtil.copyProperties(subjectMatter, MeterReadRecord.class, "id","meterReadNum");
               record.setMatterId(subjectMatter.getId());
               record.setBusGuestId(contract.getPartyAId());
               record.setBusGuestName(contract.getPartyA());
               meterReadRecordMapper.insert(record);
            }else {
               //房屋租赁生成应收
               PaymentConfirm confirm = new PaymentConfirm();
               confirm.setBusinessType("房屋租赁应收");
               confirm.setBusGuestId(contract.getPartyAId());
               confirm.setBusGuestName(contract.getPartyA());
               confirm.setContractId(contract.getId());
               confirm.setContractName(contract.getContractName());
               confirm.setContractNo(contract.getContractNo());
               confirm.setConfirmTime(contractExecDate.getExecDate());
               confirm.setTransationAmount(subjectMatter.getUnitPrice().multiply(subjectMatter.getQuantity()));
               confirm.setTotalAmount(confirm.getTransationAmount().multiply(new BigDecimal("-1")));
               PaymentConfirm lastConfirm = paymentConfirmMapper.selectOne(Wrappers.<PaymentConfirm>lambdaQuery().eq(PaymentConfirm::getContractId, contract.getId())
                     .orderByDesc(PaymentConfirm::getCreateTime).last("limit 1"));
               if (ObjUtil.isNotNull(lastConfirm)) {
                  BigDecimal total = lastConfirm.getTotalAmount().add(confirm.getTotalAmount());
                  if (total.compareTo(new BigDecimal("0")) > 0) {
                     confirm.setAdvanceAmount(total);
                     confirm.setTotalAmount(total);
                  } else if (total.compareTo(new BigDecimal("0")) == 0) {
                     confirm.setTotalAmount(total);
                  } else {
                     confirm.setReceivableAmount(total.multiply(new BigDecimal("-1")));
                     confirm.setTotalAmount(total);
                  }
                  confirm.setCompId(contract.getCompId());
                  paymentConfirmMapper.insert(confirm);
               } else {
                  confirm.setReceivableAmount(confirm.getTransationAmount());
                  confirm.setTotalAmount(confirm.getReceivableAmount().multiply(new BigDecimal("-1")));
                  confirm.setCompId(contract.getCompId());
                  paymentConfirmMapper.insert(confirm);
               }
            }
            contractExecDate.setGenFlag("1");
            contractExecDateMapper.updateById(contractExecDate);
         });
      }
      return R.ok();
   }
}