private void Producer() { EtzbkDataContext db = new EtzbkDataContext(); List <E_TRANSACTION> etzTrx = db.E_TRANSACTION.Where(a => a.TRANS_CODE == "P" && (a.PROCESS_STATUS == "0" || a.PROCESS_STATUS == null)).Take(Settings.number_of_record_perround).ToList(); try { Parallel.ForEach(etzTrx, item => { bool successful = DataManupulation.CheckTransactionStatusOnTMC(item.UNIQUE_TRANSID, item.TRANS_CODE); if (successful) { enqueData.Add(item); Console.WriteLine("Equeued Payment Data " + item.UNIQUE_TRANSID); } else { itemsToRemove.Add(item); } }); } catch (Exception ex) { Logger logger = new Logger(); Console.WriteLine("Exception from " + System.Reflection.MethodBase.GetCurrentMethod().Name + " " + ExceptionExtensions.GetFullMessage(ex)); logger.LogInfoMessage(nameof(PaymentProducer) + " " + ExceptionExtensions.GetFullMessage(ex)); } enqueData.CompleteAdding(); DataManupulation.RemoveTransactionFromSettlement(itemsToRemove); DataManupulation.UpdateTransactionAsProcccessed(etzTrx); }
private static void Producer() { EtzbkDataContext db = new EtzbkDataContext(); var etzTrx = db.E_TRANSACTION.ToList(); Parallel.ForEach(etzTrx, item => { // Check TMC if transaction has been reversed. bool successful = CheckTransactionStatusOnTMC(item.UNIQUE_TRANSID, item.TRANS_CODE); if (successful) { enqueData.Add(item); } else { itemsToRemove.Add(item); } }); db.E_TRANSACTION.RemoveRange(itemsToRemove); }
public static void RemoveTransactionFromSettlement(List <E_TRANSACTION> itemsToRemove) { using (EtzbkDataContext etz = new EtzbkDataContext()) { etz.E_TRANSACTION.AddRange(itemsToRemove); //etz.Entry(itemsToRemove).State = System.Data.Entity.EntityState.Deleted; itemsToRemove.ForEach(p => etz.Entry(p).State = EntityState.Deleted); etz.E_TRANSACTION.RemoveRange(itemsToRemove); bool saveFailed; do { saveFailed = false; try { etz.SaveChanges(); } catch (DbUpdateConcurrencyException ex) { saveFailed = true; ex.Entries.Single().Reload(); Console.WriteLine(nameof(DataManupulation) + " " + ExceptionExtensions.GetFullMessage(ex)); logger.LogInfoMessage(nameof(DataManupulation) + " " + System.Reflection.MethodBase.GetCurrentMethod().Name + " " + ExceptionExtensions.GetFullMessage(ex)); } } while (saveFailed); } }
DateTime startdate;//= DateTime.Today.AddDays(-number_of_backlogdays); public Application() { // this.logger = logger; this.startdate = DateTime.Today.AddDays(-number_of_backlogdays); EtzbkDataContext etzbk = new EtzbkDataContext(); Settings.LoadSettings(); }
private void Consumer() { List <E_TRANSFER_COMMISSION_SPLIT> splitFormular = CachingProvider.GetCachedData <List <E_TRANSFER_COMMISSION_SPLIT> >("Transfer"); List <E_FUNDGATE_COMMISSION_SPLIT> fundGatesplitFormular = CachingProvider.GetCachedData <List <E_FUNDGATE_COMMISSION_SPLIT> >("FundGate"); List <CommissionMapViewModel> commission = AutoMapper.Mapper.Map <List <CommissionMapViewModel> >(splitFormular); List <CommissionMapViewModel> fundGatecommission = AutoMapper.Mapper.Map <List <CommissionMapViewModel> >(fundGatesplitFormular); using (EtzbkDataContext etzbk = new EtzbkDataContext()) { try { etzbk.Configuration.AutoDetectChangesEnabled = false; int i = 0; foreach (var item in enqueData.GetConsumingEnumerable()) { List <E_FEE_DETAIL_BK> feeDetailList = new List <E_FEE_DETAIL_BK>(); if (item.CHANNELID == "09") { feeDetailList = FeeProcessing.ProcessCardloadSplit(item, fundGatecommission); } else { feeDetailList = FeeProcessing.ProcessCardloadSplit(item, commission); } etzbk.E_FEE_DETAIL_BK.AddRange(feeDetailList); E_SETTLEMENT_DOWNLOAD_BK e_settlement = AutoMapper.Mapper.Map <E_SETTLEMENT_DOWNLOAD_BK>(item); decimal bankFee = feeDetailList.Where(fee => fee.MERCHANT_CODE.EndsWith("9999")).Select(FEE => FEE.FEE).FirstOrDefault(); e_settlement.BANK_FEE = bankFee; etzbk.E_SETTLEMENT_DOWNLOAD_BK.Add(e_settlement); if (i % 50 == 0) { etzbk.SaveChanges(); } i++; } etzbk.SaveChanges(); } catch (Exception ex) { Logger logger = new Logger(); Console.WriteLine("Exception from EtranzactChannelTransaction Run " + ExceptionExtensions.GetFullMessage(ex)); logger.LogInfoMessage("Exception from Run " + nameof(EtranzactChannelTransaction) + " " + ExceptionExtensions.GetFullMessage(ex)); } } }
private void Producer() { using (EtzbkDataContext db = new EtzbkDataContext()) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); try { List <E_TRANSACTION> etzTrx = db.E_TRANSACTION.Where(a => a.PROCESS_STATUS == "0" || a.PROCESS_STATUS == null).ToList(); Parallel.ForEach(etzTrx, new ParallelOptions { MaxDegreeOfParallelism = Settings.settlementThreadNumber }, item => { SettleOption successful = DataManupulation.CheckTransactionStatusOnTMC(item.UNIQUE_TRANSID, item.TRANS_CODE); if (successful.Equals(SettleOption.Valid)) { enqueData.Add(item); Console.WriteLine("Equeued Data " + item.UNIQUE_TRANSID); logger.LogInfoMessage("Equeued Data " + item.UNIQUE_TRANSID); } else if (successful.Equals(SettleOption.Invalid)) { itemsToRemove.Add(item); } }); enqueData.CompleteAdding(); DataManupulation.RemoveTransactionFromSettlement(itemsToRemove); //DataManupulation.UpdateTransactionAsProcccessed(etzTrx); } catch (Exception ex) { Logger logger = new Logger(); Console.WriteLine("Exception from EtranzactChannelTransaction Run " + ExceptionExtensions.GetFullMessage(ex)); logger.LogInfoMessage("Exception from Run TaskProducerConsumer Procuder Method" + ExceptionExtensions.GetFullMessage(ex)); } stopwatch.Stop(); Console.WriteLine("Round completed in " + stopwatch.Elapsed); Console.ReadLine(); } }
public static E_SETTLE_BATCH GetSettleBatch() { E_SETTLE_BATCH settle_batch = new E_SETTLE_BATCH(); try { using (EtzbkDataContext etzbk = new EtzbkDataContext()) { settle_batch = etzbk.E_SETTLE_BATCH.Where(c => c.CLOSED == "0").OrderBy(c => c.BATCH_DATE).LastOrDefault(); } } catch { } return(settle_batch); }
private string MapTables(List <string> list) { var db = new EtzbkDataContext(); var objs = db.E_MERCHANT.Where(a => list.Contains(a.MERCHANT_CODE)).ToList(); var table = "<table><th>Merchant Code </th><th>Account Number</th><th>Merchant Name </th>"; foreach (var itm in objs) { table += "<tr><td>" + itm.MERCHANT_CODE + "</td><td>" + itm.MERCHANT_ACCT + "</td><td>" + itm.MERCHANT_NAME + "</td></tr>"; } table += "</table>"; return(table); }
internal static void ProcessTransferSettlement(E_TRANSACTION item) { List <E_TRANSFER_COMMISSION_SPLIT> splitFormular = CachingProvider.GetCachedData <List <E_TRANSFER_COMMISSION_SPLIT> >("Transfer"); List <E_FUNDGATE_COMMISSION_SPLIT> fundGatesplitFormular = CachingProvider.GetCachedData <List <E_FUNDGATE_COMMISSION_SPLIT> >("FundGate"); List <CommissionMapViewModel> commission = AutoMapper.Mapper.Map <List <CommissionMapViewModel> >(splitFormular); List <CommissionMapViewModel> fundGatecommission = AutoMapper.Mapper.Map <List <CommissionMapViewModel> >(fundGatesplitFormular); using (EtzbkDataContext etzbk = new EtzbkDataContext()) { try { List <E_FEE_DETAIL_BK> feeDetailList = new List <E_FEE_DETAIL_BK>(); if (item.CHANNELID == "09") { feeDetailList = FeeProcessing.ProcessCardloadSplit(item, fundGatecommission); } else { feeDetailList = FeeProcessing.ProcessCardloadSplit(item, commission); } var e_Fee_detail = RemoveSettledFeeDetails(feeDetailList); etzbk.E_FEE_DETAIL_BK.AddRange(e_Fee_detail); E_SETTLEMENT_DOWNLOAD_BK e_settlement = AutoMapper.Mapper.Map <E_SETTLEMENT_DOWNLOAD_BK>(item); decimal bankFee = feeDetailList.Where(fee => fee.MERCHANT_CODE.EndsWith("9999")).Select(FEE => FEE.FEE).FirstOrDefault(); e_settlement.BANK_FEE = bankFee; if (!CheckSettledFee(e_settlement)) { etzbk.E_SETTLEMENT_DOWNLOAD_BK.Add(e_settlement); } item.PROCESS_STATUS = "1"; etzbk.E_TRANSACTION.Add(item); etzbk.Entry(item).State = System.Data.Entity.EntityState.Modified; etzbk.SaveChanges(); } catch (Exception ex) { Console.WriteLine("Exception from " + System.Reflection.MethodBase.GetCurrentMethod().Name + " " + nameof(Settlement) + " " + ExceptionExtensions.GetFullMessage(ex)); logger.LogInfoMessage("Exception from Run " + nameof(Settlement) + " " + System.Reflection.MethodBase.GetCurrentMethod().Name + " " + ExceptionExtensions.GetFullMessage(ex)); } } }
public static bool CheckSettledFee(E_SETTLEMENT_DOWNLOAD_BK e_settlement) { using (EtzbkDataContext db = new EtzbkDataContext()) { // var etrxData = new E_SETTLEMENT_DOWNLOAD_BK(); try { var etrxData = db.E_SETTLEMENT_DOWNLOAD_BK.Where(s => s.UNIQUE_TRANSID == e_settlement.UNIQUE_TRANSID).ToList(); if (etrxData.Count() > 0) { return(true); } } catch (Exception ex) { return(false); } return(false); } }
public static List <E_FEE_DETAIL_BK> RemoveSettledFeeDetails(List <E_FEE_DETAIL_BK> allTmcData) { using (EtzbkDataContext db = new EtzbkDataContext()) { var etrxData = new List <E_FEE_DETAIL_BK>(); try { var uniqueIDs = allTmcData.Select(u => u.UNIQUE_TRANSID).Distinct().ToArray(); var uniqueIDsOnDB = db.E_FEE_DETAIL_BK.Where(u => uniqueIDs.Contains(u.EXTERNAL_TRANSID)).Select(u => u.UNIQUE_TRANSID).ToArray(); etrxData = allTmcData.Where(u => !uniqueIDsOnDB.Contains(u.UNIQUE_TRANSID)).ToList(); return(etrxData); } catch (Exception ex) { return(etrxData); } } }
private void Producer() { using (EtzbkDataContext db = new EtzbkDataContext()) { try { List <E_TRANSACTION> etzTrx = db.E_TRANSACTION.Where(a => a.TRANS_CODE == "T" && (a.PROCESS_STATUS == "0" || a.PROCESS_STATUS == null)).Take(Settings.number_of_record_perround).ToList(); Parallel.ForEach(etzTrx, item => { bool successful = DataManupulation.CheckTransactionStatusOnTMC(item.UNIQUE_TRANSID, item.TRANS_CODE); if (successful) { enqueData.Add(item); Console.WriteLine("Equeued Data" + item.UNIQUE_TRANSID); } else { itemsToRemove.Add(item); logger.LogInfoMessage(nameof(TransferProducer) + " round saved to database "); } }); enqueData.CompleteAdding(); DataManupulation.RemoveTransactionFromSettlement(itemsToRemove); DataManupulation.UpdateTransactionAsProcccessed(etzTrx); } catch (Exception ex) { Logger logger = new Logger(); Console.WriteLine("Exception from EtranzactChannelTransaction Run " + ExceptionExtensions.GetFullMessage(ex)); logger.LogInfoMessage("Exception from Run " + nameof(TransferProducer) + " " + ExceptionExtensions.GetFullMessage(ex)); } } }
public static string SetSettleBatch() { string settleBatch = GenerateBatch(); try { using (EtzbkDataContext etzbk = new EtzbkDataContext()) { E_SETTLE_BATCH batch = new E_SETTLE_BATCH() { BATCH_DATE = DateTime.Now, BATCH_ID = settleBatch, CLOSED = "0", START_DATE = DateTime.Today, END_DATE = DateTime.Today.AddDays(1).AddTicks(-1) }; etzbk.E_SETTLE_BATCH.Add(batch); etzbk.SaveChanges(); } } catch { } return(settleBatch); }
public static String GenerateBatch() { using (EtzbkDataContext etzbk = new EtzbkDataContext()) { string currentTime = DateTime.Now.ToString("yyMMddHHmm"); string[] month = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L" }; string[] day = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V","W", "X", "Y", "Z", "1", "2", "3", "4", "5" }; string[] hour = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T","U", "V", "W", "X" }; string finalkey = ""; try { int keyID = 0; var batchnumber = etzbk.E_FEEBATCH.FirstOrDefault(); if (batchnumber != null) { keyID = batchnumber.KEYID + 1; if (keyID == 999998) { keyID = 1; } batchnumber = new E_FEEBATCH() { KEYID = keyID }; etzbk.E_FEEBATCH.Add(batchnumber); } else { keyID = 1; batchnumber = new E_FEEBATCH() { KEYID = 1 }; etzbk.E_FEEBATCH.Add(batchnumber); } String key = keyID.ToString("D6"); int mm = int.Parse(currentTime.Substring(2, 2)); int dd = int.Parse(currentTime.Substring(4, 2)); int hh = int.Parse(currentTime.Substring(6, 2)); if (mm == 0) { mm = 1; } if (dd == 0) { dd = 1; } if (hh == 0) { hh = 1; } finalkey = currentTime.Substring(0, 2) + month[mm - 1] + day[dd - 1] + hour[hh - 1] + currentTime.Substring(8) + key; etzbk.SaveChanges(); } catch (Exception _e) { Console.WriteLine(_e.Message); } return(finalkey); } }
public static void LoadSettings() { using (EtzbkDataContext etzTrx = new EtzbkDataContext()) { try { // var etzTrx = db.E_CARDLOAD_COMMISSION_SPLIT.ToList(); List <E_CARDLOAD_COMMISSION_SPLIT> cardLoadSplitList = new List <E_CARDLOAD_COMMISSION_SPLIT>() { new E_CARDLOAD_COMMISSION_SPLIT() { BANK_CODE = "011", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 40, SPLIT_CARD = "%9999", SPLIT_DESCR = "Bank Commission" }, new E_CARDLOAD_COMMISSION_SPLIT() { BANK_CODE = "011", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 60, SPLIT_CARD = "0441234567", SPLIT_DESCR = "Bank Commission" }, new E_CARDLOAD_COMMISSION_SPLIT() { BANK_CODE = "033", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 30, SPLIT_CARD = "%9999", SPLIT_DESCR = "Bank Commission", COMM_SUSPENCE = "033PAYABLE" }, new E_CARDLOAD_COMMISSION_SPLIT() { BANK_CODE = "033", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 70, SPLIT_CARD = "0441234567", SPLIT_DESCR = "Bank Commission", COMM_SUSPENCE = "033PAYABLE" }, new E_CARDLOAD_COMMISSION_SPLIT() { BANK_CODE = "033", CREATED = DateTime.Now, MAIN_FLAG = "1", RATIO = 0, SPLIT_CARD = "0447777567", SPLIT_DESCR = "Bank Commission", COMM_SUSPENCE = "033PAYABLE" }, new E_CARDLOAD_COMMISSION_SPLIT() { BANK_CODE = "000", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 50, SPLIT_CARD = "%9999", SPLIT_DESCR = "Bank Commission" }, new E_CARDLOAD_COMMISSION_SPLIT() { BANK_CODE = "000", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 50, SPLIT_CARD = "0441234567", SPLIT_DESCR = "Bank Commission" } }; //EtzbkDataContext etzTrx = new EtzbkDataContext(); // var etzTrx = db.E_CARDLOAD_COMMISSION_SPLIT.ToList(); List <E_TRANSFER_COMMISSION_SPLIT> transferSplitList = new List <E_TRANSFER_COMMISSION_SPLIT>() { new E_TRANSFER_COMMISSION_SPLIT() { BANK_CODE = "011", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 40, SPLIT_CARD = "%9999", SPLIT_DESCR = "Bank Commission" }, new E_TRANSFER_COMMISSION_SPLIT() { BANK_CODE = "011", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 60, SPLIT_CARD = "0441234567", SPLIT_DESCR = "Bank Commission" }, new E_TRANSFER_COMMISSION_SPLIT() { BANK_CODE = "033", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 30, SPLIT_CARD = "%9999", SPLIT_DESCR = "Bank Commission", COMM_SUSPENCE = "033PAYABLE" }, new E_TRANSFER_COMMISSION_SPLIT() { BANK_CODE = "033", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 70, SPLIT_CARD = "0441234567", SPLIT_DESCR = "Bank Commission", COMM_SUSPENCE = "033PAYABLE" }, new E_TRANSFER_COMMISSION_SPLIT() { BANK_CODE = "000", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 50, SPLIT_CARD = "%9999", SPLIT_DESCR = "Bank Commission" }, new E_TRANSFER_COMMISSION_SPLIT() { BANK_CODE = "000", CREATED = DateTime.Now, MAIN_FLAG = "0", RATIO = 50, SPLIT_CARD = "0441234567", SPLIT_DESCR = "Bank Commission" } }; // EtzbkDataContext etzTrx = new EtzbkDataContext(); List <E_FUNDGATE_COMMISSION_SPLIT> fundGateSplitList = etzTrx.E_FUNDGATE_COMMISSION_SPLIT.ToList(); CachingProvider.AddItem("CardLoad", cardLoadSplitList); CachingProvider.AddItem("Transfer", transferSplitList); CachingProvider.AddItem("FundGate", fundGateSplitList); } catch (Exception ex) { Logger logger = new Logger(); Console.WriteLine("Exception loading settings" + ExceptionExtensions.GetFullMessage(ex)); logger.LogDebugMessage("Exception loading settings " + nameof(Settings) + " " + ExceptionExtensions.GetFullMessage(ex)); } } }
protected override void OnStart(string[] args) { //Check for Time Processing if (DateTime.Now.Hour >= 1 && DateTime.Now.Hour < 4) { //Check if there is a closed SettleBatch--- if Closed for the day, settlement has been completed.Assumed // E_SETTLE_BATCH settle_batch = new E_SETTLE_BATCH(); var settle_batch = Settlement.GetSettleBatch(); if (settle_batch.CLOSED == null || settle_batch == null) { string batchID = Settlement.SetSettleBatch(); using (var db = new EtzbkDataContext()) { db.Database.ExecuteSqlCommand("UPDATE E_SETTLEMENT_DOWNLOAD_BK SET SETTLE_BATCH ='" + batchID + "' WHERE SETTLE_BATCH IS NULL"); db.Database.ExecuteSqlCommand("UPDATE E_FEE_DETAIL_BK SET SETTLE_BATCH ='" + batchID + "' WHERE SETTLE_BATCH IS NULL"); db.Database.ExecuteSqlCommand("UPDATE E_SETTLE_BATCH SET CLOSED='1' WHERE BATCH_ID='" + batchID + "'"); } //Set settlebatch on strations with Settlebatch null and less than today's date } } // logger.LogInfoMessage("Service Time started at" + DateTime.Now.ToString()); // System.IO.Directory.CreateDirectory("C:/Users/ope/Documents/tmc/tmc/Opeyemi Folder"); // Update the service state to Start Pending. ServiceStatus serviceStatus = new ServiceStatus(); serviceStatus.dwCurrentState = ServiceState.SERVICE_START_PENDING; serviceStatus.dwWaitHint = 100000; SetServiceStatus(this.ServiceHandle, ref serviceStatus); logger.LogInfoMessage(nameof(TmcWinService) + " starting TMC settler....."); logger.LogInfoMessage(nameof(TmcWinService) + " Start Job schedule for "); this.timer = new System.Timers.Timer(); this.timer.AutoReset = true; this.timer.Interval = this.timer.Interval = Settings.timer_interval * 60000; this.timer.Elapsed += new System.Timers.ElapsedEventHandler(this.Timer_Elapsed); this.timer.Enabled = true; this.timer.Start(); this.timer2 = new System.Timers.Timer(); this.timer2.AutoReset = true; this.timer2.Interval = this.timer.Interval = Settings.timer_interval * 60000; this.timer2.Elapsed += new System.Timers.ElapsedEventHandler(this.Timer2_Elapsed); this.timer2.Enabled = true; this.timer2.Start(); StartMethod(); StartSettler(); logger.LogInfoMessage(nameof(TmcWinService) + " Timer Started "); // Update the service state to Running. serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING; SetServiceStatus(this.ServiceHandle, ref serviceStatus); }
public void Run() { //Check for Time Processing if (DateTime.Now.Hour >= 1 && DateTime.Now.Hour < 4) { //Check if there is a closed SettleBatch--- if Closed for the day, settlement has been completed.Assumed // E_SETTLE_BATCH settle_batch = new E_SETTLE_BATCH(); var settle_batch = Settlement.GetSettleBatch(); if (settle_batch.CLOSED == null || settle_batch == null) { string batchID = Settlement.SetSettleBatch(); using (var db = new EtzbkDataContext()) { db.Database.ExecuteSqlCommand("UPDATE E_SETTLEMENT_DOWNLOAD_BK SET SETTLE_BATCH ='" + batchID + "' WHERE SETTLE_BATCH IS NULL"); db.Database.ExecuteSqlCommand("UPDATE E_FEE_DETAIL_BK SET SETTLE_BATCH ='" + batchID + "' WHERE SETTLE_BATCH IS NULL"); db.Database.ExecuteSqlCommand("UPDATE E_SETTLE_BATCH SET CLOSED='1' WHERE BATCH_ID='" + batchID + "'"); } //Set settlebatch on strations with Settlebatch null and less than today's date } } // Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); logger.LogInfoMessage(nameof(TmcSettler) + " starting TMC settler....."); logger.LogInfoMessage(nameof(TmcSettler) + " Start Job schedule for "); logger.LogInfoMessage(nameof(TmcSettler) + "Creating multithreading Threads to spool from 145 to e_transaction for each channel"); logger.LogInfoMessage(nameof(TmcSettler) + "Instantiating EtranzactChannelTransaction Threads "); EtranzactChannelTransaction etzTrx = new EtranzactChannelTransaction(); Thread etzTrxThread = new Thread(new ThreadStart(etzTrx.Run)); logger.LogInfoMessage(nameof(TmcSettler) + "Starting the EtranzactChannelTransaction Threads "); etzTrxThread.Start(); logger.LogInfoMessage(nameof(TmcSettler) + "Instantiating NonEtzCardTransaction Threads "); NonEtzCardTransaction nonEtzCard = new NonEtzCardTransaction(); Thread nonEtzCardThread = new Thread(new ThreadStart(nonEtzCard.Run)); logger.LogInfoMessage(nameof(TmcSettler) + "Starting the NonEtzCardTransaction Threads "); nonEtzCardThread.Start(); logger.LogInfoMessage(nameof(TmcSettler) + "Instantiating MastercardTransactions Threads "); MastercardTransactions mastercardTrx = new MastercardTransactions(); Thread mastercardTrxThread = new Thread(new ThreadStart(mastercardTrx.Run)); logger.LogInfoMessage(nameof(TmcSettler) + "Starting the MastercardTransactions Threads "); mastercardTrxThread.Start(); //mastercardTrxThread.Join(); //nonEtzCardThread.Join(); //etzTrxThread.Join(); stopwatch.Stop(); logger.LogInfoMessage(nameof(TmcSettler) + "Instantiating TaskProducerConsumer Threads "); TaskProducerConsumer taskProducerConsumer = new TaskProducerConsumer(); Thread taskProducerConsumerThread = new Thread(new ThreadStart(taskProducerConsumer.Run)); logger.LogInfoMessage(nameof(TmcSettler) + "Starting the TaskProducerConsumer Threads "); taskProducerConsumerThread.Start(); //taskProducerConsumerThread.Join(); /* * logger.LogInfoMessage(nameof(TmcSettler) + "Instantiating CardloadProducer Threads "); * CardloadProducer cardloadProducer = new CardloadProducer(); * Thread cardloadProducerThread = new Thread(new ThreadStart(cardloadProducer.Run)); * logger.LogInfoMessage(nameof(TmcSettler) + "Starting the CardloadProducer Threads "); * cardloadProducerThread.Start(); * * logger.LogInfoMessage(nameof(TmcSettler) + "Instantiating TransferProducer Threads "); * TransferProducer transferdProducer = new TransferProducer(); * Thread transferProducerThread = new Thread(new ThreadStart(transferdProducer.Run)); * logger.LogInfoMessage(nameof(TmcSettler) + "Starting the TransferProducer Threads "); * transferProducerThread.Start(); * * * * logger.LogInfoMessage(nameof(TmcSettler) + "Instantiating PaymentProducer Threads "); * PaymentProducer paymentProducer = new PaymentProducer(); * Thread paymentProducerThread = new Thread(new ThreadStart(paymentProducer.Run)); * logger.LogInfoMessage(nameof(TmcSettler) + "Starting the PaymentProducer Threads "); * paymentProducerThread.Start(); * * paymentProducerThread.Join(); * transferProducerThread.Join(); * cardloadProducerThread.Join(); * * mastercardTrxThread.Join(); * nonEtzCardThread.Join(); * etzTrxThread.Join(); * */ Console.WriteLine("Round completed in " + stopwatch.Elapsed); Console.ReadLine(); }
private void Consumer() { List <string> McNoSplit = new List <string>(); using (EtzbkDataContext etzbk = new EtzbkDataContext()) { try { etzbk.Configuration.AutoDetectChangesEnabled = false; int i = 0; foreach (var item in enqueData.GetConsumingEnumerable()) { string Merchant_Code = item.MERCHANT_CODE; List <E_FEE_DETAIL_BK> feeDetailList = new List <E_FEE_DETAIL_BK>(); var merchantScaleQuery = from A in etzbk.E_MERCHANT join B in etzbk.E_CATSCALE on new { X = A.CAT_ID } equals new { X = B.CAT_ID } into jointData from joinRecord in jointData.DefaultIfEmpty() where (A.MERCHANT_CODE == Merchant_Code) select new { A.FEE_STATUS, A.SPECIAL_SPLIT, joinRecord.SCALE_VALUE, joinRecord.SCALE_TYPE, joinRecord.CAT_ID }; var merchantScale = merchantScaleQuery.FirstOrDefault(); if (merchantScale == null) { if (!McNoSplit.Contains(Merchant_Code)) { McNoSplit.Add(Merchant_Code); } continue; ///Write Code to handle No Merchant Code or Split category configured } if (merchantScale.SPECIAL_SPLIT == "0") { // Check If Fee is Charged if not, ignore and comparee value if (merchantScale.SCALE_TYPE == "1" & item.FEE == 0) { item.FEE = FeeProcessing.CalculateFeeBeneficiary(merchantScale.SCALE_VALUE, item.TRANS_AMOUNT); } var query = from A in etzbk.E_MERCHANT_COMMISSION_SPLIT where (A.MERCHANT_CODE == item.MERCHANT_CODE) select new CommissionMapViewModel { AGENT = "", MAIN_FLAG = A.MAIN_FLAG, SPLIT_CARD = A.SPLIT_CARD, RATIO = A.RATIO, SPLIT_DESCR = A.SPLIT_DESCR, COMM_SUSPENCE = item.MERCHANT_CODE }; List <CommissionMapViewModel> commission = AutoMapper.Mapper.Map <List <CommissionMapViewModel> >(query.ToList()); var e_settlement = AutoMapper.Mapper.Map <E_SETTLEMENT_DOWNLOAD_BK>(item); feeDetailList = FeeProcessing.ProcessRatioPaymentSplit(item, commission); decimal bankFee = feeDetailList.Where(fee => fee.MERCHANT_CODE.EndsWith("9999")).Select(FEE => FEE.TRANS_AMOUNT).FirstOrDefault(); e_settlement.BANK_FEE = bankFee; etzbk.E_SETTLEMENT_DOWNLOAD_BK.Add(e_settlement); } else { var query = from A in etzbk.E_MERCHANT_SPECIAL_SPLIT where (A.MERCHANT_CODE == item.MERCHANT_CODE) select new CommissionMapViewModel { AGENT = "", MAIN_FLAG = A.MAIN_FLAG, SPLIT_CARD = A.SPLIT_CARD, RATIO = A.SVALUE, SPLIT_DESCR = A.SPLIT_DESCR, COMM_SUSPENCE = item.MERCHANT_CODE }; List <CommissionMapViewModel> commission = AutoMapper.Mapper.Map <List <CommissionMapViewModel> >(query.ToList()); E_SETTLEMENT_DOWNLOAD_BK e_settlement = AutoMapper.Mapper.Map <E_SETTLEMENT_DOWNLOAD_BK>(item); feeDetailList = FeeProcessing.ProcessRatioPaymentSplit(item, commission); decimal bankFee = feeDetailList.Where(fee => fee.MERCHANT_CODE.EndsWith("9999")).Select(FEE => FEE.FEE).FirstOrDefault(); e_settlement.BANK_FEE = bankFee; etzbk.E_SETTLEMENT_DOWNLOAD_BK.Add(e_settlement); } // feeDetailList = FeeProcessing.ProcessCardloadSplit(item, commission); etzbk.E_FEE_DETAIL_BK.AddRange(feeDetailList); if (i % 50 == 0) { //var uniqueIDs = feeDetailList.Select(u => u.UNIQUE_TRANSID).Distinct().ToArray(); //var uniqueIDsOnDB = etzbk.E_TRANSACTION.Where(u => uniqueIDs.Contains(u.UNIQUE_TRANSID)).Select(u => u.UNIQUE_TRANSID).ToArray(); //var feeForDBata = feeDetailList.Where(u => !uniqueIDsOnDB.Contains(u.UNIQUE_TRANSID)); etzbk.SaveChanges(); logger.LogInfoMessage(nameof(PaymentProducer) + " round saved to database "); } i++; } etzbk.SaveChanges(); logger.LogInfoMessage(nameof(PaymentProducer) + " FInal round saved to database "); } catch (Exception ex) { Logger logger = new Logger(); Console.WriteLine("Exception from EtranzactChannelTransaction Run " + ExceptionExtensions.GetFullMessage(ex)); logger.LogInfoMessage("Exception from Run " + nameof(PaymentProducer) + " " + ExceptionExtensions.GetFullMessage(ex)); } //Act on MC without Split Console.WriteLine("List of MC without split"); foreach (string item in McNoSplit) { Console.WriteLine(item); } } }
public static ResponseViewModel ProcessPaymentSettlement(E_TRANSACTION item) { ResponseViewModel response = new ResponseViewModel(); using (EtzbkDataContext etzbk = new EtzbkDataContext()) { //item = etzbk.E_TRANSACTION.Where(a => a.UNIQUE_TRANSID == "0327002364000289256353").FirstOrDefault(); if (item.UNIQUE_TRANSID.Contains("#")) { item.UNIQUE_TRANSID = item.UNIQUE_TRANSID.Substring(0, item.UNIQUE_TRANSID.IndexOf("#")); } try { var merchantIntercept = etzbk.E_MERCHANT_CODE_INTERCEPT.Where(a => a.INITIATOR_CODE == item.CARD_NUM.Substring(0, 3) && a.MERCHANT_CODE == item.MERCHANT_CODE && a.CHANNELID == item.CHANNELID && a.TRANS_CODE == item.TRANS_CODE && a.INTERCEPT_STATUS == "1").FirstOrDefault(); if (merchantIntercept != null) { if (merchantIntercept.INTERCEPT_MERCHANT_CODE != null || merchantIntercept.INTERCEPT_MERCHANT_CODE.Trim() != "") { item.MERCHANT_CODE = merchantIntercept.INTERCEPT_MERCHANT_CODE; } if (merchantIntercept.CARD_NUM != null || merchantIntercept.CARD_NUM.Trim() != "") { item.CARD_NUM = merchantIntercept.CARD_NUM; } } if (item.CHANNELID == "09") { using (FundGateDataContext fundGate = new FundGateDataContext()) { var fundGateQuery = from A in fundGate.FUNDGATE_RESPONSE join B in fundGate.FUNDGATE_REQUEST on new { X = A.clientRef, Y = A.terminal } equals new { X = B.clientRef, Y = B.terminal } into jointData from joinRecord in jointData.DefaultIfEmpty() where (joinRecord.action == "VT" && A.etzRef == item.UNIQUE_TRANSID) select new { joinRecord.lineType }; var fundGateTrx = fundGateQuery.FirstOrDefault(); if (fundGateTrx != null) { var swicthData = etzbk.E_SWITCHIT_TRANSFORMER.Where(a => a.CARD_NUM == item.CARD_NUM && a.PROVIDER_ID == fundGateTrx.lineType).FirstOrDefault(); if (swicthData != null) { item.CARD_NUM = swicthData.TRANSFORM_CARD; item.MERCHANT_CODE = swicthData.MERCHANT_CODE; } } } } string merchantCode = item.MERCHANT_CODE; List <E_FEE_DETAIL_BK> feeDetailList = new List <E_FEE_DETAIL_BK>(); E_SETTLEMENT_DOWNLOAD_BK e_settlement = AutoMapper.Mapper.Map <E_SETTLEMENT_DOWNLOAD_BK>(item); var merchantScaleQuery = from A in etzbk.E_MERCHANT join B in etzbk.E_CATSCALE on new { X = A.CAT_ID } equals new { X = B.CAT_ID } into jointData from joinRecord in jointData.DefaultIfEmpty() where (A.MERCHANT_CODE == merchantCode) select new { A.FEE_STATUS, A.SPECIAL_SPLIT, A.MERCHANT_NAME, joinRecord.SCALE_VALUE, joinRecord.SCALE_TYPE, joinRecord.CAT_ID }; var merchantScale = merchantScaleQuery.FirstOrDefault(); if (merchantScale == null) { response = new ResponseViewModel() { ErrorType = ErrorType.NoMerchantCode, MerchantCode = merchantCode, Response = false }; //return response; ///Write Code to handle No Merchant Code or Split category configured } else { List <CommissionMapViewModel> commission = new List <CommissionMapViewModel>(); if (merchantScale.SPECIAL_SPLIT == "0") { // Check If Fee is Charged if not, ignore and comparee value if (merchantScale.SCALE_TYPE == "1" & item.FEE == 0) { item.FEE = FeeProcessing.CalculateFeeBeneficiary(merchantScale.SCALE_VALUE, item.TRANS_AMOUNT); } var query = from A in etzbk.E_MERCHANT_COMMISSION_SPLIT where (A.MERCHANT_CODE == item.MERCHANT_CODE) select new CommissionMapViewModel { AGENT = "", MAIN_FLAG = A.MAIN_FLAG, SPLIT_CARD = A.SPLIT_CARD, RATIO = A.RATIO, SPLIT_DESCR = A.SPLIT_DESCR, COMM_SUSPENCE = item.MERCHANT_CODE }; commission = AutoMapper.Mapper.Map <List <CommissionMapViewModel> >(query.ToList()); } else if (merchantScale.SPECIAL_SPLIT == "1") { var query = from A in etzbk.E_MERCHANT_SPECIAL_SPLIT where (A.MERCHANT_CODE == item.MERCHANT_CODE) select new CommissionMapViewModel { AGENT = "", MAIN_FLAG = A.MAIN_FLAG, SPLIT_CARD = A.SPLIT_CARD, RATIO = A.SVALUE, SPLIT_DESCR = A.SPLIT_DESCR, COMM_SUSPENCE = item.MERCHANT_CODE }; commission = AutoMapper.Mapper.Map <List <CommissionMapViewModel> >(query.ToList()); } else { response = new ResponseViewModel() { ErrorType = ErrorType.InvalidSplitType, MerchantCode = merchantCode, Response = false }; // return response; } if (merchantScale.SPECIAL_SPLIT == "1" || merchantScale.SPECIAL_SPLIT == "0") { feeDetailList = FeeProcessing.ProcessRatioPaymentSplit(item, commission); var e_Fee_detail = RemoveSettledFeeDetails(feeDetailList); etzbk.E_FEE_DETAIL_BK.AddRange(e_Fee_detail); decimal bankFee = feeDetailList.Where(fee => fee.MERCHANT_CODE.EndsWith("9999")).Select(FEE => FEE.FEE).FirstOrDefault(); e_settlement.BANK_FEE = bankFee; } } if (!CheckSettledFee(e_settlement)) { etzbk.E_SETTLEMENT_DOWNLOAD_BK.Add(e_settlement); } item.PROCESS_STATUS = "1"; etzbk.E_TRANSACTION.Add(item); etzbk.Entry(item).State = System.Data.Entity.EntityState.Modified; etzbk.SaveChanges(); // Console.WriteLine(nameof(PaymentProducer) + " Final round saved to database "); return(new ResponseViewModel() { ErrorType = ErrorType.Valid, MerchantCode = merchantCode, Response = true }); } catch (Exception ex) { Console.WriteLine("Exception from " + System.Reflection.MethodBase.GetCurrentMethod().Name + " " + nameof(Settlement) + " " + ExceptionExtensions.GetFullMessage(ex) + item.UNIQUE_TRANSID); logger.LogInfoMessage("Exception from Run " + nameof(Settlement) + " " + System.Reflection.MethodBase.GetCurrentMethod().Name + " " + ExceptionExtensions.GetFullMessage(ex) + item.UNIQUE_TRANSID); return(new ResponseViewModel() { ErrorType = ErrorType.Exception, MerchantCode = item.UNIQUE_TRANSID, Message = ex.Message, Response = false }); } } }
public void Run() { logger = new Logger(); Task <List <E_TRANSACTION> > t1 = Task.Factory.StartNew(MastercardTrx1); Task <List <E_TRANSACTION> > t2 = Task.Factory.StartNew(MastercardTrx2); Task <List <E_TRANSACTION> > t3 = Task.Factory.StartNew(MastercardTrx3); Console.WriteLine(" MastercardTransactions waiting for Merging "); List <Task> taskList = new List <Task> { t1, t2, t3 }; Task.WaitAll(taskList.ToArray()); Console.WriteLine(" MastercardTransactions Merged"); using (EtzbkDataContext db = new EtzbkDataContext()) { try { var allTmcData = DataManupulation.MergeEntityList(new List <List <E_TRANSACTION> >() { t1.Result.ToList(), t2.Result.ToList(), t3.Result.ToList() }); //PROCESS DATA Console.WriteLine(" Merge All Data Spooled... Removing Duplicate record"); var uniqueIDs = allTmcData.Select(u => u.UNIQUE_TRANSID).Distinct().ToArray(); var uniqueIDsOnDB = db.E_TRANSACTION.Where(u => uniqueIDs.Contains(u.UNIQUE_TRANSID)).Select(u => u.UNIQUE_TRANSID).ToArray(); var etrxData = allTmcData.Where(u => !uniqueIDsOnDB.Contains(u.UNIQUE_TRANSID)); Console.WriteLine(uniqueIDsOnDB.Count() + " Duplicate record removed--NonEtzCardTransaction"); logger.LogInfoMessage(nameof(MastercardTransactions) + " " + etrxData.Count() + " Record ready to be Inserted"); db.E_TRANSACTION.AddRange(etrxData); db.SaveChanges(); logger.LogInfoMessage(nameof(MastercardTransactions) + " " + etrxData.Count() + " Record Inserted for Settlement"); Console.WriteLine(etrxData.Count() + " Record Inserted for Settlement"); Console.WriteLine("Marking Transaction as spooled transaction"); if (uniqueIDs.Count() > 0) { DataManupulation.UpdateTMCProcccessedTransaction(uniqueIDs); } Console.WriteLine("Spooled transactions Marked"); Console.WriteLine("Spooled transactions Marked"); } catch (SqlException ex) { Console.WriteLine("SQLException from MastercardTransactions Run " + ExceptionExtensions.GetFullMessage(ex)); logger.LogDebugMessage("SQLException from Run " + nameof(MastercardTransactions) + " " + ExceptionExtensions.GetFullMessage(ex)); } catch (Exception ex) { Console.WriteLine("Exception from Run " + ExceptionExtensions.GetFullMessage(ex)); logger.LogDebugMessage("Exception from Run " + nameof(MastercardTransactions) + " " + ExceptionExtensions.GetFullMessage(ex)); } } logger.LogInfoMessage(nameof(MastercardTransactions) + " Merged "); Console.WriteLine("MastercardTransactions Transaction spool Completed"); }
public void Run() { logger = new Logger(); logger.LogInfoMessage(nameof(EtranzactChannelTransaction) + " Starting EtranzactChannelTransaction "); Task <List <E_TRANSACTION> > t1 = Task.Factory.StartNew(Channel1); Task <List <E_TRANSACTION> > t2 = Task.Factory.StartNew(Channel2); Task <List <E_TRANSACTION> > t3 = Task.Factory.StartNew(Channel3); Task <List <E_TRANSACTION> > t4 = Task.Factory.StartNew(Channel4); Task <List <E_TRANSACTION> > t5 = Task.Factory.StartNew(Channel5); Task <List <E_TRANSACTION> > t6 = Task.Factory.StartNew(Channel6); Task <List <E_TRANSACTION> > t7 = Task.Factory.StartNew(Channel7); Task <List <E_TRANSACTION> > t8 = Task.Factory.StartNew(Channel8); logger.LogInfoMessage(nameof(EtranzactChannelTransaction) + " EtranzactChannelTransaction waiting for Merging "); Console.WriteLine(" EtranzactChannelTransaction waiting for Merging "); using (EtzbkDataContext db = new EtzbkDataContext()) { try { List <Task> taskList = new List <Task> { t1, t2, t3, t4, t5, t6, t7, t8 }; Task.WaitAll(taskList.ToArray()); Console.WriteLine(" EtranzactChannelTransaction Merged"); //Merge All Data Spooled var allTmcData = DataManupulation.MergeEntityList(new List <List <E_TRANSACTION> >() { t1.Result.ToList(), t2.Result.ToList(), t3.Result.ToList(), t4.Result.ToList(), t5.Result.ToList(), t6.Result.ToList(), t7.Result.ToList(), t8.Result.ToList() }); Console.WriteLine(" Merge All Data Spooled... Removing Duplicate record"); //Remove duplicate value var uniqueIDs = allTmcData.Select(u => u.UNIQUE_TRANSID).Distinct().ToArray(); var uniqueIDsOnDB = db.E_TRANSACTION.Where(u => uniqueIDs.Contains(u.UNIQUE_TRANSID)).Select(u => u.UNIQUE_TRANSID).ToArray(); var etrxData = allTmcData.Where(u => !uniqueIDsOnDB.Contains(u.UNIQUE_TRANSID)); Console.WriteLine(uniqueIDsOnDB.Count() + " Duplicate record removed--NonEtzCardTransaction"); logger.LogInfoMessage(nameof(EtranzactChannelTransaction) + " " + etrxData.Count() + " Record ready to be Inserted"); db.E_TRANSACTION.AddRange(etrxData); db.SaveChanges(); logger.LogInfoMessage(nameof(EtranzactChannelTransaction) + " " + etrxData.Count() + " Record Inserted for Settlement"); Console.WriteLine(etrxData.Count() + " Record Inserted for Settlement"); Console.WriteLine("Marking Transaction as spooled transaction"); if (uniqueIDs.Count() > 0) { DataManupulation.UpdateTMCProcccessedTransaction(uniqueIDs); } Console.WriteLine("Spooled transactions Marked"); } catch (SqlException ex) { Console.WriteLine("SQLException from EtranzactChannelTransaction Run " + ExceptionExtensions.GetFullMessage(ex)); logger.LogDebugMessage("SQLException from Run " + nameof(EtranzactChannelTransaction) + " " + ExceptionExtensions.GetFullMessage(ex)); } catch (Exception ex) { Console.WriteLine("Exception from EtranzactChannelTransaction Run " + ExceptionExtensions.GetFullMessage(ex)); logger.LogDebugMessage("Exception from Run " + nameof(EtranzactChannelTransaction) + " " + ExceptionExtensions.GetFullMessage(ex)); } logger.LogInfoMessage(nameof(EtranzactChannelTransaction) + " Merged "); Console.WriteLine("ETZ Channel Transaction Completed"); logger.LogInfoMessage(nameof(EtranzactChannelTransaction) + " ETZ Channel Transaction Completed "); } }