From e02812df9217d3e50a368a8234c07c60c64c0ff4 Mon Sep 17 00:00:00 2001
From: shiyunteng <shiyunteng@example.com>
Date: 星期三, 05 八月 2026 08:34:26 +0800
Subject: [PATCH] feat:新增石煤机 机械厂模版合同/客户数据主数据同步接口/合同履约进度新增质保结束操作/合同开票状态 修改为待开 可开 已开/出库逻辑完善
---
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/MeterReadRecordServiceImpl.java | 106 +++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 87 insertions(+), 19 deletions(-)
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/MeterReadRecordServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/MeterReadRecordServiceImpl.java
index ffcb0f5..f219846 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/MeterReadRecordServiceImpl.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/MeterReadRecordServiceImpl.java
@@ -1,23 +1,20 @@
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;
/**
* 姘寸數鎶勮〃
@@ -31,7 +28,9 @@
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) {
@@ -39,23 +38,68 @@
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("姘磋垂浠g即");
+ }
+ if (subjectMatter.getMaterialCode().equals("electricity_bill")){
+ schedule.setStageName("鐢佃垂浠g即");
+ }
+ 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());
@@ -87,6 +131,30 @@
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();
}
}
\ No newline at end of file
--
Gitblit v1.9.1