diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleBillServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleBillServiceImpl.java index b9d4e09bf..c5cf4adbd 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleBillServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisSettleBillServiceImpl.java @@ -394,8 +394,21 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS } else{ Date billMonthDate = DateUtils.parseDate(emisSettleBill.getBillMonth() + "-"+settleDay); - paymentDueDate = DateUtils.addMonths(billMonthDate,1); - paymentDueDate= DateUtils.addDays(paymentDueDate,creditPeriod.intValue()); + + // credit_period 为 30/60/90 且结算日为每月 1 号时,按对应月份月末作为最后付款日 + if ((creditPeriod.intValue() == 30 || creditPeriod.intValue() == 60 || creditPeriod.intValue() == 90) + && monthUser.getSettleDay() == 1) { + Calendar cal = Calendar.getInstance(); + cal.setTime(billMonthDate); + // 30 -> 加 1 个月,60 -> 加 2 个月,90 -> 加 3 个月 + cal.add(Calendar.MONTH, creditPeriod.intValue() / 30); + // 设置为该月的最后一天 + cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); + paymentDueDate = cal.getTime(); + } else { + paymentDueDate = DateUtils.addMonths(billMonthDate,1); + paymentDueDate= DateUtils.addDays(paymentDueDate,creditPeriod.intValue()); + } } // 最后付款时间 @@ -441,10 +454,21 @@ public class EmisSettleBillServiceImpl extends EmisBaseService implements IEmisS updBill.setCreditPeriod(creditPeriod); updBill.setSettleDay(settleDay); - // 现金账期从寄件开始10天 + // 根据账期与结算日计算最后付款时间 Date billMonthDate = DateUtils.parseDate(oldEmisSettleBill.getBillMonth() + "-" + settleDay); - Date paymentDueDate = DateUtils.addMonths(billMonthDate, 1); - paymentDueDate = DateUtils.addDays(paymentDueDate, creditPeriod.intValue()); + Date paymentDueDate; + + if ((creditPeriod.intValue() == 30 || creditPeriod.intValue() == 60 || creditPeriod.intValue() == 90) + && settleDay == 1) { + Calendar cal = Calendar.getInstance(); + cal.setTime(billMonthDate); + cal.add(Calendar.MONTH, creditPeriod.intValue() / 30); + cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); + paymentDueDate = cal.getTime(); + } else { + paymentDueDate = DateUtils.addMonths(billMonthDate, 1); + paymentDueDate = DateUtils.addDays(paymentDueDate, creditPeriod.intValue()); + } // 最后付款时间 updBill.setPaymentDueDate(paymentDueDate);