/* * * Copyright (c) 2013 - 2014 INT - National Institute of Technology & COPPE - Alberto Luiz Coimbra Institute - Graduate School and Research in Engineering. * See the file license.txt for copyright permission. * */ package carga; import java.util.ArrayList; import java.util.List; import modelo.Familia; import modelo.Modelo; import modelo.TecModel; import modelo.Tecido; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import service.ModeloAppService; import service.TecModelAppService; import service.TecidoAppService; import service.controleTransacao.FabricaDeAppService; import service.exception.AplicacaoException; import util.JPAUtil; /** * * Sobre a Carga: * � uma Carga do sistema, portanto deve herdar de CargaBase e * implementar o m�todo executar(). * Nesse m�todo executar � que � chamado os outros m�todos que s�o * as et�pas dessa carga. * Portanto se � necessario rodar um m�todo depois do outro, eles devem ser chamados * na ordem correta. Ex: * incluiHP() vem antes de inicializaHP(), portanto no m�todo executar() eles devem ser chamados nessa ordem. * * Terminado de executar todas as etapas � preciso retornar true. * Se houver algum problema(exce��o) na execu��o de um das etapas, essa exce��o deve ser lancada * * Essa Carga: * Teste de carga que cria tecmodels com base nos modelos e tecidos * usando o seguinte raciocinio: * PCS / MT: * Calcinhas - 3 * Infantil - 5 * Sutian - 4 * * Defasagem : TR do modelo * * @author felipe.arruda * */ public class CargaTecModel extends CargaBase{ private static TecidoAppService tecidoService; private static ModeloAppService modeloService; private static TecModelAppService tecModelService; public CargaTecModel() { try { tecidoService = FabricaDeAppService .getAppService(TecidoAppService.class); modeloService = FabricaDeAppService .getAppService(ModeloAppService.class); tecModelService = FabricaDeAppService .getAppService(TecModelAppService.class); } catch (Exception e) { e.printStackTrace(); } } /** * Executa a inclusao de tecmodels. */ @Override public boolean executar() throws AplicacaoException { this.incluirTecModelsCoerentes(); return true; } /** * Teste de carga que cria tecmodels com base nos modelos e tecidos * usando o seguinte raciocinio: * PCS / MT: * Calcinhas - 3 * Infantil - 5 * Sutian - 4 * * Defasagem : TR do modelo */ public void incluirTecModelsCoerentes() throws AplicacaoException { List<Modelo> listaModelos = modeloService .recuperaListaDeModelosComFamilias(); List<Tecido> listaTecidos = tecidoService.recuperaListaDeTecidos(); // percorre a lista de modelos e vai adicionando para cada um deles um // tecmodel correspondente. for (int i = 0; i < listaModelos.size(); i++) { // Modelo corrente � o modelo da iteracao atual Modelo modeloCorrente = listaModelos.get(i); /* * tecido vai variando e repetindo sempre que chegar no ultimo, ex: * (14 modelos e 4 tecidos): * modelo 0 - tecido 0 * modelo 1 - tecido 1 * modelo 2 - tecido 2 * modelo 3 - tecido 3 * modelo 4 - tecido 0 * modelo 5 - tecido 1 * .... * modelo 12 - tecido 0 * modelo 13 - tecido 1 */ int numDoTecido = (i % listaTecidos.size()); Tecido tecidoCorrente = listaTecidos.get(numDoTecido); //cria um tecmodel usando o tecidocorrente e o modelo corrente TecModel tecModel = gerarTecModel(tecidoCorrente,modeloCorrente); // inclui o tecmodel corrente tecModelService.inclui(tecModel); } // para finalizar inclui outros 2 tecmodels que sao correspondentes a 2 // modelos onde cada um usam 2 tecidos. //tecmodel usando o primeiro modelo da lista de modelos e um tecido diferente do que foi usado anteriormente Modelo modeloComMaisUmTecido1 = listaModelos.get(0); Tecido tecidoMaisUm1 = listaTecidos.get((0+1) % listaTecidos.size()); TecModel tecModelMaisUm1 = gerarTecModel(tecidoMaisUm1,modeloComMaisUmTecido1); tecModelService.inclui(tecModelMaisUm1); //tecmodel usando o modelo do meio da lista de modelos e um tecido diferente do que foi usado anteriormente int numModeloMeioDaLista = (listaModelos.size() / 2); Modelo modeloComMaisUmTecido2 = listaModelos.get((listaModelos.size() / 2)); Tecido tecidoMaisUm2 = listaTecidos.get((numModeloMeioDaLista+1) % listaTecidos.size()); TecModel tecModelMaisUm2 = gerarTecModel(tecidoMaisUm2,modeloComMaisUmTecido2); tecModelService.inclui(tecModelMaisUm2); } /** * retorna um tecmodel usando os dados de tecido e modelo passados como parametro. * os dados do tecmodel foram calculados a partir dos parametros de entrada, para ficarem coerentes. * * @param tecido * @param modelo * @return */ public TecModel gerarTecModel(Tecido tecido, Modelo modelo){ TecModel tecModel = new TecModel(); // o modelo do tecmodel � o modelo tecModel.setModelo(modelo); // o tecido do tecmodel � o tecido tecModel.setTecido(tecido); // tempo de defasagem do tecido � igual a do modelo. tecModel.setTempoDefasagemUsoTec(modelo.getTr()); // numero de pecs por metro do modelo atual int numPecasPorMt = numPecasPorMtPorFamilia(modelo.getFamilia()); Double consumoLoteMt = modelo.getTamLote() * (1.0 / (double)numPecasPorMt); tecModel.setConsumoPorLoteMt(consumoLoteMt); return tecModel; } /** * Retorna o numero de pecas por mt por familia * isso � cada familia tem um numero de pecas por metro. * * @param familia * @return */ public int numPecasPorMtPorFamilia(Familia familia) { String descFam = familia.getDescrFamilia(); // se for calcinha entao o numero de pcs por metro � de 3 if (descFam.equals("cal�a/biquini")) { return 2; } // se for sutian entao o numero de pcs por metro � de 4 else if (descFam.equals("soutien")) { return 3; } // se for infantil entao o numero de pcs por metro � de 5 else if (descFam.equals("infantil")) { return 4; } // se n�o for nenhum deles retorna 1 return 1; } }