wuxw
2024-04-06 1a60aaeb20ef8aab24c31bec9d43d464f07cc45f
java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java
@@ -127,13 +127,14 @@
    public void computeEveryOweFeeByTargetEndTime(FeeDto feeDto, String targetEndTime) {
        Date targetEndDate = DateUtil.getDateFromStringB(targetEndTime);
        double oweMonth = 1.0;
        double oweMonth = 0;
        if (feeDto.getEndTime().getTime() > targetEndDate.getTime()) {
            targetEndDate = feeDto.getEndTime();
        }
        if (feeDto.getEndTime().getTime() < targetEndDate.getTime()) {
            // 目标到期时间 - 到期时间 = 欠费月份
            oweMonth = DateUtil.dayCompare(feeDto.getEndTime(), targetEndDate);
            oweMonth = DateUtil.dayCompare(feeDto.getEndTime(), targetEndDate,true);
        }
        String computingFormula = feeDto.getComputingFormula();
@@ -762,16 +763,15 @@
            } else {
                endCalender.setTime(feeDto.getImportFeeEndTime());
            }
        } else if (FeeDto.FEE_FLAG_CYCLE_ONCE.equals(feeDto.getFeeFlag())) {
            if (feeDto.getDeadlineTime() == null) {
                throw new IllegalArgumentException("间接性费用未设置结束时间");
            }
            if ((endCalender.getTime()).after(feeDto.getDeadlineTime())) {
                endCalender.setTime(feeDto.getDeadlineTime());
            }
        } else {
            if ((endCalender.getTime()).after(feeDto.getConfigEndTime())) {
                endCalender.setTime(feeDto.getConfigEndTime());
            Date deadLineTime = feeDto.getDeadlineTime();
            if (deadLineTime == null) {
                deadLineTime = feeDto.getConfigEndTime();
            }
            if ((endCalender.getTime()).after(deadLineTime)) {
                endCalender.setTime(feeDto.getDeadlineTime());
            } else {
                endCalender.add(Calendar.SECOND, -1);
            }
        }
@@ -1719,6 +1719,9 @@
                targetEndDate = getTargetEndTime((round + 1) * paymentCycle, startDate);//目标结束时间
            }
            //todo 减去一秒
            targetEndDate = DateUtil.getDateFromStringA(DateUtil.getPreSecTime(targetEndDate));
            //todo 费用项的结束时间<缴费的结束时间  费用快结束了   取费用项的结束时间
            if (maxEndTime.getTime() < targetEndDate.getTime()) {
                targetEndDate = maxEndTime;
@@ -1840,11 +1843,13 @@
        endDate.add(Calendar.MONTH, intMonth.intValue());
        double doubleMonth = month - intMonth;
        if (doubleMonth <= 0) {
            endDate.add(Calendar.SECOND, -1);
            return endDate.getTime();
        }
        int futureDay = endDate.getActualMaximum(Calendar.DAY_OF_MONTH);
        Double hour = doubleMonth * futureDay * 24;
        endDate.add(Calendar.HOUR_OF_DAY, hour.intValue());
        endDate.add(Calendar.SECOND, -1);
        return endDate.getTime();
    }