Esempio n. 1
0
        private void StartCancelOrder()
        {
            var sw = new Stopwatch();

            while (true)
            {
                try
                {
                    if (_tryStop)
                    {
                        break;
                    }

                    if (_provider.IsEmpty)
                    {
                        //Tim: Get all pending orders.
                        var pendingCancelOrders = this._orderHLogManager.GetPendingOrderHLog();
                        if (pendingCancelOrders != null && pendingCancelOrders.Count() > 0)
                        {
                            foreach (var ttorderId in pendingCancelOrders)
                            {
                                _provider.Enqueue(ttorderId);
                            }
                        }

                        Thread.Sleep(5000);

                        continue;
                    }
                    if (_provider.TryDequeue(out string tt_OrderId))
                    {
                        _logger.LogInformation($"Start cancel order!");
                        sw.Restart();

                        var orderHLog = this._orderHLogManager.GetOrderHLog(tt_OrderId);

                        if (orderHLog != null)
                        {
                            try
                            {
                                int retries = orderHLog.Retried + 1;

                                orderHLog.Retried = retries;

                                DDAHMACDelegatingHandler _handler = new DDAHMACDelegatingHandler(this._options.T_AppId, this._options.T_SecretKey);
                                using (HttpClient _client = HttpClientFactory.Create(_handler))
                                {
                                    HttpResponseMessage response = _client.PostAsJsonAsync($"{this._options.T_CallBackBaseUrl}cancelOrderfrompos", new { Id = tt_OrderId }).GetAwaiter().GetResult();

                                    string responseString = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();

                                    ResponseFromCallback data = JsonConvert.DeserializeObject <ResponseFromCallback>(responseString);



                                    if (response.IsSuccessStatusCode)
                                    {
                                        if (data.Code == 0)
                                        {
                                            orderHLog.Message = "OK";
                                            this._logger.LogInformation($"{orderHLog.OrderNo} is canceled successfully.");
                                            orderHLog.Status = OrderHLogStatus.Success.Code;
                                            this._orderHLogManager.UpdateOrderHLog(orderHLog).GetAwaiter().GetResult();
                                        }
                                        else
                                        {
                                            var message = $"Error. CancelOrder Callback - TTOrderId: {tt_OrderId} - of is failed. Reason: {data.Message}";
                                            if (orderHLog.Retried > 10)
                                            {
                                                orderHLog.Message = message;
                                                orderHLog.Status  = OrderHLogStatus.Failed.Code;
                                                this._logger.LogError(message);
                                                this._orderHLogManager.UpdateOrderHLog(orderHLog).GetAwaiter().GetResult();
                                            }
                                            else
                                            {
                                                orderHLog.Message = message;
                                                orderHLog.Status  = OrderHLogStatus.Pending.Code;
                                                this._logger.LogError(message);
                                                this._orderHLogManager.UpdateOrderHLog(orderHLog).GetAwaiter().GetResult();
                                            }
                                        }
                                    }
                                    else
                                    {
                                        var message = $"Error.  CancelOrder Callback - TTOrderId: {tt_OrderId} - failed. Reason: {response.ReasonPhrase}";

                                        if (orderHLog.Retried > 10)
                                        {
                                            orderHLog.Message = message;
                                            orderHLog.Status  = OrderHLogStatus.Failed.Code;
                                            this._logger.LogError(message);
                                            this._orderHLogManager.UpdateOrderHLog(orderHLog).GetAwaiter().GetResult();
                                        }
                                        else
                                        {
                                            orderHLog.Message = message;
                                            orderHLog.Status  = OrderHLogStatus.Pending.Code;
                                            this._logger.LogError(message);
                                            this._orderHLogManager.UpdateOrderHLog(orderHLog).GetAwaiter().GetResult();
                                        }
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                var message = $"CancelOrder Callback - TTOrderId: {tt_OrderId} - failed. Reason: {ex.Message}";

                                if (orderHLog.Retried > 10)
                                {
                                    orderHLog.Message = message;
                                    orderHLog.Status  = OrderHLogStatus.Failed.Code;
                                    this._logger.LogError(message);
                                    this._orderHLogManager.UpdateOrderHLog(orderHLog).GetAwaiter().GetResult();
                                }
                                else
                                {
                                    orderHLog.Message = message;
                                    orderHLog.Status  = OrderHLogStatus.Pending.Code;
                                    this._logger.LogError(message);
                                    this._orderHLogManager.UpdateOrderHLog(orderHLog).GetAwaiter().GetResult();
                                }
                            }
                        }

                        sw.Stop();
                        _logger.LogInformation($"Stop Sending Order! Time elapsed: {sw.Elapsed.TotalSeconds}");
                    }
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, "QueueManager Exception");
                }
            }


            _logger.LogInformation("Cancel Order processing thread is going to end without error. Exit maually!!");
            _tryStop   = false;
            _isRunning = false;
        }
Esempio n. 2
0
 /// <summary>
 /// 入队
 /// </summary>
 /// <param name="box"></param>
 public void Enqueue(string orderid)
 {
     _provider.Enqueue(orderid);
 }