public async Task<bool> ReceiveAndProcessNextEnvelopesAsync(Guid costCentreApplicationId)
        {
            List<Guid> batchIds = _configRepository.GetDeliveredCommandEnvelopeIds();
            if (batchIds == null)
            {
                batchIds = new List<Guid>();
                batchIds.Add(Guid.Empty);
            }
            EnvelopeRoutingRequest request= new EnvelopeRoutingRequest();
            request.BatchSize = 10;
            request.CostCentreApplicationId = costCentreApplicationId;
            request.DeliveredEnvelopeIds = batchIds;

            BatchDocumentCommandEnvelopeRoutingResponse response = await _webApiProxy.GetNextCommandEnvelopesAsync(request); ;

            
            if (response == null)
                return false;
            _configRepository.ClearDeliveredCommandEnvelopeIds();
            if (response.Envelopes.Count == 0)
            {

                return true;
            }
            foreach (CommandEnvelopeWrapper envelopeWrapper in response.Envelopes.OrderBy(s=>s.EnvelopeArrivedAtServerTick))
            {
                try
                {
                   _incomingCommandHandler.HandleCommandEnvelope(envelopeWrapper.Envelope);
                }
                catch (Exception ex)
                {
                    string error = ex.AllMessages();
                    
                    break;
                }
            }
            if (response.Envelopes.Count != 0)
            {
                return await ReceiveAndProcessNextEnvelopesAsync(costCentreApplicationId);
            }
            return true;
        }
        public HttpResponseMessage GetNextDocumentCommandEnvelopes(EnvelopeRoutingRequest request)
        {
            string pullType = "Inventory";
            _log.InfoFormat("GetNextDocumentCommandEnvelopes  from CCAPPId : {0} with batchSize : {1}", request.CostCentreApplicationId, request.BatchSize);
            Guid ccid = _costCentreApplicationService.GetCostCentreFromCostCentreApplicationId(request.CostCentreApplicationId);
            BatchDocumentCommandEnvelopeRoutingResponse response = null;
            List<Guid> lastBatchEnvelopesIds = request.DeliveredEnvelopeIds;
            try
            {
                if (_costCentreApplicationService.IsCostCentreActive(request.CostCentreApplicationId))
                {
                    response = _commandEnvelopeRouterResponseBuilder.GetNextInventoryCommandEnvelopes(request.CostCentreApplicationId, ccid,
                                                                                lastBatchEnvelopesIds, request.BatchSize);
                    if (response.Envelopes.Count == 0)
                    {
                        pullType = "Other";
                        response=_commandEnvelopeRouterResponseBuilder.GetNextCommandEnvelopes(request.CostCentreApplicationId, ccid,
                                                                                lastBatchEnvelopesIds, request.BatchSize);
                    }
                   
                }
                else
                {
                    response = new BatchDocumentCommandEnvelopeRoutingResponse { ErrorInfo = "Inactive CostCentre Application Id" };
                }

            }
            catch (Exception ex)
            {
                response = new BatchDocumentCommandEnvelopeRoutingResponse { ErrorInfo = "Failed to get next document command" };
                _log.InfoFormat("ERROR GetNextDocumentCommandEnvelopes   from CCAPPId : {0} with batchsize : {1}", request.CostCentreApplicationId, request.BatchSize);
                _log.Error(ex);
            }

            AuditCCHit(ccid, "GetNextDocumentCommandEnvelopes", JsonConvert.SerializeObject(response.Envelopes.Select(s=>new {s.DocumentType,s.Envelope.Id})), pullType + " OK " + JsonConvert.SerializeObject(request));

            
            return Request.CreateResponse(HttpStatusCode.OK, response);
        }
Пример #3
0
 public async Task<BatchDocumentCommandEnvelopeRoutingResponse> GetNextCommandEnvelopesAsync(EnvelopeRoutingRequest request)
 {
     
     string url = string.Format("api/commandenveloperouting/GetNextEnvelopes");
     var httpClient = setupClient();
     var response = await httpClient.PostAsJsonAsync(url, request);
     var routingResponse = await response.Content.ReadAsAsync<BatchDocumentCommandEnvelopeRoutingResponse>();
     return routingResponse;
 }