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)) { // 正常完整周期