示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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();
        }