以下是优化后的代码:

private SuggestedLevelSummaryVO createSuggestedLevelVO(final SuggestedLevelExportDTO suggestedLevelExport,
                                                       final Map<String, Long> suggestedLevelGroup,
                                                       final int suggestedLevelSum,
                                                       final String wightLevelName) {

    final SuggestedLevelSummaryVO suggestedLevelVO = new SuggestedLevelSummaryVO();
    suggestedLevelVO.setDept(suggestedLevelExport.getDeptName());
    suggestedLevelVO.setEmpCode(suggestedLevelExport.getEmpCode());
    suggestedLevelVO.setEmpName(suggestedLevelExport.getEmpName());
    suggestedLevelVO.setLevelName(StringUtils.defaultIfBlank(wightLevelName, SheetDataConstants.COMPREHENSIVE_EVALUATION));

    final String[] suggestedLevels = {SheetDataConstants.EXCELLENT_SUGGESTED_LEVEL, SheetDataConstants.BE_COMPETENT_SUGGESTED_LEVEL,
            SheetDataConstants.BASIC_COMPETENT_SUGGESTED_LEVEL, SheetDataConstants.INCOMPETENT_SUGGESTED_LEVEL};

    final Long[] suggestedLevelSums = {DEFAULT_NUMBER_OF_PEOPLE, DEFAULT_NUMBER_OF_PEOPLE, DEFAULT_NUMBER_OF_PEOPLE, DEFAULT_NUMBER_OF_PEOPLE};

    for (int i = 0; i < suggestedLevels.length; i++) {
        final Long sum = MapUtils.getObject(suggestedLevelGroup, suggestedLevels[i], suggestedLevelSums[i]);
        setSuggestedLevelSum(suggestedLevelVO, suggestedLevels[i], sum);
        setSuggestedLevelPercentage(suggestedLevelVO, suggestedLevels[i], sum, suggestedLevelSum);
    }

    suggestedLevelVO.setLevelNameSort(LevelNameEnum.getDutyLevelNameEnum(d -> StringUtils.equals(d.getName(),
            StringUtils.defaultIfBlank(wightLevelName, SheetDataConstants.COMPREHENSIVE_EVALUATION)),
            LevelNameEnum::getSort, () -> null));

    return suggestedLevelVO;
}

private void setSuggestedLevelSum(SuggestedLevelSummaryVO suggestedLevelVO, String level, Long sum) {
    switch (level) {
        case SheetDataConstants.EXCELLENT_SUGGESTED_LEVEL:
            suggestedLevelVO.setExcellentSum(sum);
            break;
        case SheetDataConstants.BE_COMPETENT_SUGGESTED_LEVEL:
            suggestedLevelVO.setCompetentSum(sum);
            break;
        case SheetDataConstants.BASIC_COMPETENT_SUGGESTED_LEVEL:
            suggestedLevelVO.setBaseCompetentSum(sum);
            break;
        case SheetDataConstants.INCOMPETENT_SUGGESTED_LEVEL:
            suggestedLevelVO.setIncompetentSum(sum);
            break;
        default:
            break;
    }
}

private void setSuggestedLevelPercentage(SuggestedLevelSummaryVO suggestedLevelVO, String level, Long sum, int suggestedLevelSum) {
    switch (level) {
        case SheetDataConstants.EXCELLENT_SUGGESTED_LEVEL:
            suggestedLevelVO.setExcellentPercentage(calculatePercentage(sum, suggestedLevelSum));
            break;
        case SheetDataConstants.BE_COMPETENT_SUGGESTED_LEVEL:
            suggestedLevelVO.setCompetentPercentage(calculatePercentage(sum, suggestedLevelSum));
            break;
        case SheetDataConstants.BASIC_COMPETENT_SUGGESTED_LEVEL:
            suggestedLevelVO.setBaseCompetentPercentage(calculatePercentage(sum, suggestedLevelSum));
            break;
        case SheetDataConstants.INCOMPETENT_SUGGESTED_LEVEL:
            suggestedLevelVO.setIncompetentPercentage(calculatePercentage(sum, suggestedLevelSum));
            break;
        default:
            break;
    }
}

优化说明:

  1. 使用数组和循环来简化建议等级和总人数的设置过程,减少重复代码。
  2. 提取了两个辅助方法setSuggestedLevelSumsetSuggestedLevelPercentage,用于设置建议等级的人数和百分比,使代码更加清晰和可维护。
  3. 使用switch语句来替代多个if-else语句,提高代码的可读性和可扩展性。

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

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