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; }
/// <summary> /// 入队 /// </summary> /// <param name="box"></param> public void Enqueue(string orderid) { _provider.Enqueue(orderid); }