Beispiel #1
0
        private void btnCalcular_Click(object sender, EventArgs e)
        {
            try
            {
                if (texThreath.Text == "")
                {
                    MessageBox.Show("Por Favor digite el numero de hilos a usar del PC", "", MessageBoxButtons.OK);
                }
                else
                {
                    btnCalcular.Enabled = false;
                    progressBar.Value   = 0;
                    labelStatus.Text    = "Consultando Trabajo";
                    sw = Stopwatch.StartNew();


                    btnStop.Enabled  = true;
                    labelStatus.Text = "Procesando";

                    var data = _accountService.GetData();
                    CompletedData = new CompletedData
                    {
                        BalanceList       = new List <Balance>(),
                        Counter           = 1,
                        ProcessedAccounts = new List <MyAccount>(),
                        Total             = data.Count
                    };
                    _accountService.ProcessCompleted(int.Parse(texThreath.Text), CompletedData, data, SetVisibleByNewMethodInvoker);
                }
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.InnerException != null ? exception.InnerException.Message : exception.Message, "", MessageBoxButtons.OK);
            }
        }
Beispiel #2
0
        public void ProcessCompleted(int divider, CompletedData referenceData, List <Transaction> resp, UpdateStatusEventHandler call)
        {
            divider                   = divider == 0 ? 1 : divider;
            referenceData.Total       = resp.Count;
            referenceData.BalanceList = new List <Balance>();
            List <List <Transaction> > group = new List <List <Transaction> >();

            if (divider == 1)
            {
                group = new List <List <Transaction> > {
                    resp
                };
            }
            else
            {
                divider = divider - 1;

                var countByDivide = resp.Count / divider;

                int startIndex = 0;
                while (startIndex < resp.Count)
                {
                    var item = countByDivide;
                    if (startIndex + item > resp.Count)
                    {
                        item = (startIndex + item) - resp.Count;
                    }

                    group.Add(resp.Skip(startIndex).Take(item).ToList());
                    //processArray(group, startIndex, group.First().ThreadCount);
                    startIndex += countByDivide;
                }
                //group = Split(resp, divider);
            }



            _thread = new List <Thread>();
            var countert = 1;

            foreach (var array in group)
            {
                //Task task = Task.Factory.StartNew(() => ProcessArray(array));
                //tasks.Add(task);
                Thread myNewThread = new Thread(() => ProcessArray(array, referenceData, call));
                myNewThread.Priority = ThreadPriority.Highest;
                myNewThread.Name     = "Thread" + countert;
                _thread.Add(myNewThread);
            }

            foreach (var current in _thread)
            {
                current.Start();
            }
        }
Beispiel #3
0
        public void ProcessArray(List <Transaction> data, CompletedData referenceData, UpdateStatusEventHandler call)
        {
            try
            {
                foreach (var currentTransaction in data)
                {
                    var currentAccount = currentTransaction.CuentaOrigen;
                    var password       = "";
                    var current        = referenceData.ProcessedAccounts.FirstOrDefault(s => s.AccountNumber == currentAccount);
                    if (current == null)
                    {
                        password = _reconoserRepository.GetPasswordEncryptedAccount("usuariop", "passwordp", currentAccount);
                        referenceData.ProcessedAccounts.Add(new MyAccount
                        {
                            AccountNumber = currentAccount,
                            Password      = password
                        });
                    }
                    else
                    {
                        password = current.Password;
                    }

                    var currentMovement = DecriptData(password, currentTransaction.TipoTransaccion);

                    double saldoActual = -1;

                    //Obtenemos el saldo actual de la cuenta
                    foreach (var balance in referenceData.BalanceList)
                    {
                        if (currentAccount != balance.CuentaOrigen)
                        {
                            continue;
                        }
                        saldoActual = balance.SaldoCuenta;

                        double commission = CalculateComision(Convert.ToInt64(currentTransaction.ValorTransaccion));

                        if (currentMovement == "Debito")
                        {
                            balance.SaldoCuenta -= currentTransaction.ValorTransaccion;
                        }
                        else
                        {
                            balance.SaldoCuenta += currentTransaction.ValorTransaccion - commission;
                        }
                    }

                    //Si no encuentra lo inserta
                    if (saldoActual == -1)
                    {
                        var newBalance = new Balance();


                        double comision = CalculateComision(Convert.ToInt64(currentTransaction.ValorTransaccion));

                        newBalance.CuentaOrigen = currentAccount;
                        if (currentMovement == "Debito")
                        {
                            newBalance.SaldoCuenta -= currentTransaction.ValorTransaccion;
                        }
                        else
                        {
                            newBalance.SaldoCuenta += currentTransaction.ValorTransaccion - comision;
                        }

                        referenceData.BalanceList.Add(newBalance);
                    }

                    decimal percentage = 100 / referenceData.Total * referenceData.Counter;
                    referenceData.Counter++;
                    call(Math.Round(percentage, 2), "");
                }
            }
            catch (ThreadAbortException e)
            {
                call(0, e.Message);
            }

            catch (Exception e)
            {
                call(0, e.Message);
            }
        }