chengf
2025-08-27 074caee550216dfd4bb676677ae33cbd837c5710
service-fee/src/main/java/com/java110/fee/bmo/impl/QueryOweFeeImpl.java
@@ -33,6 +33,9 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
@Service
@@ -224,7 +227,6 @@
                        Integer.parseInt(feeDto.getDecimalPlace())
                )
        );
        if (!StringUtil.isEmpty(custEndTime)) {
            Date date = DateUtil.getDateFromStringB(custEndTime);
            computeFeeSMOImpl.dealRentRateCustEndTime(feeDto, date);
@@ -265,6 +267,56 @@
        apiFeeDataVo.setEndTime(apiFeeDataVo.getEndTime() == null ? null : apiFeeDataVo.getEndTime().split(" ")[0]);
        apiFeeDataVo.setMaxEndTime(apiFeeDataVo.getMaxEndTime() == null ? null : apiFeeDataVo.getMaxEndTime().split(" ")[0]);
        apiFeeDataVo.setDeadlineTime(apiFeeDataVo.getDeadlineTime() == null ? null : apiFeeDataVo.getDeadlineTime().split(" ")[0]);
        if (cycel != null && !"105".equals(cycel)) { // 修正字符串比较方式
            Date date = feeDto.getEndTime();
            if (date != null) { // 增加空值检查
                LocalDateTime localDateTime;
                // 处理 java.sql.Date 不支持 toInstant() 的问题
                if (date instanceof java.sql.Date) {
                    // 对于 sql.Date,先转换为 LocalDate 再转为 LocalDateTime
                    LocalDate localDate = ((java.sql.Date) date).toLocalDate();
                    localDateTime = localDate.atStartOfDay();
                } else {
                    // 对于 util.Date,正常转换
                    localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
                }
                try {
                    // 增加x个月
                    int monthsToAdd = Integer.parseInt(cycel);
                    LocalDateTime newLocalDateTime = localDateTime.plusMonths(monthsToAdd).minusDays(1);
                    // 转换回Date
                    Date newDate = Date.from(newLocalDateTime.atZone(ZoneId.systemDefault()).toInstant());
                    apiFeeDataVo.setPayStartDate(feeDto.getEndTime());
                    apiFeeDataVo.setPayEndDate(newDate);
                } catch (NumberFormatException e) {
                    // 处理cycel无法转换为整数的异常
                    // 可以根据实际需求记录日志或抛出自定义异常
                    e.printStackTrace();
                }
            }
        }else{
            apiFeeDataVo.setPayStartDate(DateUtil.getDateFromStringB(feeDto.getCustomStartTime()));
            // 获取原始日期
            Date originalDate = DateUtil.getDateFromStringB(feeDto.getCustomEndTime());
            if (originalDate != null) {
                // 创建Calendar实例并设置日期
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(originalDate);
                // 减一天
                calendar.add(Calendar.DAY_OF_MONTH, -1);
                // 获取处理后的日期
                Date dateMinusOneDay = calendar.getTime();
                apiFeeDataVo.setPayEndDate(dateMinusOneDay);
            }
        }
        //计算MaxEndTime和payStartDate之间的月数
        int monthCount = DateUtil.calculateMonths(DateUtil.getFormatTimeStringB(apiFeeDataVo.getPayStartDate()), apiFeeDataVo.getMaxEndTime());
        apiFeeDataVo.setMonthCount(monthCount);
        return ResultVo.createResponseEntity(apiFeeDataVo);
    }