代码优化,将for循环里面的内容拿出来处理,多字段

gpcmSafetyRegulations.stream().map(e ->{
                 LambdaQueryWrapper<PeriodSettingPo> periodSettingWrapper = new LambdaQueryWrapper<>();
            periodSettingWrapper.eq(PeriodSettingPo::getDeleted,CommonConstant.NO_DEL)
                    .eq(PeriodSettingPo::getDeptId,Long.valueOf(currentOrg.getDeptId()))
                    .eq(PeriodSettingPo::getCertificationCategory,e.getAgCategory())
                    .eq(PeriodSettingPo::getStandardName,e.getExtryKeyCode())
                    .eq(PeriodSettingPo::getTestOrganization,e.getAgDocumentType());
            PeriodSettingPo periodSettingPo = periodSettingMapper.selectOne(periodSettingWrapper);


})

上面是for循环里面的遍历查询,性能很差,可以优化成如下:

        StringBuilder errMsg = new StringBuilder();
        LambdaQueryWrapper<PeriodSettingPo> periodSettingWrapper = new LambdaQueryWrapper<>();
        periodSettingWrapper.eq(PeriodSettingPo::getDeleted,CommonConstant.NO_DEL)
                .eq(PeriodSettingPo::getDeptId,Long.valueOf(currentOrg.getDeptId()));
        List<PeriodSettingPo> periodSettingPos = periodSettingMapper.selectList(periodSettingWrapper);
        if (CollUtil.isEmpty(periodSettingPos)){
            throw new ServiceBusinessException("当前组织无周期数据,请联系管理员新增周期数据");
        }
        Map<String, PeriodSettingPo> periodMap = periodSettingPos.stream().collect(Collectors.toMap(
                e -> e.getCertificationCategoryValue() + "|" + e.getStandardNameValue() + "|" + e.getTestOrganizationValue() , po -> po,(v1,v2) ->v1));

        for (GpcmSafetyRegulations e : gpcmSafetyRegulations) {
            String matchKey = e.getAgCategory() + "|" + e.getExtryKeyCode() + "|" + e.getAgDocumentType();
            if (!periodMap.containsKey(matchKey)) {
                // 拼接错误信息
                errMsg.append("认证类别:").append(e.getAgCategory()).append(" 标准名称:").append(e.getExtryKeyCode()).append(" 测试机构:").append(e.getAgDocumentType()).append("\n");
            }
        }
        if (errMsg.length() > 0){
            String finalError = "数据不存在,请联系管理员在周期设置里面创建数据\n" + errMsg;
            throw new ServiceBusinessCodeException(errorCode,finalError);
        }

    List<PlanProgressPo> progressPos = gpcmSafetyRegulations.stream().map(e -> {
           String matchKey = e.getAgCategory() + "|" + e.getExtryKeyCode() + "|" + e.getAgDocumentType();
            PeriodSettingPo periodSettingPo = periodMap.get(matchKey);
})

这里比较特别的是,存在多个字段

posted @ 2026-05-18 16:56  多多指教~  阅读(7)  评论(0)    收藏  举报