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(); } } }
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); } } } }
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); } } } }
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(); } } }
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"); } } } } } }
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)); } }