CargaIndicadorController { @Asynchronous @TransactionAttribute(TransactionAttributeType.NEVER) public void carregaIndicadores(DadosCargaIndicador carga) { String nomeGrupoIndicador = carga.getGrupoIndicador(); String nomeIndicador = carga.getIndicador(); String focoIndicador = carga.getFocoIndicador(); Area area = areaService.buscaPorNome(carga.getArea()); logger.info("Carregando dados do indicador..."); GrupoIndicador grupo = grupoIndicadorService.buscaPorNomeOuCria( nomeGrupoIndicador, () -> new GrupoIndicador(nomeGrupoIndicador)); Indicador indicador = indicadorService.buscaPorNomeOuCria( nomeIndicador, () -> new Indicador(nomeIndicador, grupo, area)); FocoIndicador foco = focoIndicadorService.buscaPorNomeOuCria( focoIndicador, () -> new FocoIndicador(focoIndicador, indicador)); logger.info("Dados do indicador carregados [" + grupo + ", " + indicador + ", " + foco + "]"); long m = System.currentTimeMillis(); logger.info("Carregando linhas (pode levar alguns minutos) "); List<String> resultado = carga.getLinhas().stream() .map(l -> carregaLinha(grupo, indicador, foco, area, l)) .collect(Collectors.toList()); logger.info("Fim da carga em " + (System.currentTimeMillis() -m ) + "ms [" + grupo + ", " + indicador + ", " + foco + "]"); try { Path tmpDadosIndicadores = Files.createTempFile("cargaIndicador", ""); Files.write(tmpDadosIndicadores, resultado.stream().collect(Collectors.joining("\n")).getBytes()); logger.info("Saida salva em " + tmpDadosIndicadores.getFileName()); } catch (IOException e) { e.printStackTrace(); } }  @Asynchronous @TransactionAttribute(TransactionAttributeType.NEVER) void carregaIndicadores(DadosCargaIndicador carga);  }
@Test public void testeCargaIndicadores() throws InterruptedException { Estado e = new Estado(ESTADO); estadoService.salvar(e); Municipio m1 = new Municipio("", MUNICIPIO1, e); Municipio m2 = new Municipio("", MUNICIPIO2, e); Municipio m3 = new Municipio("", MUNICIPIO3, e); municipioService.salvar(m1); municipioService.salvar(m2); municipioService.salvar(m3); Area area = new Area(1, AREA); areaService.salvar(area); DadosCargaIndicador dados = new DadosCargaIndicador(); dados.setArea(AREA); dados.setFocoIndicador(FOCO_INDICADOR); dados.setGrupoIndicador(GRUPO_INDICADOR); dados.setIndicador(INDICADOR); List<LinhaCargaIndicador> dadosCarga = new ArrayList<>(); dadosCarga.add(new LinhaCargaIndicador(MUNICIPIO1, ESTADO, 0.1f, ANO1)); dadosCarga.add(new LinhaCargaIndicador(MUNICIPIO2_REAL, ESTADO, 0.2f, ANO1)); dadosCarga.add(new LinhaCargaIndicador(MUNICIPIO3, ESTADO, 0.3f, ANO1)); dadosCarga.add( new LinhaCargaIndicador(MUNICIPIO1, ESTADO, 0.5f, ANO1)); dadosCarga.add( new LinhaCargaIndicador(MUNICIPIO1, ESTADO, 0.1f, ANO2)); dadosCarga.add( new LinhaCargaIndicador(MUNICIPIO3, ESTADO, 0.4f, ANO2)); dados.setArea(AREA); dados.setIndicador(INDICADOR); dados.setFocoIndicador(FOCO_INDICADOR); dados.setGrupoIndicador(GRUPO_INDICADOR); dados.setLinhas(dadosCarga); cargaIndicadorController.carregaIndicadores(dados); Thread.sleep(2000); FocoIndicador foco = focoIndicadorService.buscaPorNome(FOCO_INDICADOR); GrupoIndicador grupoIndicador = grupoIndicadorService.buscaPorNome(GRUPO_INDICADOR); Indicador indicador = indicadorService.buscaPorNome(INDICADOR); assertNotNull(foco); assertNotNull(grupoIndicador); assertNotNull(indicador); List<Indicador> todosIndicadores = indicadorService.todos(); List<Indicador> indicadoresPorArea = indicadorService.buscaPorArea(area); assertEquals(1, todosIndicadores.size()); assertEquals(1, indicadoresPorArea.size()); List<ValorIndicador> valores2011 = valorIndicadorService.buscaPorIndicadorEAno(indicador, ANO1); List<ValorIndicador> valores2012 = valorIndicadorService.buscaPorIndicadorEAno(indicador, ANO2); assertEquals(3, valores2011.size()); assertEquals(2, valores2012.size()); List<ValorIndicador> valoresMUN1 = valorIndicadorService.buscaPorIndicadorEMunicipio(indicador, m1); List<ValorIndicador> valoresMUN2 = valorIndicadorService.buscaPorIndicadorEMunicipio(indicador, m2); List<ValorIndicador> valoresMUNANO = valorIndicadorService.buscaPorAnoMunicipio(ANO1, m1); List<ValorIndicador> valoresMUNAREAANO = valorIndicadorService.buscaPorMuninipioAreaAno(m1, area, ANO1); List<ValorIndicador> valoresMUN = valorIndicadorService.buscaPorMunicipio(m1); List<ValorIndicador> valoresMUNAREA = valorIndicadorService.buscaPorMuninipioArea(m1, area); assertEquals(2, valoresMUN1.size()); assertEquals(1, valoresMUN2.size()); assertEquals(1, valoresMUNANO.size()); assertEquals(1, valoresMUNAREAANO.size()); assertEquals(2, valoresMUN.size()); assertEquals(2, valoresMUNAREA.size()); List<Long> municipioIds = Arrays.asList(m1.getId(), m2.getId()); Set<Long> municipioIdsSet = new HashSet<>(municipioIds); List<ValorIndicador> valoresPorMunAno = valorIndicadorService.buscaPorAnoMunicipios(ANO1, municipioIdsSet); valoresPorMunAno.forEach(System.out::println); assertEquals(2, valoresPorMunAno.size()); Map<Indicador, Double> mediaPorAno = valorIndicadorService.mediaPorAno(ANO2); Double media = mediaPorAno.entrySet().stream().filter(en -> en.getKey().getId() == indicador.getId()).findFirst().get().getValue(); assertEquals(0.25, media, 0.00001); }