예제 #1
0
        // Método que realiza o monitoramento e executa as tarefas pendentes autorizadas
        public void monitorAndExecute(System.Diagnostics.EventLog log)
        {
            //string authToken = "uQLhVpS2kx2%2b95sRUwiq1uh8iRycp%2bWro6efT7eNTFM%3d";
            string authToken = "T%2bVgaQPEbcfz%2bMbQPMd38d2pU7wL678T4nHb%2b%2fQjNI8WeISiIPYYh%2f62AqV3Uo0%2b";
            List <AutomaticTask> tarefasAutorizadas = new Business.AutomaticTaskExecution().automaticTaskExecutionList();

            // Se tem tarefas autorizadas
            if (tarefasAutorizadas.Count > 0)
            {
                foreach (AutomaticTask at in tarefasAutorizadas)
                {
                    // Para cada tarefa autorizada por um usuário, verificar a existência destas tarefas em pendência de
                    // execução sob a responsabilidade do usuário que autorizou

                    // Chama query que consulta tarefas pendentes com o codTask e na responsabilidade do usuário em questão
                    List <Data.Task> pendingTasks = new Business.Task().getPendingTasks(at.CodUser, at.CodTask);

                    // Tem dessa tarefa em andamento?
                    // Se sim, // Chamar o apoio à decisão para a tarefa, assim chama uma vez só para várias
                    // Se não tem tarefa pendente, não há por que chamar trecho de apoio à decisão e nem de finalizar
                    if (pendingTasks.Count > 0)
                    {
                        // Número total de execuções da tarefa
                        int totalExecutions = getTotalExecutions(at.CodTask);

                        // Lista de resultados da tarefa
                        List <string> DsFlowResults = getTaskResults(at.CodTask);

                        // Número de possíveis resultados para a tarefa sendo analisada
                        int classCount = DsFlowResults.Count;

                        // Chama a árvore de decisão // TODO: Usar árvore serializada
                        Data.DecisionTree dTree = runDecisionSupport(at.CodTask, totalExecutions, classCount);

                        // Para cada tarefa autorizada e pendente com o usuário, chama o apoio a decisão e depois finaliza a tarefa
                        foreach (Data.Task t in pendingTasks)
                        {
                            // Pegar a sugestão de ação para a tarefa
                            string action = getActionSuggestion(dTree, t.CodFlowExecute);

                            // Cria o objeto de referência ao webservice
                            Instance.Instance inst = new Instance.Instance();
                            //FinalizeTask02 - Finaliza a tarefa
                            XmlNode xml = inst.FinalizeTask02(authToken, t.CodFlowExecuteTask, action, "");

                            if (log != null && xml.Name == "success")
                            {
                                log.WriteEntry("A Tarefa " + t.DsTask + " do processo " + t.CodFlowExecute.ToString() + " foi finalizada automaticamente com a opção " + action + ".");
                            }

                            if (xml.Name == "success")
                            {
                                // Notificar o usuário sobre a conclusão da tarefa
                                new Business.AutomaticTaskExecution().notifyAutomaticExecution(at.CodTask, at.CodUser, t.CodFlowExecute);
                            }
                        }
                    }
                }
            }
        }
예제 #2
0
        public void runDecisionSupport()
        {
            Data.Task t = new Business.Task().getTaskInfo(Convert.ToInt32(this.CodFlowExecuteTask));

            int codFlow        = t.CodFlow;        // Agendar aula de tênis
            int codTask        = t.CodTask;        // Informar se vai jogar tênis
            int codFlowExecute = t.CodFlowExecute; // Execução sendo verificada

            // Objeto DecisionSupport
            Business.DecisionSupport decisionSupport = new Business.DecisionSupport();

            // Número total de execuções da tarefa
            int totalExecutions = decisionSupport.getTotalExecutions(t.CodTask);

            // Lista de resultados da tarefa
            List <string> DsFlowResults = decisionSupport.getTaskResults(codTask);

            // Número de possíveis resultados para a tarefa sendo analisada
            int classCount = DsFlowResults.Count;

            if (classCount < 1)
            {
                classCount = 1;
            }

            // Se o total de execuções for maior que o número de resultados salvos em uma tarefa
            if (totalExecutions >= 2 * classCount)
            {
                Data.DecisionTree dTree = decisionSupport.runDecisionSupport(codTask, totalExecutions, classCount);

                this.Suggestion = decisionSupport.getActionSuggestion(dTree, t.CodFlowExecute);

                if (this.Suggestion == string.Empty || this.Suggestion == null)
                {
                    this.PhAlertResponseNull.Visible = true;
                    this.PhDecisionSupport.Visible   = false;
                }
                else
                {
                    this.Accuracy = decisionSupport.getAccuracy(dTree, t.CodFlowExecute);
                }
            }
            else
            {
                // Essa atividade não possui um número suficiente de execuções para sugerir uma ação.
                this.PhAlertCantSuggest.Visible = true;
                this.PhDecisionSupport.Visible  = false;
            }
        }
        //Gets the task details using a lamda query.
        public IActionResult OnGet(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            Task = _context.Task.FirstOrDefault(m => m.Id == id);

            if (Task == null)
            {
                return(NotFound());
            }
            return(Page());
        }
        //Removes the task
        public IActionResult OnPost(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            Task = (from task in _context.Task
                    where task.Id == id
                    select task).FirstOrDefault();

            if (Task != null)
            {
                _context.Task.Remove(Task);
                _context.SaveChanges();
            }

            return(RedirectToPage("./Index"));
        }