From d36a5483f0287028bf65cfcd69b88543070e7e98 Mon Sep 17 00:00:00 2001
From: shiyunteng <shiyunteng@example.com>
Date: 星期四, 28 五月 2026 14:44:27 +0800
Subject: [PATCH] feat:新增房屋租赁/水电代缴合同新增功能 新增逾期出库功能 新增水电代缴合同抄表功能

---
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/DeliveryOverdueService.java          |   11 +
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/MeterReadRecordServiceImpl.java |   30 ++
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/DeliveryOverduePageVo.java                |   46 +++++
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/DeliveryOverdueServiceImpl.java |   38 ++++
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/DeliveryOverdueQueryDTO.java             |   16 +
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContractSubjectMatterAddDTO.java         |    9 +
 /dev/null                                                                                                                 |    0 
 platformx-business-finance-biz/src/main/resources/mapper/DeliveryOverdueMapper.xml                                        |   66 +++++++
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/DeliveryOverdueController.java    |  120 +++++++++++++
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractServiceImpl.java        |   44 ++++
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/PaymentConfirmServiceImpl.java  |   32 +++
 platformx-business-finance-biz/src/main/resources/template/ymjjgclht.docx                                                 |    0 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractSubjectMatter.java            |    8 
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java        |   21 ++
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContractAddDTO.java                      |    3 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractDetailVo.java                     |    3 
 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/DeliveryOverdue.java                  |   64 +++++++
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/DeliveryOverdueMapper.java            |   18 ++
 18 files changed, 513 insertions(+), 16 deletions(-)

diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContractAddDTO.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContractAddDTO.java
index 4b11d85..a7190d5 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContractAddDTO.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContractAddDTO.java
@@ -55,6 +55,9 @@
 	@Schema(description = "绛剧讲鏃ユ湡")
 	private Date signDate;
 
+	@Schema(description = "澶囨敞")
+	private String signPlace;
+
 	@Schema(description = "浜や粯鍛ㄦ湡")
 	private Integer deliveryCycle;
 
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContractSubjectMatterAddDTO.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContractSubjectMatterAddDTO.java
index 352d76f..9c5ab6e 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContractSubjectMatterAddDTO.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ContractSubjectMatterAddDTO.java
@@ -39,4 +39,13 @@
 	@Schema(description = "鎶勮〃鍗曟嵁璺緞")
 	private String meterReadAttPaths;
 
+	@Schema(description = "璁¢噺鍗曚綅")
+	private String unit;
+
+	@Schema(description = "鍗曢噸")
+	private BigDecimal singleWight;
+
+	@Schema(description = "鎬婚噸")
+	private BigDecimal totalWight;
+
 }
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/DeliveryOverdueQueryDTO.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/DeliveryOverdueQueryDTO.java
new file mode 100644
index 0000000..bf8bf0e
--- /dev/null
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/DeliveryOverdueQueryDTO.java
@@ -0,0 +1,16 @@
+package com.by4cloud.platformx.business.dto;
+
+import lombok.Data;
+
+@Data
+public class DeliveryOverdueQueryDTO {
+
+	private String industryId;
+
+	private String areaId;
+
+	private String partyB;
+
+	private String contractName;
+
+}
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractSubjectMatter.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractSubjectMatter.java
index 12ac3db..2347d87 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractSubjectMatter.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ContractSubjectMatter.java
@@ -173,4 +173,12 @@
 	@Schema(description = "鎶勮〃鍗曟嵁璺緞")
 	@Column(columnDefinition="text comment '鍗曟嵁璺緞'")
 	private String meterReadAttPaths;
+
+	@Schema(description = "鍗曢噸")
+	@Column(columnDefinition = "decimal(10,2) comment '鍗曢噸 /kg'")
+	private BigDecimal singleWight;
+
+	@Schema(description = "鎬婚噸")
+	@Column(columnDefinition = "decimal(10,2) comment '鎬婚噸 /kg'")
+	private BigDecimal totalWight;
 }
\ No newline at end of file
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/DeliveryOverdue.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/DeliveryOverdue.java
new file mode 100644
index 0000000..e626d4a
--- /dev/null
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/DeliveryOverdue.java
@@ -0,0 +1,64 @@
+package com.by4cloud.platformx.business.entity;
+
+import com.by4cloud.platformx.common.data.mybatis.BaseModel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import lombok.Data;
+import org.hibernate.annotations.Table;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 2026骞�5鏈�28鏃� 10:52:02
+ * syt
+ */
+@Data
+@Entity//鍔犱簡鎵嶈兘鑷姩鐢熸垚琛�
+@Table(appliesTo="delivery_overdue",comment = "鍑鸿揣閫炬湡")//缁欒〃鍔犳敞閲�
+@jakarta.persistence.Table(name = "delivery_overdue")//鏁版嵁搴撳垱寤虹殑琛ㄦ槑
+public class DeliveryOverdue extends BaseModel<DeliveryOverdue> {
+
+	@Schema(description = "瀹㈠晢鍚嶇О")
+	@Column(columnDefinition="VARCHAR(64) comment '瀹㈠晢鍚嶇О'")
+	private String busGuestName;
+
+	@Schema(description = "瀹㈠晢ID")
+	@Column(columnDefinition="bigint comment '瀹㈠晢ID'")
+	private Long busGuestId;
+
+	@Schema(description = "鍚堝悓鍚嶇О")
+	@Column(columnDefinition="VARCHAR(64) comment '鍚堝悓鍚嶇О'")
+	private String contractName;
+
+	@Schema(description = "鍚堝悓ID")
+	@Column(columnDefinition="bigint comment '鍚堝悓ID'")
+	private Long contractId;
+
+	@Schema(description = "鏍囩殑鐗╁悕绉�")
+	@Column(columnDefinition = "VARCHAR(200) comment '鏍囩殑鐗╁悕绉�'")
+	private String materialName;
+
+	@Schema(description = "鏍囩殑鐗╃紪鐮侊紙鍐呴儴鍞竴缂栫爜锛�")
+	@Column(columnDefinition = "VARCHAR(64) comment '鏍囩殑鐗╃紪鐮�'")
+	private String materialCode;
+
+	@Schema(description = "鏍囩殑鐗╃紪鐮侊紙鍐呴儴鍞竴鍚嶇О锛�")
+	@Column(columnDefinition = "VARCHAR(64) comment '鏍囩殑鐗╁悕绉�(鍐呴儴)'")
+	private String materialInternalName;
+
+	@Schema(description = "閫炬湡浜や粯鏁伴噺")
+	@Column(columnDefinition="decimal(10,2) comment '閫炬湡浜や粯鏁伴噺'")
+	private BigDecimal overdueNum;
+
+	@Schema(description = "鎬婚噾棰�")
+	@Column(columnDefinition="decimal(10,2) comment '鎬婚噾棰�  /鍏� 涓や綅灏忔暟'")
+	private BigDecimal totalAmount;
+
+	@Schema(description = "閫炬湡鏃堕暱")
+	@Column(columnDefinition="decimal(10,0) comment '閫炬湡鏃堕暱  /澶�'")
+	private BigDecimal overdueDuration;
+
+}
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractDetailVo.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractDetailVo.java
index b0d71f2..c2df2ee 100644
--- a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractDetailVo.java
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ContractDetailVo.java
@@ -74,6 +74,9 @@
 	@Schema(description = "妯$増ID")
 	private Long templateId;
 
+	@Schema(description = "鍚堝悓鍒嗙被")
+	private String contractCategory;
+
 	private List<ContractPaymentSchedule> contractPaymentSchedule;
 
 	private List<ContractSubjectMatter> contractSubjectMatter;
diff --git a/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/DeliveryOverduePageVo.java b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/DeliveryOverduePageVo.java
new file mode 100644
index 0000000..126b5a0
--- /dev/null
+++ b/platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/DeliveryOverduePageVo.java
@@ -0,0 +1,46 @@
+package com.by4cloud.platformx.business.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.persistence.Column;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class DeliveryOverduePageVo {
+
+	private Long id;
+
+	@Schema(description = "瀹㈠晢鍚嶇О")
+	private String busGuestName;
+
+	@Schema(description = "瀹㈠晢ID")
+	private Long busGuestId;
+
+	@Schema(description = "鍚堝悓鍚嶇О")
+	private String contractName;
+
+	@Schema(description = "鍚堝悓ID")
+	private Long contractId;
+
+	@Schema(description = "鏍囩殑鐗╁悕绉�")
+	private String materialName;
+
+	@Schema(description = "鏍囩殑鐗╃紪鐮侊紙鍐呴儴鍞竴缂栫爜锛�")
+	private String materialCode;
+
+	@Schema(description = "鏍囩殑鐗╃紪鐮侊紙鍐呴儴鍞竴鍚嶇О锛�")
+	private String materialInternalName;
+
+	@Schema(description = "閫炬湡浜や粯鏁伴噺")
+	private BigDecimal overdueNum;
+
+	@Schema(description = "鎬婚噾棰�")
+	private BigDecimal totalAmount;
+
+	@Schema(description = "閫炬湡鏃堕暱")
+	private BigDecimal overdueDuration;
+
+	@Schema(description = "鐢熶骇鍗曚綅")
+	private String partyA;
+}
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/DeliveryOverdueController.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/DeliveryOverdueController.java
new file mode 100644
index 0000000..196f31c
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/DeliveryOverdueController.java
@@ -0,0 +1,120 @@
+package com.by4cloud.platformx.business.controller;
+
+import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.by4cloud.platformx.business.dto.DeliveryOverdueQueryDTO;
+import com.by4cloud.platformx.common.core.util.R;
+import com.by4cloud.platformx.common.log.annotation.SysLog;
+import com.by4cloud.platformx.business.entity.DeliveryOverdue;
+import com.by4cloud.platformx.business.service.DeliveryOverdueService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import com.by4cloud.platformx.common.excel.annotation.ResponseExcel;
+import io.swagger.v3.oas.annotations.security.SecurityRequirement;
+import org.springdoc.core.annotations.ParameterObject;
+import org.springframework.http.HttpHeaders;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 鍑鸿揣閫炬湡
+ *
+ * @author syt
+ * @date 2026-05-28 11:01:05
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/deliveryOverdue" )
+@Tag(description = "deliveryOverdue" , name = "鍑鸿揣閫炬湡绠$悊" )
+@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
+public class DeliveryOverdueController {
+
+    private final  DeliveryOverdueService deliveryOverdueService;
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param page 鍒嗛〉瀵硅薄
+     * @param queryDTO 鍑鸿揣閫炬湡
+     * @return
+     */
+    @Operation(summary = "鍒嗛〉鏌ヨ" , description = "鍒嗛〉鏌ヨ" )
+    @GetMapping("/page" )
+    @PreAuthorize("@pms.hasPermission('business_deliveryOverdue_view')" )
+    public R getDeliveryOverduePage(@ParameterObject Page page, @ParameterObject DeliveryOverdueQueryDTO queryDTO) {
+        LambdaQueryWrapper<DeliveryOverdue> wrapper = Wrappers.lambdaQuery();
+        return R.ok(deliveryOverdueService.pageNew(page, queryDTO));
+    }
+
+
+    /**
+     * 閫氳繃id鏌ヨ鍑鸿揣閫炬湡
+     * @param id id
+     * @return R
+     */
+    @Operation(summary = "閫氳繃id鏌ヨ" , description = "閫氳繃id鏌ヨ" )
+    @GetMapping("/{id}" )
+    @PreAuthorize("@pms.hasPermission('business_deliveryOverdue_view')" )
+    public R getById(@PathVariable("id" ) Long id) {
+        return R.ok(deliveryOverdueService.getById(id));
+    }
+
+    /**
+     * 鏂板鍑鸿揣閫炬湡
+     * @param deliveryOverdue 鍑鸿揣閫炬湡
+     * @return R
+     */
+    @Operation(summary = "鏂板鍑鸿揣閫炬湡" , description = "鏂板鍑鸿揣閫炬湡" )
+    @SysLog("鏂板鍑鸿揣閫炬湡" )
+    @PostMapping
+    @PreAuthorize("@pms.hasPermission('business_deliveryOverdue_add')" )
+    public R save(@RequestBody DeliveryOverdue deliveryOverdue) {
+        return R.ok(deliveryOverdueService.save(deliveryOverdue));
+    }
+
+    /**
+     * 淇敼鍑鸿揣閫炬湡
+     * @param deliveryOverdue 鍑鸿揣閫炬湡
+     * @return R
+     */
+    @Operation(summary = "淇敼鍑鸿揣閫炬湡" , description = "淇敼鍑鸿揣閫炬湡" )
+    @SysLog("淇敼鍑鸿揣閫炬湡" )
+    @PutMapping
+    @PreAuthorize("@pms.hasPermission('business_deliveryOverdue_edit')" )
+    public R updateById(@RequestBody DeliveryOverdue deliveryOverdue) {
+        return R.ok(deliveryOverdueService.updateById(deliveryOverdue));
+    }
+
+    /**
+     * 閫氳繃id鍒犻櫎鍑鸿揣閫炬湡
+     * @param ids id鍒楄〃
+     * @return R
+     */
+    @Operation(summary = "閫氳繃id鍒犻櫎鍑鸿揣閫炬湡" , description = "閫氳繃id鍒犻櫎鍑鸿揣閫炬湡" )
+    @SysLog("閫氳繃id鍒犻櫎鍑鸿揣閫炬湡" )
+    @DeleteMapping
+    @PreAuthorize("@pms.hasPermission('business_deliveryOverdue_del')" )
+    public R removeById(@RequestBody Long[] ids) {
+        return R.ok(deliveryOverdueService.removeBatchByIds(CollUtil.toList(ids)));
+    }
+
+
+    /**
+     * 瀵煎嚭excel 琛ㄦ牸
+     * @param deliveryOverdue 鏌ヨ鏉′欢
+   	 * @param ids 瀵煎嚭鎸囧畾ID
+     * @return excel 鏂囦欢娴�
+     */
+    @ResponseExcel
+    @GetMapping("/export")
+    @PreAuthorize("@pms.hasPermission('business_deliveryOverdue_export')" )
+    public List<DeliveryOverdue> export(DeliveryOverdue deliveryOverdue,Long[] ids) {
+        return deliveryOverdueService.list(Wrappers.lambdaQuery(deliveryOverdue).in(ArrayUtil.isNotEmpty(ids), DeliveryOverdue::getId, ids));
+    }
+}
\ No newline at end of file
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/DeliveryOverdueMapper.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/DeliveryOverdueMapper.java
new file mode 100644
index 0000000..04f1328
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/DeliveryOverdueMapper.java
@@ -0,0 +1,18 @@
+package com.by4cloud.platformx.business.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.by4cloud.platformx.business.dto.DeliveryOverdueQueryDTO;
+import com.by4cloud.platformx.business.entity.DeliveryOverdue;
+import com.by4cloud.platformx.business.vo.DeliveryOverduePageVo;
+import com.by4cloud.platformx.common.data.datascope.DataScope;
+import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper;
+;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+@Mapper
+public interface DeliveryOverdueMapper extends PlatformxBaseMapper<DeliveryOverdue> {
+
+
+    Page<DeliveryOverduePageVo> pageNew(Page page, @Param("queryDTO") DeliveryOverdueQueryDTO queryDTO, DataScope comp_id);
+}
\ No newline at end of file
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/DeliveryOverdueService.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/DeliveryOverdueService.java
new file mode 100644
index 0000000..101de20
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/DeliveryOverdueService.java
@@ -0,0 +1,11 @@
+package com.by4cloud.platformx.business.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.by4cloud.platformx.business.dto.DeliveryOverdueQueryDTO;
+import com.by4cloud.platformx.business.entity.DeliveryOverdue;
+import com.by4cloud.platformx.common.data.mybatis.IIService;
+
+public interface DeliveryOverdueService extends IIService<DeliveryOverdue> {
+
+    Page pageNew(Page page, DeliveryOverdueQueryDTO queryDTO);
+}
\ No newline at end of file
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 029813d..6634811 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
@@ -179,6 +179,19 @@
 				subjectMatter.setDeliveredQuantity(new BigDecimal("0"));
 				subjectMatter.setDeliveryStatus(0);
 				contractSubjectMatterMapper.insert(subjectMatter);
+				//姘寸數绫诲繀椤绘湁鍒濇琛ㄥ彿
+				if (StrUtil.isNotEmpty(contractSubjectMatterAddDTO.getMeterReadCode()) &&
+						ObjUtil.isNotNull(contractSubjectMatterAddDTO.getMeterReadNum())) {
+					meterReadRecordMapper.delete(Wrappers.<MeterReadRecord>lambdaQuery().eq(MeterReadRecord::getContractId, contract.getId()));
+					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);
+				}
 			});
 		}
 
@@ -506,7 +519,6 @@
 				PaymentConfirm oiverdueConfirm = paymentConfirmMapper.selectOne(Wrappers.<PaymentConfirm>lambdaQuery().eq(PaymentConfirm::getScheduleId, contractPaymentSchedule.getId())
 						.eq(PaymentConfirm::getBusinessType, "搴旀敹瓒呮湡"));
 				if (ObjUtil.isNull(oiverdueConfirm) && overdueConfirm.getTransationAmount().compareTo(new BigDecimal("0")) > 0) {
-					overdueConfirm.setCompId(contractPaymentSchedule.getCompId());
 					paymentConfirmMapper.insert(overdueConfirm);
 				}
 				//褰撳墠閫炬湡
@@ -525,7 +537,6 @@
 				CurrentOverdue overdue = currentOverdueMapper.selectOne(Wrappers.<CurrentOverdue>lambdaQuery().eq(CurrentOverdue::getContractId, currentOverdue.getContractId())
 						.eq(CurrentOverdue::getScheduleId, currentOverdue.getScheduleId()).last("limit 1"));
 				if (ObjUtil.isNull(overdue)) {
-					currentOverdue.setCompId(contractPaymentSchedule.getCompId());
 					if (currentOverdue.getReceivableAmount().compareTo(new BigDecimal("0")) > 0) {
 						currentOverdueMapper.insert(currentOverdue);
 					}
@@ -607,11 +618,11 @@
 			Map<String, Object> item = new HashMap<>();
 			item.put("no", no);
 			item.put("materialName", contractSubjectMatter.getMaterialName());
-			item.put("guige", "");
-			item.put("unit", "");
+			item.put("guige", contractSubjectMatter.getSpecification());
+			item.put("unit", contractSubjectMatter.getUnit());
 			item.put("quantity", contractSubjectMatter.getQuantity());
-			item.put("danzhong", "");
-			item.put("zongzhong", "");
+			item.put("danzhong", contractSubjectMatter.getSingleWight());
+			item.put("zongzhong", contractSubjectMatter.getTotalWight());
 			item.put("unitPrice", contractSubjectMatter.getUnitPrice());
 			item.put("price", contractSubjectMatter.getTotalAmount());
 			items.add(item);
@@ -689,6 +700,25 @@
 					record.setBusGuestName(contract.getPartyA());
 					meterReadRecordMapper.insert(record);
 				}else {
+					//鍒涘缓鏀舵鑺傜偣
+					//鏌ヨ涓婃鏀舵鑺傜偣
+					ContractPaymentSchedule lastSchedule = contractPaymentScheduleMapper.selectOne(Wrappers.<ContractPaymentSchedule>lambdaQuery()
+							.eq(ContractPaymentSchedule::getContractId,contract.getId())
+							.orderByDesc(ContractPaymentSchedule::getCreateTime).last("limit 1"));
+					ContractPaymentSchedule schedule = new ContractPaymentSchedule();
+					schedule.setStageName("鎴跨绉熻祦缂磋垂");
+					schedule.setContractId(contract.getId());
+					schedule.setContractName(contract.getContractName());
+					schedule.setPlannedAmount(subjectMatter.getUnitPrice().multiply(subjectMatter.getQuantity()));
+					schedule.setEffectiveEndDate(contractExecDate.getExecDate());
+					schedule.setStageOrder(1);
+					if (ObjUtil.isNotNull(lastSchedule)){
+						schedule.setStageOrder(lastSchedule.getStageOrder()+1);
+					}
+					schedule.setPaymentStatus(0);
+					schedule.setActualAmount(new BigDecimal("0"));
+					schedule.setCompId(contract.getCompId());
+					contractPaymentScheduleMapper.insert(schedule);
 					//鎴垮眿绉熻祦鐢熸垚搴旀敹
 					PaymentConfirm confirm = new PaymentConfirm();
 					confirm.setBusinessType("鎴垮眿绉熻祦搴旀敹");
@@ -697,6 +727,8 @@
 					confirm.setContractId(contract.getId());
 					confirm.setContractName(contract.getContractName());
 					confirm.setContractNo(contract.getContractNo());
+					confirm.setScheduleId(schedule.getId());
+					confirm.setScheduleName(schedule.getStageName());
 					confirm.setConfirmTime(contractExecDate.getExecDate());
 					confirm.setTransationAmount(subjectMatter.getUnitPrice().multiply(subjectMatter.getQuantity()));
 					confirm.setTotalAmount(confirm.getTransationAmount().multiply(new BigDecimal("-1")));
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/DeliveryOverdueServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/DeliveryOverdueServiceImpl.java
new file mode 100644
index 0000000..b3b3157
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/DeliveryOverdueServiceImpl.java
@@ -0,0 +1,38 @@
+package com.by4cloud.platformx.business.service.impl;
+
+import cn.hutool.core.util.ObjUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.by4cloud.platformx.business.dto.DeliveryOverdueQueryDTO;
+import com.by4cloud.platformx.business.entity.BusinessCustomer;
+import com.by4cloud.platformx.business.entity.Contract;
+import com.by4cloud.platformx.business.entity.DeliveryOverdue;
+import com.by4cloud.platformx.business.mapper.DeliveryOverdueMapper;
+import com.by4cloud.platformx.business.service.DeliveryOverdueService;
+import com.by4cloud.platformx.business.vo.DeliveryOverduePageVo;
+import com.by4cloud.platformx.common.data.datascope.DataScope;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.springframework.stereotype.Service;
+/**
+ * 鍑鸿揣閫炬湡
+ *
+ * @author syt
+ * @date 2026-05-28 11:01:05
+ */
+@Service
+public class DeliveryOverdueServiceImpl extends ServiceImpl<DeliveryOverdueMapper, DeliveryOverdue> implements DeliveryOverdueService {
+	@Override
+	public Page pageNew(Page page, DeliveryOverdueQueryDTO queryDTO) {
+		MPJLambdaWrapper<DeliveryOverdue> wrapper = new MPJLambdaWrapper<DeliveryOverdue>()
+				.selectAll(DeliveryOverdue.class)
+				.leftJoin(Contract.class,Contract::getId,DeliveryOverdue::getContractId)
+				.leftJoin(BusinessCustomer.class,BusinessCustomer::getId,Contract::getPartyAId)
+				.eq(ObjUtil.isNotNull(queryDTO.getAreaId()),BusinessCustomer::getAreaId,queryDTO.getAreaId())
+				.eq(ObjUtil.isNotNull(queryDTO.getIndustryId()),BusinessCustomer::getIndustryId,queryDTO.getIndustryId())
+				.like(StrUtil.isNotBlank(queryDTO.getPartyB()),Contract::getPartyB,queryDTO.getPartyB())
+				.like(StrUtil.isNotBlank(queryDTO.getContractName()),Contract::getContractName,queryDTO.getContractName())
+				.orderByDesc(DeliveryOverdue::getCreateTime);
+		return baseMapper.pageNew(page,queryDTO, DataScope.of("comp_id"));
+	}
+}
\ No newline at end of file
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..ebc0afb 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
@@ -4,14 +4,8 @@
 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;
@@ -31,6 +25,7 @@
 
 	private final ContractMapper contractMapper;
 	private final ContractSubjectMatterMapper contractSubjectMatterMapper;
+	private final ContractPaymentScheduleMapper contractPaymentScheduleMapper;
 	private final PaymentConfirmMapper paymentConfirmMapper;
 
 	@Override
@@ -56,6 +51,25 @@
 		if(ObjUtil.isNull(lastRecord)){
 			R.failed("鏃犲悎鍚屼俊鎭紝璇疯仈绯绘妧鏈汉鍛�");
 		}
+		//鍒涘缓鏀舵鑺傜偣
+		//鏌ヨ涓婃鏀舵鑺傜偣
+		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即");
+		schedule.setContractId(contract.getId());
+		schedule.setContractName(contract.getContractName());
+		schedule.setPlannedAmount(subjectMatter.getUnitPrice().multiply(updateDTO.getMeterReadNum().subtract(lastRecord.getMeterReadNum())));
+		schedule.setEffectiveEndDate(updateDTO.getMeterReadTime());
+		schedule.setStageOrder(1);
+		if (ObjUtil.isNotNull(lastSchedule)){
+			schedule.setStageOrder(lastSchedule.getStageOrder()+1);
+		}
+		schedule.setPaymentStatus(0);
+		schedule.setActualAmount(new BigDecimal("0"));
+		contractPaymentScheduleMapper.insert(schedule);
+		//鎴垮眿绉熻祦鐢熸垚搴旀敹
 		PaymentConfirm confirm = new PaymentConfirm();
 		confirm.setBusinessType(subjectMatter.getMaterialInternalName()+"搴旀敹");
 		confirm.setBusGuestId(contract.getPartyAId());
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java
index 3b5e5e9..f329f11 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/OutBoundServiceImpl.java
@@ -40,6 +40,7 @@
 	private final ContractMapper contractMapper;
 	private final ContractPaymentScheduleProcessMapper scheduleProcessMapper;
 	private final ContractOutBoundMapper contractOutBoundMapper;
+	private final DeliveryOverdueMapper deliveryOverdueMapper;
 
 	@Override
 	public R add(OutBoundAddDTO addDTO) {
@@ -384,5 +385,25 @@
 		contractOutBound.setOutBoundAttPaths(addDTO.getOutBoundAttPaths());
 		contractOutBound.setOutBoundId(outBoundId);
 		contractOutBoundMapper.insert(contractOutBound);
+		if (StrUtil.isEmpty(contract.getContractCategory())){
+			if (DateUtil.compare(addDTO.getOutBoundTime(),contract.getExpirationDate())>0){
+				saveOverdueOutBound(contract, addDTO, subjectMatter);
+			}
+		}
+	}
+
+	private void saveOverdueOutBound(Contract contract, OutBoundAddDTO addDTO, ContractSubjectMatter subjectMatter) {
+		DeliveryOverdue overdue = new DeliveryOverdue();
+		overdue.setContractId(contract.getId());
+		overdue.setContractName(contract.getContractName());
+		overdue.setBusGuestId(contract.getPartyAId());
+		overdue.setBusGuestName(contract.getPartyA());
+		overdue.setMaterialName(subjectMatter.getMaterialName());
+		overdue.setMaterialInternalName(subjectMatter.getMaterialInternalName());
+		overdue.setMaterialCode(subjectMatter.getMaterialCode());
+		overdue.setOverdueNum(subjectMatter.getLastDeliveredQuantity());
+		overdue.setTotalAmount(subjectMatter.getUnitPrice().multiply(subjectMatter.getLastDeliveredQuantity()));
+		overdue.setOverdueDuration(new BigDecimal(DateUtil.betweenDay(addDTO.getOutBoundTime(),contract.getExpirationDate(),true)));
+		deliveryOverdueMapper.insert(overdue);
 	}
 }
\ No newline at end of file
diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/PaymentConfirmServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/PaymentConfirmServiceImpl.java
index 779692a..04944ea 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/PaymentConfirmServiceImpl.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/PaymentConfirmServiceImpl.java
@@ -53,6 +53,7 @@
 	private final HistoryOverdueMapper historyOverdueMapper;
 	private final PaymentSlipMapper paymentSlipMapper;
 	private final BipRequestRecordMapper bipRequestRecordMapper;
+	private final ContractExecDateMapper contractExecDateMapper;
 	private final RemoteDeptService remoteDeptService;
 	private final RedisTemplate redisTemplate;
 
@@ -393,7 +394,21 @@
 					if (contract.getAmount().compareTo(contract.getPaidAmount()) > 0) {
 						payNoCompleteContractList.add(contract);
 					}
-					contractService.updateById(contract);
+					if (StrUtil.isNotEmpty(contract.getContractCategory())&&StrUtil.equals(contract.getContractCategory(),"water_house")){
+						List<ContractExecDate> execDateList = contractExecDateMapper.selectList(Wrappers.<ContractExecDate>lambdaQuery()
+								.eq(ContractExecDate::getContractId,contract.getId()).eq(ContractExecDate::getGenFlag,"0"));
+						if (ArrayUtil.isEmpty(execDateList.toArray())){
+							List<ContractPaymentSchedule> contractPaymentScheduleList = contractPaymentScheduleMapper.selectList(Wrappers.<ContractPaymentSchedule>lambdaQuery()
+									.eq(ContractPaymentSchedule::getContractId, contract.getId()));
+							if (ArrayUtil.isNotEmpty(contractPaymentScheduleList.toArray())&&contractPaymentScheduleList.stream().allMatch(item -> Objects.equals(item.getPaymentStatus(), 2))) {
+								contract.setContractStatus(3);
+								contractService.updateById(contract);
+							}
+						}
+					}else {
+						contractService.updateById(contract);
+					}
+
 				}
 			});
 
@@ -721,7 +736,20 @@
 				if (contract.getAmount().compareTo(contract.getPaidAmount()) > 0) {
 					payNoCompleteContractList.add(contract);
 				}
-				contractService.updateById(contract);
+				if (StrUtil.isNotEmpty(contract.getContractCategory())&&StrUtil.equals(contract.getContractCategory(),"water_house")){
+					List<ContractExecDate> execDateList = contractExecDateMapper.selectList(Wrappers.<ContractExecDate>lambdaQuery()
+							.eq(ContractExecDate::getContractId,contract.getId()).eq(ContractExecDate::getGenFlag,"0"));
+					if (ArrayUtil.isEmpty(execDateList)){
+						List<ContractPaymentSchedule> contractPaymentScheduleList = contractPaymentScheduleMapper.selectList(Wrappers.<ContractPaymentSchedule>lambdaQuery()
+								.eq(ContractPaymentSchedule::getContractId, contract.getId()));
+						if (ArrayUtil.isNotEmpty(contractPaymentScheduleList.toArray())&&contractPaymentScheduleList.stream().allMatch(item -> Objects.equals(item.getPaymentStatus(), 2))) {
+							contract.setContractStatus(3);
+							contractService.updateById(contract);
+						}
+					}
+				}else {
+					contractService.updateById(contract);
+				}
 			}
 		});
 
diff --git a/platformx-business-finance-biz/src/main/resources/mapper/DeliveryOverdueMapper.xml b/platformx-business-finance-biz/src/main/resources/mapper/DeliveryOverdueMapper.xml
new file mode 100644
index 0000000..79d31c8
--- /dev/null
+++ b/platformx-business-finance-biz/src/main/resources/mapper/DeliveryOverdueMapper.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.by4cloud.platformx.business.mapper.DeliveryOverdueMapper">
+
+  <resultMap id="deliveryOverdueMap" type="com.by4cloud.platformx.business.entity.DeliveryOverdue">
+        <id property="id" column="id"/>
+        <result property="compId" column="comp_id"/>
+        <result property="busGuestId" column="bus_guest_id"/>
+        <result property="busGuestName" column="bus_guest_name"/>
+        <result property="contractId" column="contract_id"/>
+        <result property="contractName" column="contract_name"/>
+        <result property="materialCode" column="material_code"/>
+        <result property="materialInternalName" column="material_internal_name"/>
+        <result property="materialName" column="material_name"/>
+        <result property="overdueDuration" column="overdue_duration"/>
+        <result property="overdueNum" column="overdue_num"/>
+        <result property="totalAmount" column="total_amount"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="delFlag" column="del_flag"/>
+  </resultMap>
+    <select id="pageNew" resultType="com.by4cloud.platformx.business.vo.DeliveryOverduePageVo">
+		SELECT
+			t.id,
+			t.bus_guest_name,
+			t.bus_guest_id,
+			t.contract_name,
+			t.contract_id,
+			t.material_name,
+			t.material_code,
+			t.material_internal_name,
+			t.overdue_num,
+			t.total_amount,
+			t.overdue_duration,
+			t.create_by,
+			t.update_by,
+			t.create_time,
+			t.update_time,
+			t.del_flag,
+			t.comp_id,
+		    t1.party_a
+		FROM
+			delivery_overdue t
+				LEFT JOIN contract t1 ON ( t1.id = t.contract_id AND t1.del_flag = '0' )
+				LEFT JOIN business_customer t2 ON ( t2.id = t1.party_a_id AND t2.del_flag = '0' )
+		WHERE
+			t.del_flag = '0'
+		<if test="queryDTO.areaId !=null and queryDTO.areaId !='' ">
+			and t2.area_id = #{queryDTO.areaId}
+		</if>
+		<if test="queryDTO.industryId !=null and queryDTO.industryId !=''">
+			and t2.industry_id = #{queryDTO.industryId}
+		</if>
+		<if test="queryDTO.partyB !=null and queryDTO.partyB !=''">
+			and t1.party_b LIKE CONCAT('%', #{queryDTO.partyB}, '%')
+		</if>
+		<if test="queryDTO.contractName !=null and queryDTO.contractName !=''">
+			and t1.contract_name LIKE CONCAT('%', #{queryDTO.contractName}, '%')
+		</if>
+		ORDER BY
+			t.create_time DESC
+	</select>
+</mapper>
\ No newline at end of file
diff --git a/platformx-business-finance-biz/src/main/resources/template/ymjjgclht.doc b/platformx-business-finance-biz/src/main/resources/template/ymjjgclht.doc
deleted file mode 100644
index a5b550f..0000000
--- a/platformx-business-finance-biz/src/main/resources/template/ymjjgclht.doc
+++ /dev/null
Binary files differ
diff --git a/platformx-business-finance-biz/src/main/resources/template/ymjjgclht.docx b/platformx-business-finance-biz/src/main/resources/template/ymjjgclht.docx
index 3f268e1..53c8911 100644
--- a/platformx-business-finance-biz/src/main/resources/template/ymjjgclht.docx
+++ b/platformx-business-finance-biz/src/main/resources/template/ymjjgclht.docx
Binary files differ

--
Gitblit v1.9.1