/// <summary>
        /// BJ 매칭
        /// </summary>
        /// <param name="bj"></param>
        /// <param name="user"></param>
        /// <param name="serverBjs"></param>
        /// <returns></returns>
        private UserModel BjUserMatching(BjModel bj, UserModel user, List <RankBjModel> serverBjs)
        {
            try
            {
                var resultBj = new RankBjModel();
                for (int Idx = 0; Idx < serverBjs.Count(); Idx++)
                {
                    if (serverBjs[Idx].BjID == user.ID)
                    {
                        resultBj = serverBjs[Idx];
                        break;
                    }
                }
                if (resultBj == null && string.IsNullOrEmpty(resultBj.BjID))
                {
                    return(null);
                }

                user.Type        = UserType.BJ;
                user.PictureUrl  = resultBj.BjImgUrl;
                user.RankingInfo = resultBj;
                user.BjInfo      = resultBj.Bjinfo;

                return(user);
            }
            catch (Exception e)
            {
                string log = e.Message;
                return(null);
            }
        }
        private JsonModel ActionType2(BjModel bj, List <UserModel> users)
        {
            var result = new JsonModel
            {
                UserModels = new List <UserModel>()
            };

            Parallel.For(0, 2, (i) =>
            {
                switch (i)
                {
                case 0:
                    var serverBjs = (from sBj in RankBjDataCache.Instance.GetRankBjModels
                                     join cBj in users on sBj.BjID equals cBj.ID
                                     select sBj)?.ToList();

                    var clientBjs = (from sBj in RankBjDataCache.Instance.GetRankBjModels
                                     join cBj in users on sBj.BjID equals cBj.ID
                                     select cBj)?.Distinct().ToList();

                    if (serverBjs != null && serverBjs.Count > 0)
                    {
                        Parallel.For(0, clientBjs.Count, (Idx) =>
                        {
                            var tmp = BjUserMatching(bj, clientBjs[Idx], serverBjs);
                            if (tmp != null)
                            {
                                result.UserModels.Add(tmp);
                            }
                        });
                    }
                    break;

                case 1:
                    var serverUsers = (from sUsers in RankUserModelDataCache.Instance.GetRankUserModels
                                       join cUsers in users on sUsers.UserID equals cUsers.ID
                                       select sUsers).ToList();

                    var clientUsers = (from sUsers in RankUserModelDataCache.Instance.GetRankUserModels
                                       join cUsers in users on sUsers.UserID equals cUsers.ID
                                       select cUsers)?.Distinct()?.ToList();

                    if (serverUsers != null && serverUsers.Count > 0)
                    {
                        var tmp = BigFanUserMatching(bj, clientUsers, serverUsers);
                        if (tmp != null)
                        {
                            result.UserModels.AddRange(tmp);
                        }
                    }
                    break;
                }
            });

            return(result);
        }
        private async void CallCheckVersionWebApi()
        {
            var version = new JsonModel
            {
                BjModel = Bj
            };

            var returnMessage = await webApiCaller.CheckVersionAsync(version).ConfigureAwait(true);

            if (returnMessage == null || returnMessage.BjModel == null)
            {
                ShowMessageBox("인증이 실패 되어 프로그램이 종료 됩니다.", "인증 실패", MessageBoxButtons.OK, MessageBoxIcon.Stop, true);
                return;
            }

            if (!returnMessage.BjModel.CertificationFlag)
            {
                ShowMessageBox(returnMessage.BjModel.CertificationMessage, "인증 실패", MessageBoxButtons.OK, MessageBoxIcon.Stop, true);
                return;
            }

            if (returnMessage.BjModel.ExpireFlag)
            {
                // 만료 결제를 하여주십시오.
                ShowMessageBox(returnMessage.BjModel.ExpireMessage, "사용기간 만료", MessageBoxButtons.OK, MessageBoxIcon.Stop, true);
                return;
            }

            if (returnMessage.BjModel.IsNewUpload)
            {
                ShowMessageBox(returnMessage.BjModel.VersionMessage, "버전 확인", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            IsCert = true;
            Bj     = returnMessage.BjModel;
        }
        /// <summary>
        /// 빅팬 매칭
        /// </summary>
        /// <param name="bj"></param>
        /// <param name="clientUsers"></param>
        /// <param name="serverUsers"></param>
        /// <returns></returns>
        private List <UserModel> BigFanUserMatching(BjModel bj, List <UserModel> clientUsers, List <RankUserModel> serverUsers)
        {
            Parallel.For(0, clientUsers.Count, (clientUserIdx) =>
            {
                if (clientUsers[clientUserIdx].BJs == null)
                {
                    clientUsers[clientUserIdx].BJs = new List <BjModel>();
                }

                var matchingUser = new List <RankUserModel>();
                for (int Idx = 0; Idx < serverUsers.Count(); Idx++)
                {
                    if (serverUsers[Idx].UserID == clientUsers[clientUserIdx].ID)
                    {
                        matchingUser.Add(serverUsers[Idx]);
                    }
                }
                int mainBigFanRanking = matchingUser?.OrderBy(m => m.BigFanRanking)?.FirstOrDefault()?.BigFanRanking ?? -1;

                if (mainBigFanRanking == 1)
                {
                    // 1등 회장
                    clientUsers[clientUserIdx].Type = UserType.King;
                }
                else if (mainBigFanRanking >= 2 && mainBigFanRanking <= 5)
                {
                    // 2~5등
                    clientUsers[clientUserIdx].Type = UserType.BigFan;
                }
                else if (mainBigFanRanking >= 6 && mainBigFanRanking <= 10)
                {
                    // 6~10등
                    clientUsers[clientUserIdx].Type = UserType.BigFan;
                }
                else if (mainBigFanRanking >= 11 && mainBigFanRanking <= 20)
                {
                    // 11~20등
                    clientUsers[clientUserIdx].Type = UserType.BigFan;
                }

                Parallel.For(0, matchingUser.Count, (matchingUserIdx) => {
                    var Addbj = new BjModel()
                    {
                        ID  = matchingUser[matchingUserIdx].BjID,
                        Nic = matchingUser[matchingUserIdx].BjNic,
                    };

                    int bigFanRanking = matchingUser[matchingUserIdx].BigFanRanking;
                    if (bigFanRanking == 1)
                    {
                        // 1등 회장
                        Addbj.IconUrl = IconUrl.BulKing;
                    }
                    else if (bigFanRanking >= 2 && bigFanRanking <= 5)
                    {
                        // 2~5등
                        Addbj.IconUrl = IconUrl.BulRedHeart;
                    }
                    else if (bigFanRanking >= 6 && bigFanRanking <= 10)
                    {
                        // 6~10등
                        Addbj.IconUrl = IconUrl.BulYellowHeart;
                    }
                    else if (bigFanRanking >= 11 && bigFanRanking <= 20)
                    {
                        // 11~20등
                        Addbj.IconUrl = IconUrl.BulGrayHeart;
                    }

                    Addbj.Ranking = bigFanRanking;
                    clientUsers[clientUserIdx].BJs.Add(Addbj);
                });
            });

            return(clientUsers);
        }
        private UserModel RankUserModelToUserModel(RankUserModel rankUser, List <RankUserModel> allUserModels)
        {
            var userModel = new UserModel()
            {
                ID  = rankUser.UserID,
                Nic = rankUser.UserNick,
            };

            //var biz = new BizUserRank();
            //var matchingUser = biz.GetAllRankUserModelsByUserID(rankUser.UserID);
            var matchingUser = allUserModels.FindAll(a => a.UserID == rankUser.UserID);

            int mainBigFanRanking = matchingUser?.OrderBy(m => m.BigFanRanking)?.FirstOrDefault()?.BigFanRanking ?? -1;

            if (mainBigFanRanking == 1)
            {
                // 1등 회장
                userModel.Type = UserType.King;
            }
            else if (mainBigFanRanking >= 2 && mainBigFanRanking <= 5)
            {
                // 2~5등
                userModel.Type = UserType.BigFan;
            }
            else if (mainBigFanRanking >= 6 && mainBigFanRanking <= 10)
            {
                // 6~10등
                userModel.Type = UserType.BigFan;
            }
            else if (mainBigFanRanking >= 11 && mainBigFanRanking <= 20)
            {
                // 11~20등
                userModel.Type = UserType.BigFan;
            }

            // 몇건 ~ 십몇건
            for (int Idx = 0; Idx < matchingUser.Count; Idx++)
            {
                var Addbj = new BjModel()
                {
                    ID  = matchingUser[Idx].BjID,
                    Nic = matchingUser[Idx].BjNic,
                };

                int bigFanRanking = matchingUser[Idx].BigFanRanking;
                if (bigFanRanking == 1)
                {
                    // 1등 회장
                    Addbj.IconUrl = IconUrl.BulKing;
                }
                else if (bigFanRanking >= 2 && bigFanRanking <= 5)
                {
                    // 2~5등
                    Addbj.IconUrl = IconUrl.BulRedHeart;
                }
                else if (bigFanRanking >= 6 && bigFanRanking <= 10)
                {
                    // 6~10등
                    Addbj.IconUrl = IconUrl.BulYellowHeart;
                }
                else if (bigFanRanking >= 11 && bigFanRanking <= 20)
                {
                    // 11~20등
                    Addbj.IconUrl = IconUrl.BulGrayHeart;
                }

                Addbj.Ranking = bigFanRanking;
                userModel.BJs.Add(Addbj);
            }

            return(userModel);
        }