예제 #1
0
        protected virtual void ProceedResults(PackResults results)
        {
            try
            {
                var query = new StringBuilder();
                foreach (var result in results.IntegratePackResult)
                {
                    if (result.IsSuccess)
                    {
                        query.AppendLine(String.Format("Update {1} Set Status = 1 Where ERPId = '{0}';", result.GetCorrectId(), _tableName));
                    }
                    else
                    {
                        var errorMessage = String.IsNullOrEmpty(result.ErrorMessage) ? String.Empty : result.ErrorMessage.Replace("'", "''").Replace("{", "").Replace("}", "");
                        if (errorMessage.Length > 250)
                        {
                            errorMessage = errorMessage.Substring(0, 250);
                        }
                        query.AppendLine(String.Format("Update {2} Set Status = {3}, ErrorMessage = '{1}' Where ERPId = '{0}';", result.GetCorrectId(), errorMessage, _tableName, result.IsTimeout ? "4" : "2"));
                    }
                }

                var sql = query.ToString();
                if (!string.IsNullOrEmpty(sql))
                {
                    DBConnectionProvider.ExecuteNonQuery(sql);
                }
            }
            catch (Exception e)
            {
                Logger.LogError(JsonConvert.SerializeObject(results), e);
            }
        }
예제 #2
0
        private bool SendToProcessing(List <BaseIntegrationObject> pack, out DateTime now, out PackResults results, IEnumerable <PackResult> successResults, bool isUsePA)
        {
            now = DateTime.Now;

            var processingResults = SendToProcessing(pack.Where(p => successResults.FirstOrDefault(r => r.Id == p.ERPId) != null).ToList(), isUsePA, _processingMethodName);

            Logger.LogInfo(string.Format("Запрос {0} к процессингу выполнен за {1}с", _tableName, (DateTime.Now - now).TotalSeconds.ToString("F1")), "");

            results = new PackResults();

            if (processingResults.IsSuccess)
            {
                results.IntegratePackResult = JsonConvert.DeserializeObject <List <PackResult> >(processingResults.ResponseStr);
                return(true);
            }
            else
            {
                SetProcessingErrors(pack, processingResults.ResponseStr, processingResults.IsTimeout);
                return(false);
            }
        }
예제 #3
0
        public override void Execute()
        {
            Logger.LogInfo("Начался импорт", _tableName);

            var tasks = new List <Task>();

            for (var j = 0; j < threadCount; j++)
            {
                var task = new Task(() =>
                {
                    var pack = ReadPack();
                    while (pack.Count > 0)
                    {
                        var results = new PackResults()
                        {
                            IntegratePackResult = new List <PackResult>()
                        };
                        foreach (Purchase purchase in pack)
                        {
                            purchase.ProductsInPurchase = ReadProducts(purchase.ERPId);
                            purchase.PaymentsInPurchase = ReadPayments(purchase.ERPId);

                            int i       = 0;
                            var request = new PurchaseConfirmRequest()
                            {
                                //CashdeskCode = purchase.CashDeskCode,
                                Client = new Client()
                                {
                                    CardNumber  = purchase.CardNumber,
                                    MobilePhone = purchase.Phone
                                },
                                Date        = purchase.PDate,
                                Number      = purchase.Number,
                                PaymentForm = GetPaymentFormCode(purchase.PaymentForm),
                                ShopCode    = purchase.ShopCode,
                                Payments    = purchase.PaymentsInPurchase.Select(p => new Payment()
                                {
                                    Amount = p.Amount, Type = p.Type
                                }),
                                Products = purchase.ProductsInPurchase.Select(p => new PCProduct()
                                {
                                    Index = i++, Amount = p.Amount, Price = p.Price, ProductCode = p.ProductCode, Quantity = p.Quantity
                                }),
                                Id = Guid.NewGuid().ToString()
                            };

                            var res = Request(request.ToJson());
                            Logger.LogInfo(i.ToString(), res.IsSuccess ? "success" : res.ResponseStr);

                            if (res.IsSuccess)
                            {
                                var resRequest = JsonConvert.DeserializeObject <PackResult>(res.ResponseStr);
                                resRequest.Id  = purchase.ERPId;
                                results.IntegratePackResult.Add(resRequest);
                            }
                            else
                            {
                                results.IntegratePackResult.Add(new PackResult()
                                {
                                    Id = purchase.ERPId, IsSuccess = false, ErrorMessage = res.ResponseStr, IsTimeout = res.IsTimeout
                                });
                            }
                        }

                        ProceedResults(results);
                        pack = ReadPack();
                    }
                });

                task.Start();
                tasks.Add(task);
            }

            Task.WaitAll(tasks.ToArray());

            Logger.LogInfo("Finished", _tableName);
        }