public Queue <GrappedRecharge> GetPendingRechargeQueue(int queueNo, int count = 100) { var masterDataTable = db.GetData("Select * from v_pending_recharge_req t WHERE queue_no=" + queueNo + " AND ROWNUM < " + count + " order by dcreatedon", null); if (masterDataTable == null) { return(null); } if (masterDataTable.Rows.Count == 0) { return(null); } var results = new Queue <GrappedRecharge>(); foreach (DataRow row in masterDataTable.Rows) { var obj = new GrappedRecharge(); obj.Id = row["row_id"] == DBNull.Value ? -1 : int.Parse(row["row_id"].ToString()); obj.SubscriberNo = row["subs_no"] == DBNull.Value ? string.Empty : row["subs_no"].ToString(); obj.MasterId = row["cl_id"] == DBNull.Value ? int.MinValue : int.Parse(row["cl_id"].ToString()); obj.Amount = row["amount"] == DBNull.Value ? 0 : double.Parse(row["amount"].ToString()); obj.PointOfSaleId = row["pos_id"] == DBNull.Value ? string.Empty : row["pos_id"].ToString(); obj.PointOfSaleAccount = row["pos_acc"] == DBNull.Value ? 0 : int.Parse(row["pos_acc"].ToString()); obj.AccessChannelId = row["access_channel"] == DBNull.Value ? string.Empty : row["access_channel"].ToString(); obj.Status = row["status"] == DBNull.Value ? 0 :int.Parse(row["status"].ToString()); obj.StatusTime = row["status_time"] == DBNull.Value ? DateTime.MinValue :DateTime.Parse(row["status_time"].ToString()); obj.QueueNo = row["queue_no"] == DBNull.Value ? 0 :int.Parse(row["queue_no"].ToString()); obj.RefNo = row["ref_no"] == DBNull.Value ? string.Empty : row["ref_no"].ToString(); obj.RefMessage = row["ref_message"] == DBNull.Value ? string.Empty : row["ref_message"].ToString(); obj.RefTransNo = row["ref_trans_no"] == DBNull.Value ? string.Empty : row["ref_trans_no"].ToString(); obj.RefTime = row["ref_time"] == DBNull.Value ? DateTime.MinValue :DateTime.Parse(row["ref_time"].ToString()); obj.DebugInfo = row["debug_info"] == DBNull.Value ? string.Empty : row["debug_info"].ToString(); obj.ApiTransaction = row["api_trans"] == DBNull.Value ? 0 : int.Parse(row["api_trans"].ToString()); results.Enqueue(obj); } return(results); }
private void bw_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; GrappedRecharge GrabbedRequest = null; string msg = string.Empty; for (int i = 1; (i <= 10); i++) { if ((worker.CancellationPending == true)) { e.Cancel = true; break; } else { // Perform a time consuming operation and report progress. if (!chnotfetch.Checked) { QueuedRequests = new RechargeRepo(db, null).GetPendingRechargeQueue(int.Parse(ch)); if (!object.ReferenceEquals(QueuedRequests, null) && (QueuedRequests.Count > 0)) { msg = Environment.NewLine + DateTime.Now.ToString("dd HH:mm:ss") + " Load " + QueuedRequests.Count.ToString() + " request(s) from database"; logmessage = msg; worker.ReportProgress(40, msg); if (!chwithoutlog.Checked) { WritingLOGToFILE(logmessage); } while (QueuedRequests.Count > 0 && !chnotfetch.Checked) { //Thread.Sleep(2000); int RequestsLeft = QueuedRequests.Count; GrabbedRequest = QueuedRequests.Dequeue(); #region ...solve redundancy message //if (GrabbedRequest.RequestQueueCommandId != (int)COMMANDS.PAYMENT_ROLLBACK // && GrabbedRequest.RequestQueueCommandId != (int)COMMANDS.YM_BONUS // && Utility.isRedundancyMessage(GrabbedRequest.Client_Mobile, GrabbedRequest.Client_Message, GrabbedRequest.Req_Time)) //{ // //////////////////////////////////////////////////////////// // sms_outmessage OutMessage = new sms_outmessage(); // OutMessage.Short_Code = SharedParams.Short_Code; // string Msg = SharedParams.System_Messages["REDUNDANCY_CMD"]; // OutMessage.Message = Msg; // OutMessage.Mobile_No = GrabbedRequest.Client_Mobile; // OutMessage.Create(); // GrabbedRequest.Debug_Info = SharedParams.System_Messages["REDUNDANCY_CMD"]; // GrabbedRequest.Lifecycle = "REDUNDANCY_CMD"; // GrabbedRequest.CloseRequestWithFail(); // //////////////////////////////////////////////////////////// // worker.ReportProgress(40, "REDUNDANCY_CMD"); // return; //} #endregion //Utility.WritingLOGToFILE("-----------------------------------------------------------------"); //Utility.WritingLOGToFILE("ReqId[ "+GrabbedRequest.Id.ToString()+" ]"); msg = Environment.NewLine + DateTime.Now.ToString("dd HH:mm:ss") + " No[" + RequestsLeft + "] [" + GrabbedRequest.MasterId.ToString() + "] Recharge " + GrabbedRequest.SubscriberNo + "(" + GrabbedRequest.Amount.ToString("N0") + ") ..."; logmessage = msg; worker.ReportProgress(40, msg); #region Recharge var watch = System.Diagnostics.Stopwatch.StartNew(); AttachMessage = string.Empty; Operations operation = new Operations(db); var result = operation.DoRecharge(GrabbedRequest); watch.Stop(); double elapsedMs = watch.ElapsedMilliseconds; msg = operation.resultDisplayMsg + " within " + Math.Round(elapsedMs / 1000, 2) + " sec "; logmessage += msg; worker.ReportProgress(40, msg); if (!chwithoutlog.Checked) { WritingLOGToFILE(logmessage); } #endregion } } //(GrabbedRequest != null) else { msg = Environment.NewLine + DateTime.Now.ToString("dd HH:mm:ss") + " Loading 0 request(s) from database"; logmessage += msg; if (!chwithoutlog.Checked) { WritingLOGToFILE(logmessage); } worker.ReportProgress(0, msg); Thread.Sleep(NoRowsWaitTimeout); } //System.Threading.Thread.Sleep(2000); //worker.ReportProgress((i * 10)); } } } }
public async Task <RechargeResponseDto> DoRecharge(GrappedRecharge recharge) { //Thread.Sleep(2000); #region Local test var result = new RechargeResponseDto(); var watch = System.Diagnostics.Stopwatch.StartNew(); BasicHttpBinding httpBinding = new BasicHttpBinding(); EndpointAddress p = new EndpointAddress(SharedParams.OCSEndpoint); //Start Send Request------------------------------ - var payService = new CBSService.CBSInterfaceAccountMgrClient(httpBinding, p); { /// payService = SharedParams.OCSEndpoint; CBSService.PaymentRequestMsg msg = new CBSService.PaymentRequestMsg(); CBSService.RequestHeader reqheader = new CBSService.RequestHeader(); reqheader.SessionEntity = new CBSService.SessionEntityType(); reqheader.SessionEntity.Name = SharedParams.OCSApiUser; reqheader.SessionEntity.Password = SharedParams.OCSApiPassword; reqheader.TransactionId = ""; reqheader.SequenceId = "1"; reqheader.CommandId = "Payment"; reqheader.Version = "1"; reqheader.SerialNo = ""; reqheader.RequestType = CBSService.RequestHeaderRequestType.Event; reqheader.SessionEntity.RemoteAddress = SharedParams.PaymentRemoteAddress; msg.RequestHeader = reqheader; msg.PaymentRequest = new CBSService.PaymentRequest(); msg.PaymentRequest.SubscriberNo = recharge.SubscriberNo; msg.PaymentRequest.PaymentAmt = Convert.ToInt64(recharge.Amount) * 100; msg.PaymentRequest.PaymentMode = "1000"; msg.PaymentRequest.TransactionCode = $"VTU{recharge.Id}"; msg.PaymentRequest.RefillProfileID = recharge.Amount.ToString(); try { var requestResult = await payService.PaymentAsync(msg); if (requestResult != null) { result.ResultCode = requestResult.PaymentResultMsg.ResultHeader.ResultCode; result.ResultDesc = requestResult.PaymentResultMsg.ResultHeader.ResultDesc; result.TransNo = requestResult.PaymentResultMsg.PaymentResult.InternalSerialNo; } else { result.ResultCode = "-1001"; result.ResultDesc = "OCS return null"; } } catch (Exception ex) { result.ResultCode = "-1000"; result.ResultDesc = ex.GetType().Name + "-" + ex.Message; } } //} // End Send Request ------------------------------- //await HTTPClientWrapper<RechargeResponseDto>.Get(""); watch.Stop(); double elapsedMs = watch.ElapsedMilliseconds; var collection = new RechargeCollection(); collection.Id = recharge.MasterId; collection.Status.Id = result.ResultCode == SharedParams.SuccessPaymentCode ? 1 : 2; collection.RefNo = result.ResultCode.ToString(); collection.RefMessage = result.ResultDesc; collection.RefTransNo = result.TransNo; collection.RefTime = DateTime.Now; collection.DebugInfo = result.ResultDesc + " OCS(" + elapsedMs + ")"; resultDisplayMsg = collection.DebugInfo; elapsedMs = 0; watch = System.Diagnostics.Stopwatch.StartNew(); var dbResult = new RechargeRepo(db, null).UpdateWithBalance(collection); watch.Stop(); elapsedMs = watch.ElapsedMilliseconds; resultDisplayMsg += " DB(" + elapsedMs + ")"; return(result); #endregion }