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) { } } }
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)); } }
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); }
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); }