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 |   70 +++++++++++++++++++++++++++++++----
 1 files changed, 62 insertions(+), 8 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 90ac7f2..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,5 +1,7 @@
 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;
@@ -12,6 +14,7 @@
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * 姘寸數鎶勮〃
@@ -27,6 +30,7 @@
 	private final ContractSubjectMatterMapper contractSubjectMatterMapper;
 	private final ContractPaymentScheduleMapper contractPaymentScheduleMapper;
 	private final PaymentConfirmMapper paymentConfirmMapper;
+	private final ContractExecDateMapper contractExecDateMapper;
 
 	@Override
 	public R edit(MeterReadRecordUpdateDTO updateDTO) {
@@ -34,6 +38,12 @@
 		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"));
+		//鎴垮眿绉熻祦鐢熸垚搴旀敹
+		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("鏃犳渶杩戞妱琛ㄨ褰�");
 		}
@@ -42,25 +52,44 @@
 		}
 		record.setMeterReadTime(updateDTO.getMeterReadTime());
 		record.setMeterReadNum(updateDTO.getMeterReadNum());
+		record.setUsageNum(updateDTO.getMeterReadNum().subtract(lastRecord.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("鏃犲悎鍚屼俊鎭紝璇疯仈绯绘妧鏈汉鍛�");
+		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();
-		schedule.setStageName("姘寸數浠g即");
+
+		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(subjectMatter.getUnitPrice().multiply(updateDTO.getMeterReadNum().subtract(lastRecord.getMeterReadNum())));
+		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)){
@@ -68,6 +97,7 @@
 		}
 		schedule.setPaymentStatus(0);
 		schedule.setActualAmount(new BigDecimal("0"));
+		schedule.setInvoiceFlag("0");
 		contractPaymentScheduleMapper.insert(schedule);
 		//鎴垮眿绉熻祦鐢熸垚搴旀敹
 		PaymentConfirm confirm = new PaymentConfirm();
@@ -101,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