コード例 #1
0
        public void AddProfessor20p(List <CursoProfessor> _cursoProfessor, List <ProfessorCursoEmec20p> _listaProfessor20p, Dictionary <long?, PrevisaoSKU> _dicPrevisao, ParametrosCenso _param, List <string> _listaEnade)
        {
            // Controle de Uso
            Dictionary <long, int> listaUsoProfessor = new Dictionary <long, int>();
            // Adiciona os professores 20% nos cursos

            Dictionary <string, string> dicEnade = new Dictionary <string, string>();

            dicEnade = _listaEnade.ToDictionary(x => x);

            foreach (var emec in _listaProfessor20p)
            {
                try
                {
                    if (dicEnade.ContainsKey(emec.CodEmec.ToString()))
                    {
                        var codEmec = emec.CodEmec;
                        var qtd     = (_cursoProfessor.Find(x => x.CodEmec == codEmec) != null) ?
                                      _cursoProfessor
                                      .Find(x => x.CodEmec == codEmec)
                                      .Professores
                                      .Where(x => x.cpfProfessor == emec.CpfProfessor).Count() :
                                      0
                        ;

                        if (qtd < 1)
                        {
                            var curso = _cursoProfessor.Find(x => x.CodEmec == emec.CodEmec);

                            if (curso != null)
                            {
                                var _prof = new ProfessorEmec {
                                    Ativo        = emec.IndAtivo,
                                    cpfProfessor = emec.CpfProfessor,
                                    Regime       = emec.Regime,
                                    Titulacao    = emec.Titulacao
                                };


                                if (curso.Professores.Where(x => x.cpfProfessor == emec.CpfProfessor).Count() < 1 &
                                    AddProfessor(_cursoProfessor, curso, _dicPrevisao, _prof)
                                    & (listaUsoProfessor.TryGetValue(emec.CpfProfessor, out int dic) ? dic : 0) < _param.usoProfessor)
                                {
                                    curso.Professores.Add(_prof);

                                    // Adciona controle de adição de professores
                                    if (listaUsoProfessor.ContainsKey(emec.CpfProfessor))
                                    {
                                        listaUsoProfessor[emec.CpfProfessor] += 1;
                                    }
                                    else
                                    {
                                        listaUsoProfessor.Add(emec.CpfProfessor, 1);
                                    }
                                }
                            }
                        }
                    }
                }

                catch (System.Exception ex)
                {
                }
            }
        }
コード例 #2
0
        public async Task <IActionResult> Otimizar([FromBody] ParametrosCenso _formulario)
        {
            this.Formulario = _formulario;

            Stopwatch sw = new Stopwatch();

            sw.Start();

            var TaskEnade = await Task.Run(() => {
                return(this.Context.CursoCenso.ToList());
            });

            var ResId = Convert.ToInt64(DateTime.Now.ToString("yyyyMMddHHmmss"));

            try
            {
                var query = await this.Context.ProfessorCursoEmec.ToListAsync();

                var query20p = await this.Context.ProfessorCursoEmec20p.ToListAsync();

                var ListaCursoArea = await this.CursoEnquadramentoContext.CursoEnquadramento.ToListAsync();

                var ListaPrevisaoSKU = GeraListaPrevisaoSKU();

                var Cursoprofessor = MontaCursoProfessor(query, ListaCursoArea);

                // // Obtem lista dos professores escolhidos no filtro
                var lista = _formulario.MontaLista();

                List <CursoProfessor> cursoProfessorAtual = new List <CursoProfessor>();
                Cursoprofessor.ForEach((item) => {
                    cursoProfessorAtual.Add((CursoProfessor)item.Clone());
                }
                                       );

                var CursoNota = getNotaCursos(query, ListaCursoArea);

                var CursoEnade = TaskEnade.Where(x => x.IndEnade.Contains('S')).Select(c => c.CodEmec.ToString()).Distinct().ToList();

                List <Resultado> ResultadoAtual = Otm.CalculaNotaCursos(ListaPrevisaoSKU, cursoProfessorAtual, CursoEnade);

                // ######################## Alavanca 20% ######################## //

                if (_formulario.otimiza20p)
                {
                    Otm.AddProfessor20p(Cursoprofessor, query20p, ListaPrevisaoSKU, _formulario, CursoEnade);
                }

                List <Resultado> resultado = Otm.OtimizaCurso(ListaPrevisaoSKU, query, Cursoprofessor, ListaCursoArea, _formulario);

                // ############## Monta resultados a partir do cenário otimizado ################# //

                var Resumoresultado = Otm.MontaResultadoFinal(resultado);

                var ResumoresultadoAtual = Otm.MontaResultadoFinal(ResultadoAtual);


                sw.Stop();

                // ############ Monta Objeto resultado Otimizado ############## //
                Task <string> json = Task.Run(
                    () => {
                    return(JsonConvert.SerializeObject(resultado));
                }
                    );

                Task <string> formJson = Task.Run(
                    () => {
                    return(JsonConvert.SerializeObject(_formulario));
                }
                    );

                Task <string> resumoJson = Task.Run(
                    () => {
                    return((string)JsonConvert.SerializeObject(Resumoresultado));
                }
                    );

                Task <string> professorJson = Task.Run(
                    () => {
                    return(JsonConvert.SerializeObject(Cursoprofessor));
                }
                    );


                // ############ Monta Objeto resultado Atual ############## //
                Task <string> jsonAt = Task.Run(
                    () => {
                    return(JsonConvert.SerializeObject(ResultadoAtual));
                }
                    );

                Task <string> formJsonAt = Task.Run(
                    () => {
                    return(JsonConvert.SerializeObject(_formulario));
                }
                    );

                Task <string> resumoJsonAt = Task.Run(
                    () => {
                    return((string)JsonConvert.SerializeObject(ResumoresultadoAtual));
                }
                    );

                Task <string> professorJsonAt = Task.Run(
                    () => {
                    return(JsonConvert.SerializeObject(cursoProfessorAtual));
                }
                    );

                var objRes = new TbResultado();
                objRes.Id = ResId;

                var objResAtual = new TbResultadoAtual();
                objResAtual.Id = ResId;


                Task.WaitAll(json, formJson, resumoJson, professorJson);
                Task.WaitAll(jsonAt, formJsonAt, resumoJsonAt, professorJsonAt);

                objRes.Resultado     = json.Result;
                objRes.Parametro     = formJson.Result;
                objRes.Resumo        = resumoJson.Result;
                objRes.Professores   = professorJson.Result;
                objRes.TempoExecucao = DateTime.Now.ToString("HH:mm:ss");
                objRes.Observacao    = _formulario.Observacao;

                objResAtual.Resultado   = jsonAt.Result;
                objResAtual.Parametro   = formJsonAt.Result;
                objResAtual.Resumo      = resumoJsonAt.Result;
                objResAtual.Professores = professorJsonAt.Result;

                ProducaoContext.Add(objRes);
                ProducaoContext.Add(objResAtual);

                ProducaoContext.SaveChanges();

                return(Ok());
            }
            catch (System.Exception e)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, "Erro no processamento." + e.Message));
            }
        }
コード例 #3
0
        public List <Resultado> OtimizaCurso(Dictionary <long?, PrevisaoSKU> _dicPrevisao,
                                             List <ProfessorCursoEmec> _ListaProfessorEmec,
                                             List <CursoProfessor> _listaProfessor,
                                             List <CursoEnquadramento> _listaCursoEnquadramento,
                                             ParametrosCenso _parametros)
        {
            var cargaDS = this.CargaContext.CargaDS
                          .ToDictionary(x => x.CpfProfessor);
            var cargaFS = this.CargaContext.CargaFS
                          .ToDictionary(x => x.CpfProfessor);

            ListaprofessorCurso = new List <ProfessorCurso>();

            var TaskEnade = Task.Run(() => {
                return(this.Context.CursoCenso.ToList());
            });

            // Monta Relação Professor Curso ####################

            foreach (var curso in _listaProfessor)
            {
                foreach (var prof in curso.Professores)
                {
                    // Professor novo na lista
                    if (this.ListaprofessorCurso.Where(x => x.cpfProfessor == prof.cpfProfessor.ToString()).Count() == 0)
                    {
                        professorCurso = new ProfessorCurso();
                        professorCurso.cpfProfessor = prof.cpfProfessor.ToString();
                        professorCurso.strCursos.Add(curso.CodEmec.ToString());

                        ListaprofessorCurso.Add(professorCurso);
                        professorCurso = null;
                    }

                    //  Adicionando curso ao professor
                    else
                    {
                        professorCurso = ListaprofessorCurso.FirstOrDefault(x => x.cpfProfessor == prof.cpfProfessor.ToString());
                        if (!professorCurso.strCursos.Contains(curso.CodEmec.ToString()))
                        {
                            professorCurso.strCursos.Add(curso.CodEmec.ToString());
                        }
                    }
                }
            }

            // ############## Alavanca Curso não Enade ############
            // ####################################################

            Task.WaitAll(TaskEnade);

            var CursoEnade    = TaskEnade.Result;
            var CursoNaoEnade = CursoEnade.Where(x => x.IndEnade.Contains('N')).Select(c => c.CodEmec.ToString()).Distinct().ToList();
            var CursoSimEnade = CursoEnade.Where(x => x.IndEnade.Contains('S')).Select(c => c.CodEmec.ToString()).Distinct().ToList();


            foreach (var item in _listaProfessor)
            {
                item.Professores.RemoveAll(pe =>
                                           RemoveProfessor(_listaProfessor, item, _dicPrevisao, pe, "S") &&
                                           _listaProfessor.Where(cp => cp.Professores
                                                                 .Where(p => p.cpfProfessor == pe.cpfProfessor).Count() > 0)
                                           .Select(cp => cp.CodEmec)
                                           .ToList()
                                           .Exists(x => CursoNaoEnade.Contains(x.ToString()) &&
                                                   CursoSimEnade.Contains(item.CodEmec.ToString()))
                                           );
            }
            ;

            // ######################## Alavanca Colaborador ######################## //

            foreach (var item in _listaProfessor)
            {
                item.Professores.RemoveAll(pe => (RemoveProfessor(_listaProfessor, item, _dicPrevisao, pe) &&
                                                  pe.Regime == "HORISTA" &&
                                                  ((cargaDS.TryGetValue(pe.cpfProfessor.ToString(), out var ds) ? ds.QtdHoras : 0) +
                                                   (cargaFS.TryGetValue(pe.cpfProfessor.ToString(), out var fs) ? fs.QtdHoras : 0)) < 8
                                                  ));
            }
            ;


            // ######################## Alavanca Excluído Ofensor ######################## //


            foreach (var item in _listaProfessor)
            {
                item.Professores.RemoveAll(pe => (RemoveProfessorExcluido(_listaProfessor, item, _dicPrevisao, pe) &&
                                                  pe.Ativo == "NÃO"
                                                  ));
            }
            ;


            // ######################## Limpeza força bruta ######################## //

            foreach (var item in _listaProfessor)
            {
                item.Professores.RemoveAll(pe => (RemoveProfessor(_listaProfessor, item, _dicPrevisao, pe, "N")
                                                  ));
            }
            ;


            var final = CalculaNotaCursos(_dicPrevisao, _listaProfessor, CursoSimEnade);

            return(final);
        }
コード例 #4
0
        public List <Resultado> OtimizaCurso(Dictionary <long?, PrevisaoSKU> _dicPrevisao,
                                             List <ProfessorCursoEmec> _ListaProfessorEmec,
                                             List <CursoProfessor> _listaProfessor,
                                             List <CursoEnquadramento> _listaCursoEnquadramento,
                                             ParametrosCenso _parametros)
        {
            var cargaDS = this.CargaContext.CargaDS
                          .ToDictionary(x => x.CpfProfessor);
            var cargaFS = this.CargaContext.CargaFS
                          .ToDictionary(x => x.CpfProfessor);

            ListaprofessorCurso = new List <ProfessorCurso>();

            var TaskEnade = Task.Run(() => {
                return(this.Context.CursoCenso.ToList());
            });

            var ListaProfessorAdd = this.ProfessorAddContext.Professor.ToList();



            // ############## Alavanca Curso não Enade ############
            // ####################################################

            Task.WaitAll(TaskEnade);

            var CursoEnade    = TaskEnade.Result;
            var CursoNaoEnade = CursoEnade.Where(x => x.IndEnade.Contains('N')).Select(c => c.CodEmec.ToString()).Distinct().ToList();
            var CursoSimEnade = CursoEnade.Where(x => x.IndEnade.Contains('S')).Select(c => c.CodEmec.ToString()).Distinct().ToList();


            foreach (var item in _listaProfessor)
            {
                item.Professores.RemoveAll(pe =>
                                           RemoveProfessor(_listaProfessor, item, _dicPrevisao, pe, "S") &&
                                           _listaProfessor.Where(cp => cp.Professores
                                                                 .Where(p => p.cpfProfessor == pe.cpfProfessor).Count() > 0)
                                           .Select(cp => cp.CodEmec)
                                           .ToList()
                                           .Exists(x => CursoNaoEnade.Contains(x.ToString()) &&
                                                   CursoSimEnade.Contains(item.CodEmec.ToString()))
                                           );
            }
            ;


            // ######################## Alavanca Colaborador ######################## //

            foreach (var item in _listaProfessor)
            {
                item.Professores.RemoveAll(pe => (RemoveProfessor(_listaProfessor, item, _dicPrevisao, pe) &&
                                                  pe.Regime == "HORISTA" &&
                                                  ((cargaDS.TryGetValue(pe.cpfProfessor.ToString(), out var ds) ? ds.QtdHoras : 0) +
                                                   (cargaFS.TryGetValue(pe.cpfProfessor.ToString(), out var fs) ? fs.QtdHoras : 0)) < 8
                                                  ));
            }
            ;

            // ######################## Alavanca Excluído Ofensor ######################## //


            foreach (var item in _listaProfessor)
            {
                item.Professores.RemoveAll(pe => (RemoveProfessorExcluido(_listaProfessor, item, _dicPrevisao, pe) &&
                                                  pe.Ativo == "NÃO"
                                                  ));
            }
            ;



            // ######################## Limpeza força bruta ######################## //

            foreach (var item in _listaProfessor)
            {
                item.Professores.RemoveAll(pe => (RemoveProfessor(_listaProfessor, item, _dicPrevisao, pe, "N") &&
                                                  (CalculaNota(item, _dicPrevisao, pe.Regime, pe.Titulacao) ?? 0) < 1.945
                                                  ));
            }
            ;


            // ##################### Black List ############################### //

            // ProfessorBlaklist

            // foreach(var item in _listaProfessor)
            // {

            //         item.Professores.RemoveAll(pe =>
            //                             (RemoveProfessorBlackList(_listaProfessor, item, _dicPrevisao, pe)
            //                      ));

            //  };

            // #####################   Alavancas  ########################## //
            // Remove professor Cenário 2 - Hoper

            /*
             *
             *  HashSet<long> CursoExcluir =  new HashSet<long>()
             *      {
             *
             *
             *  };
             *
             *  foreach (var item in _listaProfessor)
             *  {
             *
             *      if (CursoExcluir.Contains(item.CodEmec))
             *      {
             *          int removido= 0;
             *          double meta = Math.Floor(item.Professores.Count() * 0.3);
             *          int qtdAnterior = item.Professores.Count();
             *
             *
             *          // item.Professores.RemoveAll(pe =>
             *
             *          //     RemoveProfessor30Perc(_listaProfessor, item, _dicPrevisao, pe, meta, qtdAnterior)
             *          //                 );
             *
             *
             *           foreach (var pe in item.Professores)
             *          {
             *                 if (RemoveProfessor30Perc(_listaProfessor, item, _dicPrevisao, pe, meta, qtdAnterior) &&
             *                  meta > removido)
             *                 {
             *                     pe.ind_remover = "S";
             *                     removido++;
             *                 }
             *          }
             *
             *          item.Professores.RemoveAll(pe => pe.ind_remover == "S");
             *
             *      }
             *
             *  }
             */


            // ##################### Professor Adicionado ############################### //


            try
            {
                ProfessorEmec professorEmec;
                foreach (var item in ListaProfessorAdd)
                {
                    CursoProfessor curso;

                    if (_listaProfessor.Where(x => x.CodEmec == item.CodEmec).Count() < 1)
                    {
                        CursoProfessor Cr = new CursoProfessor();
                        Cr.CodEmec        = item.CodEmec;
                        Cr.CodArea        = 9999;
                        curso             = Cr;
                        curso.Professores = new List <ProfessorEmec>();
                        _listaProfessor.Add(curso);
                    }

                    curso = _listaProfessor.First(x => x.CodEmec == item.CodEmec);
                    var prof = _ListaProfessorEmec.Where(x => x.CpfProfessor == item.CpfProfessor);
                    if (prof.Count() != 0)
                    {
                        var profi = prof.First();
                        professorEmec = new ProfessorEmec();
                        professorEmec.cpfProfessor = profi.CpfProfessor;
                        professorEmec.Regime       = profi.Regime;
                        professorEmec.Titulacao    = profi.Titulacao;
                        professorEmec.Ativo        = profi.IndAtivo;

                        curso.Professores.Add(professorEmec);
                    }

                    else
                    {
                        // Criando professor que não está na curso professor

                        professorEmec = new ProfessorEmec();
                        professorEmec.cpfProfessor = item.CpfProfessor;
                        professorEmec.Regime       = "TEMPO INTEGRAL";
                        professorEmec.Titulacao    = "DOUTOR";
                        professorEmec.Ativo        = "SIM";
                        curso.Professores.Add(professorEmec);
                    }

                    prof = null;

                    curso = null;
                }
                ;
            }
            catch (System.Exception ex)
            {
            }



            var final = CalculaNotaCursos(_dicPrevisao, _listaProfessor, CursoSimEnade);

            return(final);
        }