| | |
| | | package com.by4cloud.platformx.business.service.impl; |
| | | |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.ArrayUtil; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.by4cloud.platformx.business.dto.MeterReadRecordUpdateDTO; |
| | | import com.by4cloud.platformx.business.entity.Contract; |
| | | import com.by4cloud.platformx.business.entity.ContractSubjectMatter; |
| | | import com.by4cloud.platformx.business.entity.MeterReadRecord; |
| | | import com.by4cloud.platformx.business.entity.PaymentConfirm; |
| | | import com.by4cloud.platformx.business.mapper.ContractMapper; |
| | | import com.by4cloud.platformx.business.mapper.ContractSubjectMatterMapper; |
| | | import com.by4cloud.platformx.business.mapper.MeterReadRecordMapper; |
| | | 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.MeterReadRecordService; |
| | | import com.by4cloud.platformx.common.core.util.R; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 水电抄表 |
| | |
| | | |
| | | private final ContractMapper contractMapper; |
| | | private final ContractSubjectMatterMapper contractSubjectMatterMapper; |
| | | private final ContractPaymentScheduleMapper contractPaymentScheduleMapper; |
| | | private final PaymentConfirmMapper paymentConfirmMapper; |
| | | private final ContractExecDateMapper contractExecDateMapper; |
| | | |
| | | @Override |
| | | public R edit(MeterReadRecordUpdateDTO updateDTO) { |
| | |
| | | MeterReadRecord lastRecord = baseMapper.selectOne(Wrappers.<MeterReadRecord>lambdaQuery().eq(MeterReadRecord::getContractId,updateDTO.getContractId()) |
| | | .eq(MeterReadRecord::getMeterReadCode,updateDTO.getMeterReadCode()).lt(MeterReadRecord::getCreateTime,record.getCreateTime()) |
| | | .orderByDesc(MeterReadRecord::getCreateTime).last("limit 1")); |
| | | if(ObjUtil.isNull(lastRecord)){ |
| | | return R.failed("无最近抄号记录"); |
| | | } |
| | | if (updateDTO.getMeterReadNum().compareTo(lastRecord.getMeterReadNum())<0){ |
| | | return R.failed("抄号数字不能比上次少"); |
| | | } |
| | | record.setMeterReadTime(updateDTO.getMeterReadTime()); |
| | | record.setMeterReadNum(updateDTO.getMeterReadNum()); |
| | | record.setMeterReadAttNames(updateDTO.getMeterReadAttNames()); |
| | | record.setMeterReadAttPaths(updateDTO.getMeterReadAttPaths()); |
| | | baseMapper.updateById(record); |
| | | //房屋租赁生成应收 |
| | | Contract contract = contractMapper.selectById(updateDTO.getContractId()); |
| | | ContractSubjectMatter subjectMatter = contractSubjectMatterMapper.selectById(updateDTO.getMatterId()); |
| | | if(ObjUtil.isNull(lastRecord)){ |
| | | R.failed("无合同信息,请联系技术人员"); |
| | | } |
| | | if(ObjUtil.isNull(lastRecord)){ |
| | | return R.failed("无最近抄表记录"); |
| | | } |
| | | if (updateDTO.getMeterReadNum().compareTo(lastRecord.getMeterReadNum())<=0){ |
| | | return R.failed("抄表数字不能比上次少"); |
| | | } |
| | | record.setMeterReadTime(updateDTO.getMeterReadTime()); |
| | | record.setMeterReadNum(updateDTO.getMeterReadNum()); |
| | | record.setUsageNum(updateDTO.getMeterReadNum().subtract(lastRecord.getMeterReadNum())); |
| | | record.setMeterReadAttNames(updateDTO.getMeterReadAttNames()); |
| | | record.setMeterReadAttPaths(updateDTO.getMeterReadAttPaths()); |
| | | record.setUnitPrice(subjectMatter.getUnitPrice()); |
| | | if (subjectMatter.getMaterialCode().equals("water_bill")){ |
| | | record.setMeterType("2"); |
| | | } |
| | | if (subjectMatter.getMaterialCode().equals("electricity_bill")){ |
| | | record.setMeterType("3"); |
| | | } |
| | | if (subjectMatter.getMaterialCode().equals("house_rental")){ |
| | | record.setMeterType("1"); |
| | | } |
| | | record.setCostAmount(subjectMatter.getUnitPrice().multiply(updateDTO.getMeterReadNum().subtract(lastRecord.getMeterReadNum()))); |
| | | baseMapper.updateById(record); |
| | | |
| | | //创建收款节点 |
| | | //查询上次收款节点 |
| | | ContractPaymentSchedule lastSchedule = contractPaymentScheduleMapper.selectOne(Wrappers.<ContractPaymentSchedule>lambdaQuery() |
| | | .eq(ContractPaymentSchedule::getContractId,contract.getId()) |
| | | .orderByDesc(ContractPaymentSchedule::getCreateTime).last("limit 1")); |
| | | ContractPaymentSchedule schedule = new ContractPaymentSchedule(); |
| | | |
| | | if (subjectMatter.getMaterialCode().equals("water_bill")){ |
| | | schedule.setStageName("水费代缴"); |
| | | } |
| | | if (subjectMatter.getMaterialCode().equals("electricity_bill")){ |
| | | schedule.setStageName("电费代缴"); |
| | | } |
| | | if (subjectMatter.getMaterialCode().equals("house_rental")){ |
| | | schedule.setStageName("房屋租赁费"); |
| | | } |
| | | schedule.setContractId(contract.getId()); |
| | | schedule.setContractName(contract.getContractName()); |
| | | schedule.setPlannedAmount(record.getCostAmount()); |
| | | schedule.setSubjectMatterCode(subjectMatter.getMaterialCode()); |
| | | schedule.setSubjectMatterName(subjectMatter.getMaterialInternalName()); |
| | | schedule.setRemark(DateUtil.formatDate(record.getMeterReadTime())+schedule.getStageName()); |
| | | schedule.setEffectiveEndDate(updateDTO.getMeterReadTime()); |
| | | schedule.setStageOrder(1); |
| | | if (ObjUtil.isNotNull(lastSchedule)){ |
| | | schedule.setStageOrder(lastSchedule.getStageOrder()+1); |
| | | } |
| | | schedule.setPaymentStatus(0); |
| | | schedule.setActualAmount(new BigDecimal("0")); |
| | | schedule.setInvoiceFlag("0"); |
| | | contractPaymentScheduleMapper.insert(schedule); |
| | | //房屋租赁生成应收 |
| | | PaymentConfirm confirm = new PaymentConfirm(); |
| | | confirm.setBusinessType(subjectMatter.getMaterialInternalName()+"应收"); |
| | | confirm.setBusGuestId(contract.getPartyAId()); |
| | |
| | | confirm.setCompId(contract.getCompId()); |
| | | paymentConfirmMapper.insert(confirm); |
| | | } |
| | | //判断 循环是否完成 |
| | | List<ContractExecDate> execDateList = contractExecDateMapper.selectList(Wrappers.<ContractExecDate>lambdaQuery().eq(ContractExecDate::getContractId,contract.getId()) |
| | | .eq(ContractExecDate::getGenFlag,"0")); |
| | | List<MeterReadRecord> recordList = baseMapper.selectList(Wrappers.<MeterReadRecord>lambdaQuery() |
| | | .eq(MeterReadRecord::getContractId,contract.getId()) |
| | | .isNull(MeterReadRecord::getMeterReadNum)); |
| | | if (ArrayUtil.isEmpty(execDateList.toArray())&&ArrayUtil.isEmpty(recordList.toArray())){ |
| | | List<PaymentConfirm> confirmList = paymentConfirmMapper.selectList(Wrappers.<PaymentConfirm>lambdaQuery() |
| | | .eq(PaymentConfirm::getContractId, contract.getId()) |
| | | .and(wrapper -> wrapper |
| | | .eq(PaymentConfirm::getBusinessType, "房屋租赁应收") |
| | | .or() |
| | | .eq(PaymentConfirm::getBusinessType, "售电应收") |
| | | .or() |
| | | .eq(PaymentConfirm::getBusinessType, "不征税自来水应收") |
| | | )); |
| | | if (ArrayUtil.isNotEmpty(confirmList.toArray())){ |
| | | BigDecimal total = confirmList.stream().map(PaymentConfirm::getTransationAmount).filter(amount -> amount != null).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | contract.setAmount(total); |
| | | contractMapper.updateById(contract); |
| | | } |
| | | } |
| | | contract.setBillingStatus("2"); |
| | | contractMapper.updateById(contract); |
| | | return R.ok(); |
| | | } |
| | | } |