优化以下代码 XSupplier xSupplier = baseMapperselectByIdid; Date endPeriodTime = xSuppliergetEndPeriodTime; Date periodTime = endPeriodTime == null xSuppliergetCreateTime endPeriodTime;
以下是对代码进行优化的建议:
- 将重复的代码提取为一个方法,以减少重复代码的编写和维护。例如,将以下代码块提取为一个方法:
Date endPeriodTime = xSupplier.getEndPeriodTime();
Date periodTime = endPeriodTime == null ? xSupplier.getCreateTime() : endPeriodTime;
-
使用 switch 语句来代替多个 if 语句。根据 xSupplier.getAccountPeriod() 的值,执行相应的逻辑。这样可以使代码更清晰和易于理解。
-
将所有的日期操作封装到一个方法中,以提高代码的可读性和可维护性。例如,可以创建一个名为 "calculatePeriodTime" 的方法,接收参数并返回计算后的期间时间。
-
使用 try-catch 块来捕获可能发生的异常,并根据需要进行处理。例如,可以捕获解析日期字符串时可能抛出的异常。
-
使用 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;
}
希望这些建议能对您有所帮助
原文地址: http://www.cveoy.top/t/topic/hAHd 著作权归作者所有。请勿转载和采集!