示例#1
0
 private bool CheckSwitch()
 {
     using (var client = new ConfigClient())
     {
         var result = client.GetOrSetRuntimeSwitch("TaskBackup");
         return(result.Success && result.Result.Value);
     }
 }
示例#2
0
 private static bool GetSwitchValue()
 {
     using (var client = new ConfigClient())
     {
         var result = client.GetOrSetRuntimeSwitch("UpdateProductStatisticsIsTest");
         return(result.Success ? result.Result.Value : false);
     }
 }
        void ImportProductComment()
        {
            int minPkid = int.MaxValue;
            int maxPkid = int.MaxValue;

            using (var client = new ConfigClient())
            {
                var response = client.GetOrSetRuntimeSwitch("ProductCommentToTopicJob");
                if (response.Success && (response.Result?.Value ?? false))
                {
                    var pkidArr = response.Result.Description.Split(',');
                    if (pkidArr.Length == 2)
                    {
                        int.TryParse(pkidArr[0], out minPkid);
                        int.TryParse(pkidArr[1], out maxPkid);
                    }
                }
            }
            int current    = 0;
            int pageSize   = 500;
            int pageIndex  = 1;
            int totalCount = GetCommentsCount(minPkid, maxPkid);
            int pageTotal  = (totalCount - 1) / pageSize + 1;

            while (pageIndex <= pageTotal && totalCount > 0)
            {
                pageIndex++;

                var comments = GetComments(minPkid, maxPkid, pageSize);
                Logger.Info(
                    $"ImportProductComment {current}/{totalCount} minPkid={minPkid} 总共获取到 {comments.Rows.Count}条数据");
                if (comments.Rows.Count == 0)
                {
                    break;
                }
                int tempMinPkid = minPkid;
                minPkid = comments.Rows[comments.Rows.Count - 1].GetValue <int>("CommentId");
                Logger.Info(
                    $"ImportProductComment {current}/{totalCount} minPkid={tempMinPkid} maxPkid={minPkid} 开始导入");
                Stopwatch watcher = new Stopwatch();
                watcher.Start();
                var userIds = new List <Guid>(comments.Rows.Count);
                var pids    = new List <string>(comments.Rows.Count);
                foreach (DataRow row in comments.Rows)
                {
                    userIds.Add(row.GetValue <Guid>("CommentUserId"));
                    pids.Add(row.GetValue <string>("CommentProductId"));
                }
                var mobilesDic =
                    new Dictionary <Guid, string>(comments.Rows.Count);
                //批量获取用户手机号
                using (var client = new UserAccountClient())
                {
                    var response = client.GetUsersByIds(userIds);
                    if (response.Success)
                    {
                        foreach (var item in response.Result)
                        {
                            mobilesDic[item.UserId] = item.MobileNumber;
                        }
                    }
                }

                //批量获取产品数据
                var productDic =
                    new Dictionary <string, Service.Product.Models.New.SkuProductDetailModel>(comments.Rows.Count);
                using (var client = new ProductClient())
                {
                    var response = client.SelectSkuProductListByPids(pids);
                    if (response.Success && response.Result.Any())
                    {
                        foreach (var item in response.Result)
                        {
                            productDic[item.Pid] = item;
                        }
                    }
                }
                //批量获取默认车型数据
                var vehicleDt  = GetDefaultVehicleByUserIds(userIds);
                var vehicleDic = new Dictionary <Guid, string>(comments.Rows.Count);
                foreach (DataRow row in vehicleDt.Rows)
                {
                    vehicleDic[row.GetValue <Guid>("UserId")] = row.GetValue <string>("VehicleId");
                }

                Parallel.ForEach(comments.Rows.OfType <DataRow>(),
                                 new ParallelOptions()
                {
                    MaxDegreeOfParallelism = 10
                },
                                 item =>
                {
                    AddTopic(item, mobilesDic, productDic, vehicleDic);
                });
                watcher.Stop();
                current += pageSize;
                Logger.Info(
                    $"ImportProductComment {current}/{totalCount} minPkid={tempMinPkid} maxPkid={minPkid} 导入完毕 用时{watcher.ElapsedMilliseconds}");
            }
        }
示例#4
0
        /// <summary>
        ///     清算用户数据
        /// </summary>
        /// <param name="questionModel"></param>
        /// <param name="activityId"></param>
        private void UserAnswerClear(QuestionModel questionModel, long activityId)
        {
            var questionId = questionModel.PKID;
            //获取题目的选项和子项
            var options = DalActivity.SearchQuestionOption(questionId)?.ToList();

            if (options?.Count == 0)
            {
                return;
            }
            //正确选项
            var rightOption = options.FirstOrDefault(p => p.QuestionParentID == 0 && p.IsRightValue == 1);

            if (rightOption == null)
            {
                return;
            }
            var i = 1;

            using (var db = DbHelper.CreateDbHelper())
                using (var configClient = new ConfigClient())
                    using (var userClient = new UserClient())
                        using (var activityClient = new ActivityClient())
                            using (var templatePushClient = new TemplatePushClient())
                                using (var cacheClient = CacheHelper.CreateCacheClient("ActivityUserQuestionAnswerClear"))
                                {
                                    //推送的开关设置
                                    var pushResult = configClient.GetOrSetRuntimeSwitch("activityquestionclearpush")?.Result;
                                    //推送开关
                                    var pushFlag = pushResult?.Value ?? false;
                                    //推送的模板ID
                                    var pushIdstr = pushResult?.Description;
                                    var pushId    = 0;
                                    int.TryParse(pushIdstr, out pushId);
                                    while (true)
                                    {
                                        var ts = new Stopwatch();
                                        ts.Start();
                                        var clearCount = 1000;
                                        //获取用户答题尚未清算数据
                                        var userAnswerNotClearDatas = DalActivity.SearchUserAnswerNotClear(questionId, clearCount)?.ToList();
                                        if (userAnswerNotClearDatas?.Count == 0)
                                        {
                                            break;
                                        }

                                        //循环用户数据
                                        userAnswerNotClearDatas.AsParallel().ForAll(userData =>
                                        {
                                            try
                                            {
                                                //用户选择的选项
                                                var userOption = options.FirstOrDefault(p => p.PKID == userData.AnswerOptionID);
                                                if (userOption != null)
                                                {
                                                    Logger.Info($"开始清算用户数据:{userData.UserID} {userData.AnswerOptionID}");

                                                    //找用户选项的根选项
                                                    var rootOption = GetRootOption(userOption, options);
                                                    //判断是否正确选项
                                                    //正确则赠送兑换券 否则不赠送兑换券
                                                    if (rootOption.PKID == rightOption.PKID)
                                                    {
                                                        //更新回答结果
                                                        var resultAnswer = activityClient.ModifyQuestionUserAnswerResult(
                                                            new ModifyQuestionUserAnswerResultRequest()
                                                        {
                                                            AnswerResultStatus = 1,
                                                            ResultId           = userData.PKID,
                                                            WinCouponCount     = userData.WinCouponCount
                                                        });

                                                        if (resultAnswer?.Result?.IsOk == true)
                                                        {
                                                            //更新兑换券 和 日志
                                                            var result = activityClient.ModifyActivityCoupon(userData.UserID,
                                                                                                             activityId,
                                                                                                             userOption.WinCouponCount ?? 0
                                                                                                             , "答题清算服务"
                                                                                                             , userData.AnswerDate);
                                                            if (!result.Success && result.Result <= 0)
                                                            {
                                                                Logger.Warn($"请求 ModifyActivityCoupon 失败 {result.ErrorMessage}");
                                                                //回滚
                                                                DalActivity.UpdateUserAnswerResult(db, userData.PKID,
                                                                                                   userData.WinCouponCount, 0);
                                                                return;
                                                            }
                                                        }
                                                    }
                                                    else
                                                    {
                                                        //更新用户答题结果
                                                        var resultAnswer = activityClient.ModifyQuestionUserAnswerResult(
                                                            new ModifyQuestionUserAnswerResultRequest()
                                                        {
                                                            AnswerResultStatus = 2,
                                                            ResultId           = userData.PKID,
                                                            WinCouponCount     = 0
                                                        });
                                                    }
                                                    Logger.Info($"用户 {userData.UserID} ");
                                                    //推送消息 判断推送开关是否开启
                                                    if (pushFlag && pushId != 0)
                                                    {
                                                        PushMessage(pushId, cacheClient, userClient, templatePushClient, userData.UserID, userData.CreateDatetime);
                                                    }
                                                }
                                            }
                                            catch (Exception e)
                                            {
                                                Logger.Error($" {nameof(ActivityUserQuestionAnswerClearJob)} 失败 ", e);
                                            }
                                        });
                                        ts.Stop();
                                        Logger.Info($" {nameof(UserAnswerClear)} 清算 {clearCount} 条数据 执行时间 {ts.Elapsed.TotalSeconds} 秒 ");
                                        i++;
                                    }
                                }
        }
        void ImportAdditionComment()
        {
            int minPkid = int.MaxValue;
            int maxPkid = int.MaxValue;

            using (var client = new ConfigClient())
            {
                var response = client.GetOrSetRuntimeSwitch("ProductCommentToTopicJob");
                if (response.Success && (response.Result?.Value ?? false))
                {
                    var pkidArr = response.Result.Description.Split(',');
                    if (pkidArr.Length == 2)
                    {
                        int.TryParse(pkidArr[0], out minPkid);
                        int.TryParse(pkidArr[1], out maxPkid);
                    }
                }
            }
            int current    = 0;
            int pageSize   = 500;
            int pageIndex  = 1;
            int totalCount = GetAdditionCommentsCount(minPkid, maxPkid);
            int pageTotal  = (totalCount - 1) / pageSize + 1;

            while (pageIndex <= pageTotal)
            {
                pageIndex++;

                var comments = GetAdditionComments(minPkid, maxPkid, pageSize);
                Logger.Info(
                    $"ImportAdditionComment {current}/{totalCount} minPkid={minPkid} 总共获取到 {comments.Rows.Count}条数据");
                if (comments.Rows.Count == 0)
                {
                    break;
                }
                int tempMinPkid = minPkid;
                minPkid = comments.Rows[comments.Rows.Count - 1].GetValue <int>("CommentId");
                Logger.Info(
                    $"ImportAdditionComment {current}/{totalCount} minPkid={tempMinPkid} maxPkid={minPkid} 开始导入");
                Stopwatch watcher = new Stopwatch();
                watcher.Start();
                var userIds = new List <Guid>(comments.Rows.Count);
                foreach (DataRow row in comments.Rows)
                {
                    userIds.Add(row.GetValue <Guid>("CommentUserId"));
                }
                var mobilesDic =
                    new Dictionary <Guid, string>(comments.Rows.Count);
                //批量获取用户手机号
                using (var client = new UserAccountClient())
                {
                    var response = client.GetUsersByIds(userIds);
                    if (response.Success)
                    {
                        foreach (var item in response.Result)
                        {
                            mobilesDic[item.UserId] = item.MobileNumber;
                        }
                    }
                }

                Parallel.ForEach(comments.Rows.OfType <DataRow>(),
                                 new ParallelOptions()
                {
                    MaxDegreeOfParallelism = 10
                },
                                 item =>
                {
                    AddReply(item.GetValue <Guid>("CommentUserId"), item.GetValue <string>("CommentUserName"),
                             item.GetValue <int>("CommentId"), item.GetValue <string>("AdditionCommentContent"),
                             item.GetValue <string>("AdditionCommentImages"), item.GetValue <int>("AdditionCommentStatus"),
                             item.GetValue <string>("CreateTime"), item.GetValue <string>("UpdateTime"), item.GetValue <int>("AdditionCommentId"), mobilesDic, false);
                });
                watcher.Stop();
                current += pageSize;
                Logger.Info(
                    $"ImportAdditionComment {current}/{totalCount} minPkid={tempMinPkid} maxPkid={minPkid} 导入完毕 用时{watcher.ElapsedMilliseconds}");
            }
        }