以下是对代码进行优化的建议:

  1. 将重复的代码提取为一个方法,以减少重复代码的编写和维护。例如,将以下代码块提取为一个方法:
Date endPeriodTime = xSupplier.getEndPeriodTime();
Date periodTime = endPeriodTime == null ? xSupplier.getCreateTime() : endPeriodTime;
  1. 使用 switch 语句来代替多个 if 语句。根据 xSupplier.getAccountPeriod() 的值,执行相应的逻辑。这样可以使代码更清晰和易于理解。

  2. 将所有的日期操作封装到一个方法中,以提高代码的可读性和可维护性。例如,可以创建一个名为 "calculatePeriodTime" 的方法,接收参数并返回计算后的期间时间。

  3. 使用 try-catch 块来捕获可能发生的异常,并根据需要进行处理。例如,可以捕获解析日期字符串时可能抛出的异常。

  4. 使用 Java 8 的 Optional 类型来处理可能为空的值,以减少对 null 值的判断和处理。

下面是优化后的代码示例:

XSupplier xSupplier = baseMapper.selectById(id);
Optional<Date> endPeriodTime = Optional.ofNullable(xSupplier.getEndPeriodTime());
Date periodTime = calculatePeriodTime(xSupplier.getAccountPeriod(), endPeriodTime, xSupplier.getCreateTime());

if (periodTime == null) {
    return;
}

// 把毫秒清零处理,否则毫秒大于500 mysql秒数+1
Calendar calendar = Calendar.getInstance();
calendar.setTime(periodTime);
calendar.set(Calendar.MILLISECOND, 0);
xSupplier.setEndPeriodTime(calendar.getTime());
baseMapper.updateById(xSupplier);

// calculatePeriodTime 方法实现
private Date calculatePeriodTime(int accountPeriod, Optional<Date> endPeriodTime, Date createTime) {
    Date periodTime = endPeriodTime.orElse(createTime);

    switch (accountPeriod) {
        case 7:
            periodTime = calculatePeriodTimeFor7(accountPeriod, endPeriodTime, createTime);
            break;
        case 15:
            periodTime = calculatePeriodTimeFor15(accountPeriod, endPeriodTime, createTime);
            break;
        case 30:
            periodTime = calculatePeriodTimeFor30(accountPeriod, endPeriodTime, createTime);
            break;
        default:
            break;
    }

    return periodTime;
}

// calculatePeriodTimeFor7 方法实现
private Date calculatePeriodTimeFor7(int accountPeriod, Optional<Date> endPeriodTime, Date createTime) {
    Date periodTime = endPeriodTime.orElse(createTime);

    if (endPeriodTime.isPresent()) {
        periodTime = DateUtil.offsetSecond(periodTime, 1);
    }

    periodTime = DateUtil.endOfDay(DateUtil.offsetDay(periodTime, 6));

    return periodTime;
}

// calculatePeriodTimeFor15 方法实现
private Date calculatePeriodTimeFor15(int accountPeriod, Optional<Date> endPeriodTime, Date createTime) {
    Date periodTime = endPeriodTime.orElse(createTime);
    int day = DateUtil.dayOfMonth(periodTime);

    if (endPeriodTime.isPresent() && day > 15) {
        periodTime = DateUtil.offsetSecond(periodTime, 1);
    }

    if ((endPeriodTime.isEmpty() && day <= 15) || (endPeriodTime.isPresent() && day > 15)) {
        periodTime = DateUtil.endOfDay(DateUtil.offsetDay(DateUtil.beginOfMonth(periodTime), 14));
    }

    if ((endPeriodTime.isEmpty() && day > 15) || (endPeriodTime.isPresent() && day <= 15)) {
        periodTime = DateUtil.endOfDay(DateUtil.endOfMonth(periodTime));
    }

    return periodTime;
}

// calculatePeriodTimeFor30 方法实现
private Date calculatePeriodTimeFor30(int accountPeriod, Optional<Date> endPeriodTime, Date createTime) {
    Date periodTime = endPeriodTime.orElse(createTime);
    periodTime = DateUtil.offsetSecond(periodTime, 1);
    periodTime = DateUtil.endOfDay(DateUtil.endOfMonth(periodTime));

    return periodTime;
}

希望这些建议能对您有所帮助

优化以下代码 XSupplier xSupplier = baseMapperselectByIdid; Date endPeriodTime = xSuppliergetEndPeriodTime; Date periodTime = endPeriodTime == null xSuppliergetCreateTime endPeriodTime;

原文地址: http://www.cveoy.top/t/topic/hAHd 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录