以下 Java 代码提供了一些优化建议,旨在提高代码的可读性和效率:

public YltStatusVo queryStatusQuo(String type, Date startDate, Date endDate) {
    YltStatusVo yltStatusVo = new YltStatusVo();
    // 结束时间为空默认为当前时间,并格式化为 yyyyMMdd
    String endTime = DateUtil.format(ObjectUtil.isEmpty(endDate) ? new Date() : endDate, DatePattern.PURE_DATE_PATTERN);
    String startTime = DateUtil.format(ObjectUtil.isEmpty(startDate) ? DateUtil.lastMonth() : startDate, DatePattern.PURE_DATE_PATTERN);
    YltStatusVo yltStatusVoCache = redisTemplate.opsForValue().get(type + StringPool.UNDERSCORE + startTime + StringPool.UNDERSCORE + endTime);
    if (ObjectUtil.isNotEmpty(yltStatusVoCache)) {
        return yltStatusVoCache;
    }
    List<YltStatusBo> yltStatusBos = statusQuoMapper.queryStatusNum(type, startTime, endTime);
    Map<String, Integer> statusNumMap = CollStreamUtil.toMap(yltStatusBos, YltStatusBo::getType, YltStatusBo::getNum);
    // 修复总数
    yltStatusVo.setRepairTotal(statusNumMap.getOrDefault('修复', 0));
    // 合格总数
    yltStatusVo.setQualifiedTotal(statusNumMap.getOrDefault('合格', 0));
    // 不合格总数
    yltStatusVo.setUnqualifiedTotal(statusNumMap.getOrDefault('不合格', 0));
    // 查询有效及全部案件数据
    YltActiveAndAllBo yltActiveAndAllBo = statusQuoMapper.queryActiveAndAll(type, startTime, endTime);
    // 有效案件
    yltStatusVo.setEffectiveTotal(yltActiveAndAllBo.getActiveNum());
    // 全部案件
    yltStatusVo.setCaseTotal(yltActiveAndAllBo.getAllNum());
    // 计算案件修复率
    if (yltActiveAndAllBo.getActiveNum() != 0) {
        BigDecimal result = NumberUtil.div(yltStatusVo.getRepairTotal(), yltActiveAndAllBo.getActiveNum());
        yltStatusVo.setRepairRate(NumberUtil.formatPercent(Convert.toDouble(result), 2));
    } else {
        yltStatusVo.setRepairRate('0%');
    }
    redisTemplate.opsForValue().set(type + StringPool.UNDERSCORE + startTime + StringPool.UNDERSCORE + endTime, yltStatusVo, 300, TimeUnit.SECONDS);
    return yltStatusVo;
}

优化建议:

  1. 提取常量:可以将 DatePattern.PURE_DATE_PATTERNStringPool.UNDERSCORE 提取成静态变量,提高代码的可读性和维护性。

  2. 方法重构:对于 endDatestartDate 的处理逻辑,可以提取成一个独立的方法,例如 getFormattedDate(Date date),提高代码的复用性。

  3. 工具类方法:可以将计算修复率的逻辑提取成一个工具类方法,例如 calculateRepairRate(int repairTotal, int activeNum),提高代码的可读性和可维护性。

  4. 使用 Optional 类型:使用 Optional 类型可以代替 ObjectUtil.isEmptyObjectUtil.isNotEmpty,提高代码的可读性和安全性。例如:

String endTime = DateUtil.format(Optional.ofNullable(endDate).orElse(new Date()), DatePattern.PURE_DATE_PATTERN);
  1. 使用 @Cacheable 注解:使用 @Cacheable 注解可以方便地使用缓存机制,提高代码的性能。例如:
@Cacheable(value = 'yltStatusVo', key = '#type + '_' + #startTime + '_' + #endTime')
public YltStatusVo queryStatusQuo(String type, Date startDate, Date endDate) {
    // ... 代码逻辑 ...
}

通过以上优化,可以有效提高代码的可读性、可维护性和执行效率。

Java 代码优化建议:提高可读性和效率

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

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