public void OnVolumeChange(VolumeDataRespose volumeData, MarketCapData capData) { try { HelperForLog.WriteLogIntoFile("OnVolumeChange", ControllerName, "Call OnVolumeChangeMethod : volumeData : " + JsonConvert.SerializeObject(volumeData) + " : Market Data : " + JsonConvert.SerializeObject(capData)); if (volumeData != null && capData != null) { LastPriceViewModel lastPriceData = new LastPriceViewModel(); lastPriceData.LastPrice = capData.LastPrice; lastPriceData.UpDownBit = volumeData.UpDownBit; string Base = volumeData.PairName.Split("_")[1]; PairData(volumeData, Base); HelperForLog.WriteLogIntoFile("OnVolumeChange", ControllerName, "After Pair Data Call Base :" + Base + " DATA :" + JsonConvert.SerializeObject(volumeData)); MarketData(capData, volumeData.PairName); HelperForLog.WriteLogIntoFile("OnVolumeChange", ControllerName, "After Market Data Call Pair :" + volumeData.PairName + " DATA :" + JsonConvert.SerializeObject(capData)); LastPrice(lastPriceData, volumeData.PairName); HelperForLog.WriteLogIntoFile("OnVolumeChange", ControllerName, "After Last price Call Pair :" + volumeData.PairName + " DATA :" + JsonConvert.SerializeObject(lastPriceData)); } } catch (Exception ex) { _logger.LogError(ex, "An unexpected exception occured,\nMethodName:" + System.Reflection.MethodBase.GetCurrentMethod().Name + "\nClassname=" + this.GetType().Name, LogLevel.Error); //throw ex; } }
public void ActivityNotification(string Msg, string Token) { try { SignalRComm <String> CommonData = new SignalRComm <String>(); CommonData.EventType = Enum.GetName(typeof(enSignalREventType), enSignalREventType.Channel); CommonData.Method = Enum.GetName(typeof(enMethodName), enMethodName.ActivityNotification); CommonData.ReturnMethod = Enum.GetName(typeof(enReturnMethod), enReturnMethod.RecieveNotification); CommonData.Subscription = Enum.GetName(typeof(enSubscriptionType), enSubscriptionType.OneToOne); CommonData.ParamType = Enum.GetName(typeof(enSignalRParmType), enSignalRParmType.AccessToken); CommonData.Data = Msg; CommonData.Parameter = null; //SignalRDataNotify SendData = new SignalRDataNotify(); SignalRData SendData = new SignalRData(); SendData.Method = enMethodName.ActivityNotification; SendData.Parameter = Token; SendData.DataObj = JsonConvert.SerializeObject(CommonData); //SendData.WalletName = Wallet; HelperForLog.WriteLogIntoFile("ActivityNotification", ControllerName, " MSG :" + Msg); _mediator.Send(SendData); } catch (Exception ex) { _logger.LogError(ex, "An unexpected exception occured,\nMethodName:" + System.Reflection.MethodBase.GetCurrentMethod().Name + "\nClassname=" + this.GetType().Name, LogLevel.Error); //throw ex; } }
public Task SellerSideWalletBal(string Token, string WalletName, string Data) { try { //_chatHubContext.Clients.Group("SellerSideWalletBal:" + Pair).SendAsync("RecieveSellerSideWalletBal", Data); //++++++++++++++++++++++// //var Redis = new RadisServices<ConnetedClientList>(this._fact); //ConnetedClientList User = new ConnetedClientList(); //User = Redis.GetConnectionID(Token); //_chatHubContext.Clients.Client(User.ConnectionId).SendAsync("RecieveSellerSideWalletBal", Data); var Redis = new RadisServices <ConnetedClientToken>(this._fact); IEnumerable <string> ClientList = Redis.GetKey(Token); foreach (string s in ClientList.ToList()) { var Key = s; Key = Key.Split(":")[1].ToString(); string Pair = Redis.GetPairOrMarketData(Key, ":", "Pairs"); if (Pair.Split("_")[0].ToString() == WalletName) { _chatHubContext.Clients.Client(Key).SendAsync(Enum.GetName(typeof(enReturnMethod), enReturnMethod.RecieveSellerSideWalletBal), Data); HelperForLog.WriteLogIntoFile("SellerSideWalletBal", "SocketHub", " Send Data :" + Data); } else { // ignore Data } } return(Task.FromResult(0)); } catch (Exception ex) { _logger.LogError(ex, "An unexpected exception occured,\nMethodName:" + System.Reflection.MethodBase.GetCurrentMethod().Name + "\nClassname=" + this.GetType().Name, LogLevel.Error); return(Task.FromResult(0)); } }
public async Task <IActionResult> Withdrawal(string coin, string accWalletID, [FromBody] WithdrawalReq Request) { var accessToken = await HttpContext.GetTokenAsync("access_token"); HelperForLog.WriteLogIntoFile(1, _basePage.UTC_To_IST(), this.ControllerContext.RouteData.Values["action"].ToString(), this.GetType().Name, JsonConvert.SerializeObject(Request), accessToken); WithdrawalRes Response = new WithdrawalRes(); try { var user = await _userManager.GetUserAsync(HttpContext.User); if (user == null) { Response.ReturnCode = enResponseCode.Fail; Response.ReturnMsg = EnResponseMessage.StandardLoginfailed; Response.ErrorCode = enErrorCode.StandardLoginfailed; } else { Response = _walletService.Withdrawl(coin, accWalletID, Request, user.Id); } HelperForLog.WriteLogIntoFile(2, _basePage.UTC_To_IST(), this.ControllerContext.RouteData.Values["action"].ToString(), this.GetType().Name, JsonConvert.SerializeObject(Response), ""); return(Ok(Response)); } catch (Exception ex) { //HelperForLog.WriteErrorLog(_basePage.UTC_To_IST(), this.ControllerContext.RouteData.Values["action"].ToString(), this.GetType().Name, ex.ToString()); //Response.ReturnCode = enResponseCode.InternalError; //return BadRequest(Response); return(BadRequest(new BizResponseClass { ReturnCode = enResponseCode.InternalError, ReturnMsg = ex.ToString(), ErrorCode = enErrorCode.Status500InternalServerError })); } }
public void OnStatusSuccess(short Status, TransactionQueue Newtransaction, TradeTransactionQueue NewTradeTransaction, string Token, short OrderType) { try { GetTradeHistoryInfo historyInfo = new GetTradeHistoryInfo(); GetBuySellBook BuySellmodel = new GetBuySellBook(); //update Recent Order //pop OpenOrder //add tradehistory //add orderhistory //pop buyer/seller book; //HelperForLog.WriteLogIntoFile("OnStatusSuccess", ControllerName, "Call ---- TransactionQueue :" + JsonConvert.SerializeObject(Newtransaction) + " TradeTransactionQueue :" + JsonConvert.SerializeObject(NewTradeTransaction)); if (string.IsNullOrEmpty(Token)) { Token = GetTokenByUserID(NewTradeTransaction.MemberID.ToString()); } if (!string.IsNullOrEmpty(Token)) { BuySellmodel.Amount = 0; BuySellmodel.OrderId = new Guid(); BuySellmodel.RecordCount = 0; if (NewTradeTransaction.TrnType == 4)//Buy { BuySellmodel.Price = NewTradeTransaction.BidPrice; BuyerBook(BuySellmodel, NewTradeTransaction.PairName); HelperForLog.WriteLogIntoFile("OnStatusSuccess", ControllerName, "BuyerBook call TRNNO:" + Newtransaction.Id); } else//Sell { BuySellmodel.Price = NewTradeTransaction.AskPrice; SellerBook(BuySellmodel, NewTradeTransaction.PairName); HelperForLog.WriteLogIntoFile("OnStatusSuccess", ControllerName, "SellerBook call TRNNO:" + Newtransaction.Id); } GetAndSendRecentOrderData(Newtransaction, NewTradeTransaction, Token, OrderType); //Update Recent HelperForLog.WriteLogIntoFile("OnStatusSuccess", ControllerName, " Aftre Recent Order Socket call TRNNO:" + Newtransaction.Id); GetAndSendOpenOrderData(Newtransaction, NewTradeTransaction, Token, OrderType, 1); //update OpenOrder HelperForLog.WriteLogIntoFile("OnStatusSuccess", ControllerName, " Aftre Open Order Socket call TRNNO:" + Newtransaction.Id); historyInfo = GetAndSendTradeHistoryInfoData(Newtransaction, NewTradeTransaction, OrderType); OrderHistory(historyInfo, historyInfo.PairName); //Order HelperForLog.WriteLogIntoFile("OnStatusSuccess", ControllerName, " Aftre Order History Socket call : TRNNO:" + Newtransaction.Id); TradeHistory(historyInfo, Token); //TradeHistory HelperForLog.WriteLogIntoFile("OnStatusSuccess", ControllerName, " Aftre Trade History Socket call : TRNNO:" + Newtransaction.Id); var msg = EnResponseMessage.SignalRTrnSuccessfullySettled; msg = msg.Replace("#Price#", historyInfo.Price.ToString()); msg = msg.Replace("#Qty#", historyInfo.Amount.ToString()); msg = msg.Replace("#Total#", historyInfo.Total.ToString()); ActivityNotification(msg, Token); } } catch (Exception ex) { HelperForLog.WriteErrorLog(System.Reflection.MethodBase.GetCurrentMethod().Name, this.GetType().Name, ex); //throw ex; } }
//public readonly ILogger<WebAPISendRequest> _log; //public WebAPISendRequest(ILogger<WebAPISendRequest> log) //{ // _log = log; //} public string SendAPIRequestAsync(string Url, string Request, string ContentType, int Timeout = 180000, WebHeaderCollection headerDictionary = null, string MethodType = "POST") { string responseFromServer = ""; try { object ResponseObj = new object(); // ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls //| SecurityProtocolType.Tls11 //| SecurityProtocolType.Tls12 //| SecurityProtocolType.Ssl3; ServicePointManager.ServerCertificateValidationCallback = delegate { return(true); }; var httpWebRequest = (HttpWebRequest)WebRequest.Create(Url); httpWebRequest.ContentType = ContentType; httpWebRequest.Method = MethodType.ToUpper(); httpWebRequest.KeepAlive = false; httpWebRequest.Timeout = Timeout; httpWebRequest.Headers = headerDictionary; //_log.LogInformation(System.Reflection.MethodBase.GetCurrentMethod().Name, Url, Request); HelperForLog.WriteLogIntoFile(System.Reflection.MethodBase.GetCurrentMethod().Name, this.GetType().Name, Url + "Request::" + Request); if (Request != null) { using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { streamWriter.Write(Request); streamWriter.Flush(); streamWriter.Close(); } } HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse; using (StreamReader sr = new StreamReader(httpWebResponse.GetResponseStream())) { responseFromServer = sr.ReadToEnd(); sr.Close(); sr.Dispose(); } httpWebResponse.Close(); //_log.LogInformation(System.Reflection.MethodBase.GetCurrentMethod().Name, responseFromServer); HelperForLog.WriteLogIntoFile(System.Reflection.MethodBase.GetCurrentMethod().Name, this.GetType().Name, responseFromServer); } catch (Exception ex) { HelperForLog.WriteErrorLog(System.Reflection.MethodBase.GetCurrentMethod().Name, this.GetType().Name, ex); //throw ex; } return(responseFromServer); }
public void OnStatusCancel(short Status, TransactionQueue Newtransaction, TradeTransactionQueue NewTradeTransaction, string Token, short OrderType) { try { GetTradeHistoryInfo historyInfo = new GetTradeHistoryInfo(); //pop from OpenOrder //update Recent order //add Trade history //HelperForLog.WriteLogIntoFile("OnStatusCancel", ControllerName, " TransactionQueue :" + JsonConvert.SerializeObject(Newtransaction) + " TradeTransactionQueue :" + JsonConvert.SerializeObject(NewTradeTransaction)); if (string.IsNullOrEmpty(Token)) { Token = GetTokenByUserID(NewTradeTransaction.MemberID.ToString()); } if (!string.IsNullOrEmpty(Token)) { GetAndSendOpenOrderData(Newtransaction, NewTradeTransaction, Token, OrderType, 1); //with amount 0, remove from OpenOrder HelperForLog.WriteLogIntoFile("OnStatusCancel", ControllerName, " Aftre Open Order Socket call : TRNNO:" + Newtransaction.Id); GetAndSendRecentOrderData(Newtransaction, NewTradeTransaction, Token, OrderType); //Update Recent HelperForLog.WriteLogIntoFile("OnStatusCancel", ControllerName, " Aftre Recent Order Socket call : TRNNO:" + Newtransaction.Id); historyInfo = GetAndSendTradeHistoryInfoData(Newtransaction, NewTradeTransaction, OrderType); TradeHistory(historyInfo, Token);//TradeHistory HelperForLog.WriteLogIntoFile("OnStatusCancel", ControllerName, " Aftre Trade History Socket call : TRNNO:" + Newtransaction.Id); } } catch (Exception ex) { _logger.LogError(ex, "An unexpected exception occured,\nMethodName:" + System.Reflection.MethodBase.GetCurrentMethod().Name + "\nClassname=" + this.GetType().Name, LogLevel.Error); //throw ex; } //public void OnWalletBalChangeByUserID(WalletMasterResponse Data, string WalletTypeName, long UserID) //{ // try // { // //string str = "clientId=cleanarchitecture&grant_type=password&[email protected]&password=P@ssw0rd!&scope=openid profile email offline_access client_id roles phone"; // //str = str.Replace("=","\":\""); // //str = str.Replace("&", "\",\""); // //str = "{\"" + str + "\"}"; // //var obj = JsonConvert.DeserializeObject(str); // //var jsonData= JsonConvert.SerializeObject(obj); // var Redis = new RadisServices<ConnetedClientToken>(this._fact); // string AccessToken = Redis.GetHashData("Tokens:" + UserID.ToString(), "Token"); // Token = AccessToken; // BuyerSideWalletBal(Data, WalletTypeName, Token); // SellerSideWalletBal(Data, WalletTypeName, Token); // } // catch (Exception ex) // { // HelperForLog.WriteErrorLog(System.Reflection.MethodBase.GetCurrentMethod().Name, this.GetType().Name, ex); // //throw ex; // } }
public Task <string> SendRequestAsync(string Url, string Request = "", string MethodType = "GET", string ContentType = "application/json", WebHeaderCollection Headers = null, int Timeout = 9000) { string responseFromServer = ""; try { object ResponseObj = new object(); var httpWebRequest = (HttpWebRequest)WebRequest.Create(Url); httpWebRequest.Method = MethodType.ToUpper(); if (Headers != null) { httpWebRequest.Headers = Headers; } httpWebRequest.KeepAlive = false; httpWebRequest.Timeout = Timeout; httpWebRequest.ContentType = ContentType; //if (!string.IsNullOrEmpty(Headers)) //{ // httpWebRequest.Headers.Add(string.Format("Authorization: key={0}", Headers)); // } HelperForLog.WriteLogIntoFile(System.Reflection.MethodBase.GetCurrentMethod().Name, this.GetType().Name, Url); if (Request != "") { using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { streamWriter.Write(Request); streamWriter.Flush(); streamWriter.Close(); } } HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse; using (StreamReader sr = new StreamReader(httpWebResponse.GetResponseStream())) { responseFromServer = sr.ReadToEnd(); sr.Close(); sr.Dispose(); } httpWebResponse.Close(); HelperForLog.WriteLogIntoFile(System.Reflection.MethodBase.GetCurrentMethod().Name, this.GetType().Name, responseFromServer); return(Task.FromResult(responseFromServer)); } catch (Exception ex) { HelperForLog.WriteErrorLog(System.Reflection.MethodBase.GetCurrentMethod().Name, this.GetType().Name, ex); throw ex; } }
public void OnStatusPartialSuccess(short Status, TransactionQueue Newtransaction, TradeTransactionQueue NewTradeTransaction, string Token, short OrderType) { try { GetBuySellBook BuySellmodel = new GetBuySellBook(); //update Buyer/seller book //HelperForLog.WriteLogIntoFile("OnStatusPartialSuccess", ControllerName, " TransactionQueue :" + JsonConvert.SerializeObject(Newtransaction) + " TradeTransactionQueue :" + JsonConvert.SerializeObject(NewTradeTransaction)); if (string.IsNullOrEmpty(Token)) { Token = GetTokenByUserID(NewTradeTransaction.MemberID.ToString()); } if (!string.IsNullOrEmpty(Token)) { List <GetBuySellBook> list = new List <GetBuySellBook>(); if (NewTradeTransaction.TrnType == 4)//Buy { list = _frontTrnRepository.GetBuyerBook(NewTradeTransaction.PairID, NewTradeTransaction.BidPrice); foreach (var model in list) { BuySellmodel = model; break; } if (BuySellmodel.OrderId.ToString() != "00000000-0000-0000-0000-000000000000") { BuyerBook(BuySellmodel, NewTradeTransaction.PairName); HelperForLog.WriteLogIntoFile("OnStatusPartialSuccess", ControllerName, "BuyerBook call TRNNO:" + Newtransaction.Id); } } else//Sell { list = _frontTrnRepository.GetSellerBook(NewTradeTransaction.PairID, NewTradeTransaction.AskPrice); foreach (var model in list) { BuySellmodel = model; break; } if (BuySellmodel.OrderId.ToString() != "00000000-0000-0000-0000-000000000000") { SellerBook(BuySellmodel, NewTradeTransaction.PairName); HelperForLog.WriteLogIntoFile("OnStatusPartialSuccess", ControllerName, "SellerBook call TRNNO:" + Newtransaction.Id); } } } } catch (Exception ex) { _logger.LogError(ex, "An unexpected exception occured,\nMethodName:" + System.Reflection.MethodBase.GetCurrentMethod().Name + "\nClassname=" + this.GetType().Name, LogLevel.Error); //throw ex; } }
public async Task Invoke(HttpContext context) { var injectedRequestStream = new MemoryStream(); try { var requestLog = $"REQUEST Host:{context.Request.Host} ,HttpMethod: {context.Request.Method}, Path: {context.Request.Path}"; //string Path = context.Request.Path.ToString(); //string[] PathDetails = Path.Split("/"); var accessToken = await context.Request.HttpContext.GetTokenAsync("access_token"); using (var bodyReader = new StreamReader(context.Request.Body)) { var bodyAsText = bodyReader.ReadToEnd(); if (string.IsNullOrWhiteSpace(bodyAsText) == false) { requestLog += $", Body : {bodyAsText}"; } var bytesToWrite = Encoding.UTF8.GetBytes(bodyAsText); injectedRequestStream.Write(bytesToWrite, 0, bytesToWrite.Length); injectedRequestStream.Seek(0, SeekOrigin.Begin); context.Request.Body = injectedRequestStream; } //if (PathDetails?[1] == "api") if (context.Request.Path.Value.Split("/")[1] != "swagger") { HelperForLog.WriteLogIntoFile(1, _basePage.UTC_To_IST(), context.Request.Path.ToString(), context.Request.Path.ToString(), requestLog, accessToken); } //else if (PathDetails?[1] != "swagger") // HelperForLog.WriteLogIntoFile(1, _basePage.UTC_To_IST(), "", "", requestLog); //_logger.LogInformation(1, requestLog); await _next.Invoke(context); } catch (Exception ex) { HelperForLog.WriteErrorLog(_basePage.UTC_To_IST(), "", "", ex.ToString()); } finally { injectedRequestStream.Dispose(); } }
public override void OnResultExecuting(ResultExecutingContext context) { try { //_logger.LogWarning("ClassFilter OnResultExecuting"); // _logger.LogWarning(((string[])((Microsoft.AspNetCore.Mvc.ObjectResult)context.Result).Value)[0]); //base.OnResultExecuting(context); if (!context.ModelState.IsValid) { //context.Result = new ValidationFailedResult(context.ModelState); context.Result = new MyResponse(context.ModelState); } if (((Microsoft.AspNetCore.Http.Internal.DefaultHttpRequest)((Microsoft.AspNetCore.Http.DefaultHttpContext)context.HttpContext).Request).Path.ToString() != _configuration["ASOSToken"].ToString()) { string ReturnCode = ((Core.ApiModels.BizResponseClass)((Microsoft.AspNetCore.Mvc.ObjectResult)context.Result).Value)?.ErrorCode.ToString(); if (ReturnCode == "Status500InternalServerError") { string ReturnMsg = ((CleanArchitecture.Core.ApiModels.BizResponseClass)((Microsoft.AspNetCore.Mvc.ObjectResult)context.Result).Value).ReturnMsg; HelperForLog.WriteLogIntoFile(2, _basePage.UTC_To_IST(), context.HttpContext.Request.Path.ToString(), context.HttpContext.Request.Path.ToString(), ReturnMsg); HelperForLog.WriteErrorLog(_basePage.UTC_To_IST(), context.HttpContext.Request.Path.ToString(), context.HttpContext.Request.Path.ToString(), ReturnMsg); ((CleanArchitecture.Core.ApiModels.BizResponseClass)((Microsoft.AspNetCore.Mvc.ObjectResult)context.Result).Value).ReturnMsg = "Error occurred."; } } //if (((Microsoft.AspNetCore.Mvc.SignInResult)context.Result).AuthenticationScheme.ToString() != "ASOS") //{ // string ReturnCode = ((Core.ApiModels.BizResponseClass)((Microsoft.AspNetCore.Mvc.ObjectResult)context.Result).Value)?.ErrorCode.ToString(); // if (ReturnCode == "Status500InternalServerError") // { // string ReturnMsg = ((CleanArchitecture.Core.ApiModels.BizResponseClass)((Microsoft.AspNetCore.Mvc.ObjectResult)context.Result).Value).ReturnMsg; // HelperForLog.WriteLogIntoFile(2, _basePage.UTC_To_IST(), context.HttpContext.Request.Path.ToString(), context.HttpContext.Request.Path.ToString(), ReturnMsg); // HelperForLog.WriteErrorLog(_basePage.UTC_To_IST(), context.HttpContext.Request.Path.ToString(), context.HttpContext.Request.Path.ToString(), ReturnMsg); // ((CleanArchitecture.Core.ApiModels.BizResponseClass)((Microsoft.AspNetCore.Mvc.ObjectResult)context.Result).Value).ReturnMsg = "Error occurred."; // } //} } catch (Exception ex) { ex.ToString(); } }
public void OnWalletBalChange(WalletMasterResponse Data, string WalletTypeName, string Token, short TokenType = 1) { try { if (TokenType == Convert.ToInt16(enTokenType.ByUserID)) { Token = GetTokenByUserID(Token); } if (!string.IsNullOrEmpty(Token)) { BuyerSideWalletBal(Data, WalletTypeName, Token); SellerSideWalletBal(Data, WalletTypeName, Token); HelperForLog.WriteLogIntoFile("OnWalletBalChange", ControllerName, " Wallet Name : " + WalletTypeName + " Data :" + JsonConvert.SerializeObject(Data)); } } catch (Exception ex) { HelperForLog.WriteErrorLog(System.Reflection.MethodBase.GetCurrentMethod().Name, this.GetType().Name, ex); //throw ex; } }
public void GetAndSendOpenOrderData(TransactionQueue Newtransaction, TradeTransactionQueue NewTradeTransaction, string Token, short OrderType, short IsPop = 0) { try { ActiveOrderInfo OpenOrderModel = new ActiveOrderInfo(); OpenOrderModel.Id = Newtransaction.Id; OpenOrderModel.TrnDate = Newtransaction.TrnDate; OpenOrderModel.Type = (NewTradeTransaction.TrnType == 4) ? "BUY" : "SELL"; OpenOrderModel.Order_Currency = NewTradeTransaction.Order_Currency; OpenOrderModel.Delivery_Currency = NewTradeTransaction.Delivery_Currency; if (IsPop == 1) { OpenOrderModel.Amount = 0; } else { OpenOrderModel.Amount = (NewTradeTransaction.BuyQty == 0) ? NewTradeTransaction.SellQty : (NewTradeTransaction.SellQty == 0) ? NewTradeTransaction.BuyQty : NewTradeTransaction.BuyQty; } OpenOrderModel.Price = (NewTradeTransaction.BidPrice == 0) ? NewTradeTransaction.AskPrice : (NewTradeTransaction.AskPrice == 0) ? NewTradeTransaction.BidPrice : NewTradeTransaction.BidPrice; OpenOrderModel.IsCancelled = NewTradeTransaction.IsCancelled; OpenOrderModel.OrderType = Enum.GetName(typeof(enTransactionMarketType), OrderType); OpenOrderModel.PairId = NewTradeTransaction.PairID; OpenOrderModel.PairName = NewTradeTransaction.PairName; OpenOrder(OpenOrderModel, Token); HelperForLog.WriteLogIntoFile("GetAndSendOpenOrderData", ControllerName, " After OpenOrder call TRNNO:" + Newtransaction.Id); if (IsPop != 1)//send notification { var msg = EnResponseMessage.SignalRTrnSuccessfullyCreated; msg = msg.Replace("#Price#", OpenOrderModel.Price.ToString()); msg = msg.Replace("#Qty#", OpenOrderModel.Amount.ToString()); ActivityNotification(msg, Token); } } catch (Exception ex) { HelperForLog.WriteErrorLog(System.Reflection.MethodBase.GetCurrentMethod().Name, this.GetType().Name, ex); //throw ex; } }
public void GetAndSendRecentOrderData(TransactionQueue Newtransaction, TradeTransactionQueue NewTradeTransaction, string Token, short OrderType, short IsPop = 0) { try { RecentOrderInfo model = new RecentOrderInfo(); model.TrnNo = NewTradeTransaction.TrnNo; model.Type = (NewTradeTransaction.TrnType == 4) ? "BUY" : "SELL"; model.Price = (NewTradeTransaction.BidPrice == 0) ? NewTradeTransaction.AskPrice : (NewTradeTransaction.AskPrice == 0) ? NewTradeTransaction.BidPrice : NewTradeTransaction.BidPrice; model.Qty = (NewTradeTransaction.BuyQty == 0) ? NewTradeTransaction.SellQty : (NewTradeTransaction.SellQty == 0) ? NewTradeTransaction.BuyQty : NewTradeTransaction.BuyQty; model.DateTime = Newtransaction.TrnDate; model.Status = NewTradeTransaction.StatusMsg; model.PairId = NewTradeTransaction.PairID; model.PairName = NewTradeTransaction.PairName; model.OrderType = Enum.GetName(typeof(enTransactionMarketType), OrderType); RecentOrder(model, Token); HelperForLog.WriteLogIntoFile("GetAndSendRecentOrderData", ControllerName, "After Socket call RecentOrder TRNNO:" + Newtransaction.Id); } catch (Exception ex) { HelperForLog.WriteErrorLog(System.Reflection.MethodBase.GetCurrentMethod().Name, this.GetType().Name, ex); //throw ex; } }
public WalletDrCrResponse DepositionWalletOperation(string timestamp, string address, string coinName, decimal amount, long TrnRefNo, enServiceType serviceType, enWalletTrnType trnType, enWalletTranxOrderType enWalletTranx, enWalletLimitType enWalletLimit, enTrnType routeTrnType, string Token = "") { try { WalletMaster dWalletobj, cWalletObj; string DrRemarks = "", CrRemarks = ""; WalletTypeMaster walletTypeMaster; WalletTransactionQueue objTQDr, objTQCr; //long walletTypeID; WalletDrCrResponse resp = new WalletDrCrResponse(); long owalletID, orgID; WalletTransactionOrder woObj; HelperForLog.WriteLogIntoFile("DepositionWalletOperation", "WalletService", "timestamp:" + timestamp + "," + "coinName:" + coinName + ",TrnRefNo=" + TrnRefNo.ToString() + ",address=" + address + ",amount=" + amount.ToString() + ",Token=" + Token); // moved inside InsertWalletTQDebit //walletTypeMaster = _WalletTypeMasterRepository.GetSingle(e => e.WalletTypeName == coinName); //if (walletTypeMaster == null) //{ // return new WalletDrCrResponse { ReturnCode = enResponseCode.Fail, ReturnMsg = EnResponseMessage.InvalidReq, ErrorCode = enErrorCode.InvalidCoinName }; //} owalletID = GetWalletByAddress(address); if (owalletID == 0) { return(new WalletDrCrResponse { ReturnCode = enResponseCode.Fail, ReturnMsg = EnResponseMessage.InvalidAddress, ErrorCode = enErrorCode.InvalidAddress }); } cWalletObj = _commonRepository.GetById(owalletID); orgID = _walletRepository1.getOrgID(); if (orgID == 0) { return(new WalletDrCrResponse { ReturnCode = enResponseCode.Fail, ReturnMsg = EnResponseMessage.OrgIDNotFound, ErrorCode = enErrorCode.OrgIDNotFound }); } dWalletobj = _commonRepository.FindBy(e => e.WalletTypeID == cWalletObj.WalletTypeID && e.UserID == orgID && e.IsDefaultWallet == 1 && e.Status == 1).FirstOrDefault(); if (dWalletobj == null) { //tqObj = InsertIntoWalletTransactionQueue(Guid.NewGuid().ToString(), orderType, amount, TrnRefNo, UTC_To_IST(), null, dWalletobj.Id, coinName, userID, timestamp, 2, EnResponseMessage.InvalidWallet); return(new WalletDrCrResponse { ReturnCode = enResponseCode.Fail, ReturnMsg = EnResponseMessage.InvalidWallet, ErrorCode = enErrorCode.InvalidWallet }); } //ntrivedi 03-11-2018 var charge = _commonWalletFunction.GetServiceLimitChargeValue(enTrnType.Deposit, coinName); if (charge.MaxAmount < amount && charge.MinAmount > amount) { return(new WalletDrCrResponse { ReturnCode = enResponseCode.Fail, ReturnMsg = EnResponseMessage.ProcessTrn_AmountBetweenMinMaxMsg, ErrorCode = enErrorCode.ProcessTrn_AmountBetweenMinMax }); } resp = InsertWalletTQDebit(timestamp, dWalletobj.Id, coinName, amount, TrnRefNo, serviceType, enWalletTrnType.Dr_Debit, enWalletTranx, enWalletLimit); if (resp.ReturnCode != 0 || resp.Status != enTransactionStatus.Initialize) { return(new WalletDrCrResponse { ReturnCode = enResponseCode.Fail, ReturnMsg = resp.StatusMsg, ErrorCode = resp.ErrorCode }); } if (cWalletObj.Status != 1 || cWalletObj.IsValid == false) { // insert with status=2 system failed objTQCr = InsertIntoWalletTransactionQueue(Guid.NewGuid(), enWalletTranxOrderType.Credit, amount, TrnRefNo, UTC_To_IST(), null, dWalletobj.Id, coinName, dWalletobj.UserID, timestamp, enTransactionStatus.SystemFail, EnResponseMessage.InvalidWallet, trnType); objTQCr = _walletRepository1.AddIntoWalletTransactionQueue(objTQCr, 1); return(new WalletDrCrResponse { ReturnCode = enResponseCode.Fail, ReturnMsg = EnResponseMessage.InvalidWallet, ErrorCode = enErrorCode.InvalidWallet, TrnNo = objTQCr.TrnNo, Status = objTQCr.Status, StatusMsg = objTQCr.StatusMsg }); } objTQDr = _walletRepository1.GetTransactionQueue(resp.TrnNo); TrnAcBatch batchObj = _trnBatch.Add(new TrnAcBatch(UTC_To_IST())); DrRemarks = "Debit for Deposition TrnNo:" + TrnRefNo; WalletLedger walletLedgerDr = GetWalletLedgerObj(dWalletobj.Id, cWalletObj.Id, amount, 0, enWalletTrnType.Dr_Debit, serviceType, objTQDr.TrnNo, DrRemarks, dWalletobj.Balance, 1); TransactionAccount tranxAccounDrt = GetTransactionAccount(dWalletobj.Id, 1, batchObj.Id, amount, 0, objTQDr.TrnNo, DrRemarks, 1); dWalletobj.DebitBalance(amount); objTQDr.Status = enTransactionStatus.Success; objTQDr.StatusMsg = "Success"; DrRemarks = "Credit for Deposition TrnNo:" + TrnRefNo; objTQCr = InsertIntoWalletTransactionQueue(Guid.NewGuid(), enWalletTranxOrderType.Credit, amount, TrnRefNo, UTC_To_IST(), null, cWalletObj.Id, coinName, cWalletObj.UserID, timestamp, 0, "Inserted", trnType); objTQCr = _walletRepository1.AddIntoWalletTransactionQueue(objTQCr, 1); woObj = InsertIntoWalletTransactionOrder(null, UTC_To_IST(), cWalletObj.Id, dWalletobj.Id, amount, coinName, objTQCr.TrnNo, objTQDr.TrnNo, 0, "Inserted"); woObj = _walletRepository1.AddIntoWalletTransactionOrder(woObj, 1); WalletLedger walletLedgerCr = GetWalletLedgerObj(cWalletObj.Id, dWalletobj.Id, 0, amount, trnType, serviceType, objTQCr.TrnNo, DrRemarks, cWalletObj.Balance, 1); TransactionAccount tranxAccountCr = GetTransactionAccount(cWalletObj.Id, 1, batchObj.Id, 0, amount, objTQCr.TrnNo, DrRemarks, 1); cWalletObj.CreditBalance(amount); //var objTQ = InsertIntoWalletTransactionQueue(Guid.NewGuid(), orderType, TotalAmount, TrnRefNo, UTC_To_IST(), null, cWalletobj.Id, coinName, userID, timestamp, 1, "Updated"); objTQCr.Status = enTransactionStatus.Success; objTQCr.StatusMsg = "Success"; objTQCr.UpdatedDate = UTC_To_IST(); woObj.Status = enTransactionStatus.Success; woObj.StatusMsg = "Deposition success for RefNo :" + TrnRefNo; woObj.UpdatedDate = UTC_To_IST(); objTQDr.SettedAmt = amount; _walletRepository1.WalletCreditDebitwithTQ(walletLedgerDr, walletLedgerCr, tranxAccountCr, tranxAccounDrt, dWalletobj, cWalletObj, objTQCr, objTQDr, woObj); //ntrivedi temperory //vsolanki 2018-11-1---------------socket method -------------------------- WalletMasterResponse walletMasterObj = new WalletMasterResponse(); walletMasterObj.AccWalletID = cWalletObj.AccWalletID; walletMasterObj.Balance = cWalletObj.Balance; walletMasterObj.WalletName = cWalletObj.Walletname; walletMasterObj.PublicAddress = cWalletObj.PublicAddress; walletMasterObj.AccWalletID = cWalletObj.AccWalletID; walletMasterObj.CoinName = coinName; var msg = EnResponseMessage.CreditWalletMsg; msg = msg.Replace("#Coin#", coinName); msg = msg.Replace("#TrnType#", routeTrnType.ToString()); msg = msg.Replace("#TrnNo#", TrnRefNo.ToString()); try { _signalRService.OnWalletBalChange(walletMasterObj, coinName, cWalletObj.UserID.ToString(), 2); _signalRService.SendActivityNotification(msg, cWalletObj.UserID.ToString(), 2); } catch (Exception ex2) { HelperForLog.WriteErrorLog(System.Reflection.MethodBase.GetCurrentMethod().Name, this.GetType().Name, ex2); } // OnWalletBalChange(walletMasterObj, coinName, Token); //------------------------------- //vsolanki 2018-11-1---------------socket method -------------------------- //WalletMasterResponse walletMasterObj1 = new WalletMasterResponse(); //walletMasterObj.AccWalletID = cWalletObj.AccWalletID; //walletMasterObj.Balance = cWalletObj.Balance; //walletMasterObj.WalletName = cWalletObj.Walletname; //walletMasterObj.PublicAddress = cWalletObj.PublicAddress; //walletMasterObj.AccWalletID = cWalletObj.AccWalletID; //walletMasterObj.CoinName = coinName; //_signalRService.OnWalletBalChange(walletMasterObj1, coinName, Token); //OnWalletBalChange(walletMasterObj, coinName, Token); //------------------------------- //CreditWalletDrArryTrnID[] arryTrnID = new CreditWalletDrArryTrnID [1]; //arryTrnID[0].Amount = amount; //arryTrnID[0].DrTrnRefNo = TrnRefNo; //resp = GetWalletCreditNew(coinName, timestamp, trnType, amount, cWalletObj.UserID, cWalletObj.AccWalletID, arryTrnID, TrnRefNo,1,enWalletTranxOrderType.Credit,enServiceType.WalletService ); return(new WalletDrCrResponse { ReturnCode = enResponseCode.Success, ReturnMsg = EnResponseMessage.SuccessDebit, ErrorCode = enErrorCode.Success, TrnNo = resp.TrnNo, Status = resp.Status, StatusMsg = resp.StatusMsg }); } catch (Exception ex) { //_log.LogError(ex, "Date: " + UTC_To_IST() + ",\nMethodName:" + System.Reflection.MethodBase.GetCurrentMethod().Name + "\nClassname=" + this.GetType().Name, LogLevel.Error); HelperForLog.WriteErrorLog(System.Reflection.MethodBase.GetCurrentMethod().Name, this.GetType().Name, ex); throw ex; } }
public void OnStatusHold(short Status, TransactionQueue Newtransaction, TradeTransactionQueue NewTradeTransaction, string Token, short OrderType) { try { GetTradeHistoryInfo historyInfo = new GetTradeHistoryInfo(); GetBuySellBook BuySellmodel = new GetBuySellBook(); //add buyer/seller book //add OpenOrder //add recent order // HelperForLog.WriteLogIntoFile("OnStatusHold", ControllerName, " TransactionQueue :" ); if (string.IsNullOrEmpty(Token)) { Token = GetTokenByUserID(NewTradeTransaction.MemberID.ToString()); } List <GetBuySellBook> list = new List <GetBuySellBook>(); if (!string.IsNullOrEmpty(Token)) { if (NewTradeTransaction.TrnType == 4)//Buy { list = _frontTrnRepository.GetBuyerBook(NewTradeTransaction.PairID, NewTradeTransaction.BidPrice); foreach (var model in list) { BuySellmodel = model; break; } if (BuySellmodel.OrderId.ToString() != "00000000-0000-0000-0000-000000000000") { BuyerBook(BuySellmodel, NewTradeTransaction.PairName); HelperForLog.WriteLogIntoFile("OnStatusHold", ControllerName, "BuyerBook call TRNNO:" + Newtransaction.Id + " Pair :" + NewTradeTransaction.PairName); } } else//Sell { list = _frontTrnRepository.GetSellerBook(NewTradeTransaction.PairID, NewTradeTransaction.AskPrice); foreach (var model in list) { BuySellmodel = model; break; } if (BuySellmodel.OrderId.ToString() != "00000000-0000-0000-0000-000000000000") { SellerBook(BuySellmodel, NewTradeTransaction.PairName); HelperForLog.WriteLogIntoFile("OnStatusHold", ControllerName, "SellerBook call TRNNO:" + Newtransaction.Id + " Pair :" + NewTradeTransaction.PairName); } } //var msg = EnResponseMessage.SignalRTrnSuccessfullyCreated; //msg = msg.Replace("#Price#", historyInfo.Price.ToString()); //msg = msg.Replace("#Qty#", historyInfo.Amount.ToString()); //ActivityNotification(msg, Token); GetAndSendOpenOrderData(Newtransaction, NewTradeTransaction, Token, OrderType); HelperForLog.WriteLogIntoFile("OnStatusHold", ControllerName, " Aftre Open Order Socket call TRNNO:" + Newtransaction.Id); GetAndSendRecentOrderData(Newtransaction, NewTradeTransaction, Token, OrderType); HelperForLog.WriteLogIntoFile("OnStatusHold", ControllerName, " Aftre Recent Order Socket call TRNNO:" + Newtransaction.Id); } } catch (Exception ex) { HelperForLog.WriteErrorLog(System.Reflection.MethodBase.GetCurrentMethod().Name, this.GetType().Name, ex); ////throw ex; } }
public async Task Invoke(HttpContext context) { Stream originalBody = context.Response.Body; SignalRUserConfiguration User = new SignalRUserConfiguration(); try { using (var memStream = new MemoryStream()) { var newBody = new MemoryStream(); var newContent = string.Empty; context.Response.Body = memStream; await next(context); var responseLog = $"RESPONSE Host:{context.Request.Host}, HttpMethod: {context.Request.Method}, Path: {context.Request.Path}"; //string ResponsePath = context.Request.Path.ToString(); //string[] ResonseDetails = ResponsePath.Split("/"); if (context.Request.Path == "/connect/token") { memStream.Seek(0, SeekOrigin.Begin); var content = new StreamReader(memStream).ReadToEnd(); memStream.Seek(0, SeekOrigin.Begin); tokanreponsmodel TokenData = JsonConvert.DeserializeObject <tokanreponsmodel>(content); if (TokenData != null && !string.IsNullOrEmpty(TokenData.access_token)) { using (var bodyReader = new StreamReader(context.Request.Body)) { var bodyAsText = bodyReader.ReadToEnd(); if (string.IsNullOrWhiteSpace(bodyAsText) == false) { User = convertStirngToJson(HttpUtility.UrlDecode(bodyAsText)); // User.username = "******"; } if (User != null && !string.IsNullOrEmpty(User.username)) { var Redis = new RadisServices <ConnetedClientToken>(this._fact); var Userdata = _userManager.FindByNameAsync(User.username).GetAwaiter().GetResult(); if (Userdata != null && Userdata.Id != 0) { Redis.SaveWithOrigionalKey("Tokens:" + Userdata.Id, new ConnetedClientToken { Token = TokenData.access_token }); //string AccessToken = Redis.GetHashData("Tokens:" + Userdata.Id, "Token"); } } } } } memStream.Position = 0; string responseBody = new StreamReader(memStream).ReadToEnd(); var erParams = (dynamic)null; if (responseBody.Contains("ReturnCode")) { erParams = JsonConvert.DeserializeObject <ErrorParams>(responseBody); } responseLog += $", Response : {responseBody}"; //if (ResponseDetails?[1] == "api") //{ //Uday 05-11-2018 don't write log for graph method if (context.Request.Path.Value.Split("/")[1] != "swagger" && !context.Request.Path.Value.Contains("GetGraphDetail")) { if (erParams?.ReturnCode != 9) { HelperForLog.WriteLogIntoFile(2, _basePage.UTC_To_IST(), context.Request.Path.ToString(), context.Request.Path.ToString(), responseLog); //HelperForLog.WriteLogIntoFile(2, _basePage.UTC_To_IST(), context.Request.Path.ToString(), context.Request.Path.ToString(), responseLog); //HelperForLog.WriteErrorLog(_basePage.UTC_To_IST(), context.Request.Path.ToString(), context.Request.Path.ToString(), erParams.ReturnMsg); } } //else //{ // HelperForLog.WriteLogIntoFile(2, _basePage.UTC_To_IST(), context.Request.Path.ToString(), context.Request.Path.ToString(), responseLog); //} //} //else if (ResponseDetails?[1] != "swagger") // HelperForLog.WriteLogIntoFile(2, _basePage.UTC_To_IST(), "", "", responseLog); memStream.Position = 0; await memStream.CopyToAsync(originalBody); } } catch (Exception ex) { HelperForLog.WriteErrorLog(_basePage.UTC_To_IST(), "", "", ex.ToString()); } finally { context.Response.Body = originalBody; } }
public Task <BizResponse> PROCESSSETLLEMENT(BizResponse _Resp, TradeBuyRequest TradeBuyRequestObj, ref List <long> HoldTrnNos, string accessToken = "", short IsCancel = 0) { short TrackBit = 0; try { TransactionQueueObj = _TransactionRepository.GetById(TradeBuyRequestObj.TrnNo); TradeTransactionQueueObj = _TradeTransactionRepository.GetSingle(item => item.TrnNo == TradeBuyRequestObj.TrnNo); TradeBuyerListObj = _TradeBuyerList.GetSingle(item => item.TrnNo == TradeBuyRequestObj.TrnNo); _TradeStopLossObj = _TradeStopLoss.GetSingle(item => item.TrnNo == TradeBuyRequestObj.TrnNo); DebitWalletID = TradeTransactionQueueObj.OrderWalletID; DebitAccountID = _WalletService.GetAccWalletID(DebitWalletID); CreditWalletID = TradeTransactionQueueObj.DeliveryWalletID; CreditAccountID = _WalletService.GetAccWalletID(CreditWalletID); if (TradeTransactionQueueObj.IsCancelled == 1 || IsCancel == 1) { //Code for settlement CancellationProcess(_Resp, TradeBuyRequestObj, TransactionQueueObj, TradeTransactionQueueObj); return(Task.FromResult(_Resp)); } if (TradeBuyRequestObj.PendingQty == 0) { _Resp.ErrorCode = enErrorCode.Settlement_AlreadySettled; _Resp.ReturnCode = enResponseCodeService.Success; _Resp.ReturnMsg = "ALready Settled"; return(Task.FromResult(_Resp)); } TradeBuyRequestObj.MakeTransactionHold(); TradeBuyRequestObj.UpdatedDate = Helpers.UTC_To_IST(); TradeBuyRequestObj.IsProcessing = 1; _TradeBuyRequest.Update(TradeBuyRequestObj); TradeBuyerListObj.MakeTransactionHold(); TradeBuyerListObj.UpdatedDate = Helpers.UTC_To_IST(); TradeBuyerListObj.IsProcessing = 1; _TradeBuyerList.Update(TradeBuyerListObj); IEnumerable <TradeSellerList> MatchSellerListBase; //SortedList<TradeSellerList, TradeSellerList> //if (TradeTransactionQueueObj.TrnType == Convert.ToInt16(enTrnType.Buy_Trade))//Take price as Highest and find lower //{ // MatchSellerListBase = _TradeSellerList.FindBy(item => item.Price <= TradeBuyRequestObj.BidPrice && item.IsProcessing == 0 // && item.BuyServiceID == TradeBuyRequestObj.PaidServiceID && // item.SellServiceID == TradeBuyRequestObj.ServiceID // && (item.Status == Convert.ToInt16(enTransactionStatus.Initialize) || item.Status == Convert.ToInt16(enTransactionStatus.Hold)) // && item.RemainQty > 0);//Pending after partial Qty remain //} //else //Take price as Highest and find larger //{ // MatchSellerListBase = _TradeSellerList.FindBy(item => item.Price >= TradeBuyRequestObj.BidPrice && item.IsProcessing == 0 // && item.BuyServiceID == TradeBuyRequestObj.PaidServiceID && // item.SellServiceID == TradeBuyRequestObj.ServiceID // && (item.Status == Convert.ToInt16(enTransactionStatus.Initialize) || item.Status == Convert.ToInt16(enTransactionStatus.Hold)) // && item.RemainQty > 0);//Pending after partial Qty remain //} MatchSellerListBase = _TradeSellerList.FindBy(item => item.Price >= TradeBuyRequestObj.BidPrice && item.IsProcessing == 0 && item.BuyServiceID == TradeBuyRequestObj.PaidServiceID && item.SellServiceID == TradeBuyRequestObj.ServiceID && (item.Status == Convert.ToInt16(enTransactionStatus.Initialize) || item.Status == Convert.ToInt16(enTransactionStatus.Hold)) && item.RemainQty > 0);//Pending after partial Qty remain //var MatchSellerList = MatchSellerListBase.OrderBy(x => x.Price).OrderBy(x => x.TrnNo); var MatchSellerList = MatchSellerListBase.OrderByDescending(x => x.Price).OrderBy(x => x.TrnNo); foreach (TradeSellerList SellerList in MatchSellerList) { if (SellerList.IsProcessing == 1) { continue; } TrackBit = 1; decimal SettlementQty = 0; List <CreditWalletDrArryTrnID> CreditWalletDrArryTrnIDList = new List <CreditWalletDrArryTrnID>(); SellerList.IsProcessing = 1; _TradeSellerList.Update(SellerList); var PoolMst = _TradePoolMaster.GetById(SellerList.PoolID); //====================================Partial SETTLEMENT TO MEMBER if (SellerList.RemainQty < TradeBuyRequestObj.PendingQty) { SettlementQty = SellerList.RemainQty;//Take all Seller's Qty //Topup Order create PoolOrderObj = CreatePoolOrderForSettlement(TradeBuyRequestObj.UserID, SellerList.PoolID, TradeBuyRequestObj.UserID, SellerList.PoolID, TradeBuyRequestObj.TrnNo, SettlementQty, CreditWalletID, CreditAccountID); TradeBuyRequestObj.PendingQty = TradeBuyRequestObj.PendingQty - SettlementQty; TradeBuyRequestObj.DeliveredQty = TradeBuyRequestObj.DeliveredQty + SettlementQty; TradeBuyerListObj.DeliveredQty = TradeBuyerListObj.DeliveredQty + SettlementQty; //Here Bid Price of pool always low then user given in Order , base on above Query decimal TakeDisc = 0; if (SellerList.Price < TradeBuyRequestObj.BidPrice) { TakeDisc = (TradeBuyRequestObj.BidPrice - SellerList.Price) * SettlementQty; } InsertTradePoolQueue(TradeBuyRequestObj.UserID, SellerList.TrnNo, SellerList.PoolID, SellerList.RemainQty, SellerList.Price, TradeBuyRequestObj.TrnNo, SettlementQty, TradeBuyRequestObj.BidPrice, TakeDisc, 0, SellerList.Id); SellerList.RemainQty = SellerList.RemainQty - SettlementQty;//this will give result 0 SellerList.MakeTransactionSuccess(); PoolMst.TotalQty = PoolMst.TotalQty - SettlementQty; PoolOrderObj.MakeTransactionSuccess(); PoolOrderObj.DRemarks = "Delivery Success with " + SellerList.Price; TransactionQueueObj.SetTransactionCode(Convert.ToInt64(enErrorCode.Settlement_PartialSettlementDone)); TransactionQueueObj.SetTransactionStatusMsg("Partial Settlement Done"); decimal SellRelQty = Helpers.DoRoundForTrading(SettlementQty * TradeBuyRequestObj.PaidQty / TradeBuyRequestObj.Qty, 8); TradeTransactionQueueObj.SetTransactionCode(Convert.ToInt64(enErrorCode.Settlement_PartialSettlementDone)); TradeTransactionQueueObj.SetTransactionStatusMsg("Partial Settlement Done"); TradeTransactionQueueObj.SettledBuyQty = TradeTransactionQueueObj.SettledBuyQty + SettlementQty; TradeTransactionQueueObj.SettledSellQty = TradeTransactionQueueObj.SettledSellQty + SellRelQty; CreditWalletDrArryTrnIDList.Add(new CreditWalletDrArryTrnID { DrTrnRefNo = SellerList.TrnNo, Amount = SettlementQty }); _dbContext.Database.BeginTransaction(); _dbContext.Set <TradePoolQueue>().Add(TradePoolQueueObj); _dbContext.Entry(PoolOrderObj).State = EntityState.Modified; _dbContext.Entry(TradeBuyRequestObj).State = EntityState.Modified; _dbContext.Entry(SellerList).State = EntityState.Modified; _dbContext.Entry(PoolMst).State = EntityState.Modified; _dbContext.Entry(TradeBuyerListObj).State = EntityState.Modified; _dbContext.Entry(TransactionQueueObj).State = EntityState.Modified; _dbContext.Entry(TradeTransactionQueueObj).State = EntityState.Modified; var CreditWalletResult = _WalletService.GetWalletCreditNew(TradeTransactionQueueObj.Delivery_Currency, Helpers.GetTimeStamp(), enWalletTrnType.Cr_Buy_Trade, SettlementQty, TradeBuyRequestObj.UserID, CreditAccountID, CreditWalletDrArryTrnIDList.ToArray(), TradeBuyRequestObj.TrnNo, 0, enWalletTranxOrderType.Credit, enServiceType.Trading, (enTrnType)TransactionQueueObj.TrnType); if (CreditWalletResult.ReturnCode != enResponseCode.Success) { HelperForLog.WriteLogIntoFile("PROCESSSETLLEMENT RollbackTransaction", ControllerName, "Balance credit fail" + CreditWalletResult.ReturnMsg + "##TrnNo:" + TradeBuyRequestObj.TrnNo); _dbContext.Database.RollbackTransaction(); _Resp.ErrorCode = enErrorCode.Settlement_PartialSettlementRollback; _Resp.ReturnCode = enResponseCodeService.Success; _Resp.ReturnMsg = "Partial Settlement RollBack TrnNo " + TradeBuyRequestObj.TrnNo + " With: TrnNo " + SellerList.TrnNo + " Reason: " + CreditWalletResult.ReturnMsg; } else { _dbContext.SaveChanges(); _dbContext.Database.CommitTransaction(); HelperForLog.WriteLogIntoFile("PROCESSSETLLEMENT", ControllerName, "Partial Settlement Done with " + SellerList.TrnNo + "##TrnNo:" + TradeBuyRequestObj.TrnNo); _Resp.ErrorCode = enErrorCode.Settlement_PartialSettlementDone; _Resp.ReturnCode = enResponseCodeService.Success; _Resp.ReturnMsg = "Partial Settlement Done of TrnNo " + TradeBuyRequestObj.TrnNo + " Settled: " + TradeBuyRequestObj.DeliveredQty + " Remain:" + TradeBuyRequestObj.PendingQty; //Continuew as record Partially settled try { _ISignalRService.OnStatusPartialSuccess(Convert.ToInt16(enTransactionStatus.Success), TransactionQueueObj, TradeTransactionQueueObj, accessToken, _TradeStopLossObj.ordertype);//komal //(short Status, TransactionQueue Newtransaction, TradeTransactionQueue NewTradeTransaction, string Token, short OrderType, short IsPartial=0) } catch (Exception ex) { HelperForLog.WriteLogIntoFile("ISignalRService", ControllerName, "Partial Settlement Error " + ex.Message + "##TrnNo:" + TradeBuyRequestObj.TrnNo); } } HoldTrnNos.Add(SellerList.TrnNo); } //====================================FULL SETTLEMENT TO MEMBER else if (SellerList.RemainQty >= TradeBuyRequestObj.PendingQty && TradeBuyRequestObj.PendingQty != 0) { SettlementQty = TradeBuyRequestObj.PendingQty; //Topup Order create PoolOrderObj = CreatePoolOrderForSettlement(TradeBuyRequestObj.UserID, SellerList.PoolID, TradeBuyRequestObj.UserID, SellerList.PoolID, TradeBuyRequestObj.TrnNo, SettlementQty, CreditWalletID, CreditAccountID); //Here Bid Price of pool always low then user given in Order , base on above Query decimal TakeDisc = 0; if (SellerList.Price < TradeBuyRequestObj.BidPrice) { TakeDisc = (TradeBuyRequestObj.BidPrice - SellerList.Price) * SettlementQty; } InsertTradePoolQueue(TradeBuyRequestObj.UserID, SellerList.TrnNo, SellerList.PoolID, SellerList.RemainQty, SellerList.Price, TradeBuyRequestObj.TrnNo, SettlementQty, TradeBuyRequestObj.BidPrice, TakeDisc, 0, SellerList.Id); SellerList.RemainQty = SellerList.RemainQty - SettlementQty;//Update first as updated value in below line SellerList.MakeTransactionHold(); PoolMst.TotalQty = PoolMst.TotalQty - SettlementQty; TradeBuyRequestObj.DeliveredQty = TradeBuyRequestObj.DeliveredQty + SettlementQty; //Fully settled Here TradeBuyRequestObj.PendingQty = TradeBuyRequestObj.PendingQty - SettlementQty; //this will 0 TradeBuyRequestObj.MakeTransactionSuccess(); TradeBuyerListObj.MakeTransactionSuccess(); TransactionQueueObj.MakeTransactionSuccess(); TransactionQueueObj.SetTransactionCode(Convert.ToInt64(enErrorCode.Settlement_FullSettlementDone)); TransactionQueueObj.SetTransactionStatusMsg("Full Settlement Done"); TradeTransactionQueueObj.MakeTransactionSuccess(); TradeTransactionQueueObj.SetTransactionCode(Convert.ToInt64(enErrorCode.Settlement_FullSettlementDone)); TradeTransactionQueueObj.SetTransactionStatusMsg("Full Settlement Done"); decimal SellRelQty = Helpers.DoRoundForTrading(SettlementQty * TradeBuyRequestObj.PaidQty / TradeBuyRequestObj.Qty, 8); TradeTransactionQueueObj.SettledBuyQty = TradeTransactionQueueObj.SettledBuyQty + SettlementQty; TradeTransactionQueueObj.SettledSellQty = TradeTransactionQueueObj.SettledSellQty + SellRelQty; TradeBuyerListObj.DeliveredQty = TradeBuyerListObj.DeliveredQty + SettlementQty; PoolOrderObj.MakeTransactionSuccess(); PoolOrderObj.DRemarks = "Delivery Success with " + SellerList.Price; CreditWalletDrArryTrnIDList.Add(new CreditWalletDrArryTrnID { DrTrnRefNo = SellerList.TrnNo, Amount = SettlementQty }); _dbContext.Database.BeginTransaction(); _dbContext.Set <TradePoolQueue>().Add(TradePoolQueueObj); _dbContext.Entry(PoolOrderObj).State = EntityState.Modified; _dbContext.Entry(TradeBuyRequestObj).State = EntityState.Modified; _dbContext.Entry(SellerList).State = EntityState.Modified; _dbContext.Entry(PoolMst).State = EntityState.Modified; _dbContext.Entry(TradeBuyerListObj).State = EntityState.Modified; _dbContext.Entry(TransactionQueueObj).State = EntityState.Modified; _dbContext.Entry(TradeTransactionQueueObj).State = EntityState.Modified; var CreditWalletResult = _WalletService.GetWalletCreditNew(TradeTransactionQueueObj.Delivery_Currency, Helpers.GetTimeStamp(), enWalletTrnType.Cr_Buy_Trade, SettlementQty, TradeBuyRequestObj.UserID, CreditAccountID, CreditWalletDrArryTrnIDList.ToArray(), TradeBuyRequestObj.TrnNo, 1, enWalletTranxOrderType.Credit, enServiceType.Trading, (enTrnType)TransactionQueueObj.TrnType); if (CreditWalletResult.ReturnCode != enResponseCode.Success) { HelperForLog.WriteLogIntoFile("PROCESSSETLLEMENT RollbackTransaction", ControllerName, "Balance credit fail" + CreditWalletResult.ReturnMsg + "##TrnNo:" + TradeBuyRequestObj.TrnNo); _dbContext.Database.RollbackTransaction(); _Resp.ErrorCode = enErrorCode.Settlement_FullSettlementRollback; _Resp.ReturnCode = enResponseCodeService.Success; _Resp.ReturnMsg = "Full Settlement Rollback TrnNo:" + TradeBuyRequestObj.TrnNo + " With: TrnNo " + SellerList.TrnNo + " Reason:" + CreditWalletResult.ReturnMsg; } else { _dbContext.SaveChanges(); _dbContext.Database.CommitTransaction(); HelperForLog.WriteLogIntoFile("PROCESSSETLLEMENT", ControllerName, "Full Settlement Done with " + SellerList.TrnNo + "##TrnNo:" + TradeBuyRequestObj.TrnNo); _Resp.ErrorCode = enErrorCode.Settlement_FullSettlementDone; _Resp.ReturnCode = enResponseCodeService.Success; _Resp.ReturnMsg = "Full Settlement Done of TrnNo " + TradeBuyRequestObj.TrnNo + " Settled: " + TradeBuyRequestObj.DeliveredQty + " Remain:" + TradeBuyRequestObj.PendingQty; try { _ISignalRService.OnStatusSuccess(Convert.ToInt16(enTransactionStatus.Success), TransactionQueueObj, TradeTransactionQueueObj, accessToken, _TradeStopLossObj.ordertype); //komal //==============Volume update only after success if (TradeTransactionQueueObj.TrnType == Convert.ToInt16(enTrnType.Buy_Trade)) { _IFrontTrnService.GetPairAdditionalVal(TradeTransactionQueueObj.PairID, TradeTransactionQueueObj.BidPrice, TradeTransactionQueueObj.TrnNo, TradeTransactionQueueObj.BuyQty, TradeTransactionQueueObj.TrnDate); } else { _IFrontTrnService.GetPairAdditionalVal(TradeTransactionQueueObj.PairID, TradeTransactionQueueObj.AskPrice, TradeTransactionQueueObj.TrnNo, TradeTransactionQueueObj.SellQty, TradeTransactionQueueObj.TrnDate); } EmailSendAsync(TradeBuyRequestObj.UserID.ToString(), Convert.ToInt16(enTransactionStatus.Success), TradeTransactionQueueObj.PairName, TradeTransactionQueueObj.PairName.Split("_")[1], TradeTransactionQueueObj.TrnDate.ToString(), TradeTransactionQueueObj.DeliveryTotalQty, TradeTransactionQueueObj.OrderTotalQty, 0); } catch (Exception ex) { HelperForLog.WriteLogIntoFile("ISignalRService", ControllerName, "Full Settlement Error " + ex.Message + "##TrnNo:" + TradeBuyRequestObj.TrnNo); } } HoldTrnNos.Add(SellerList.TrnNo); _dbContext.Entry(SellerList).Reload(); SellerList.IsProcessing = 0; //Release Seller List _TradeSellerList.Update(SellerList); break; //record settled } //====================take always latest object from DB //==========as if txn not commit so dbnot change and object value changes , so take object value from DB _dbContext.Entry(TradeBuyRequestObj).Reload(); _dbContext.Entry(TransactionQueueObj).Reload(); _dbContext.Entry(TradeTransactionQueueObj).Reload(); _dbContext.Entry(TradeBuyerListObj).Reload(); _dbContext.Entry(SellerList).Reload(); SellerList.IsProcessing = 0;//Release Seller List _TradeSellerList.Update(SellerList); } TradeBuyRequestObj.IsProcessing = 0;//Release Buy Order _TradeBuyRequest.Update(TradeBuyRequestObj); TradeBuyerListObj.IsProcessing = 0; _TradeBuyerList.Update(TradeBuyerListObj); if (TrackBit == 0)//No any record Process { _Resp.ErrorCode = enErrorCode.Settlement_NoSettlementRecordFound; _Resp.ReturnCode = enResponseCodeService.Success; _Resp.ReturnMsg = "No Any Match Record Found"; } } catch (Exception ex) { HelperForLog.WriteErrorLog("PROCESSSETLLEMENT:##TrnNo " + TradeBuyRequestObj.TrnNo, ControllerName, ex); _Resp.ReturnCode = enResponseCodeService.Fail; _Resp.ReturnMsg = ex.Message; _Resp.ErrorCode = enErrorCode.Settlement_SettlementInternalError; } return(Task.FromResult(_Resp)); }