From a4e8c65d36845d0cc2036eb75053d66ac2f4b776 Mon Sep 17 00:00:00 2001 From: RuicyWu <1063154311@qq.com> Date: Sat, 18 Jul 2026 16:19:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../seeyon/apps/src_leasebill/util/LeaseBillUtil.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/seeyon/apps/src_leasebill/util/LeaseBillUtil.java b/src/main/java/com/seeyon/apps/src_leasebill/util/LeaseBillUtil.java index d277584..a8e0b6b 100644 --- a/src/main/java/com/seeyon/apps/src_leasebill/util/LeaseBillUtil.java +++ b/src/main/java/com/seeyon/apps/src_leasebill/util/LeaseBillUtil.java @@ -226,10 +226,17 @@ public class LeaseBillUtil { Map bill = new HashMap<>(); bill.put(fieldDisplayNameService.getDisplayName("开始日期"), getSdf().format(tempStart.getTime())); - // 计算本期结束日 = 开始时间 + 周期月数 - 1天 + // 计算本期结束日 Calendar periodEnd = (Calendar) tempStart.clone(); periodEnd.add(Calendar.MONTH, payCycleMonths); - periodEnd.add(Calendar.DATE, -1); + // 月末日期特殊处理:起始日为月末时,周期结束日也保持为目标月月末 + int startDay = tempStart.get(Calendar.DAY_OF_MONTH); + int startMaxDay = tempStart.getActualMaximum(Calendar.DAY_OF_MONTH); + if (startDay == startMaxDay) { + periodEnd.set(Calendar.DATE, periodEnd.getActualMaximum(Calendar.DATE)); + } else { + periodEnd.add(Calendar.DATE, -1); + } if (periodEnd.before(endTime)) { // 正常完整周期