コード例 #1
0
        public void SettlementPaidFactor()
        {
            using (var db = new ShoppingSchedulerContext())
            {
                var shops = db.Shops.Where(item => item.CustomerSubsets
                                           .Any(p => !p.IsSettlement && p.HavePaidFactor))
                            .ToList();

                foreach (var shop in shops)
                {
                    var appSetting = db.Settings.FirstOrDefault();
                    if (appSetting == null)
                    {
                        return;
                    }

                    var sumShopCustomerSubsetHaveFactorPaidSumAmount =
                        shop.CustomerSubsets.Count(p => !p.IsSettlement && p.HavePaidFactor) *
                        appSetting.ShopCustomerSubsetHaveFactorPaidAmount;

                    var shopCustomerSubsetSettlement = new ShopCustomerSubsetSettlement(Guid.NewGuid(), shop, new UserInfo(Guid.NewGuid(), "سیستم", "سیستم"),
                                                                                        sumShopCustomerSubsetHaveFactorPaidSumAmount, ShopCustomerSubsetSettlementType.PaidFactor);
                    db.ShopCustomerSubsetSettlements.Add(shopCustomerSubsetSettlement);
                    foreach (var shopCustomerSubset in shop.CustomerSubsets.Where(p => !p.IsSettlement && p.HavePaidFactor))
                    {
                        shopCustomerSubset.SetSettlement();
                    }
                    db.SaveChanges();
                }
            }
        }
コード例 #2
0
 public void RegisterShops()
 {
     using (var db = new ShoppingSchedulerContext())
     {
         var shops = db.Shops.Where(item => item.Accounting == null).ToList();
         foreach (var shop in shops)
         {
             try
             {
                 var createDetailRequest = new CreateDetailRequest
                 {
                     Code           = 0,
                     RequestId      = Guid.NewGuid(),
                     Name           = $"{shop.FirstName} {shop.LastName}",
                     ClassCode      = ShopClassCode,
                     NationalCode   = shop.NationalCode,
                     Address        = shop.ShopAddress.AddressText,
                     City           = Convert.ToInt32(shop.ShopAddress.CityCode),
                     Province       = Convert.ToInt32(shop.ShopAddress.ProvinceCode),
                     Email          = shop.EmailAddress,
                     Mobile         = shop.MobileNumber,
                     PersonType     = PersonTypeAccounting.Actual,
                     Tel            = shop.ShopAddress.PhoneNumber,
                     Spec1          = shop.BankAccount.Iban,
                     CommercialCode = "",
                     PostalCode     = ""
                 };
                 string              objStringify = JsonConvert.SerializeObject(createDetailRequest);
                 HttpContent         content      = new StringContent(objStringify, Encoding.UTF8, "application/json");
                 HttpResponseMessage response     = _httpClient.PostAsync(DetailServiceName, content).Result;
                 if (response.StatusCode == HttpStatusCode.Created)
                 {
                     var resultString = response.Content.ReadAsStringAsync().Result;
                     var result       = long.Parse(JsonConvert.DeserializeObject <string>(resultString));
                     if (result > 0)
                     {
                         shop.RegisterInAccountingSystem(result);
                         db.SaveChanges();
                     }
                 }
                 else
                 {
                     _logger.Error($"######accounting createDetailRequest shop web service  -- {DateTime.Now}");
                     _logger.Error(createDetailRequest);
                     _logger.Error(response);
                 }
             }
             catch (Exception e)
             {
                 _logger.Error($"######exception accounting createDetailRequest shop web service  -- {DateTime.Now}");
                 _logger.Error(e);
             }
         }
     }
 }
コード例 #3
0
 public void RegisterSettlementPaidFactor()
 {
     using (var db = new ShoppingSchedulerContext())
     {
         var list = db.ShopCustomerSubsetSettlements.Where(p =>
                                                           !p.IsRegisteredInAccounting && p.Type == ShopCustomerSubsetSettlementType.PaidFactor).ToList();
         foreach (var shopCustomerSubsetSettlement in list)
         {
             try
             {
                 var temp = new Grdb
                 {
                     TypeNo      = 200,
                     StrDate     = shopCustomerSubsetSettlement.CreationTime.ToFa(),
                     DetailCode1 = shopCustomerSubsetSettlement.Shop.Accounting.DetailCode,
                     RequestId   = Guid.NewGuid(),
                     Items       = new List <GrdbItem>
                     {
                         new GrdbItem
                         {
                             GoodCode  = "85105",
                             Amount    = 1,
                             Fee       = shopCustomerSubsetSettlement.Amount,
                             ItemDesc1 = $"ثبت هزینه کارمزد اولین خرید مشتری جذب شده فروشگاه {shopCustomerSubsetSettlement.Shop.NationalCode}"
                         }
                     }
                 };
                 string              objStringify = JsonConvert.SerializeObject(temp);
                 HttpContent         content      = new StringContent(objStringify, Encoding.UTF8, "application/json");
                 HttpResponseMessage response     = _httpClient.PostAsync(GrdbServiceName, content).Result;
                 if (response.StatusCode == HttpStatusCode.Created)
                 {
                     var resultString = response.Content.ReadAsStringAsync().Result;
                     var result       = JsonConvert.DeserializeObject <Grdb>(resultString);
                     if (result.Id >= 0)
                     {
                         shopCustomerSubsetSettlement.RegisterInAccounting(result.Id.ToString());
                         db.SaveChanges();
                     }
                 }
                 else
                 {
                     _logger.Error($"######accounting RegisterShopCustomerSubsetSettlementAccountingService GRDB web service  -- {DateTime.Now}");
                     _logger.Error(temp);
                     _logger.Error(response);
                 }
             }
             catch (Exception e)
             {
                 _logger.Error($"######exception accounting RegisterShopCustomerSubsetSettlementAccountingService GRDB web service   -- {DateTime.Now}");
                 _logger.Error(e);
             }
         }
     }
 }
コード例 #4
0
 public void RegisterFactors()
 {
     using (var db = new ShoppingSchedulerContext())
     {
         var factors = db.Factors.Where(item => item.FactorState == FactorState.Paid &&
                                        item.Accounting == null).OrderByDescending(p => p.CreationTime).ToList();
         foreach (var factor in factors)
         {
             if (CallGrdbService(factor))
             {
                 CallRecPayService(factor);
             }
             db.SaveChanges();
         }
     }
 }
コード例 #5
0
        public void Calculate()
        {
            using (var db = new ShoppingSchedulerContext())
            {
                var yesterday      = DateTime.Today.AddDays(-1);
                var yesterdayNight = DateTime.Today.AddDays(-1) + TimeSpan.Parse("23:59:59");

                var yesterdayPaidFactorsRows = db.Factors.Where(p =>
                                                                p.FactorState == FactorState.Paid && p.CreationTime >= yesterday &&
                                                                p.CreationTime <= yesterdayNight).SelectMany(p => p.FactorRaws);

                var productCount = db.Products.Count();
                var productsSort = db.Products.OrderByDescending(item => item.Id);
                for (var i = 0; i < productCount; i = i + 100)
                {
                    var products = productsSort.Skip(i).Take(100).ToList();
                    foreach (var product in products)
                    {
                        var factorItems = yesterdayPaidFactorsRows.Where(item =>
                                                                         item.ProductId == product.Id).ToList();
                        decimal sum = 0;
                        foreach (var factorItem in factorItems)
                        {
                            sum += factorItem.Price;
                        }
                        if (factorItems.Any())
                        {
                            var avg   = sum / factorItems.Count;
                            var price = RoundPrice(avg);
                            _logger.Error($"{product.Id}--{product.Name}--{product.Price} changed to {price}");
                            product.Price = price;
                            try
                            {
                                db.SaveChanges();
                            }
                            catch (Exception e)
                            {
                                _logger.Error(e, $"{product} savechange exception");
                            }
                        }
                    }
                }
            }
        }
コード例 #6
0
        public void CreateAreaOrder()
        {
            try
            {
                _logger.Info($"run at{DateTime.Now}");
                using (var db = new ShoppingSchedulerContext())
                {
                    var setting = db.Settings.First();
                    if (setting == null)
                    {
                        return;
                    }
                    var now          = DateTime.Now;
                    var date         = DateTime.Parse("2019/05/19");
                    var ordersExpire = db.PrivateOrder.Where(p => p.CreationTime >= date &&
                                                             p.OrderStatus == OrderStatus.Pending && p.ExpireOpenTime < now &&
                                                             p.IsConvertToAreaOrder == false).ToList();

                    foreach (var order in ordersExpire)
                    {
                        var shopsInArea = db.Shops.Where(item =>
                                                         item.IsActive && item.ShopStatus == ShopStatus.Accept && item.Id != order.Shop.Id &&
                                                         item.ShopAddress.Geography.Distance(order.OrderAddress.Geography) <= item.AreaRadius)
                                          .ToList();
                        if (shopsInArea.Count < 1)
                        {
                            order.IsConvertToAreaOrder = true;
                            db.SaveChanges();
                            continue;
                        }

                        var expireOpenTime = DateTime.Now.AddSeconds(setting.OrderExpireOpenTime);
                        var orderItems     = order.OrderItems.ToList();

                        foreach (var shop in shopsInArea)
                        {
                            var areaOrder = new AreaOrder(order.Customer, order.OrderAddress,
                                                          order.Description,
                                                          expireOpenTime, shop, order, AreaOrderCreator.ByScheduler)
                            {
                                OrderItems = new List <OrderItem>()
                            };
                            foreach (var orderItem in orderItems)
                            {
                                var orderProductTemp = new OrderProduct(orderItem.OrderProduct.ProductId,
                                                                        orderItem.OrderProduct.Name, orderItem.OrderProduct.Price,
                                                                        orderItem.OrderProduct.ProductImage, orderItem.OrderProduct.BrandId,
                                                                        orderItem.OrderProduct.BrandName);
                                OrderItemDiscountBase orderItemDiscountBase = null;
                                if (orderItem.Discount != null)
                                {
                                    orderItemDiscountBase = orderItem.Discount;
                                }

                                var orderItemTemp = new OrderItem(Guid.NewGuid(), orderItem.Quantity,
                                                                  orderItem.Description,
                                                                  orderProductTemp, orderItemDiscountBase);

                                areaOrder.OrderItems.Add(orderItemTemp);
                            }
                            db.AreaOrder.Add(areaOrder);
                            _fcmNotification.SendToIds(shop.GetPushTokens(), "سفارش جدید",
                                                       $"یک سفارش ثبت شد", NotificationType.OrderAdd,
                                                       AppType.Shop, NotificationSound.Shopper);
                        }
                        order.IsConvertToAreaOrder = true;
                        db.SaveChanges();
                    }
                }
            }
            catch (Exception e)
            {
                _logger.Info($"exception run at{DateTime.Now}");
                _logger.Error(JsonConvert.SerializeObject(e));
            }
        }