Advertisement
Guest User

Untitled

a guest
Sep 16th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 15.10 KB | None | 0 0
  1. package sgpp.services.acp.graficos.adapter;
  2.  
  3. import java.math.BigDecimal;
  4. import java.text.SimpleDateFormat;
  5. import java.util.ArrayList;
  6. import java.util.Date;
  7. import java.util.List;
  8. import java.util.Optional;
  9. import java.util.stream.Collectors;
  10.  
  11. import org.apache.commons.lang3.StringUtils;
  12.  
  13. import sgpp.services.acp.DadosGraficoDTO;
  14. import sgpp.services.acp.contrato.adapter.TPDateComparator;
  15. import sgpp.services.acp.graficos.dto.GraficoAcumuladoExcedentesDTO;
  16. import sgpp.services.acp.memoriacalculo.MemoriaCalculoEntity;
  17. import sgpp.services.acp.memoriacalculo.SortByMes;
  18. import sgpp.services.acp.memoriacalculo.html.DadosMemoriaCalculoBO;
  19. import sgpp.services.acp.pap.PAPEntity;
  20. import sgpp.services.acp.pap.PrevisaoProducaoEntity;
  21. import sgpp.services.acp.pap.SortByAnoReferencia;
  22. import sgpp.services.contrato.ContratoEntity;
  23. import sgpp.services.contrato.TractParticipationEntity;
  24.  
  25. public class GraficoAcumuladoExcedentesDTOAdapter {
  26.  
  27.         private static BigDecimal aliquotaMediaUniao = BigDecimal.ZERO;
  28.         private static BigDecimal trackParticipation = BigDecimal.ZERO;
  29.         private static BigDecimal CEM = new BigDecimal("100");
  30.         private static BigDecimal BBL = new BigDecimal("6.289811");
  31.         private static int verificadorMes;
  32.  
  33.     public static GraficoAcumuladoExcedentesDTO getDados(List<PAPEntity> papList, List<MemoriaCalculoEntity> mcList, List<ContratoEntity> contratos, String anoInicial, String anoFinal, String mesInicial, String mesFinal, String corRealizado, String corPrevisto, String unidadeMedida) {
  34.         if (papList == null || mcList == null || contratos == null || contratos.isEmpty()) return null;
  35.            
  36.         //checa se o contrato possui os campos de porcentagem para os calculos
  37.         if (contratos.get(0).getCampos() != null && !contratos.get(0).getCampos().isEmpty()) {
  38.             if (contratos.get(0).getCampos().get(0).getExcedenteUniaoContratado() != null) {
  39.                 aliquotaMediaUniao = contratos.get(0).getCampos().get(0).getExcedenteUniaoContratado();
  40.             } else throw new RuntimeException("O contrato não possui o valor \"Excedente União Contratado\"");
  41.  
  42.            
  43.             if (contratos.get(0).getCampos().get(0).getTractParticipations() != null && !contratos.get(0).getCampos().get(0).getTractParticipations().isEmpty()) {
  44.  
  45.                 //TODO: track-participations vai ser alterado
  46.                 String data = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
  47.                 Optional<TractParticipationEntity> track = contratos.get(0).getCampos().get(0).getTractParticipations().stream().max(new TPDateComparator());
  48.                 if (track.isPresent()) {
  49.                     if (data.compareTo(track.get().getDataFim().substring(0, 10)) < 0) {
  50.                         trackParticipation = track.get().getPercentual().divide(CEM);
  51.                     }
  52.                 } else {
  53.                     track = contratos.get(0).getTractParticipations().stream().max(new TPDateComparator());
  54.                     if (track.isPresent()) {
  55.                         if (data.compareTo(track.get().getDataFim().substring(0, 10)) < 0) {
  56.                             trackParticipation = track.get().getPercentual().divide(CEM);
  57.                         }
  58.                     }
  59.                 }
  60.             }
  61.         }
  62.  
  63.         //inicia o DTO
  64.         GraficoAcumuladoExcedentesDTO dadosGrafico = new GraficoAcumuladoExcedentesDTO();
  65.         dadosGrafico.setExcedenteGasPrevisto(new DadosGraficoDTO(null, corPrevisto, new ArrayList<BigDecimal>()));
  66.         dadosGrafico.setExcedenteOleoPrevisto(new DadosGraficoDTO(null, corPrevisto, new ArrayList<BigDecimal>()));
  67.         dadosGrafico.setExcedenteGasRealizado(new DadosGraficoDTO(null, corRealizado, new ArrayList<BigDecimal>()));
  68.         dadosGrafico.setExcedenteOleoRealizado(new DadosGraficoDTO(null, corRealizado, new ArrayList<BigDecimal>()));
  69.        
  70.         //constroi o eixoX  
  71.         //OBS: o tamanho do eixo X é usado como parametro para inserção de zeros em meses sem memoria de calculo
  72.         dadosGrafico.setEixoX(constroiEixoX(anoInicial, anoFinal, mesInicial, mesFinal));
  73.        
  74.         if (anoInicial.equals(anoFinal)) {
  75.             dadosGrafico = recuperaValores(dadosGrafico, papList.isEmpty() ? new PAPEntity() : papList.get(0), mcList, unidadeMedida, mesInicial, mesFinal);
  76.            
  77.             if (mcList.isEmpty()) {
  78.                 dadosGrafico = zeraVolumes(dadosGrafico);
  79.             }
  80.            
  81.         } else {       
  82.             papList.sort(new SortByAnoReferencia());
  83.  
  84.             List<MemoriaCalculoEntity> mcAnoInicial = mcList.stream()
  85.             .filter(mc -> mc.getAno().equals(anoInicial))
  86.             .collect(Collectors.toList());
  87.             mcAnoInicial.sort(new SortByMes());
  88.  
  89.             List<MemoriaCalculoEntity> mcAnoFinal = mcList.stream()
  90.             .filter(mc -> !mc.getAno().equals(anoInicial))
  91.             .collect(Collectors.toList());
  92.             mcAnoFinal.sort(new SortByMes());          
  93.  
  94.             if (!papList.isEmpty()) {
  95.                 if (papList.size() > 1) {
  96.                     dadosGrafico = recuperaValores(dadosGrafico, papList.get(0), mcAnoInicial, unidadeMedida, mesInicial, "12");
  97.                     dadosGrafico = recuperaValores(dadosGrafico, papList.get(1), mcAnoFinal, unidadeMedida, "01", mesFinal);
  98.                 } else {
  99.                     if (papList.get(0).getAnoReferencia().trim().equals(anoInicial.trim())) {
  100.                         dadosGrafico = recuperaValores(dadosGrafico, papList.get(0), mcAnoInicial, unidadeMedida, mesInicial, "12");
  101.                         dadosGrafico = recuperaValores(dadosGrafico, new PAPEntity(), mcAnoFinal, unidadeMedida, "01", mesFinal);
  102.                     } else {
  103.                         dadosGrafico = recuperaValores(dadosGrafico, new PAPEntity(), mcAnoInicial, unidadeMedida, mesInicial, "12");
  104.                         dadosGrafico = recuperaValores(dadosGrafico, papList.get(0), mcAnoFinal, unidadeMedida, "01", mesFinal);
  105.                     }
  106.                 }
  107.             }
  108.         }  
  109.        
  110.         dadosGrafico.getExcedenteGasPrevisto().setTipo("Previsto");
  111.         dadosGrafico.getExcedenteGasRealizado().setTipo("Realizado");
  112.         dadosGrafico.getExcedenteOleoPrevisto().setTipo("Previsto");
  113.         dadosGrafico.getExcedenteOleoRealizado().setTipo("Realizado");     
  114.        
  115.         dadosGrafico = acumulaValores(dadosGrafico);
  116.  
  117.         return dadosGrafico;
  118.     }
  119.  
  120.     private static GraficoAcumuladoExcedentesDTO recuperaValores(GraficoAcumuladoExcedentesDTO dto, PAPEntity pap, List<MemoriaCalculoEntity> mcList, String unidadeMedida, String mesInicial, String mesFinal) {
  121.  
  122.         List<PrevisaoProducaoEntity> prodPap = pap.getProducaoMensal();
  123.  
  124.         DadosGraficoDTO dadosGasRealizado = dto.getExcedenteGasRealizado();
  125.         DadosGraficoDTO dadosOleoRealizado = dto.getExcedenteOleoRealizado();
  126.         DadosGraficoDTO dadosGasPrevisto =  dto.getExcedenteGasPrevisto();
  127.         DadosGraficoDTO dadosOleoPrevisto = dto.getExcedenteOleoPrevisto();
  128.        
  129.         verificadorMes = Integer.parseInt(mesInicial);
  130.         int mesFinalInt = Integer.parseInt(mesFinal);
  131.        
  132.         if (mcList != null) mcList.stream().forEach(mc -> {        
  133.            
  134.             BigDecimal valorEGURealizado = new BigDecimal("0.00");
  135.             BigDecimal valorEOURealizado = new BigDecimal("0.00");
  136.             BigDecimal valorEGUPrevisto = new BigDecimal("0.00");
  137.             BigDecimal valorEOUPrevisto = new BigDecimal("0.00");
  138.  
  139.             BigDecimal percExcedente = BigDecimal.ZERO;
  140.            
  141.             int mesMC = Integer.parseInt(mc.getMes());
  142.            
  143.             while (verificadorMes < mesMC) {
  144.                 dadosGasRealizado.getVolumesMensais().add(valorEOURealizado);
  145.                 dadosOleoRealizado.getVolumesMensais().add(valorEOURealizado);
  146.                 dadosGasPrevisto.getVolumesMensais().add(valorEGUPrevisto);
  147.                 dadosOleoPrevisto.getVolumesMensais().add(valorEOUPrevisto);
  148.                 verificadorMes++;
  149.                 if (verificadorMes == mesFinalInt) break;
  150.             }
  151.            
  152.             List<DadosMemoriaCalculoBO>  dadosODMPercExcedente = new ArrayList<>();
  153.             List<DadosMemoriaCalculoBO>  dadosODMValorGas = new ArrayList<>();
  154.             List<DadosMemoriaCalculoBO>  dadosODMValorOleo = new ArrayList<>();
  155.            
  156.             if (mc.getDadosODM() != null && Integer.parseInt(mc.getMes()) == verificadorMes) {
  157.                 dadosODMPercExcedente =  mc.getDadosODM()
  158.                     .stream()
  159.                     .filter(d -> StringUtils.containsIgnoreCase(d.getSigla(), "EO% m"))
  160.                     .collect(Collectors.toList());
  161.  
  162.                 dadosODMValorOleo =  mc.getDadosODM()
  163.                     .stream()
  164.                     .filter(d -> StringUtils.containsIgnoreCase(d.getSigla(), "EOU m+1"))
  165.                     .collect(Collectors.toList());
  166.  
  167.                 dadosODMValorGas =  mc.getDadosODM()
  168.                     .stream()
  169.                     .filter(d -> StringUtils.containsIgnoreCase(d.getSigla(), "EGU m+1"))
  170.                     .collect(Collectors.toList());
  171.  
  172.             }
  173.            
  174.             if (!dadosODMPercExcedente.isEmpty() && dadosODMPercExcedente.get(0).getValor() != null) percExcedente = dadosODMPercExcedente.get(0).getValor();
  175.  
  176.             if (!dadosODMValorOleo.isEmpty() && dadosODMValorOleo.get(0).getValor() != null) valorEOURealizado = dadosODMValorOleo.get(0).getValor();
  177.             if (!dadosODMValorGas.isEmpty() && dadosODMValorGas.get(0).getValor() != null) valorEGURealizado = dadosODMValorGas.get(0).getValor();
  178.  
  179.             //ADICIONA VALORES AO DTO
  180.             dadosGasRealizado.getVolumesMensais().add(valorEGURealizado.setScale(2, BigDecimal.ROUND_HALF_EVEN));
  181.             dadosOleoRealizado.getVolumesMensais().add(unidadeMedida.equals("1") ? valorEOURealizado.multiply(BigDecimal.valueOf(6.289811)).setScale(2, BigDecimal.ROUND_HALF_EVEN) : valorEOURealizado.setScale(2, BigDecimal.ROUND_HALF_EVEN));
  182.  
  183.             if (prodPap != null && Integer.parseInt(mc.getMes()) == verificadorMes) {
  184.                 try {
  185.  
  186.                     BigDecimal percentual = trackParticipation.multiply(aliquotaMediaUniao.multiply(percExcedente));
  187.  
  188.                     int index = Integer.parseInt(mc.getMes()) - 1;
  189.                     valorEGUPrevisto = prodPap.get(index).getGasAssociado().multiply(percentual);
  190.  
  191.                     valorEOUPrevisto = prodPap.get(index).getOleo().multiply(percentual);
  192.                 } catch (IndexOutOfBoundsException e) {
  193.                     throw new RuntimeException("Há algo de arrado com as produções mensais do PAP de " + pap.getAnoReferencia() + "!");
  194.                 }
  195.             }
  196.  
  197.             //ADICIONA VALORES AO DTO
  198.             dadosGasPrevisto.getVolumesMensais().add(valorEGUPrevisto.setScale(2, BigDecimal.ROUND_HALF_EVEN));
  199.             dadosOleoPrevisto.getVolumesMensais().add(unidadeMedida.equals("1") ? valorEOUPrevisto.multiply(BBL).setScale(2, BigDecimal.ROUND_HALF_EVEN) : valorEOUPrevisto.setScale(2, BigDecimal.ROUND_HALF_EVEN));
  200.  
  201.             verificadorMes++;
  202.         });
  203.        
  204.  
  205.        
  206.         if(mcList == null || mcList.isEmpty()) {
  207.             for(int i = 0; i < retornaQuantidadeMeses(mesInicial, mesFinal); i++ ){
  208.                 dadosGasRealizado.getVolumesMensais().add(new BigDecimal("0.00"));
  209.                 dadosOleoPrevisto.getVolumesMensais().add(new BigDecimal("0.00"));
  210.                 dadosGasPrevisto.getVolumesMensais().add(new BigDecimal("0.00"));
  211.                 dadosOleoRealizado.getVolumesMensais().add(new BigDecimal("0.00"));
  212.             }
  213.         } else {
  214.             int mesInicialInt = Integer.parseInt(mesInicial);
  215.             int intervalo = mesFinalInt - mesInicialInt + 1;
  216.             int tamanho = verificadorMes - mesInicialInt;
  217.             if (intervalo != tamanho) {
  218.                 for (int i = 0; i < intervalo-tamanho; i++) {
  219.                     dadosGasRealizado.getVolumesMensais().add(new BigDecimal("0.00"));
  220.                     dadosOleoRealizado.getVolumesMensais().add(new BigDecimal("0.00"));
  221.                     dadosGasPrevisto.getVolumesMensais().add(new BigDecimal("0.00"));
  222.                     dadosOleoPrevisto.getVolumesMensais().add(new BigDecimal("0.00"));
  223.                 }
  224.             }
  225.         }
  226.        
  227.  
  228.         dto.setExcedenteGasPrevisto(dadosGasPrevisto);
  229.         dto.setExcedenteGasRealizado(dadosGasRealizado);
  230.         dto.setExcedenteOleoPrevisto(dadosOleoPrevisto);
  231.         dto.setExcedenteOleoRealizado(dadosOleoRealizado); 
  232.  
  233.         return dto;
  234.     }
  235.  
  236.     private static List<String> constroiEixoX(String anoInicial, String anoFinal, String mesInicial, String mesFinal){
  237.         List<String> meses = new ArrayList<>();
  238.  
  239.         if (anoInicial.equals(anoFinal)){
  240.             meses.addAll(constroiUmAno(mesInicial, mesFinal, anoInicial));
  241.         } else {
  242.             meses.addAll(constroiUmAno(mesInicial, "12", anoInicial));
  243.             meses.addAll(constroiUmAno("1", mesFinal, anoFinal));
  244.         }
  245.  
  246.         return meses;
  247.     }
  248.  
  249.     private static List<String> constroiUmAno(String mesInicial, String mesFinal, String ano){
  250.         int intInicial = Integer.parseInt(mesInicial);
  251.         int intFinal = Integer.parseInt(mesFinal);
  252.  
  253.         List<String> meses = new ArrayList<>();
  254.  
  255.         for (int i = intInicial; i <= intFinal; i++){
  256.             meses.add(retornaLabelMes(i, ano));
  257.         }
  258.  
  259.         return meses;
  260.        
  261.     }
  262.  
  263.     private static String retornaLabelMes(int mes, String ano){
  264.         StringBuilder sb = new StringBuilder();
  265.         switch (mes) {
  266.             case 1:
  267.                 sb.append("jan");
  268.                 break;
  269.             case 2:
  270.                 sb.append("fev");
  271.                 break;
  272.             case 3:
  273.                 sb.append("mar");
  274.                 break;
  275.             case 4:
  276.                 sb.append("abr");
  277.                 break;
  278.             case 5:
  279.                 sb.append("mai");
  280.                 break;
  281.             case 6:
  282.                 sb.append("jun");
  283.                 break;
  284.             case 7:
  285.                 sb.append("jul");
  286.                 break;
  287.             case 8:
  288.                 sb.append("ago");
  289.                 break;
  290.             case 9:
  291.                 sb.append("set");
  292.                 break;
  293.             case 10:
  294.                 sb.append("out");
  295.                 break;
  296.             case 11:
  297.                 sb.append("nov");
  298.                 break;
  299.             case 12:
  300.                 sb.append("dez");
  301.                 break;
  302.             default:
  303.                 break;
  304.         }
  305.         sb.append("/");
  306.         sb.append(ano.substring(2));
  307.  
  308.         return sb.toString();
  309.     }
  310.        
  311.  
  312.     private static GraficoAcumuladoExcedentesDTO acumulaValores(GraficoAcumuladoExcedentesDTO dadosGrafico) {
  313.        
  314.         BigDecimal acumuladoGasPrevisto = BigDecimal.ZERO;
  315.         BigDecimal acumuladoGasRealizado = BigDecimal.ZERO;
  316.         BigDecimal acumuladoOleoPrevisto = BigDecimal.ZERO;
  317.         BigDecimal acumuladoOleoRealizado = BigDecimal.ZERO;
  318.        
  319.         List<BigDecimal> auxiliarGasPrevisto = new ArrayList<>();
  320.         List<BigDecimal> auxiliarGasRealizado = new ArrayList<>();
  321.         List<BigDecimal> auxiliarOleoPrevisto = new ArrayList<>();
  322.         List<BigDecimal> auxiliarOleoRealizado = new ArrayList<>();
  323.        
  324.         int tamanho = dadosGrafico.getEixoX().size();
  325.        
  326.         for (int i = 0; i < tamanho; i++) {
  327.             acumuladoGasPrevisto = acumuladoGasPrevisto.add(dadosGrafico.getExcedenteGasPrevisto().getVolumesMensais().get(i));
  328.             acumuladoGasRealizado = acumuladoGasRealizado.add(dadosGrafico.getExcedenteGasRealizado().getVolumesMensais().get(i));
  329.             acumuladoOleoPrevisto = acumuladoOleoPrevisto.add(dadosGrafico.getExcedenteOleoPrevisto().getVolumesMensais().get(i));
  330.             acumuladoOleoRealizado = acumuladoOleoRealizado.add(dadosGrafico.getExcedenteOleoRealizado().getVolumesMensais().get(i));
  331.        
  332.             auxiliarGasPrevisto.add(acumuladoGasPrevisto);
  333.             auxiliarGasRealizado.add(acumuladoGasRealizado);
  334.             auxiliarOleoPrevisto.add(acumuladoOleoPrevisto);
  335.             auxiliarOleoRealizado.add(acumuladoOleoRealizado);
  336.         }
  337.        
  338.         dadosGrafico.getExcedenteGasPrevisto().setVolumesMensais(auxiliarGasPrevisto);
  339.         dadosGrafico.getExcedenteGasRealizado().setVolumesMensais(auxiliarGasRealizado);
  340.         dadosGrafico.getExcedenteOleoPrevisto().setVolumesMensais(auxiliarOleoPrevisto);
  341.         dadosGrafico.getExcedenteOleoRealizado().setVolumesMensais(auxiliarOleoRealizado);
  342.        
  343.         return dadosGrafico;
  344.     }
  345.    
  346.     private static GraficoAcumuladoExcedentesDTO zeraVolumes(GraficoAcumuladoExcedentesDTO dadosGrafico) {
  347.         dadosGrafico.getExcedenteGasPrevisto().setVolumesMensais(new ArrayList<>());
  348.         dadosGrafico.getExcedenteGasRealizado().setVolumesMensais(new ArrayList<>());
  349.         dadosGrafico.getExcedenteOleoPrevisto().setVolumesMensais(new ArrayList<>());
  350.         dadosGrafico.getExcedenteOleoRealizado().setVolumesMensais(new ArrayList<>());
  351.         for (int i = 0; i < dadosGrafico.getEixoX().size(); i++) {
  352.             dadosGrafico.getExcedenteGasPrevisto().getVolumesMensais().add(BigDecimal.ZERO);
  353.             dadosGrafico.getExcedenteGasRealizado().getVolumesMensais().add(BigDecimal.ZERO);
  354.             dadosGrafico.getExcedenteOleoPrevisto().getVolumesMensais().add(BigDecimal.ZERO);
  355.             dadosGrafico.getExcedenteOleoRealizado().getVolumesMensais().add(BigDecimal.ZERO);
  356.         }
  357.         return dadosGrafico;
  358.     }
  359.    
  360.     private static int retornaQuantidadeMeses(String mesInicial, String mesFinal) {
  361.         return Integer.parseInt(mesFinal) -Integer.parseInt(mesInicial) + 1;
  362.     }
  363. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement