Ejemplo n.º 1
0
        public void ProcessOrders()
        {
            int batchSize = int.Parse(ConfigurationManager.AppSettings["BatchSize"].ToString());

            Console.Write(string.Format("Batch Size: {0}", batchSize));
            Console.ReadLine();
            Console.WriteLine();

            EConnectCreateOrderResponse response = null;
            List<RFIDPassMediaReissueStage> orders = GetRFIDPassMediaReissueStageByStatus(Enums.OrderStatus.Pending);
            List<RFIDPassMediaReissueDetailStage> orderDetails = null;

            foreach (RFIDPassMediaReissueStage order in orders)
            {
                orderDetails = GetRFIDPassMediaReissueDetailStageByPrimaryIPCode(order.PrimaryIPCode);

                //Process request
                try
                {
                    response = ProcessRequest(orderDetails);
                }
                catch(Exception ex)
                {
                    response = new EConnectCreateOrderResponse();
                    response.ResponseCode = 1;
                    response.ResponseMessage = ex.Message;
                }

                //Update DB
                try
                {
                    using (var context = new RTPContext())
                    {
                        order.StatusID = response.ResponseCode == 0 ? Enums.OrderStatus.Processed.GetHashCode() : Enums.OrderStatus.Error.GetHashCode();

                        //Parent record is success but there was an error with at least one of the household users
                        if (order.StatusID == Enums.OrderStatus.Processed.GetHashCode() && response.EConnectFulfillOrderResponse.EConnectFulfillOrderDetailResponses.Where(d => d.ResponseCode != 0).Count() > 0)
                        {
                            order.StatusID = Enums.OrderStatus.PartialError.GetHashCode();
                        }

                        order.UpdateDate = DateTime.Now;
                        order.ErrorMessage = response.ResponseMessage;
                        if (response.SupplierOrderID > 0)
                        {
                            order.OrderID = response.SupplierOrderID;
                        }

                        context.RFIDPassMediaReissueStages.Attach(order);
                        context.Entry(order).State = EntityState.Modified;

                        //If null then the order was never created so don't update RFIDPassMediaReissueDetailStage table
                        if (response.EConnectFulfillOrderResponse != null)
                        {
                            foreach (RFIDPassMediaReissueDetailStage detail in orderDetails)
                            {
                                EConnectFulfillOrderDetailResponse responseDetail = response.EConnectFulfillOrderResponse.EConnectFulfillOrderDetailResponses.Where(d => d.IPCode == detail.IPCode).FirstOrDefault();

                                detail.ErrorMessage = responseDetail.ResponseMessage;
                                detail.StatusID = responseDetail.ResponseCode == 0 ? Enums.OrderStatus.Processed.GetHashCode() : Enums.OrderStatus.Error.GetHashCode();

                                context.RFIDPassMediaReissueDetailStages.Attach(detail);
                                context.Entry(detail).State = EntityState.Modified;
                            }
                        }

                        context.SaveChanges();

                        if (order.StatusID == Enums.OrderStatus.Processed.GetHashCode())
                        {
                            Console.WriteLine(string.Format("SUCCESS for PrimaryIPCode: {0}", order.PrimaryIPCode));
                        }
                        else
                        {
                            Console.WriteLine(string.Format("ERROR for PrimaryIPCode: {0}", order.PrimaryIPCode));
                        }
                        Console.WriteLine();
                    }
                }
                catch(Exception ex)
                {
                    string message = ex.Message + "\r\n" + ex.StackTrace + "\r\n DistributorOrderID: " + (string.IsNullOrEmpty(response.DistributorOrderID) ? "" : response.DistributorOrderID);
                    message += "\r\n PrimaryIPCode:" + order.PrimaryIPCode.ToString();

                  //  System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\RFID.Order.Console_ERROR.txt", true);
                   // file.WriteLine(message);
                    //file.Close();

                    //throw ex;

                    Console.WriteLine("Exception during SQL save: " + message);
                    Console.ReadLine();
                    //Console.WriteLine();
                }
            }
        }
Ejemplo n.º 2
0
        private EConnectCreateOrderResponse ExecuteConnectCreateOrder(string requestXML)
        {
            EConnectCreateOrderResponse response = new EConnectCreateOrderResponse();
            ConnectService.SupplierServiceSoapClient myConnect = new ConnectService.SupplierServiceSoapClient();

            Console.WriteLine(string.Format("BEGIN Invoke Connect Service to create order"));
            Console.WriteLine();

            string responseXML = myConnect.ProcessMessage(requestXML);

            Console.WriteLine(string.Format("END Invoke Connect Service to create order"));
            Console.WriteLine();

            XmlDocument xml = new XmlDocument();
            xml.LoadXml(responseXML);

            XmlNodeList xnList = xml.SelectNodes("/RTPSA_CreateOrderRS");

            foreach (XmlNode xn in xnList)
            {
                XmlNode nodeCode = xn.SelectSingleNode("ResponseCode");
                XmlNode nodeMessage = xn.SelectSingleNode("ResponseMessage");
                XmlNode nodeOrderID = xn.SelectSingleNode("SupplierOrderId");
                XmlNode nodeOrder = xn.SelectSingleNode("Order");

                if (nodeCode != null)
                {
                    response.ResponseCode = int.Parse(nodeCode.InnerText);
                }
                if (nodeMessage != null)
                {
                    response.ResponseMessage = nodeMessage.InnerText;
                }
                if (nodeOrderID != null)
                {
                    response.SupplierOrderID = int.Parse(nodeOrderID.InnerText);
                }
                if (nodeOrder != null && nodeOrder.Attributes["DistributorOrderId"] != null)
                {
                    response.DistributorOrderID = nodeOrder.Attributes["DistributorOrderId"].Value;
                }
            }

            return response;
        }