| | |
| | | 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.entity.*; |
| | | import com.by4cloud.platformx.business.mapper.*; |
| | | import com.by4cloud.platformx.business.service.ContractPaymentScheduleProcessService; |
| | | import com.by4cloud.platformx.business.vo.ContractPaymentScheduleVo; |
| | | import com.by4cloud.platformx.business.vo.ScheduleProcessVo; |
| | |
| | | private final ContractPaymentScheduleMapper contractPaymentScheduleMapper; |
| | | private final ContractPaymentScheduleProcessMapper processMapper; |
| | | private final ContractMapper contractMapper; |
| | | private final ContractSubjectMatterMapper subjectMatterMapper; |
| | | private final PaymentConfirmMapper paymentConfirmMapper; |
| | | |
| | | @Override |
| | |
| | | } |
| | | //合同 |
| | | Contract contract = contractMapper.selectById(schedule.getContractId()); |
| | | List<ContractSubjectMatter> subjectMatterList = subjectMatterMapper.selectList(Wrappers.<ContractSubjectMatter>lambdaQuery().eq(ContractSubjectMatter::getContractId,contract.getId())); |
| | | if (ArrayUtil.isEmpty(subjectMatterList.toArray())){ |
| | | return R.failed("该合同标的物异常,请联系技术人员"); |
| | | } |
| | | if (!subjectMatterList.stream().allMatch(item->item.getDeliveryStatus()==2)){ |
| | | return R.failed("出库数量小于当前合同标的物数量,无法进行当前操作"); |
| | | } |
| | | //新增当前阶段应收 |
| | | PaymentConfirm currentConfim = new PaymentConfirm(); |
| | | currentConfim.setBusinessType(schedule.getStageName()+"应收"); |
| | |
| | | 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())); |
| | | beforeSchedule.setEffectiveEndDate(schedule.getEffectiveDate()); |
| | | contractPaymentScheduleMapper.updateById(beforeSchedule); |
| | | //之前阶段是否收款完成 |
| | | // if (beforeSchedule.getPaymentStatus()!=2){ |
| | |
| | | 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(); |
| | | if (StrUtil.equals(endSchedule.getStageName(),"质保金")) { |
| | | 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); |
| | | } |
| | | newConfim.setTotalAmount(lastNewTotal.subtract(newConfim.getReceivableAmount())); |
| | | paymentConfirmMapper.insert(newConfim); |
| | | }else { |
| | | //更新合同下个阶段 |
| | | contract.setNextScheduleName(endSchedule.getStageName()); |
| | | contractMapper.updateById(contract); |
| | | } |
| | | if(ArrayUtil.isNotEmpty(afterSchedule.toArray())&&afterSchedule.size()>1){ |
| | | //更新合同下个阶段 |
| | | contract.setNextScheduleName(afterSchedule.get(0).getStageName()); |
| | | contractMapper.updateById(contract); |
| | | } |
| | | if(ArrayUtil.isEmpty(afterSchedule.toArray())){ |
| | | schedule.setEffectiveEndDate(contract.getExpirationDate()); |
| | | contractPaymentScheduleMapper.updateById(schedule); |
| | | //更新合同下个阶段 |
| | | contract.setNextScheduleName("无"); |
| | | contractMapper.updateById(contract); |
| | | //当前为合同最后阶段 |
| | | PaymentConfirm lastNewConfirm = paymentConfirmMapper.selectOne(Wrappers.<PaymentConfirm>lambdaQuery().eq(PaymentConfirm::getContractId,contract.getId()) |
| | | .orderByDesc(PaymentConfirm::getCreateTime).last("limit 1")); |
| | | if (lastNewConfirm.getTotalAmount().compareTo(new BigDecimal("0"))>=0){ |
| | | //有预付且超过应收 关闭合同状态 |
| | | contract.setContractStatus(3); |
| | | contractMapper.updateById(contract); |
| | | } |
| | | } |
| | | return R.ok(); |
| | | } |
| | |
| | | .select(ContractPaymentSchedule::getId,ContractPaymentSchedule::getStageName,ContractPaymentSchedule::getEffectiveDate, |
| | | ContractPaymentSchedule::getPlannedAmount,ContractPaymentSchedule::getPlannedAmount, |
| | | ContractPaymentSchedule::getEffectiveEndDate,ContractPaymentSchedule::getPaymentDate, |
| | | ContractPaymentSchedule::getPaymentStatus,ContractPaymentSchedule::getActualAmount) |
| | | ContractPaymentSchedule::getPaymentStatus,ContractPaymentSchedule::getActualAmount, |
| | | ContractPaymentSchedule::getAgreedDays) |
| | | .select(ContractPaymentScheduleProcess::getProcessDate) |
| | | .leftJoin(ContractPaymentScheduleProcess.class,ContractPaymentScheduleProcess::getScheduleId,ContractPaymentSchedule::getId) |
| | | .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); |
| | | } |
| | | } |