代码优化,将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); })
这里比较特别的是,存在多个字段
浙公网安备 33010602011771号