public static List <User> GetUsersByIds(List <Guid> userIds)
        {
            List <User> results = null;

            using (var client = new UserAccountClient())
            {
                var serviceResult = client.GetUsersByIds(userIds);
                serviceResult.ThrowIfException(true);
                results = serviceResult.Result;
                return(results);
            }
        }
        private static List <Tuple <Guid, string> > GetGroupBuyingUserName(List <Guid> userLists)
        {
            var result = new List <Tuple <Guid, string> >();

            using (var client = new UserAccountClient())
            {
                var searchResule = client.GetUsersByIds(userLists);
                if (searchResule.Success && searchResule.Result.Any())
                {
                    foreach (var item in searchResule.Result)
                    {
                        result.Add(new Tuple <Guid, string>(item.UserId, item.Profile.NickName));
                    }
                }
                else
                {
                    Logger.Warn($"GetGroupBuyingUserName==>{string.Join(",", userLists)}");
                }

                return(result);
            }
        }
        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}");
            }
        }
        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}");
            }
        }