private MaquinaResource ResourceFromMaquina(string maquina1) { if (maquina1 == null) { return(null); } var context = new MEDIRM.Modelos.MEDIRMContext(); var maqDB = context.Maquinas.FirstOrDefault(x => x.Nome == maquina1); var search = Maquinas.FirstOrDefault(x => x.maquina.Tipo == maqDB.Tipo); if (search == null) { var maq = new MaquinaResource(maqDB); Maquinas.Add(maq); return(maq); } return(search); }
public List <Planificaçao> Generate() { var context = new MEDIRM.Modelos.MEDIRMContext(); var todasEncomendas = context.Encomendas.Where(x => x.Estado.ToLower() != "terminado"); foreach (var encomenda in todasEncomendas) { var todosArtigosdAsEncomendas = new List <Artigo>(); todosArtigosdAsEncomendas.AddRange(context.Artigoes.Where(x => x.Nome == encomenda.Artigo)); foreach (var compoartigos in todosArtigosdAsEncomendas) { var todosComponents = new List <ComponentesDosArtigo>(); todosComponents.AddRange(context.ComponentesDosArtigo.Where(x => x.Artigo == "1")); foreach (var components in todosComponents) { var maquina1 = ResourceFromMaquina(compoartigos.Maquina1); var maquina2 = ResourceFromMaquina(compoartigos.Maquina2); var maquina3 = ResourceFromMaquina(compoartigos.Maquina3); var maquina4 = ResourceFromMaquina(compoartigos.Maquina4); var maquina5 = ResourceFromMaquina(compoartigos.Maquina5); int currentProcessCount = 0; var artigo = context.Artigoes.FirstOrDefault(x => x.ID.ToString() == components.Artigo.ToString()); int qt = int.Parse(components.Quantidade); if (maquina1 != null) { currentProcessCount++; P1.Add(new Tarefa(maquina1, components, encomenda)); } if (maquina2 != null) { currentProcessCount++; P2.Add(new Tarefa(maquina2, components, encomenda)); } if (maquina3 != null) { currentProcessCount++; P3.Add(new Tarefa(maquina3, components, encomenda)); } if (maquina4 != null) { currentProcessCount++; P4.Add(new Tarefa(maquina4, components, encomenda)); } if (maquina5 != null) { currentProcessCount++; P5.Add(new Tarefa(maquina5, components, encomenda)); } } } } //P1 = OrderByGroup(P1); //P2 = OrderByGroup(P2); //P3 = OrderByGroup(P3); //P4 = OrderByGroup(P4); //P5 = OrderByGroup(P5); foreach (var turno in context.TurnosFuncionario) { if (turno.Turno1.ToLower() != "nenhum") { var plani = new Planificaçao(); plani.Turno = turno.Turno1; plani.DiaDaSemana = turno.DiaDaSemana; plani.Funcionario = context.Funcionarios.FirstOrDefault(x => x.Nome == turno.Funcionario); plan.Add(plani); } if (turno.Turno2.ToLower() != "nenhum") { var plani2 = new Planificaçao(); plani2.Turno = turno.Turno2; plani2.DiaDaSemana = turno.DiaDaSemana; plani2.Funcionario = context.Funcionarios.FirstOrDefault(x => x.Nome == turno.Funcionario); plan.Add(plani2); } if (turno.Turno3.ToLower() != "nenhum") { var plani3 = new Planificaçao(); plani3.Turno = turno.Turno3; plani3.DiaDaSemana = turno.DiaDaSemana; plani3.Funcionario = context.Funcionarios.FirstOrDefault(x => x.Nome == turno.Funcionario); plan.Add(plani3); } if (turno.Turno4.ToLower() != "nenhum") { var plani4 = new Planificaçao(); plani4.Turno = turno.Turno4; plani4.DiaDaSemana = turno.DiaDaSemana; plani4.Funcionario = context.Funcionarios.FirstOrDefault(x => x.Nome == turno.Funcionario); plan.Add(plani4); } } // Order Maquina1 //var group = P1.GroupBy(x => x.TipoMaquina); //Dictionary<string, int> lookup = new Dictionary<string, int>() // { // { "Segunda-feira" , 0 }, // { "Terca-feira" , 1 }, // { "Quarta-feira" , 2 }, // { "Quinta-feira" , 3 }, // { "Sexta-feira" , 4 }, // { "Sabado" , 4 }, // }; //// para cada maquina na Prioridade 1 //foreach (var maquina in group) //{ // var list = maquina.ToList(); // var tipo = maquina.Key; // var MaquinaTipo = context.Maquinas.FirstOrDefault(x => x.Tipo == tipo); // // Ordernado Tarefas por molde // var lPorMolde = list.GroupBy(x => x.Molde); // foreach (var molde in lPorMolde) // { // var tarefas = molde.ToList(); // var UnidadesTotal = tarefas.Sum(x => x.Quantidade); // var prodPorHora = int.Parse(string.IsNullOrEmpty(MaquinaTipo.Velocidade1) ? "1" : MaquinaTipo.Velocidade1); // var tempoTotal = UnidadesTotal / prodPorHora; // var produced = 0; // // ver que pessoas podem usar a maquina // foreach (var pessoasMaquinas in context.PessoasMaquinas) // { // var maq = context.Maquinas.FirstOrDefault(x => x.Nome == pessoasMaquinas.Maquina); // if (maq.Tipo != tipo) // continue; // // Primeira planificaçao que essa pessoa pode ter . // var planoFirst = plan.OrderBy(x => lookup[x.DiaDaSemana.ToLower()]).FirstOrDefault(x => x.Funcionario.Sigla == pessoasMaquinas.Funcionario && x.Maquina == null); // if (planoFirst == null) // { // break; // throw new Exception("NAO existem turnos disponiveis para esse funcionaro"); // } // produced += TurnoHoras(planoFirst.Turno); // // atribuir // planoFirst.Maquina = maq; // planoFirst.Molde = context.Moldes.FirstOrDefault(x => x.Designacao == maq.Molde); // while (produced < UnidadesTotal) // { // planoFirst = plan.OrderBy(x => lookup[x.DiaDaSemana.ToLower()]).FirstOrDefault(x => x.Funcionario.Sigla == pessoasMaquinas.Funcionario && x.Maquina == null); // if (planoFirst == null) // { // break; // throw new Exception("NAO existem turnos disponiveis para esse funcionaro"); // } // produced += TurnoHoras(planoFirst.Turno); // // atribuir // planoFirst.Maquina = maq; // planoFirst.Molde = context.Moldes.FirstOrDefault(x => x.Designacao == maq.Molde); // } // } // } //} return(plan); }
public void CreateProject() { this.context = new MEDIRM.Modelos.MEDIRMContext(); ResourcesNeeded = new List <GeneticResource>(); var todasEncomendas = context.Encomendas.Where(x => x.Estado.ToLower() != "terminado"); var Moldes = context.Maquinas.Select(x => x.Molde).ToArray(); List <GeneticResource> resources = new List <GeneticResource>(); foreach (var encomenda in todasEncomendas) { var artigo = encomenda.Artigo1; //todosArtigosdAsEncomendas.AddRange(context.Artigoes.Where(x => x. == encomenda.Artigo)); Maquina maquina1C, maquina2C, maquina3C, maquina4C, maquina5C = null; var task = new GeneticTask(encomenda); var maquina1 = ResourceFromMaquina(artigo.Maquina1, out maquina1C); var maquina2 = ResourceFromMaquina(artigo.Maquina2, out maquina2C); var maquina3 = ResourceFromMaquina(artigo.Maquina3, out maquina3C); var maquina4 = ResourceFromMaquina(artigo.Maquina4, out maquina4C); var maquina5 = ResourceFromMaquina(artigo.Maquina5, out maquina5C); int currentProcessCount = 0; if (maquina1 != null) { currentProcessCount++; task.Processes.Add(new GeneticTask.GeneticProcess(encomenda, maquina1, maquina1C)); } else { task.Processes.Add(GeneticTask.GeneticProcess.Empty); } if (maquina2 != null) { currentProcessCount++; task.Processes.Add(new GeneticTask.GeneticProcess(encomenda, maquina2, maquina2C)); } else { task.Processes.Add(GeneticTask.GeneticProcess.Empty); } if (maquina3 != null) { currentProcessCount++; task.Processes.Add(new GeneticTask.GeneticProcess(encomenda, maquina3, maquina3C)); } else { task.Processes.Add(GeneticTask.GeneticProcess.Empty); } if (maquina4 != null) { currentProcessCount++; task.Processes.Add(new GeneticTask.GeneticProcess(encomenda, maquina4, maquina4C)); } else { task.Processes.Add(GeneticTask.GeneticProcess.Empty); } if (maquina5 != null) { currentProcessCount++; task.Processes.Add(new GeneticTask.GeneticProcess(encomenda, maquina5, maquina5C)); } else { task.Processes.Add(GeneticTask.GeneticProcess.Empty); } if (currentProcessCount > MaxProcessCount) { MaxProcessCount = currentProcessCount; } Tasks.Add(task); } this.context = new MEDIRM.Modelos.MEDIRMContext(); }