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