Example #1
0
        public async Task <ProductStats> GetProductStatsAsync()
        {
            var functionName = "getProductStats";
            var func         = _contract.GetFunction(functionName);


            var dto = new ProductStatsDto();

            try
            {
                dto = await func.CallDeserializingToObjectAsync <ProductStatsDto>();
            }
            catch (ArgumentNullException e) // catching this error because after successful transaction is time frame while blockchain data is not updated and returns unknown result. We are getting: Value cannot be null. Parameter name: value
            {
                _logger.Warn($"Cant deserialize contract response. functionName: {functionName}", e);
            }


            var result = new ProductStats();

            result.Paused         = dto.Paused == 1;
            result.TokenBalance   = Web3.Convert.FromWei(dto.TokenBalance);
            result.PoliciesLength = (int)dto.PoliciesLength;

            result.TotalCalculatedPayouts = Web3.Convert.FromWei(dto.PoliciesTotalCalculatedPayouts);
            result.PayoutsCount           = (int)dto.PoliciesPayoutsCount;

            result.TotalPayouts = Web3.Convert.FromWei(dto.PoliciesTotalPayouts);

            return(result);
        }
Example #2
0
        public ProductStats GetProductStatsSync(ProductType productType)
        {
            ProductStats res = null;

            try
            {
                res = Task.Run(async() => { return(await this.ProductsService.GetProductStatsAsync(productType)); }).Result;
            }
            catch (Exception ex)
            {
                ex = null;
            }
            return(res);
        }
        public IHttpActionResult Forecast([FromUri] string productId, [FromUri] int year, [FromUri] int month)
        {
            var inputExample = new ProductStats
            {
                ProductId = productId,
                Year      = year,
                Month     = month
            };

            var client  = new RestClient(_mlServerUrl);
            var request = new RestRequest(_productForecastUrl, Method.POST);

            request.AddJsonBody(inputExample);
            var response = client.Execute <float>(request);

            return(Ok(response.Data));
        }
        /// <summary>
        /// 执行事件
        /// </summary>
        /// <param name="eventInfo">事件信息</param>
        public void Execute(object eventInfo)
        {
            EventInfo e = (EventInfo)eventInfo;

            //同步商品的访问量
            DataTable dt = ProductStats.GetProductTotalVisitCountList();

            foreach (DataRow row in dt.Rows)
            {
                int pid        = TypeHelper.ObjectToInt(row["pid"]);
                int visitCount = TypeHelper.ObjectToInt(row["count"]);
                if (visitCount != Products.GetProductShadowVisitCountById(pid))
                {
                    Products.UpdateProductShadowVisitCount(pid, visitCount);
                }
            }

            EventLogs.CreateEventLog(e.Key, e.Title, Environment.MachineName, DateTime.Now);
        }
 public float ProductForecast(ProductStats data)
 {
     return(ForecastEngine.ProductForecast(data));
 }
        public async Task <List <OrderStats> > GetHourlyStats(DateTimeOffset periodStart, DateTimeOffset periodEnd, StatsKind kind, int?terminalId, int?pointOfSaleId)
        {
            var connection = _db.Database.GetDbConnection();

            var param = new
            {
                periodStart,
                periodEnd,
                kind,
                terminalId,
                pointOfSaleId
            };

            var orderStats = await connection.QueryAsync <OrderStats>(
                sql : await SqlScript.GetAsync("GetOrderStats.sql"),
                param : param);

            var paymentStats = await connection.QueryAsync <PaymentStats>(
                sql : await SqlScript.GetAsync("GetPaymentStats.sql"),
                param : param);

            var productSaleStats = await connection.QueryAsync <ProductSaleStats>(
                sql : await SqlScript.GetAsync("GetProductSaleStats.sql"),
                param : param);

            var productServingStats = await connection.QueryAsync <ProductServingStats>(
                sql : await SqlScript.GetAsync("GetProductServingStats.sql"),
                param : param);

            var periodStarts = orderStats.Select(x => x.PeriodStart)
                               .Union(productServingStats.Select(x => x.PeriodStart))
                               .OrderBy(x => x)
                               .ToList();

            var result = new List <OrderStats>(periodStarts.Count);

            foreach (var startOfPeriod in periodStarts)
            {
                var order = orderStats.FirstOrDefault(x => x.PeriodStart == startOfPeriod) ?? new OrderStats()
                {
                    PeriodStart = startOfPeriod
                };

                var productStats = new Dictionary <int, ProductStats>();

                foreach (var sale in productSaleStats.Where(x => x.PeriodStart == order.PeriodStart))
                {
                    var stats = new ProductStats()
                    {
                        ProductId    = sale.ProductId,
                        ProductName  = sale.ProductName,
                        OrderCount   = sale.OrderCount,
                        SaleQuantity = sale.ProductQuantity,
                        SaleTotal    = sale.Total,
                    };

                    productStats.Add(sale.ProductId, stats);
                }

                foreach (var serving in productServingStats.Where(x => x.PeriodStart == order.PeriodStart))
                {
                    if (!productStats.TryGetValue(serving.ProductId, out var stats))
                    {
                        stats = productStats[serving.ProductId] = new ProductStats()
                        {
                            ProductId   = serving.ProductId,
                            ProductName = serving.ProductName
                        };
                    }

                    stats.ServingCount    = serving.ServingCount;
                    stats.ServingQuantity = serving.ProductQuantity;
                }

                order.Payments = paymentStats.Where(x => x.PeriodStart == order.PeriodStart).ToList();
                order.Products = productStats.Values.OrderBy(x => x.ProductName).ToList();

                result.Add(order);
            }

            return(result);
        }