From 0527f90adf2aea086af681fb8f3dbf49c0a5ed31 Mon Sep 17 00:00:00 2001
From: shiyunteng <shiyunteng@example.com>
Date: 星期三, 27 五月 2026 17:21:27 +0800
Subject: [PATCH] feat:新增非主营业务水电代缴/房屋租赁合同
---
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java | 284 ++++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 210 insertions(+), 74 deletions(-)
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java
index fd7e0b9..029813d 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java
+++ b/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,20 +246,78 @@
Contract contract = baseMapper.selectById(id);
contract.setContractStatus(2);
baseMapper.updateById(contract);
- ContractPaymentSchedule fitstSchedule = contractPaymentScheduleMapper.selectOne(Wrappers.<ContractPaymentSchedule>lambdaQuery().eq(ContractPaymentSchedule::getContractId, contract.getId())
- .orderByAsc(ContractPaymentSchedule::getCreateTime).last("limit 1"));
- if (fitstSchedule.getStageName().equals("鍚堝悓绛捐")) {
- //鏂板搴旀敹
- savePaymentConfirm(contract, fitstSchedule);
+ 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 -> {
- //鏂板鍚堝悓灞ョ害璁板綍
- ContractPaymentScheduleProcess process = new ContractPaymentScheduleProcess();
- process.setContractId(contract.getId());
- process.setContractName(contract.getContractName());
- process.setScheduleId(fitstSchedule.getId());
- process.setScheduleName(fitstSchedule.getStageName());
- process.setProcessDate(contract.getSignDate());
- contractPaymentScheduleProcessMapper.insert(process);
+ //寰幆鏃ユ湡
+ 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("鍚堝悓绛捐")) {
+ //鏂板搴旀敹
+ savePaymentConfirm(contract, fitstSchedule);
+
+ //鏂板鍚堝悓灞ョ害璁板綍
+ ContractPaymentScheduleProcess process = new ContractPaymentScheduleProcess();
+ process.setContractId(contract.getId());
+ process.setContractName(contract.getContractName());
+ process.setScheduleId(fitstSchedule.getId());
+ process.setScheduleName(fitstSchedule.getStageName());
+ process.setProcessDate(contract.getSignDate());
+ contractPaymentScheduleProcessMapper.insert(process);
// //褰撳墠涓哄悎鍚屾渶鍚庨樁娈�
// PaymentConfirm newConfirm = paymentConfirmMapper.selectOne(Wrappers.<PaymentConfirm>lambdaQuery().eq(PaymentConfirm::getContractId,contract.getId())
// .orderByDesc(PaymentConfirm::getCreateTime).last("limit 1"));
@@ -250,74 +326,75 @@
// contract.setContractStatus(3);
// baseMapper.updateById(contract);
// }
- } else if (fitstSchedule.getStageName().equals("鍙戣揣鍓�")) {
- //鏇存柊鍚堝悓涓嬩釜闃舵
- contract.setNextScheduleName("鏃�");
- baseMapper.updateById(contract);
- } else if (fitstSchedule.getStageName().equals("璐у埌绛炬敹")) {
- //鏇存柊鍚堝悓涓嬩釜闃舵
- contract.setNextScheduleName("璐у埌绛炬敹");
- baseMapper.updateById(contract);
- } else if (fitstSchedule.getStageName().equals("璋冭瘯瀹屾垚鎴栭獙鏀�")) {
- //鏇存柊鍚堝悓涓嬩釜闃舵
- contract.setNextScheduleName("璋冭瘯瀹屾垚鎴栭獙鏀�");
- baseMapper.updateById(contract);
- } else {
- //鏂板搴旀敹
- savePaymentConfirm(contract, fitstSchedule);
- }
- //鏌ヨ鏄惁鏈夊悗缁樁娈�
- List<ContractPaymentSchedule> afterSchedule = contractPaymentScheduleMapper.selectList(Wrappers.<ContractPaymentSchedule>lambdaQuery()
- .eq(ContractPaymentSchedule::getContractId, fitstSchedule.getContractId())
- .gt(ContractPaymentSchedule::getStageOrder, fitstSchedule.getStageOrder())
- .orderByAsc(ContractPaymentSchedule::getCreateTime));
- if (ArrayUtil.isNotEmpty(afterSchedule.toArray()) && afterSchedule.size() == 1) {
- //鏈�鍚庨樁娈电敓鏁堟椂闂�
- ContractPaymentSchedule endSchedule = afterSchedule.get(0);
- if (StrUtil.equals(endSchedule.getStageName(), "璐ㄤ繚閲�")) {
+ } else if (fitstSchedule.getStageName().equals("鍙戣揣鍓�")) {
+ //鏇存柊鍚堝悓涓嬩釜闃舵
+ contract.setNextScheduleName("鏃�");
+ baseMapper.updateById(contract);
+ } else if (fitstSchedule.getStageName().equals("璐у埌绛炬敹")) {
+ //鏇存柊鍚堝悓涓嬩釜闃舵
+ contract.setNextScheduleName("璐у埌绛炬敹");
+ baseMapper.updateById(contract);
+ } else if (fitstSchedule.getStageName().equals("璋冭瘯瀹屾垚鎴栭獙鏀�")) {
+ //鏇存柊鍚堝悓涓嬩釜闃舵
+ contract.setNextScheduleName("璋冭瘯瀹屾垚鎴栭獙鏀�");
+ baseMapper.updateById(contract);
+ } else {
+ //鏂板搴旀敹
+ savePaymentConfirm(contract, fitstSchedule);
+ }
+ //鏌ヨ鏄惁鏈夊悗缁樁娈�
+ List<ContractPaymentSchedule> afterSchedule = contractPaymentScheduleMapper.selectList(Wrappers.<ContractPaymentSchedule>lambdaQuery()
+ .eq(ContractPaymentSchedule::getContractId, fitstSchedule.getContractId())
+ .gt(ContractPaymentSchedule::getStageOrder, fitstSchedule.getStageOrder())
+ .orderByAsc(ContractPaymentSchedule::getCreateTime));
+ if (ArrayUtil.isNotEmpty(afterSchedule.toArray()) && afterSchedule.size() == 1) {
+ //鏈�鍚庨樁娈电敓鏁堟椂闂�
+ ContractPaymentSchedule endSchedule = afterSchedule.get(0);
+ if (StrUtil.equals(endSchedule.getStageName(), "璐ㄤ繚閲�")) {
// endSchedule.setEffectiveEndDate(DateUtil.offsetDay(new Date(),endSchedule.getAgreedDays()));
// contractPaymentScheduleMapper.updateById(endSchedule);
- //鏈�鍚庨樁娈靛簲鏀�
- 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(endSchedule.getStageName());
- newConfim.setConfirmTime(new Date());
- 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();
+ //鏈�鍚庨樁娈靛簲鏀�
+ 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(endSchedule.getStageName());
+ newConfim.setConfirmTime(new Date());
+ 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()));
+ if (endSchedule.getPaymentRatio().compareTo(new BigDecimal("0")) > 0) {
+ paymentConfirmMapper.insert(newConfim);
+ }
}
- newConfim.setTotalAmount(lastNewTotal.subtract(newConfim.getReceivableAmount()));
- if (endSchedule.getPaymentRatio().compareTo(new BigDecimal("0")) > 0) {
- paymentConfirmMapper.insert(newConfim);
- }
+ //鏇存柊鍚堝悓涓嬩釜闃舵
+ contract.setNextScheduleName(endSchedule.getStageName());
+ baseMapper.updateById(contract);
}
- //鏇存柊鍚堝悓涓嬩釜闃舵
- contract.setNextScheduleName(endSchedule.getStageName());
- baseMapper.updateById(contract);
- }
- if (ArrayUtil.isNotEmpty(afterSchedule.toArray()) && afterSchedule.size() > 1) {
- //绗竴闃舵鐢熸晥鏃堕棿
+ if (ArrayUtil.isNotEmpty(afterSchedule.toArray()) && afterSchedule.size() > 1) {
+ //绗竴闃舵鐢熸晥鏃堕棿
// fitstSchedule.setEffectiveEndDate(DateUtil.offsetDay(contract.getSignDate(),fitstSchedule.getAgreedDays()));
// contractPaymentScheduleMapper.updateById(fitstSchedule);
- //鏇存柊鍚堝悓涓嬩釜闃舵
- contract.setNextScheduleName(afterSchedule.get(0).getStageName());
- baseMapper.updateById(contract);
- }
- //鍙湁褰撳墠鍚堝悓绛惧瓧闃舵
+ //鏇存柊鍚堝悓涓嬩釜闃舵
+ contract.setNextScheduleName(afterSchedule.get(0).getStageName());
+ baseMapper.updateById(contract);
+ }
+ //鍙湁褰撳墠鍚堝悓绛惧瓧闃舵
// if(ArrayUtil.isEmpty(afterSchedule.toArray())){
// fitstSchedule.setEffectiveEndDate(DateUtil.offsetDay(contract.getSignDate(),fitstSchedule.getAgreedDays()));
// contractPaymentScheduleMapper.updateById(fitstSchedule);
// }
+ }
}
private void savePaymentConfirm(Contract contract, ContractPaymentSchedule schedule) {
@@ -378,9 +455,9 @@
//鏇存柊褰撳墠闃舵瀹為檯鏀舵 鍜� 鏀舵鐘舵��
schedule.setActualAmount(inConfirm.getTransationAmount());
schedule.setPaymentStatus(2);
- if (inConfirm.getTotalAmount().compareTo(new BigDecimal("0")) > 0){
+ if (inConfirm.getTotalAmount().compareTo(new BigDecimal("0")) > 0) {
inConfirm.setAdvanceAmount(inConfirm.getTotalAmount());
- }else if (inConfirm.getTotalAmount().compareTo(new BigDecimal("0")) < 0) {
+ } else if (inConfirm.getTotalAmount().compareTo(new BigDecimal("0")) < 0) {
inConfirm.setReceivableAmount(inConfirm.getTotalAmount().multiply(new BigDecimal("-1")));
schedule.setActualAmount(currentInSum);
schedule.setPaymentStatus(1);
@@ -391,7 +468,7 @@
}
- }else {
+ } else {
paymentConfirmMapper.insert(paymentConfirm);
}
}
@@ -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();
+ }
}
--
Gitblit v1.9.1