예제 #1
0
 public void Execute(IJobExecutionContext context)
 {
     try
     {
         var sw = new Stopwatch();
         sw.Start();
         var userDatas       = ProductCacheDal.GetProductRecommendByUserId();
         var defaultDatas    = ProductCacheDal.GetCommonRecommend();
         var needRefreshPids = userDatas.Union(defaultDatas).Distinct().ToList();
         var referData       = DateTime.Now.Subtract(TimeSpan.FromHours(1));
         if (!needRefreshPids.Any())
         {
             Logger.Info("bi推荐产品刷新到esjob执行,并没有找到需要更新的数据");
         }
         else
         {
             Logger.Info($"bi推荐产品刷新到esjob开始执行,一共{needRefreshPids.Count}个产品");
             using (var client = new CacheClient())
             {
                 foreach (var pids in needRefreshPids.Split(1).Select(r => r.ToList()))
                 {
                     var switcher = ProductCacheDal.SelectRuntimeSwitchBySwitchName();
                     if (switcher == "run")
                     {
                         var esresult = client.RefreshProductRecommendEsCacheByPids(pids);
                         if (!esresult.Success || !esresult.Result)
                         {
                             Logger.Error($"调用bi推荐产品刷新到es接口失败", esresult.Exception.InnerException);
                         }
                     }
                     else
                     {
                         return;
                     }
                 }
             }
             using (var client = new ProductSearchClient())
             {
                 var delResult = client.DeleteOldProductEs(referData, ExpiredEsDataType.Recommend);
                 if (!delResult.Success || !delResult.Result)
                 {
                     Logger.Error($"调用bi推荐产品删除es过期数据接口失败", delResult.Exception.InnerException);
                 }
             }
         }
         sw.Stop();
         Logger.Info($"bi推荐产品刷新到esjob执行结束,耗时{sw.ElapsedMilliseconds}");
     }
     catch (Exception ex)
     {
         Logger.Error("bi推荐产品刷新到es失败", ex);
     }
 }
        public void Execute(IJobExecutionContext context)
        {
            mgIndex++;
            Logger.Info($"启动任务=>{mgIndex}");

            var dt          = DateTime.Now;
            var isDeleteOld = true;

            var cnt = ProductCacheDal.GetProductEsCount();

            Logger?.Info($"RGZ{mgIndex}=更新产品总数为:" + cnt);
            if (cnt == 0)
            {
                return;
            }

            var batchCnt = 500;

            var pageCnt = Math.Ceiling((double)cnt / batchCnt);

            for (var i = 1; i <= pageCnt; i++)
            {
                var pids = ProductCacheDal.GetProductEsPids(batchCnt, i);
                using (var client = new ProductSearchClient())
                {
                    var result = client.RebuildProductEs(pids);
                    if (!result.Success)
                    {
                        using (var client2 = new ProductSearchClient())
                        {
                            Thread.Sleep(200);
                            result = client2.RebuildProductEs(pids);
                            if (!result.Success)
                            {
                                Logger?.Warn($"RGZ{mgIndex}={i}=失败,不删除老数据:{result.ErrorCode};{result.ErrorMessage}");
                                isDeleteOld = false;
                                continue;
                            }
                        }
                    }
                }

                Logger?.Info($"RGZ{mgIndex}={i}=成功");
            }


            if (!isDeleteOld)
            {
                Logger?.Info($"RGZ{mgIndex}=有更新错误的数据,不删除老数据");
                return;
            }
            //防止更新延迟误删
            Thread.Sleep(TimeSpan.FromMinutes(1));
            using (var client3 = new ProductSearchClient())
            {
                var deleteResult = client3.DeleteOldProductEs(dt);
                if (!deleteResult.Success)
                {
                    Logger?.Info($"RGZ{mgIndex}=删除老数据出错");
                }
            }

            Logger?.Info($"RGZ{mgIndex}全部成功");
            return;
        }