//import java.util.Iterator;
/**
*
*/
//TODO: import java.sql.*;
//import javx.sql.*;
import java.util.*;
/*
SELECT * FROM `COLUMNS` C WHERE C.`TABLE_SCHEMA` = 'pcmso';
SELECT * FROM `TABLES` C WHERE C.`TABLE_SCHEMA` = 'pcmso';
SELECT * FROM TABLE_CONSTRAINTS T WHERE T.`TABLE_SCHEMA` = 'pcmso';
SELECT * FROM KEY_COLUMN_USAGE K WHERE K.`TABLE_SCHEMA` = 'pcmso';
SELECT * FROM REFERENTIAL_CONSTRAINTS R WHERE R.`CONSTRAINT_SCHEMA` = 'pcmso';
*/
/**
* @author uisleandro
* This will be the main class of this program
*/
public class MyApplication {
/**
* @param args
* @throws Exception
*/
public static void main(String args[]) throws Exception{
ArrayList<Integer> medicos = new ArrayList<Integer>(); // 4
ArrayList<Integer> pacotes = new ArrayList<Integer>(); // 5
Boolean slashes = true;
MyTableCollection tabelas = new MyTableCollection();
Integer qtd_funcionarios_por_empresa = 360;
Integer qtd_riscos_por_cargo = 2;
Integer qtd_exames_por_pacote = 5;
Integer qtd_pacote_de_exames_por_cargo = 5;
Integer qtd_cargos_por_empresa = 10;
Integer qtd_funcionarios_por_cargo = 30;
//x;
//Integer 5
Integer qtd_role = 3;
Integer qtd_empresa = 10;
Integer qtd_funcionario = qtd_empresa * qtd_funcionarios_por_empresa; // 7 para cada empresa.. 28 cargos
Integer qtd_funcionario_possui_cargo = qtd_funcionario; // 28
Integer qtd_cargo = qtd_funcionario; // 28
Integer qtd_risco_ocupacional = qtd_cargo * qtd_riscos_por_cargo; //56
Integer qtd_cargo_possui_risco_ocupacional = qtd_risco_ocupacional; //56
Integer qtd_categoria_de_exames = qtd_pacote_de_exames_por_cargo; // 5
Integer qtd_especialidade = 4; // 4
Integer qtd_exame = 2 * qtd_especialidade * qtd_exames_por_pacote; // 16
//2 *4 * 5 = 40
MyRand randExame = new MyRand(qtd_exame - qtd_pacote_de_exames_por_cargo); //40 - 5 = 35
Integer qtd_medico = qtd_especialidade; // 4
Integer qtd_medico_possui_especialidade = qtd_medico; // 4
Integer qtd_pacote_de_exames = qtd_cargo * qtd_categoria_de_exames; //15 * 5 = 75
Integer qtd_pacote_de_exames_possui_exame = qtd_pacote_de_exames * qtd_exames_por_pacote; // 375
Integer qtd_funcionario_realiza_pacote_de_exames = qtd_funcionario * qtd_categoria_de_exames; // 75
Integer qtd_resultado_do_exame = qtd_funcionario_realiza_pacote_de_exames * qtd_pacote_de_exames_possui_exame; //75*375 = 28125
Integer qtd_user = qtd_empresa + qtd_funcionario + qtd_medico; //22
Integer qtd_endereco = qtd_user; //22
Integer qtd_telefone = qtd_user; //22
MyTable cargo = new MyTable("cargo", qtd_cargo);
cargo.addColumn("Cargo_id", new MyPKColumn() );
cargo.addColumn("fk_Empresa_id", new MyFKColumn("empresa", "Empresa_id") );
cargo.addColumn("Cargo_Nome", new MyColumn("varchar", 45) );
tabelas.add(cargo);
MyTable cargo_possui_risco_ocupacional = new MyTable("cargo_possui_risco_ocupacional", qtd_cargo_possui_risco_ocupacional);
cargo_possui_risco_ocupacional.addColumn("fk_Cargo_id", new MyFKColumn("Cargo","Cargo_id") );
cargo_possui_risco_ocupacional.addColumn("fk_Risco_id", new MyFKColumn("Risco_Ocupacional","Risco_id") );
tabelas.add(cargo_possui_risco_ocupacional);
MyTable categoria_de_exames = new MyTable("categoria_de_exames", qtd_categoria_de_exames);
categoria_de_exames.addColumn("Categoria_De_Exames_id", new MyPKColumn() );
categoria_de_exames.addColumn("Categoria_De_Exames_Nome", new MyColumn("varchar", 45) );
tabelas.add(categoria_de_exames);
MyTable empresa = new MyTable("empresa", qtd_empresa);
empresa.addColumn("Empresa_id", new MyFKColumn("User", "User_id") );
empresa.addColumn("Empresa_Nome", new MyColumn("varchar", 45) );
empresa.addColumn("Empresa_CNPJ", new MyColumn("numeric", 21) );
empresa.addColumn("Empresa_IE", new MyColumn("numeric", 21) );
tabelas.add(empresa);
MyTable endereco = new MyTable("endereco", qtd_endereco);
endereco.addColumn("fk_User_id", new MyFKColumn("User", "User_id") );
endereco.addColumn("Endereco", new MyColumn("varchar", 60) );
endereco.addColumn("Complemento", new MyColumn("varchar", 45) );
endereco.addColumn("Numero", new MyColumn("numeric", 4) );
endereco.addColumn("Cidade", new MyColumn("varchar", 45) );
endereco.addColumn("CEP", new MyColumn("varchar", 11) );
endereco.addColumn("UF", new MyColumn("varchar", 2) );
tabelas.add(endereco);
MyTable especialidade = new MyTable("especialidade", qtd_especialidade);
especialidade.addColumn("Especialidade_id", new MyPKColumn() );
especialidade.addColumn("Especialidade_Nome", new MyColumn("varchar", 45) );
tabelas.add(especialidade);
MyTable exame = new MyTable("exame", qtd_exame);
exame.addColumn("Exame_id", new MyPKColumn() );
exame.addColumn("Exame_Nome", new MyColumn("varchar", 60) );
exame.addColumn("Exame_Descricao", new MyColumn("varchar", 9000) );
tabelas.add(exame);
MyTable funcionario = new MyTable("funcionario", qtd_funcionario);
funcionario.addColumn("Funcionario_id", new MyFKColumn("User", "User_id") );
funcionario.addColumn("Funcionario_Nome", new MyColumn("varchar", 45) );
funcionario.addColumn("Funcionario_Matricula", new MyColumn("numeric", 11) );
tabelas.add(funcionario);
MyTable funcionario_possui_cargo = new MyTable("funcionario_possui_cargo", qtd_funcionario_possui_cargo);
funcionario_possui_cargo.addColumn("fk_Cargo_id", new MyFKColumn("Funcionario", "Funcionario_id") );
funcionario_possui_cargo.addColumn("fk_Funcionario_id", new MyFKColumn("Cargo", "Cargo_id") );
tabelas.add(funcionario_possui_cargo);
MyTable funcionario_realiza_pacote_de_exames = new MyTable("funcionario_realiza_pacote_de_exames", qtd_funcionario_realiza_pacote_de_exames);
funcionario_realiza_pacote_de_exames.addColumn("Pacote_Realizado_id", new MyPKColumn() );
funcionario_realiza_pacote_de_exames.addColumn("fk_Pacote_De_exames_id", new MyFKColumn("pacote_de_exames", "Pacote_De_Exames_id") );
funcionario_realiza_pacote_de_exames.addColumn("fk_Funcionario_id", new MyFKColumn("funcionario", "Funcionario_id") );
funcionario_realiza_pacote_de_exames.addColumn("fk_Medico_id", new MyFKColumn("medico", "Medico_id") );
funcionario_realiza_pacote_de_exames.addColumn("Data_De_Entrega", new MyColumn("date", null) );
funcionario_realiza_pacote_de_exames.addColumn("Laudo_Medico", new MyColumn("text", 65535) );
tabelas.add(funcionario_realiza_pacote_de_exames);
MyTable medico = new MyTable("medico", qtd_medico);
medico.addColumn("Medico_id", new MyFKColumn("User", "User_id") );
medico.addColumn("Nome", new MyColumn("varchar", 45) );
medico.addColumn("CRM", new MyColumn("numeric", 21) );
tabelas.add(medico);
MyTable medico_possui_especialidade = new MyTable("medico_possui_especialidade", qtd_medico_possui_especialidade);
medico_possui_especialidade.addColumn("fk_Medico_id", new MyFKColumn("Medico","Medico_Id") );
medico_possui_especialidade.addColumn("fk_Especialidade_id", new MyFKColumn("Especialidade","Especialidade_id") );
tabelas.add(medico_possui_especialidade);
MyTable pacote_de_exames = new MyTable("pacote_de_exames", qtd_pacote_de_exames);
pacote_de_exames.addColumn("Pacote_De_Exames_id", new MyPKColumn() );
pacote_de_exames.addColumn("fk_Categoria_De_Exames_id", new MyFKColumn("categoria_de_exames", "Categoria_De_Exames_id") );
pacote_de_exames.addColumn("fk_Medico_id", new MyFKColumn("medico", "Medico_id") );
pacote_de_exames.addColumn("Pacote_De_Exames_Descricao", new MyColumn("varchar", 9000) );
pacote_de_exames.addColumn("fk_Cargo_id", new MyFKColumn("cargo", "Cargo_id") );
tabelas.add(pacote_de_exames);
MyTable pacote_de_exames_possui_exame = new MyTable("pacote_de_exames_possui_exame", qtd_pacote_de_exames_possui_exame);
pacote_de_exames_possui_exame.addColumn("fk_Pacote_De_exames_id", new MyFKColumn("Pacote_De_exames","Pacote_De_exames_id") );
pacote_de_exames_possui_exame.addColumn("fk_Exame_id", new MyFKColumn("Exame","Exame_id") );
tabelas.add(pacote_de_exames_possui_exame);
MyTable resultado_do_exame = new MyTable("resultado_do_exame", qtd_resultado_do_exame);
resultado_do_exame.addColumn("fk_Pacote_Realizado_id", new MyFKColumn("Pacote_De_Exames_id","Pacote_De_Exames_id") );
resultado_do_exame.addColumn("fk_Exame_id", new MyFKColumn("Exame","Exame_id") );
resultado_do_exame.addColumn("Data_Do_Exame", new MyColumn("date", null) );
resultado_do_exame.addColumn("Resultado_Descricao", new MyColumn("text", 65535) );
tabelas.add(resultado_do_exame);
MyTable risco_ocupacional = new MyTable("risco_ocupacional", qtd_risco_ocupacional);
risco_ocupacional.addColumn("Risco_id", new MyPKColumn() );
risco_ocupacional.addColumn("fk_Medico_id", new MyFKColumn("medico", "Medico_id") );
risco_ocupacional.addColumn("Risco_Nome", new MyColumn("varchar", 45) );
risco_ocupacional.addColumn("Risco_Descricao", new MyColumn("text", 65535) );
tabelas.add(risco_ocupacional);
MyTable role = new MyTable("role", qtd_role);
role.addColumn("Role_id", new MyPKColumn() );
role.addColumn("Role_Name", new MyColumn("varchar", 45) );
tabelas.add(role);
MyTable telefone = new MyTable("telefone", qtd_telefone);
telefone.addColumn("Telefone_id", new MyPKColumn() );
telefone.addColumn("Telefone", new MyColumn("varchar", 20) );
telefone.addColumn("fk_User_id", new MyFKColumn("user", "User_id") );
tabelas.add(telefone);
MyTable user = new MyTable("user", qtd_user);
user.addColumn("User_id", new MyPKColumn() );
user.addColumn("User_Name", new MyColumn("varchar", 45) );
user.addColumn("Password", new MyColumn("varchar", 45) );
user.addColumn("fk_Role_id", new MyFKColumn("role", "Role_id") );
tabelas.add(user);
//System.out.println(table.generateInsert());
//System.out.println();
Double objetivo = 5368709120.0;
System.out.println("Size in Bytes");
System.out.println(tabelas.calculate());
System.out.println(objetivo);
System.out.println("objetivo alcancado = " + (tabelas.calculate() >= objetivo) );
///TODO: esta função não poderia estar numa classe estática. Inicializa o random Id
//inserts
MyDataAccess.open();
//1. Inserindo Role
role.setCustomValue(true, "Role_Name", "Administrador");
MyDataAccess.ExecuteInsert(role.generateInsert());
role.setCustomValue(true, "Role_Name", "Empresa");
MyDataAccess.ExecuteInsert(role.generateInsert());
role.setCustomValue(true, "Role_Name", "Medico");
MyDataAccess.ExecuteInsert(role.generateInsert());
role.setCustomValue(true, "Role_Name", "Funcionario");
MyDataAccess.ExecuteInsert(role.generateInsert());
//2. Inserindo Categoria de Exames
categoria_de_exames.setCustomValue(slashes, "Categoria_De_Exames_Nome", "Admissional");
MyDataAccess.ExecuteInsert(categoria_de_exames.generateInsert());
categoria_de_exames.setCustomValue(slashes, "Categoria_De_Exames_Nome", "Periodico");
MyDataAccess.ExecuteInsert(categoria_de_exames.generateInsert());
categoria_de_exames.setCustomValue(slashes, "Categoria_De_Exames_Nome", "Retono ao trabalho");
MyDataAccess.ExecuteInsert(categoria_de_exames.generateInsert());
categoria_de_exames.setCustomValue(slashes, "Categoria_De_Exames_Nome", "Mudanca de funcao");
MyDataAccess.ExecuteInsert(categoria_de_exames.generateInsert());
categoria_de_exames.setCustomValue(slashes, "Categoria_De_Exames_Nome", "Demissional"); //5
MyDataAccess.ExecuteInsert(categoria_de_exames.generateInsert());
//3. Inserindo exame
for(Integer i = 0; i < qtd_exame; i++){
MyDataAccess.ExecuteInsert(exame.generateInsert());
}
Integer User_id = 0;
Integer Empresa_id = 0;
Integer Medico_id = 0;
int index = 0;
Integer Funcionario_id = 0;
Integer Especialidade_id = 0;
Integer Cargo_id = 0;
Integer Pacote_id = 0;
Integer Risco_id = 0;
//Integer Exame_id = 0;
Integer Pacote_Realizado_id = 0;
//Boolean debug = true;
//x;
//Integer j = 1;
String uf;
//*
for(Integer i = 0; i < qtd_especialidade; i++){
Especialidade_id = MyDataAccess.ExecuteInsert(especialidade.generateInsert());
// medico
user.setCustomValue(slashes, "User_Name", "MEDICO_" + i.toString());
user.setCustomValue(false, "Password", "MD5('teste')");
user.setCustomValue(slashes, "fk_Role_id", "2");
User_id = MyDataAccess.ExecuteInsert(user.generateInsert());
//System.out.println(user.generateInsert());
medico.setCustomValue(slashes, "Medico_id", User_id.toString());
medico.setCustomValue(slashes, "Nome", "MEDICO_" + i.toString());
MyDataAccess.ExecuteInsert(medico.generateInsert());
//System.out.println(medico.generateInsert());
uf = "BA";
endereco.setCustomValue(slashes, "CEP", MyRand.MasKedNumber("???? - ???"));
endereco.setCustomValue(slashes, "UF", uf);
endereco.setCustomValue(slashes, "fk_User_id", User_id.toString());
MyDataAccess.ExecuteInsert(endereco.generateInsert());
//System.out.println(endereco.generateInsert());
telefone.setCustomValue(slashes, "Telefone", MyRand.MasKedNumber(null));
telefone.setCustomValue(slashes, "fk_User_id", User_id.toString());
MyDataAccess.ExecuteInsert(telefone.generateInsert());
//System.out.println(telefone.generateInsert());
//adiciona os 4 medicos..
Medico_id = User_id;
medicos.add(Medico_id);
//medico-especialidade
medico_possui_especialidade.setCustomValue(slashes, "fk_Medico_id", Medico_id.toString());
medico_possui_especialidade.setCustomValue(slashes, "fk_Especialidade_id", Especialidade_id.toString());
MyDataAccess.ExecuteInsert(medico_possui_especialidade.generateInsert());
//System.out.println(medico_possui_especialidade.generateInsert());
} //1 medico por especialidade.
//*/
for(Integer i = 0; i < qtd_empresa; i++){
//empresa
user.setCustomValue(slashes, "User_Name", "EMPRESA_" + i.toString());
user.setCustomValue(false, "Password", "MD5('teste')");
user.setCustomValue(slashes, "fk_Role_id", "2");
User_id = MyDataAccess.ExecuteInsert(user.generateInsert());
//System.out.println(user.generateInsert());
empresa.setCustomValue(slashes, "Empresa_id", User_id.toString());
empresa.setCustomValue(slashes, "Empresa_Nome", "EMPRESA_" + i.toString());
MyDataAccess.ExecuteInsert(empresa.generateInsert());
//System.out.println(empresa.generateInsert());
uf = MyRand.RandomUF();
endereco.setCustomValue(slashes, "CEP", MyRand.MasKedNumber("???? - ???"));
endereco.setCustomValue(slashes, "UF", uf);
endereco.setCustomValue(slashes, "fk_User_id", User_id.toString());
MyDataAccess.ExecuteInsert(endereco.generateInsert());
//System.out.println(endereco.generateInsert());
telefone.setCustomValue(slashes, "Telefone", MyRand.MasKedNumber(null));
telefone.setCustomValue(slashes, "fk_User_id", User_id.toString());
MyDataAccess.ExecuteInsert(telefone.generateInsert());
//System.out.println(telefone.generateInsert());
Empresa_id = User_id;
//for cargo -> pacote_de_exames, funcionario
for(int k = 0; k < qtd_cargos_por_empresa; k++){
//envolver cargos, riscos do cargo, etc..
cargo.setCustomValue(slashes, "fk_Empresa_id", Empresa_id.toString());
Cargo_id = MyDataAccess.ExecuteInsert(cargo.generateInsert());
System.out.println(cargo.generateInsert());
for(int j = 0; j < qtd_riscos_por_cargo; j++){
risco_ocupacional.setCustomValue(false, "fk_Medico_id", "null");
Risco_id = MyDataAccess.ExecuteInsert(risco_ocupacional.generateInsert());
//System.out.println(risco_ocupacional.generateInsert());
cargo_possui_risco_ocupacional.setCustomValue(slashes, "fk_Cargo_id", Cargo_id.toString());
cargo_possui_risco_ocupacional.setCustomValue(slashes, "fk_Risco_id", Risco_id.toString());
MyDataAccess.ExecuteInsert(cargo_possui_risco_ocupacional.generateInsert());
//System.out.println(cargo_possui_risco_ocupacional.generateInsert());
}
//Adiciona os pacotes do cargo, com exames
for(int j = 0; j < qtd_pacote_de_exames_por_cargo; j++){
pacote_de_exames.setCustomValue(slashes, "fk_Categoria_De_Exames_id",(new Integer(j+1)).toString()); //admissional
pacote_de_exames.setCustomValue(slashes, "fk_Medico_id", medicos.get(index++).toString());
if(index >= medicos.size()){
index = 0;
}
pacote_de_exames.setCustomValue(false, "fk_Cargo_id",Cargo_id.toString());
Pacote_id = MyDataAccess.ExecuteInsert(pacote_de_exames.generateInsert());
//System.out.println(pacote_de_exames.generateInsert());
//prox_exame = MyRand.RandomInt(0, 3);
//int quantidadess = qtd_exames_por_pacote;
for(int h = 0; h < qtd_exames_por_pacote; h++)
{
pacotes.add(Pacote_id);
pacote_de_exames_possui_exame.setCustomValue(slashes, "fk_Pacote_De_exames_id",Pacote_id.toString());
pacote_de_exames_possui_exame.setCustomValue(false, "fk_Exame_id", "(select Exame_id from Exame e WHERE e.Exame_id > '"+randExame.RandomId().toString()+"' AND e.Exame_id NOT IN (SELECT pp.fk_Exame_id FROM pacote_de_exames_possui_exame pp WHERE pp.fk_Pacote_De_exames_id = '"+Pacote_id.toString()+"') LIMIT 1)");
MyDataAccess.ExecuteInsert(pacote_de_exames_possui_exame.generateInsert());
//System.out.println(pacote_de_exames_possui_exame.generateInsert());
}
}
//novo..
for(int l = 0; l < qtd_funcionarios_por_cargo; l++){
//Adiciona funcionario ao cargo;
user.setCustomValue(slashes, "User_Name", "FUNCIONARIO_" + i.toString());
user.setCustomValue(false, "Password", "MD5('teste')");
user.setCustomValue(slashes, "fk_Role_id", "2");
User_id = MyDataAccess.ExecuteInsert(user.generateInsert());
//System.out.println(user.generateInsert());
funcionario.setCustomValue(slashes, "Funcionario_id", User_id.toString());
funcionario.setCustomValue(slashes, "Funcionario_Nome", "FUNCIONARIO_" + i.toString());
MyDataAccess.ExecuteInsert(funcionario.generateInsert());
//Funcionario_Matricula
//System.out.println(funcionario.generateInsert());
endereco.setCustomValue(slashes, "CEP", MyRand.MasKedNumber("???? - ???"));
endereco.setCustomValue(slashes, "UF", uf);
endereco.setCustomValue(slashes, "fk_User_id", User_id.toString());
MyDataAccess.ExecuteInsert(endereco.generateInsert());
//System.out.println(endereco.generateInsert());
telefone.setCustomValue(slashes, "Telefone", MyRand.MasKedNumber(null));
telefone.setCustomValue(slashes, "fk_User_id", User_id.toString());
MyDataAccess.ExecuteInsert(telefone.generateInsert());
//System.out.println(telefone.generateInsert());
Funcionario_id = User_id;
funcionario_possui_cargo.setCustomValue(slashes,"fk_Cargo_id", Cargo_id.toString() );
funcionario_possui_cargo.setCustomValue(slashes,"fk_Funcionario_id", Funcionario_id.toString() );
MyDataAccess.ExecuteInsert(funcionario_possui_cargo.generateInsert());
//fk_Pacote_De_exames_id, fk_Funcionario_id, fk_Medico_id
for(int j = 1; j < qtd_pacote_de_exames_por_cargo; j++)
{
Pacote_id = pacotes.get(j); //outros
//System.out.println(Pacote_id);
if((j==4) && !(MyRand.RandomInt(1, 100) == 10)){ //1% demitidos
Pacote_id = pacotes.get(1);
}
funcionario_realiza_pacote_de_exames.setCustomValue(slashes, "fk_Pacote_De_exames_id", Pacote_id.toString()); //todos os outros, incluindo periodico
funcionario_realiza_pacote_de_exames.setCustomValue(slashes, "fk_Funcionario_id", Funcionario_id.toString());
funcionario_realiza_pacote_de_exames.setCustomValue(slashes, "fk_Medico_id", medicos.get(index++).toString());
if(index >= medicos.size()){
index = 0;
}
Pacote_Realizado_id = MyDataAccess.ExecuteInsert(funcionario_realiza_pacote_de_exames.generateInsert());
//System.out.println(funcionario_realiza_pacote_de_exames.generateInsert());
//resultado do exame??
for(int n = 0; n < qtd_exames_por_pacote; n++){
resultado_do_exame.setCustomValue(slashes,"fk_Pacote_Realizado_id", Pacote_Realizado_id.toString() );
resultado_do_exame.setCustomValue(false,"fk_Exame_id", "(SELECT pp.fk_Exame_id FROM funcionario_realiza_pacote_de_exames f, pacote_de_exames p, pacote_de_exames_possui_exame pp WHERE f.fk_Pacote_De_exames_id=p.Pacote_De_Exames_id AND pp.fk_Pacote_De_exames_id=p.Pacote_De_Exames_id AND f.Pacote_Realizado_id = '"+Pacote_Realizado_id.toString()+"' AND pp.fk_Exame_id NOT IN (SELECT r.fk_Exame_id FROM resultado_do_exame r WHERE r.`fk_Pacote_Realizado_id` = '"+Pacote_Realizado_id.toString()+"') LIMIT 1)" );
//System.out.print(resultado_do_exame.generateInsert());
MyDataAccess.ExecuteInsert(resultado_do_exame.generateInsert());
}
//x;
}
}
//ao sair do cargo limpa pacotes;
pacotes.clear();
}
}
MyDataAccess.close();
}
}