private bool CheckSwitch() { using (var client = new ConfigClient()) { var result = client.GetOrSetRuntimeSwitch("TaskBackup"); return(result.Success && result.Result.Value); } }
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}"); } }
/// <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}"); } }