/*
*
* 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 cargaDoSistema;
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;
public class CargaTecModel {
private static TecidoAppService tecidoService;
private static ModeloAppService modeloService;
private static TecModelAppService tecModelService;
@BeforeClass
public void setupClass() {
try {
tecidoService = FabricaDeAppService
.getAppService(TecidoAppService.class);
modeloService = FabricaDeAppService
.getAppService(ModeloAppService.class);
tecModelService = FabricaDeAppService
.getAppService(TecModelAppService.class);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Primeira versao de carga, nao esta mais sendo usado.
*/
public void incluirTecModels() throws AplicacaoException {
// -------------------- TECMODEL 1 ---------------------//
TecModel tecModel1 = new TecModel();
tecModel1.setConsumoPorLoteMt(2.0);
tecModel1.setTempoDefasagemUsoTec(1.0);
tecModel1.setModelo(modeloService.recuperaModeloPorCodigo("121131"));
tecModel1.setTecido(tecidoService.recuperaTecidoPorCodigo("01"));
// -------------------- TECMODEL 2 ---------------------//
TecModel tecModel2 = new TecModel();
tecModel2.setConsumoPorLoteMt(3.0);
tecModel2.setTempoDefasagemUsoTec(5.0);
tecModel2.setModelo(modeloService.recuperaModeloPorCodigo("121451"));
tecModel2.setTecido(tecidoService.recuperaTecidoPorCodigo("02"));
// -------------------- TECMODEL 3 ---------------------//
TecModel tecModel3 = new TecModel();
tecModel3.setConsumoPorLoteMt(1.0);
tecModel3.setTempoDefasagemUsoTec(7.0);
tecModel3.setModelo(modeloService.recuperaModeloPorCodigo("129508"));
tecModel3.setTecido(tecidoService.recuperaTecidoPorCodigo("03"));
// -------------- LISTA DE TECMODELS -----------------//
List<TecModel> tecmodels = new ArrayList<TecModel>();
tecmodels.add(tecModel1);
tecmodels.add(tecModel2);
tecmodels.add(tecModel3);
// -------------- INCLUSAO DE TECMODELS ---------------//
for (TecModel tecmodel : tecmodels) {
tecModelService.inclui(tecmodel);
}
}
@Test
/**
* 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;
}
}