/// <summary>
        /// 获取 门店评论 的 分类 规则 【加缓存】
        /// </summary>
        /// <returns></returns>
        public static async Task <List <ShopCommentTypeRule> > GetAllShopCommentTypeRules()
        {
            using (var client = CacheHelper.CreateCacheClient("Comment"))
            {
                var result = await client.GetOrSetAsync("ShopCommentTypeRule",
                                                        () => DalShopStatistics1.GetShopCommentTypeRule(), TimeSpan.FromMinutes(60));

                if (result.Success)
                {
                    return(result.Value);
                }
                else
                {
                    Logger.Warn(
                        $" 缓存redis失败:ShopCommentTypeRule;Error:{result.Message}",
                        result.Exception);
                    return(await DalShopStatistics1.GetShopCommentTypeRule());
                }
            }
        }
Пример #2
0
        public static void DoJob()
        {
            Stopwatch watch         = Stopwatch.StartNew();
            var       shopsModel_TR = DalShopStatistics1.GetShopStatisticsByTR(); //统计出来的数据
            var       shopsModel_MR = DalShopStatistics1.GetShopStatisticsByMR(); //统计出来的数据
            var       shopsModel_FW = DalShopStatistics1.GetShopStatisticsByFW(); //统计出来的数据
            var       shopsModel_PQ = DalShopStatistics1.GetShopStatisticsByPQ(); //统计出来的数据
            var       shopsModel_BY = DalShopStatistics1.GetShopStatisticsByBY(); //统计出来的数据

            Task.WaitAll(shopsModel_TR, shopsModel_MR, shopsModel_FW, shopsModel_PQ, shopsModel_BY);
            var shopsModel = new List <ShopStatisticsModel>();

            shopsModel.AddRange(shopsModel_TR.Result);
            shopsModel.AddRange(shopsModel_MR.Result);
            shopsModel.AddRange(shopsModel_FW.Result);
            shopsModel.AddRange(shopsModel_PQ.Result);
            shopsModel.AddRange(shopsModel_BY.Result);
            UpdateShopStatisticsLogger.Info($"GetShopStatisticsBy **:执行时间={watch.ElapsedMilliseconds};shopsModel.count={shopsModel.Count()}"); watch.Restart();

            //shopsModel = shopsModel.Where(p => p.ShopID == 38&&p.Type=="TR").ToList();

            //获取 不同 分类下的 默认好评数
            List <ShopDefaultFavourableStatisticsModel> defaultFavourableList = DalShopStatistics1.GetAllProductDefaultFavourableStatistics();

            foreach (var item in shopsModel)
            {
                var defaultFavourableStatistics = defaultFavourableList.Where(p => p.ShopID == item.ShopID && p.Type == item.Type).FirstOrDefault() ?? new ShopDefaultFavourableStatisticsModel();
                item.DefaultFavourableCount = defaultFavourableStatistics.DefaultFavourableCount;
                //重新计算评分
                if (item.CommentTimes > 0)
                {
                    item.Score = (item.CommentR1 + 5 * item.DefaultFavourableCount) / (item.CommentTimes + item.DefaultFavourableCount);
                }
            }
            UpdateShopStatisticsLogger.Info($"GetAllProductDefaultFavourableStatistics **:执行时间={watch.ElapsedMilliseconds};defaultFavourableList.count={shopsModel.Count()}"); watch.Restart();
            var shopsModel_ALL = new List <ShopStatisticsModel>();

            shopsModel.GroupBy(g => g.ShopID).ForEach(f =>
            {
                ShopStatisticsModel _ShopStatisticsModel = new ShopStatisticsModel()
                {
                    ShopID                 = f.Key,
                    Type                   = "ALL",
                    InstallQuantity        = (f.ToList()?.Sum(e => e.InstallQuantity) ?? 0),
                    CommentR1              = (f.ToList()?.Sum(e => e.CommentR1) ?? 0),
                    CommentR2              = (f.ToList()?.Sum(e => e.CommentR2) ?? 0),
                    CommentR3              = (f.ToList()?.Sum(e => e.CommentR3) ?? 0),
                    CommentR4              = (f.ToList()?.Sum(e => e.CommentR4) ?? 0),
                    CommentTimes           = (f.ToList()?.Sum(e => e.CommentTimes) ?? 0),
                    FavourableCount        = (f.ToList()?.Sum(e => e.FavourableCount) ?? 0),
                    DefaultFavourableCount = (f.ToList()?.Sum(e => e.DefaultFavourableCount) ?? 0),
                    ApplyCommentRate1      = (f.ToList()?.Sum(e => e.ApplyCommentRate1) ?? 0),
                    ApplyCommentRate2      = (f.ToList()?.Sum(e => e.ApplyCommentRate2) ?? 0),
                    ApplyCommentRate3      = (f.ToList()?.Sum(e => e.ApplyCommentRate3) ?? 0),
                    ApplyCommentRate4      = (f.ToList()?.Sum(e => e.ApplyCommentRate4) ?? 0),
                    ApplyCommentTimes      = (f.ToList()?.Sum(e => e.ApplyCommentTimes) ?? 0)
                };
                //重新计算评分
                if (_ShopStatisticsModel.CommentTimes > 0)
                {
                    _ShopStatisticsModel.Score = (_ShopStatisticsModel.CommentR1 + 5 * _ShopStatisticsModel.DefaultFavourableCount) / (_ShopStatisticsModel.CommentTimes + _ShopStatisticsModel.DefaultFavourableCount);
                }
                shopsModel_ALL.Add(_ShopStatisticsModel);
            });
            shopsModel.AddRange(shopsModel_ALL);

            int index = 0;

            if (shopsModel != null && shopsModel.Any())
            {
                Parallel.ForEach(shopsModel.GroupBy(g => g.ShopID), new ParallelOptions()
                {
                    MaxDegreeOfParallelism = 5
                }, e =>
                                 //shopsModel.GroupBy(g => g.ShopID).ForEach(e =>
                {
                    Stopwatch tempWatch = Stopwatch.StartNew();
                    try
                    {
                        var dbShopsModel = DalShopStatistics1.GetShopStatisticByShopIds(e.Key);//数据库ShopStatistic表里的数据
                        e.ToList()?.ForEach(f =>
                        {
                            var temp = dbShopsModel.Where(w => w.ShopID == f.ShopID && w.Type == f.Type).FirstOrDefault();

                            if (temp != null)//更新
                            {
                                //字段 备份
                                temp.CommentTimesB = f.CommentTimes;
                                temp.CommentR1B    = f.CommentR1;
                                temp.CommentR2B    = f.CommentR2;
                                temp.CommentR3B    = f.CommentR3;
                                temp.CommentR4B    = f.CommentR4;

                                //重新赋值
                                temp.CommentTimes = f.CommentTimes + f.DefaultFavourableCount;
                                temp.CommentR1    = f.CommentR1 + f.DefaultFavourableCount * 5;
                                temp.CommentR2    = f.CommentR2 + f.DefaultFavourableCount * 5;
                                temp.CommentR3    = f.CommentR3 + f.DefaultFavourableCount * 5;
                                temp.CommentR4    = f.CommentR4 + f.DefaultFavourableCount * 5;

                                temp.FavourableCount        = f.FavourableCount;
                                temp.DefaultFavourableCount = f.DefaultFavourableCount;
                                temp.Score = f.CommentTimesB == 0 ? 0 : f.CommentR1B / f.CommentTimesB;
                                //temp.Score = f.CommentTimes > 0 ? (f. * p.CommentTimes + 5 * p.DefaultFavourableCount) / (p.CommentTimes + p.DefaultFavourableCount) : 0;
                                temp.InstallQuantity = f.InstallQuantity;

                                decimal times = f.ApplyCommentTimes + Convert.ToDecimal(f.DefaultFavourableCount) * 2 / 5;
                                times         = times == 0 ? 1 : times;

                                temp.ApplyCommentRate2 = (f.ApplyCommentRate2 + Convert.ToDecimal(f.DefaultFavourableCount) * 5 * 2 / 5) / times;
                                temp.ApplyCommentRate3 = (f.ApplyCommentRate3 + Convert.ToDecimal(f.DefaultFavourableCount) * 5 * 2 / 5) / times;
                                temp.ApplyCommentRate4 = (f.ApplyCommentRate4 + Convert.ToDecimal(f.DefaultFavourableCount) * 5 * 2 / 5) / times;
                                temp.ApplyCommentRate1 = temp.ApplyCommentRate2 * 4 / 10 + temp.ApplyCommentRate3 * 3 / 10 + temp.ApplyCommentRate2 * 3 / 10;

                                temp.ApplyCommentTimes = f.ApplyCommentTimes + Convert.ToDecimal(f.DefaultFavourableCount) * 2 / 5;

                                if (!DalShopStatistics1.UpdateShopStatistic(temp))
                                {
                                    UpdateShopStatisticsLogger.Warn($"门店评分统计更新失败:ShopId={f.ShopID};Type={f.Type}");
                                }
                            }
                            else//新增
                            {
                                //字段 备份
                                f.CommentTimesB = f.CommentTimes;
                                f.CommentR1B    = f.CommentR1;
                                f.CommentR2B    = f.CommentR2;
                                f.CommentR3B    = f.CommentR3;
                                f.CommentR4B    = f.CommentR4;

                                //重新赋值
                                f.CommentTimes = f.CommentTimesB + f.DefaultFavourableCount;
                                f.CommentR1    = f.CommentR1 + f.DefaultFavourableCount * 5;
                                f.CommentR2    = f.CommentR2 + f.DefaultFavourableCount * 5;
                                f.CommentR3    = f.CommentR3 + f.DefaultFavourableCount * 5;
                                f.CommentR4    = f.CommentR4 + f.DefaultFavourableCount * 5;

                                f.FavourableCount        = f.FavourableCount;
                                f.DefaultFavourableCount = f.DefaultFavourableCount;
                                f.Score = f.CommentTimesB == 0 ? 0 : f.CommentR1B / f.CommentTimesB;

                                f.InstallQuantity = f.InstallQuantity;

                                decimal times = f.ApplyCommentTimes + Convert.ToDecimal(f.DefaultFavourableCount) * 2 / 5;
                                times         = times == 0 ? 1 : times;

                                f.ApplyCommentRate2 = (f.ApplyCommentRate2 + Convert.ToDecimal(f.DefaultFavourableCount) * 5 * 2 / 5) / times;
                                f.ApplyCommentRate3 = (f.ApplyCommentRate3 + Convert.ToDecimal(f.DefaultFavourableCount) * 5 * 2 / 5) / times;
                                f.ApplyCommentRate4 = (f.ApplyCommentRate4 + Convert.ToDecimal(f.DefaultFavourableCount) * 5 * 2 / 5) / times;
                                f.ApplyCommentRate1 = f.ApplyCommentRate2 * 4 / 10 + f.ApplyCommentRate3 * 3 / 10 + f.ApplyCommentRate2 * 3 / 10;

                                f.ApplyCommentTimes = f.ApplyCommentTimes + Convert.ToDecimal(f.DefaultFavourableCount) * 2 / 5;

                                if (!DalShopStatistics1.InsertShopStatistic(f))
                                {
                                    UpdateShopStatisticsLogger.Warn($"门店评分统计插入失败:Data={f}");
                                }
                            }
                        });
                        index++;
                        UpdateShopStatisticsLogger.Info($"门店评分统计更新:第{index}个门店ShopId={e.Key}数据更新完成,时间={tempWatch.ElapsedMilliseconds}");
                        tempWatch.Stop();
                    }
                    catch (Exception ex)
                    {
                        UpdateShopStatisticsLogger.Error($"门店评分统计更新异常:ShopId={e.Key};Exception={ex}");
                    }
                });
                #region 重新统计评论总分
                //try
                //{
                //    var setResult = DalShopStatistics.SetTotalPoints();
                //    UpdateShopStatisticsLogger.Info($"门店评分统计更新:设置{setResult}个门店的总评分");
                //}
                //catch (Exception ex)
                //{
                //    UpdateShopStatisticsLogger.Error("门店评分总分统计异常", ex);
                //}
                #endregion
            }

            watch.Stop();
        }
Пример #3
0
        public static void DoJob()
        {
            var shopsModel_TR = DalShopStatistics1.GetShopStatisticsByTR(); //统计出来的数据
            var shopsModel_MR = DalShopStatistics1.GetShopStatisticsByMR(); //统计出来的数据
            var shopsModel_FW = DalShopStatistics1.GetShopStatisticsByFW(); //统计出来的数据
            var shopsModel_PQ = DalShopStatistics1.GetShopStatisticsByPQ(); //统计出来的数据
            var shopsModel_BY = DalShopStatistics1.GetShopStatisticsByBY(); //统计出来的数据

            Task.WaitAll(shopsModel_TR, shopsModel_MR, shopsModel_FW, shopsModel_PQ, shopsModel_BY);
            var shopsModel = new List <ShopStatisticsModel>();

            shopsModel.AddRange(shopsModel_TR.Result);
            shopsModel.AddRange(shopsModel_MR.Result);
            shopsModel.AddRange(shopsModel_FW.Result);
            shopsModel.AddRange(shopsModel_PQ.Result);
            shopsModel.AddRange(shopsModel_BY.Result);

            var shopsModel_ALL = new List <ShopStatisticsModel>();

            shopsModel.GroupBy(g => g.ShopID).ForEach(f =>
            {
                shopsModel_ALL.Add(new ShopStatisticsModel()
                {
                    ShopID            = f.Key,
                    Type              = "ALL",
                    InstallQuantity   = (f.ToList()?.Sum(e => e.InstallQuantity) ?? 0),
                    CommentR1         = (f.ToList()?.Sum(e => e.CommentR1) ?? 0),
                    CommentR2         = (f.ToList()?.Sum(e => e.CommentR2) ?? 0),
                    CommentR3         = (f.ToList()?.Sum(e => e.CommentR3) ?? 0),
                    CommentR4         = (f.ToList()?.Sum(e => e.CommentR4) ?? 0),
                    CommentTimes      = (f.ToList()?.Sum(e => e.CommentTimes) ?? 0),
                    ApplyCommentRate1 = (f.ToList()?.Sum(e => e.ApplyCommentRate1) ?? 0),
                    ApplyCommentRate2 = (f.ToList()?.Sum(e => e.ApplyCommentRate2) ?? 0),
                    ApplyCommentRate3 = (f.ToList()?.Sum(e => e.ApplyCommentRate3) ?? 0),
                    ApplyCommentRate4 = (f.ToList()?.Sum(e => e.ApplyCommentRate4) ?? 0),
                    ApplyCommentTimes = (f.ToList()?.Sum(e => e.ApplyCommentTimes) ?? 0)
                });
            });
            shopsModel.AddRange(shopsModel_ALL);
            int index = 0;

            if (shopsModel != null && shopsModel.Any())
            {
                Parallel.ForEach(shopsModel.GroupBy(g => g.ShopID), new ParallelOptions()
                {
                    MaxDegreeOfParallelism = 5
                }, e =>
                                 //shopsModel.GroupBy(g => g.ShopID).ForEach(e =>
                {
                    try
                    {
                        var dbShopsModel = DalShopStatistics.GetShopStatisticByShopIds(e.Key);//数据库ShopStatistic表里的数据
                        e.ToList()?.ForEach(f =>
                        {
                            var temp = dbShopsModel.Where(w => w.ShopID == f.ShopID && w.Type == f.Type).FirstOrDefault();
                            if (temp != null)//更新
                            {
                                temp.CommentR1         = f.CommentR1;
                                temp.CommentR2         = f.CommentR2;
                                temp.CommentR3         = f.CommentR3;
                                temp.CommentR4         = f.CommentR4;
                                temp.CommentTimes      = f.CommentTimes;
                                temp.InstallQuantity   = f.InstallQuantity;
                                temp.ApplyCommentTimes = f.ApplyCommentTimes;
                                temp.ApplyCommentRate1 = f.ApplyCommentRate1 / (f.ApplyCommentTimes <= 0 ? 1 : f.ApplyCommentTimes);
                                temp.ApplyCommentRate2 = f.ApplyCommentRate2 / (f.ApplyCommentTimes <= 0 ? 1 : f.ApplyCommentTimes);
                                temp.ApplyCommentRate3 = f.ApplyCommentRate3 / (f.ApplyCommentTimes <= 0 ? 1 : f.ApplyCommentTimes);
                                temp.ApplyCommentRate4 = f.ApplyCommentRate4 / (f.ApplyCommentTimes <= 0 ? 1 : f.ApplyCommentTimes);
                                if (!DalShopStatistics.UpdateShopStatistic(temp))
                                {
                                    UpdateShopStatisticsLogger.Warn($"门店评分统计更新失败:ShopId={f.ShopID};Type={f.Type}");
                                }
                            }
                            else//新增
                            {
                                f.CommentR1         = f.CommentR1;
                                f.CommentR2         = f.CommentR2;
                                f.CommentR3         = f.CommentR3;
                                f.CommentR4         = f.CommentR4;
                                f.CommentTimes      = f.CommentTimes;
                                f.InstallQuantity   = f.InstallQuantity;
                                f.ApplyCommentTimes = f.ApplyCommentTimes;
                                f.ApplyCommentRate1 = f.ApplyCommentRate1 / (f.ApplyCommentTimes <= 0 ? 1 : f.ApplyCommentTimes);
                                f.ApplyCommentRate2 = f.ApplyCommentRate2 / (f.ApplyCommentTimes <= 0 ? 1 : f.ApplyCommentTimes);
                                f.ApplyCommentRate3 = f.ApplyCommentRate3 / (f.ApplyCommentTimes <= 0 ? 1 : f.ApplyCommentTimes);
                                f.ApplyCommentRate4 = f.ApplyCommentRate4 / (f.ApplyCommentTimes <= 0 ? 1 : f.ApplyCommentTimes);
                                if (!DalShopStatistics.InsertShopStatistic(f))
                                {
                                    UpdateShopStatisticsLogger.Warn($"门店评分统计插入失败:Data={f}");
                                }
                            }
                        });
                        index++;
                        UpdateShopStatisticsLogger.Info($"门店评分统计更新:第{index}个门店ShopId={e.Key}数据更新完成");
                    }
                    catch (Exception ex)
                    {
                        UpdateShopStatisticsLogger.Error($"门店评分统计更新异常:ShopId={e.Key};Exception={ex}");
                    }
                });
                #region 重新统计评论总分
                //try
                //{
                //    var setResult = DalShopStatistics.SetTotalPoints();
                //    UpdateShopStatisticsLogger.Info($"门店评分统计更新:设置{setResult}个门店的总评分");
                //}
                //catch (Exception ex)
                //{
                //    UpdateShopStatisticsLogger.Error("门店评分总分统计异常", ex);
                //}
                #endregion
            }
        }