コード例 #1
0
        private bool ProcessECLRunTask()
        {
            var eclRegister = new EclRegister {
                EclType = -1
            };

            try
            {
                //return true;
                var retailEcls    = Queries.EclsRegister(EclType.Retail.ToString());
                var wholesaleEcls = Queries.EclsRegister(EclType.Wholesale.ToString());
                var obeEcls       = Queries.EclsRegister(EclType.Obe.ToString());

                var dtR = DataAccess.i.GetData(retailEcls);

                if (dtR.Rows.Count > 0)
                {
                    var itm = DataAccess.i.ParseDataToObject(new EclRegister(), dtR.Rows[0]);
                    itm.EclType = 0;
                    itm.eclType = EclType.Retail;
                    eclRegister = itm;
                }

                if (eclRegister.EclType == -1)
                {
                    var dtW = DataAccess.i.GetData(wholesaleEcls);

                    if (dtW.Rows.Count > 0)
                    {
                        var itm = DataAccess.i.ParseDataToObject(new EclRegister(), dtW.Rows[0]);
                        itm.EclType = 1;
                        itm.eclType = EclType.Wholesale;
                        eclRegister = itm;
                    }
                }
                if (eclRegister.EclType == -1)
                {
                    var dtO = DataAccess.i.GetData(obeEcls);
                    if (dtO.Rows.Count > 0)
                    {
                        var itm = DataAccess.i.ParseDataToObject(new EclRegister(), dtO.Rows[0]);
                        itm.EclType = 2;
                        itm.eclType = EclType.Obe;
                        eclRegister = itm;
                    }
                }

                if (eclRegister.EclType == -1)
                {
                    Log4Net.Log.Info("Found No Pending ECL");
                    return(true);
                }

                var qry  = Queries.UpdateGuidTableServiceId($"{eclRegister.eclType.ToString()}Ecls", this.serviceId, eclRegister.Id);
                var resp = DataAccess.i.ExecuteQuery(qry);

                if (resp == 0)
                {
                    Log4Net.Log.Info($"Another service has picked ECL with ID {eclRegister.Id} of Type [{eclRegister.eclType.ToString()}].");
                    return(true);
                }

                qry = Queries.UpdateEclStatus(eclRegister.eclType.ToString(), eclRegister.Id.ToString(), 6, "");
                DataAccess.i.ExecuteQuery(qry);
                var eclType = eclRegister.eclType;
                Log4Net.Log.Info($"Found ECL with ID {eclRegister.Id} of Type [{eclType.ToString()}]. Running will commence if it has not been picked by another Job");

                LifetimeEadWorkings lifetimeEadWorkings = new LifetimeEadWorkings(eclRegister.Id, eclType);
                var loanbook_data     = lifetimeEadWorkings.GetLoanBookDataRaw();
                var payment_Schedules = lifetimeEadWorkings.GetPaymentScheduleRaw();

                var batchCount = Math.Ceiling(Convert.ToDecimal(loanbook_data.Count) / 1000.0M);

                for (int i = 0; i < batchCount; i++)
                {
                    GenerateLoanBookFile(i, loanbook_data.Skip(i * 1000).Take(1000).ToList(), payment_Schedules, eclRegister.OrganizationUnitId, eclRegister.Id);
                }


                var eadParam       = BuildEADParameter(eclRegister.Id, eclRegister.ReportingDate, eclType);
                var lgdParam       = BuildLGDParameter(eclRegister.Id, eclRegister.ReportingDate, eclType);
                var pdParam        = BuildPDParameter(eclRegister.Id, eclRegister.ReportingDate, eclType);
                var frameworkParam = BuildFrameworkParameter(eclRegister.Id, eclRegister.ReportingDate, eclType);


                var counter      = 0;
                var taskList     = new List <Task>();
                var tskStatusLst = new List <TaskStatus> {
                    TaskStatus.RanToCompletion, TaskStatus.Faulted
                };

                //while (counter < batchCount)
                //{

                //    var batchContracts = loanbook_data.Skip(counter * 1000).Take(1000).ToList();
                //    var task1 = Task.Run(() =>
                //    {
                //        RunECL(batchContracts, counter, eclRegister.OrganizationUnitId, eclRegister.Id, eclType, eadParam, lgdParam, pdParam, frameworkParam);
                //    });
                //    taskList.Add(task1);

                //    while (taskList.Where(o => !tskStatusLst.Contains(o.Status)).Count() >= 5)
                //    {
                //        //do nothing
                //    }
                //    counter = counter + 1;
                //}

                for (int i = 0; i < batchCount; i++)
                {
                    var batchContracts = loanbook_data.Skip(i * 1000).Take(1000).ToList();
                    RunECL(batchContracts, i, eclRegister.OrganizationUnitId, eclRegister.Id, eclType, eadParam, lgdParam, pdParam, frameworkParam);
                }

                qry = Queries.UpdateEclStatus(eclRegister.eclType.ToString(), eclRegister.Id.ToString(), 5, "");
                DataAccess.i.ExecuteQuery(qry);


                Log4Net.Log.Info($"Start Time {DateTime.Now}");
            }
            catch (Exception ex)
            {
            }


            return(true);
        }
コード例 #2
0
ファイル: Core.cs プロジェクト: Olabode33/EclComputeEngine
        private bool ProcessECLRunTask()
        {
            var eclRegister = new EclRegister {
                EclType = -1
            };

            try
            {
                //return true;
                var retailEcls    = Queries.EclsRegister(EclType.Retail.ToString());
                var wholesaleEcls = Queries.EclsRegister(EclType.Wholesale.ToString());
                var obeEcls       = Queries.EclsRegister(EclType.Obe.ToString());

                var dtR = DataAccess.i.GetData(retailEcls);

                if (dtR.Rows.Count > 0)
                {
                    var itm = DataAccess.i.ParseDataToObject(new EclRegister(), dtR.Rows[0]);
                    itm.EclType = 0;
                    itm.eclType = EclType.Retail;
                    eclRegister = itm;
                }

                if (eclRegister.EclType == -1)
                {
                    var dtW = DataAccess.i.GetData(wholesaleEcls);

                    if (dtW.Rows.Count > 0)
                    {
                        var itm = DataAccess.i.ParseDataToObject(new EclRegister(), dtW.Rows[0]);
                        itm.EclType = 1;
                        itm.eclType = EclType.Wholesale;
                        eclRegister = itm;
                    }
                }
                if (eclRegister.EclType == -1)
                {
                    var dtO = DataAccess.i.GetData(obeEcls);
                    if (dtO.Rows.Count > 0)
                    {
                        var itm = DataAccess.i.ParseDataToObject(new EclRegister(), dtO.Rows[0]);
                        itm.EclType = 2;
                        itm.eclType = EclType.Obe;
                        eclRegister = itm;
                    }
                }

                if (eclRegister.EclType == -1)
                {
                    Log4Net.Log.Info("Found No Pending ECL");
                    return(true);
                }

                var qry  = Queries.UpdateGuidTableServiceId($"{eclRegister.eclType.ToString()}Ecls", this.serviceId, eclRegister.Id);
                var resp = DataAccess.i.ExecuteQuery(qry);

                if (resp == 0)
                {
                    Log4Net.Log.Info($"Another service has picked ECL with ID {eclRegister.Id} of Type [{eclRegister.eclType.ToString()}].");
                    return(true);
                }

                qry = Queries.UpdateEclStatus(eclRegister.eclType.ToString(), eclRegister.Id.ToString(), 6, "");
                DataAccess.i.ExecuteQuery(qry);
                var eclType = eclRegister.eclType;
                Log4Net.Log.Info($"Found ECL with ID {eclRegister.Id} of Type [{eclType.ToString()}]. Running will commence if it has not been picked by another Job");



                var masterGuid = eclRegister.Id;//Guid.NewGuid();

                LifetimeEadWorkings lifetimeEadWorkings = new LifetimeEadWorkings(masterGuid, eclType);
                var loanbook_data = lifetimeEadWorkings.GetLoanBookData();

                //masterGuid = Guid.Parse("23f61e5f-46aa-4f33-aab0-08d844eaa419");
                Log4Net.Log.Info($"Start Time {DateTime.Now}");



                //new ProcessECL_Framework(masterGuid, eclType).ProcessResultDetails(loanbook_data);



                // return true; ;


                var overrideExist = false;
                if (eclRegister.Status == 12)
                {
                    overrideExist = CheckOverrideDataExist(masterGuid, eclType);
                    if (!overrideExist)
                    {
                        qry = Queries.UpdateEclStatus(eclRegister.eclType.ToString(), eclRegister.Id.ToString(), 5, "No Override data found");
                        DataAccess.i.ExecuteQuery(qry);
                        Log4Net.Log.Info("No Override Data Found. Task concluded and exited");
                        return(true);
                    }
                    else
                    {
                        qry = Queries.UpdateEclStatus(eclRegister.eclType.ToString(), eclRegister.Id.ToString(), 7, "Running Overrides");
                        DataAccess.i.ExecuteQuery(qry);
                        Log4Net.Log.Info("Running Overrides");
                    }
                }



                var new_loanbook_data = loanbook_data;// new List<Loanbook_Data>();
                //var distinctContracts = loanbook_data.Select(o => o.ContractId).Distinct().ToList();
                //foreach (var contract in distinctContracts)
                //{
                //    var new_contract = loanbook_data.LastOrDefault(o => o.ContractId == contract);
                //    new_contract.OutstandingBalanceLCY = loanbook_data.Where(o => o.ContractId == contract).Sum(o => o.OutstandingBalanceLCY);
                //    loanbook_data.Add(new_contract);
                //}

                if (!overrideExist) //1!=1)//
                {
                    // Process EAD
                    new ProcessECL_EAD(masterGuid, eclType).ProcessTask(new_loanbook_data);
                    qry = Queries.UpdateEclStatus(eclRegister.eclType.ToString(), eclRegister.Id.ToString(), 6, "");
                    DataAccess.i.ExecuteQuery(qry);

                    //Exporting Reports
                    //var _rpt = new ExcelReport().GenerateResult(masterGuid.ToString(), new List<LifetimeEad>(), new List<LifetimeLgd>());
                    //return true;

                    //Process LGD
                    new ProcessECL_LGD(masterGuid, eclType).ProcessTask(new_loanbook_data);
                    qry = Queries.UpdateEclStatus(eclRegister.eclType.ToString(), eclRegister.Id.ToString(), 7, "");
                    DataAccess.i.ExecuteQuery(qry);

                    //Process PD
                    new ProcessECL_PD(masterGuid, eclType).ProcessTask(new_loanbook_data);
                    qry = Queries.UpdateEclStatus(eclRegister.eclType.ToString(), eclRegister.Id.ToString(), 7, ""); // should change to framekwork
                    DataAccess.i.ExecuteQuery(qry);
                }

                //Process Framework

                var taskLst = new List <Task>();

                var cummulativeDiscountFactor = new IrFactorWorkings(masterGuid, eclType).ComputeCummulativeDiscountFactor();

                var eadInput = new LifetimeEadWorkings(masterGuid, eclType).GetTempEadInputData(new_loanbook_data);

                var lifetimeEad = new LifetimeEadWorkings(masterGuid, eclType).ComputeLifetimeEad(new_loanbook_data, eadInput);


                var stageClassification = GetStagingClassificationResult(new_loanbook_data, masterGuid, eclType);

                var lifetimeLGD = new ScenarioLifetimeLGD(masterGuid, eclType, ECL_Scenario.Best).ComputeLifetimeLGD(new_loanbook_data, lifetimeEad, eadInput, stageClassification);

                var task1 = Task.Run(() =>
                {
                    var _lifetimeLGD = lifetimeLGD.Where(o => o.Ecl_Scenerio == ECL_Scenario.Best).ToList();
                    Log4Net.Log.Info("************Processing Final Best");
                    new ProcessECL_Framework(masterGuid, ECL_Scenario.Best, eclType).ProcessTask(new_loanbook_data, lifetimeEad, _lifetimeLGD, cummulativeDiscountFactor, eadInput, stageClassification, overrideExist);
                });
                taskLst.Add(task1);
                var task2 = Task.Run(() =>
                {
                    var _lifetimeLGD = lifetimeLGD.Where(o => o.Ecl_Scenerio == ECL_Scenario.Optimistic).ToList();
                    Log4Net.Log.Info("*************Processing Final Optimistic");
                    new ProcessECL_Framework(masterGuid, ECL_Scenario.Optimistic, eclType).ProcessTask(new_loanbook_data, lifetimeEad, _lifetimeLGD, cummulativeDiscountFactor, eadInput, stageClassification, overrideExist);
                });
                taskLst.Add(task2);
                var task3 = Task.Run(() =>
                {
                    var _lifetimeLGD = lifetimeLGD.Where(o => o.Ecl_Scenerio == ECL_Scenario.Downturn).ToList();
                    Log4Net.Log.Info("*************Processing Final Down turn");
                    new ProcessECL_Framework(masterGuid, ECL_Scenario.Downturn, eclType).ProcessTask(new_loanbook_data, lifetimeEad, _lifetimeLGD, cummulativeDiscountFactor, eadInput, stageClassification, overrideExist);
                });
                taskLst.Add(task3);


                var tskStatusLst = new List <TaskStatus> {
                    TaskStatus.RanToCompletion, TaskStatus.Faulted
                };
                while (0 < 1)
                {
                    if (taskLst.All(o => tskStatusLst.Contains(o.Status)))
                    {
                        foreach (var itm in taskLst)
                        {
                            if (itm.Status != TaskStatus.RanToCompletion)
                            {
                                Log4Net.Log.Info("Did not run to Completion");
                                Log4Net.Log.Error(itm.Exception);
                            }
                            else
                            {
                                Log4Net.Log.Info("Ran to Completion");
                            }
                        }
                        break;
                    }
                    //Do Nothing
                }

                //Task t = Task.WhenAll(taskLst);

                //try
                //{
                //    t.Wait();
                //}
                //catch (Exception ex)
                //{
                //    Log4Net.Log.Error(ex);
                //}
                //Log4Net.Log.Info($"All Task status: {t.Status}");

                //if (t.Status == TaskStatus.RanToCompletion)
                //{
                //    Log4Net.Log.Info($"All Task ran to completion");
                //}
                //if (t.Status == TaskStatus.Faulted)
                //{
                //    Log4Net.Log.Info($"All Task ran to fault");
                //}


                new ProcessECL_Framework(masterGuid, eclType).ProcessResultDetails(new_loanbook_data, overrideExist);


                if (!overrideExist)
                {
                    qry = Queries.UpdateEclStatus(eclRegister.eclType.ToString(), eclRegister.Id.ToString(), 4, "");
                    DataAccess.i.ExecuteQuery(qry);
                }
                else
                {
                    qry = Queries.UpdateEclStatus(eclRegister.eclType.ToString(), eclRegister.Id.ToString(), 5, "");
                    DataAccess.i.ExecuteQuery(qry);
                }
                Log4Net.Log.Info($"Main Task Completed. Report output to start {DateTime.Now}");
                //Exporting Reports
                var rpt = new ExcelReport().GenerateResult(masterGuid.ToString(), lifetimeEad, lifetimeLGD);

                //Delete Logs in table
                //qry = Queries.ClearAllEclLogs(eclRegister.eclType.ToString(), eclRegister.Id.ToString());
                //DataAccess.i.ExecuteQuery(qry);

                Log4Net.Log.Info($"End Time {DateTime.Now}");
                return(true);
            }
            catch (Exception ex)
            {
                Log4Net.Log.Error(ex);
                var qry = Queries.UpdateEclStatus(eclRegister.eclType.ToString(), eclRegister.Id.ToString(), 13, ex.ToString());
                DataAccess.i.ExecuteQuery(qry);
            }
            return(true);
        }