private void DoJob()
        {
            var dataList = DalExpiringIntegral.GetTerribleIntegralIds();

            if (dataList.Any())
            {
                var dt           = DalExpiringIntegral.ConvertToDataTable(dataList);
                var deleteResult = DalExpiringIntegral.DeleteTerribleItem(dt);
                if (deleteResult)
                {
                    var insertResult = DalExpiringIntegral.InsertIntegralStatistics(dt);
                    if (insertResult > 0)
                    {
                        Logger.Info("数据修补完成");
                    }
                    else
                    {
                        Logger.Warn("数据插入失败");
                    }
                }
                else
                {
                    Logger.Warn("数据删除失败");
                }
            }
        }
Example #2
0
        public static void DoJob()
        {
            var val = DalExpiringIntegral.CheckIntegralData();

            if (val)
            {
                Logger.Warn($"去年的统计数据已存在,请检查数据库数据后重试");
                return;
            }
            int       index = 0;
            int       step  = 1000;
            Stopwatch sw    = new Stopwatch();

            sw.Start();
            var data = DalExpiringIntegral.GetIntegralID(index, step);

            while (data.Any())
            {
                DataTable dt = new DataTable();
                dt.Columns.AddRange(new DataColumn[] {
                    new DataColumn("Id", typeof(Guid))
                });
                foreach (var item in data)
                {
                    DataRow r = dt.NewRow();
                    r[0] = item.IntegralID;
                    dt.Rows.Add(r);
                }
                try
                {
                    index += 1;
                    var dat = DalExpiringIntegral.InsertIntegralStatistics(dt);
                    sw.Stop();
                    Logger.Info($"插入{dat}条数据,用时{sw.ElapsedMilliseconds}毫秒");
                    sw.Reset();
                    sw.Start();
                    data = DalExpiringIntegral.GetIntegralID(index, step);
                }
                catch (Exception ex)
                {
                    Logger.Info($"统计第{index}批数据出现异常{ex.Message}");
                }
            }
        }
        private static void DoJob(bool isTest)
        {
            var count = DalExpiringIntegral.GetExpiringIntegralUserCount();

            if (count < 1)
            {
                Logger.Warn("待过期用户数量为0;");
                return;
            }

            var       start = 1500 * 95;
            const int step  = 1500;

            Logger.Info($"需处理{count}位用户数据,共{count / step + 1}批");
            var watcher = new Stopwatch();

            while (start <= count)
            {
                watcher.Start();
                var data = DalExpiringIntegral.GetUserExpiringPointInfo(start, step);
                start += step;

                if (!data.Any())
                {
                    continue;
                }
                var data2     = DalExpiringIntegral.GetUserConsumeIntegral(data.Select(g => g.UserId).ToList());
                var totalData = data.Union(data2).GroupBy(g => g.UserId).Select(g =>
                                                                                new UserExpiringPointModel
                {
                    UserId     = g.Key,
                    Integral   = g.Sum(t => t.Integral),
                    IntegralId =
                        g.Where(t => t.IntegralId != Guid.Empty).Select(t => t.IntegralId).FirstOrDefault()
                }).Where(g => g.Integral > 0 && g.IntegralId != Guid.Empty).ToList();

                Logger.Info($"积分过期Job, 第{start / step}批数据,需过期{totalData.Count}条数据");

                if (!totalData.Any())
                {
                    continue;
                }
                var client = new UserIntegralClient();
                try
                {
                    //DalExpiringIntegral.ExpireUserPoint(totalData, IntegralRule);
                    foreach (var item in totalData)
                    {
                        var result = client.UserIntegralChangeByUserID(item.UserId, new UserIntegralDetailModel
                        {
                            IntegralID          = item.IntegralId,
                            IntegralRuleID      = IntegralRule,
                            TransactionIntegral = item.Integral,
                            TransactionRemark   = $"{DateTime.Now.Year - 2}年积分过期",
                            TransactionDescribe = $"{DateTime.Now.Year - 2}年积分过期",
                            TransactionChannel  = "CJob",
                            Versions            = $"{DateTime.Now.Year - 2}",
                            IntegralType        = 1
                        }, null, 0);
                        if (!result.Success || result.Result == null)
                        {
                            Logger.Warn(
                                $"UserIntegralExpireJob==>fail==>{JsonConvert.SerializeObject(item)}==>{result.ErrorMessage}");
                        }
                    }
                }
                catch (Exception ex)
                {
                    Logger.Warn("插入数据出现异常", ex);
                }
                finally
                {
                    client.Dispose();
                }

                watcher.Stop();
                Logger.Info($"积分过期Job,第{start / step}批完成,共{count / step + 1}批,用时{watcher.ElapsedMilliseconds}毫秒");
                watcher.Reset();
                if (isTest)
                {
                    Logger.Info($"isTest==>{JsonConvert.SerializeObject(totalData.Take(10))}");
                    break;
                }
            }
        }