Ejemplo n.º 1
0
        private IList <int> Caculate_JXSSC_4XDX(string[] codes, string[] wins)
        {
            var             bonusLevelList = new List <int>();
            List <string[]> rlt            = new List <string[]>();

            for (var i = 0; i < codes.Length; i++)
            {
                var cList = AnteCodeNumbers[i].ToArray();
                var sList = new string[cList.Length];
                for (var j = 0; j < cList.Length; j++)
                {
                    sList[j] = cList[j].ToString();
                }
                rlt.Add(sList);
            }
            var c = new ArrayCombination();

            c.Calculate(rlt.ToArray(), (item) =>
            {
                var level = CheckIsWin_JXSSC_4XDX(item, wins);
                if (level > 0)
                {
                    bonusLevelList.Add(level);
                }
            });
            return(bonusLevelList.OrderBy((i) => i).ToList());
        }
        /// <summary>
        /// 分析一个投注号码,计算此号码所包含的注数。
        /// 投注号码格式错误时抛出异常AntecodeFormatException。
        /// </summary>
        /// <param name="antecode">投注号码</param>
        /// <returns>号码所包含的注数</returns>
        public int AnalyzeAnteCode(string antecode)
        {
            string msg;

            if (!CheckAntecode(antecode, out msg))
            {
                throw new AntecodeFormatException(GameCode, GameType, antecode, "投注号码格式错误 - " + msg);
            }
            List <string[]> rlt = new List <string[]>();

            for (var i = 0; i < AnteCodeNumbers.Length; i++)
            {
                rlt.Add(AnteCodeNumbers[i].Split(' '));
            }
            int count = 0;
            var c     = new ArrayCombination();

            c.Calculate(rlt.ToArray(), (item) =>
            {
                if (item.Distinct().Count() == BallNumber)
                {
                    count++;
                }
            });
            if (count == 0)
            {
                throw new AntecodeFormatException(GameCode, GameType, antecode, "投注号码格式错误,不包含可用的号码组合 - " + msg);
            }
            return(count);
        }
        public IList <int> CaculateBonus(string antecode, string winNumber)
        {
            AnalyzeAnteCode(antecode);

            string msg;
            var    checker = KaSon.FrameWork.Analyzer.AnalyzerFactory.AnalyzerFactory.GetWinNumberAnalyzer(GameCode, GameType);

            if (!checker.CheckWinNumber(winNumber, out msg))
            {
                throw new AntecodeFormatException(GameCode, GameType, winNumber, "中奖号码格式错误 - " + msg);
            }
            List <string[]> rlt = new List <string[]>();

            for (var i = 0; i < AnteCodeNumbers.Length; i++)
            {
                rlt.Add(AnteCodeNumbers[i].Split(' '));
            }
            var bonusLevelList = new List <int>();
            var c = new ArrayCombination();

            c.Calculate(rlt.ToArray(), (item) =>
            {
                if (item.Distinct().Count() == BallNumber)
                {
                    if (IsWin(item, checker.WinNumbers))
                    {
                        bonusLevelList.Add(0);
                    }
                }
            });
            return(bonusLevelList);
        }
Ejemplo n.º 4
0
        public static string ToAnteString_LiangCai(this Antecode ante, string gameCode, string gameType)
        {
            if (gameCode.Equals("SSQ", StringComparison.OrdinalIgnoreCase) &&
                ante.GameType.Equals("DS", StringComparison.OrdinalIgnoreCase))
            {
                return(ante.AnteNumber.Replace("|", "-").Replace(",", " "));
            }
            if (gameCode.Equals("SSQ", StringComparison.OrdinalIgnoreCase) &&
                ante.GameType.Equals("FS", StringComparison.OrdinalIgnoreCase))
            {
                var hong = ante.AnteNumber.Split('|')[0];
                var lan  = ante.AnteNumber.Split('|')[1];
                if (lan.Length > 35)
                {
                    var lan1 = ante.AnteNumber.Split('|')[1].Substring(0, 17);
                    var lan2 = ante.AnteNumber.Split('|')[1].Substring(18);
                    return(hong.Replace(",", " ") + "-" + lan1.Replace(",", " ") + ";" + hong.Replace(",", " ") + "-" +
                           lan2.Replace(",", " "));
                }
                return(ante.AnteNumber.Replace("|", "-").Replace(",", " "));
            }
            if (gameCode.Equals("SSQ", StringComparison.OrdinalIgnoreCase) &&
                ante.GameType.Equals("DT", StringComparison.OrdinalIgnoreCase))
            {
                var tmp = ante.AnteNumber.Split('|');
                if (tmp.Length != 3)
                {
                    throw new LogicException("大乐透胆拖玩法号码错误 - " + ante.AnteNumber);
                }
                var hongdan = tmp[0];
                var hongtuo = tmp[1];
                var lan     = tmp[2];
                if (lan.Length > 35)
                {
                    var lan1 = lan.Substring(0, 17);
                    var lan2 = lan.Substring(18);
                    return(hongdan.Replace(",", " ") + "$" + hongtuo.Replace(",", " ") + "-" + lan1.Replace(",", " ") +
                           ";" + hongdan.Replace(",", " ") + "$" + hongtuo.Replace(",", " ") + "-" +
                           lan2.Replace(",", " "));
                }
                return(string.Format("{0}${1}-{2}", hongdan.Replace(",", " "), hongtuo.Replace(",", " "),
                                     lan.Replace(",", " ")));
            }
            if (gameCode.Equals("DLT", StringComparison.OrdinalIgnoreCase) &&
                (ante.GameType.Equals("DS", StringComparison.OrdinalIgnoreCase) ||
                 ante.GameType.Equals("FS", StringComparison.OrdinalIgnoreCase)))
            {
                return(ante.AnteNumber.Replace("|", "-").Replace(",", " "));
            }
            if (gameCode.Equals("DLT", StringComparison.OrdinalIgnoreCase) &&
                ante.GameType.Equals("DT", StringComparison.OrdinalIgnoreCase))
            {
                var tmp = ante.AnteNumber.Replace(",", " ").Split('|');
                if (tmp.Length != 4)
                {
                    throw new LogicException("大乐透胆拖玩法号码错误 - " + ante.AnteNumber);
                }
                //05,06,07,08|01,02,03,04,09|01|02,03
                //(05,06,07,08),01,02,03,04,09+(01),02,03
                var hongdan = tmp[0];
                var hongtuo = tmp[1];
                var landan  = tmp[2];
                var lantuo  = tmp[3];
                return(string.Format("{0}${1}-{2}${3}", hongdan, hongtuo, landan, lantuo));
            }
            if (gameCode.Equals("CTZQ", StringComparison.OrdinalIgnoreCase))
            {
                switch (ante.GameType.ToUpper())
                {
                case "T14C":
                    if (ante.AnteNumber.Replace(",", "").Length > 38)
                    {
                        throw new LogicException("传统足球14场玩法号码错误 - " + ante.AnteNumber);
                    }
                    return(ante.AnteNumber);

                case "TR9":
                    if (ante.AnteNumber.Replace(",", "").Length > 27)
                    {
                        throw new LogicException("传统足球任选9场玩法号码错误 - " + ante.AnteNumber);
                    }
                    return(ante.AnteNumber.Replace("*", "#"));

                case "T6BQC":
                    if (ante.AnteNumber.Replace(",", "").Length > 32)
                    {
                        throw new LogicException("传统足球6场半全场玩法号码错误 - " + ante.AnteNumber);
                    }
                    return(ante.AnteNumber);

                case "T4CJQ":
                    if (ante.AnteNumber.Replace(",", "").Length > 32)
                    {
                        throw new LogicException("传统足球4场进球玩法号码错误 - " + ante.AnteNumber);
                    }
                    return(ante.AnteNumber);

                default:
                    return(ante.AnteNumber);
                }
            }

            #region 重庆时时彩
            if (gameCode.Equals("CQSSC", StringComparison.OrdinalIgnoreCase))
            {
                var touzhu = string.Empty;
                switch (ante.GameType.ToLower())
                {
                case "1xdx":
                    var dx1xL = ante.AnteNumber.Replace("-,-,-,-,", "");
                    if (dx1xL.Length > 5)
                    {
                        return(ConvertGameType(gameCode, gameType) + "|" + "-,-,-,-," + dx1xL.Substring(0, 5) +
                               ";" + ConvertGameType(gameCode, gameType) + "|" + "-,-,-,-," + dx1xL.Substring(5));
                    }
                    return(ConvertGameType(gameCode, gameType) + "|" + ante.AnteNumber);

                case "2xdx":
                    var dx2xL = ante.AnteNumber.Replace("-,-,-,", "").Split(',');
                    if (dx2xL[0].Length + dx2xL[1].Length > 12)
                    {
                        var list = new List <char[]>();
                        list.Add(dx2xL[0].ToArray());
                        list.Add(dx2xL[1].ToArray());
                        var strL = new List <string>();
                        var c    = new ArrayCombination();
                        c.Calculate(list.ToArray(),
                                    a =>
                        {
                            strL.Add(ConvertGameType(gameCode, gameType) + "|" + "-,-,-," +
                                     string.Join(",", a));
                        });
                        return(string.Join(";", strL));
                    }
                    return(ConvertGameType(gameCode, gameType) + "|" + ante.AnteNumber);

                case "3xdx":
                    var dx3xL = ante.AnteNumber.Replace("-,-,", "").Split(',');
                    if (dx3xL[0].Length + dx3xL[1].Length + dx3xL[2].Length > 24)
                    {
                        var list = new List <char[]>();
                        list.Add(dx3xL[0].ToArray());
                        list.Add(dx3xL[1].ToArray());
                        list.Add(dx3xL[2].ToArray());
                        var strL = new List <string>();
                        var c    = new ArrayCombination();
                        c.Calculate(list.ToArray(),
                                    a =>
                        {
                            strL.Add(ConvertGameType(gameCode, gameType) + "|" + "-,-," + string.Join(",", a));
                        });
                        return(string.Join(";", strL));
                    }
                    return(ConvertGameType(gameCode, gameType) + "|" + ante.AnteNumber);

                case "5xdx":
                    var dx5xL = ante.AnteNumber.Split(',');
                    if (ante.AnteNumber.Replace(",", "").Length > 45)
                    {
                        var list = new List <char[]>();
                        list.Add(dx5xL[0].ToArray());
                        list.Add(dx5xL[1].ToArray());
                        list.Add(dx5xL[2].ToArray());
                        list.Add(dx5xL[3].ToArray());
                        list.Add(dx5xL[4].ToArray());
                        var strL = new List <string>();
                        var c    = new ArrayCombination();
                        c.Calculate(list.ToArray(),
                                    a => { strL.Add(ConvertGameType(gameCode, gameType) + "|" + string.Join(",", a)); });
                        return(string.Join(";", strL));
                    }
                    return(ConvertGameType(gameCode, gameType) + "|" + ante.AnteNumber);

                case "2xzxfs":
                    return(ConvertGameType(gameCode, gameType) + "|" + ante.AnteNumber.Replace(",", ""));

                case "5xtx":
                    return(ConvertGameType(gameCode, gameType) + "|" + ante.AnteNumber);

                case "dxds":
                    return(ConvertGameType(gameCode, gameType) + "|" + ante.AnteNumber.Replace(",", ""));

                default:
                    return(ante.AnteNumber);
                }
            }

            #endregion

            #region 江西11选5
            if (gameCode.Equals("JX11X5", StringComparison.OrdinalIgnoreCase))
            {
                switch (ante.GameType.ToLower())
                {
                case "rx2":
                case "rx3":
                case "rx4":
                case "rx5":
                case "rx6":
                case "rx7":
                case "q2zux":
                case "q3zux":
                    return(ConvertGameType(gameCode, gameType) + "|" + ante.AnteNumber.Replace(",", " "));

                case "q2zhix":
                    if (ante.AnteNumber.Replace(",", " ").Split(' ').Length > 11)
                    {
                        var q2zhix = ante.AnteNumber.Replace(" ", "-").Split(',');
                        var list   = new List <string[]>();
                        list.Add(q2zhix[0].Split('-'));
                        list.Add(q2zhix[1].Split('-'));
                        var strL = new List <string>();
                        var c    = new ArrayCombination();
                        c.Calculate(list.ToArray(), a =>
                        {
                            if (a[0] != a[1])
                            {
                                strL.Add(ConvertGameType(gameCode, gameType) + "|" + string.Join(",", a));
                            }
                        });
                        return(string.Join(";", strL));
                    }
                    return(ConvertGameType(gameCode, gameType) + "|" + ante.AnteNumber);

                case "q3zhix":
                    if (ante.AnteNumber.Replace(",", " ").Split(' ').Length > 3)
                    {
                        var q3zhix = ante.AnteNumber.Replace(" ", "-").Split(',');
                        var list   = new List <string[]>();
                        list.Add(q3zhix[0].Split('-'));
                        list.Add(q3zhix[1].Split('-'));
                        list.Add(q3zhix[2].Split('-'));
                        var strL = new List <string>();
                        var c    = new ArrayCombination();
                        c.Calculate(list.ToArray(), a =>
                        {
                            if (a.Distinct().ToArray().Length == 3)
                            {
                                strL.Add(ConvertGameType(gameCode, gameType) + "|" + string.Join(",", a));
                            }
                        });
                        return(string.Join(";", strL));
                    }
                    return(ConvertGameType(gameCode, gameType) + "|" + ante.AnteNumber);

                default:
                    return(ante.AnteNumber);
                }
            }

            #endregion

            #region 排列三、福彩3D
            if (gameCode.Equals("PL3", StringComparison.OrdinalIgnoreCase) ||
                gameCode.Equals("FC3D", StringComparison.OrdinalIgnoreCase))
            {
                switch (ante.GameType.ToLower())
                {
                case "ds":
                case "fs":
                    var pl = ante.AnteNumber.Replace(",", "");
                    if (pl.Length > 24)
                    {
                        var pl3fs = ante.AnteNumber.Split(',');
                        var list  = new List <char[]>();
                        list.Add(pl3fs[0].ToArray());
                        list.Add(pl3fs[1].ToArray());
                        list.Add(pl3fs[2].ToArray());
                        var strL = new List <string>();
                        var c    = new ArrayCombination();
                        c.Calculate(list.ToArray(),
                                    a => { strL.Add(ConvertGameType(gameCode, gameType) + "|" + string.Join(",", a)); });
                        return(string.Join(";", strL));
                    }
                    return(ConvertGameType(gameCode, gameType) + "|" + ante.AnteNumber);

                case "hz":
                    return(ConvertGameType(gameCode, gameType) + "|" + ante.AnteNumber);

                case "zx3ds":
                    return(ConvertGameType(gameCode, gameType) + "|" + ante.AnteNumber);

                case "zx6":
                    if (ante.AnteNumber.Replace(",", "").Length > 3)
                    {
                        var num  = ante.AnteNumber.Replace(",", "");
                        var c    = new Combination();
                        var strL = new List <string>();
                        c.Calculate(num.ToArray(), 3,
                                    a => { strL.Add(ConvertGameType(gameCode, gameType) + "|" + string.Join(",", a)); });
                        return(string.Join(";", strL));
                    }
                    return(ConvertGameType(gameCode, gameType) + "|" + ante.AnteNumber);

                case "zx3fs":
                    return(ConvertGameType(gameCode, gameType) + "|" + ante.AnteNumber.Replace(",", ""));

                default:
                    return(ante.AnteNumber);
                }
            }

            #endregion
            return(ante.AnteNumber);
        }
        public int AnalyzeAnteCode(ISportAnteCode[] antecodeList)
        {
            string msg;

            if (!CheckAntecode(antecodeList, out msg))
            {
                throw new AntecodeFormatException(GameCode, GameType, "过关足球", "投注号码格式错误 - " + msg);
            }
            var tmp     = antecodeList.Where(a => !a.IsDan).ToArray();
            var danList = antecodeList.Where(a => a.IsDan).ToArray();

            var c          = new Combination();
            var ac         = new ArrayCombination();
            var totalCount = 0;

            ////new
            ////按比赛编号组成二维数组
            //var totalCodeList = new List<ISportAnteCode[]>();
            //foreach (var g in tmp.GroupBy(p => p.MatchId))
            //{
            //    totalCodeList.Add(tmp.Where(p => p.MatchId == g.Key).ToArray());
            //}

            //if (this.GameType == "HH")
            //{
            //    ac.Calculate(totalCodeList.ToArray(), (match) =>
            //    {
            //        c.Calculate(match, BaseCount - danList.Count(), (tuoArr) =>
            //        {
            //            totalCount++;
            //        });
            //    });
            //}
            //else
            //{

            //    c.Calculate(totalCodeList.ToArray(), BaseCount - danList.Count(), (arr2) =>
            //    {
            //        ac.Calculate(arr2, (tuoArr) =>
            //        {
            //            var count = 1;
            //            foreach (var item in tuoArr)
            //            {
            //                count *= item.AnteCode.Split(',').Length;
            //            }
            //            totalCount += count;
            //        });
            //    });
            //}

            #region old

            c.Calculate <ISportAnteCode>(tmp, BaseCount - danList.Length, (list) =>
            {
                var count = 1;
                foreach (var t in list)
                {
                    count *= t.Length;
                }
                totalCount += count;
            });
            if (totalCount == 0)
            {
                totalCount = 1;
            }
            foreach (var dan in danList)
            {
                totalCount *= dan.Length;
            }

            #endregion

            return(totalCount);
        }
Ejemplo n.º 6
0
        public int CheckBettingOrderMoney(List <Sports_AnteCodeInfo> codeList, string gameCode, string gameType, string playType, int amount, decimal schemeTotalMoney, DateTime stopTime, bool isAllow = false, string userId = "")
        {
            //验证投注号码
            if (stopTime < DateTime.Now)
            {
                throw new Exception("投注结束时间不能小于当前时间");
            }

            //验证投注内容是否合法,或是否重复
            foreach (var item in codeList)
            {
                var oneCodeArray = item.AnteCode.Split(',');
                if (oneCodeArray.Distinct().Count() != oneCodeArray.Length)
                {
                    throw new Exception(string.Format("投注号码{0}中包括重复的内容", item.AnteCode));
                }
                BettingHelper.CheckSportAnteCode(gameCode, string.IsNullOrEmpty(item.GameType) ? gameType : item.GameType.ToUpper(), oneCodeArray);
            }

            var tmp        = playType.Split('|');
            var totalMoney = 0M;
            var totalCount = 0;

            var c = new Combination();

            foreach (var chuan in tmp)
            {
                var chuanArray = chuan.Split('_');
                if (chuanArray.Length != 2)
                {
                    continue;
                }

                var m = int.Parse(chuanArray[0]);
                var n = int.Parse(chuanArray[1]);

                //串关包括的真实串数
                var countList = SportAnalyzer.AnalyzeChuan(m, n);
                if (n > 1)
                {
                    //3_3类型
                    c.Calculate(codeList.ToArray(), m, (arr) =>
                    {
                        //m场比赛
                        if (arr.Select(p => p.MatchId).Distinct().Count() == m)
                        {
                            foreach (var count in countList)
                            {
                                //M串1
                                c.Calculate(arr, count, (a1) =>
                                {
                                    var cCount = 1;
                                    foreach (var t in a1)
                                    {
                                        cCount *= t.AnteCode.Split(',').Length;
                                    }
                                    totalCount += cCount;
                                });
                            }
                        }
                    });
                }
                else
                {
                    var ac      = new ArrayCombination();
                    var danList = codeList.Where(a => a.IsDan).ToList();
                    //var tuoList = codeList.Where(a => !a.IsDan).ToList();
                    var totalCodeList = new List <Sports_AnteCodeInfo[]>();
                    foreach (var g in codeList.GroupBy(p => p.MatchId))
                    {
                        totalCodeList.Add(codeList.Where(p => p.MatchId == g.Key).ToArray());
                    }
                    //3_1类型
                    foreach (var count in countList)
                    {
                        //c.Calculate(totalCodeList.ToArray(), count - danList.Count, (arr2) =>
                        c.Calculate(totalCodeList.ToArray(), count, (arr2) =>
                        {
                            ac.Calculate(arr2, (tuoArr) =>
                            {
                                #region 拆分组合票

                                var isContainsDan = true;
                                foreach (var dan in danList)
                                {
                                    var con = tuoArr.FirstOrDefault(p => p.MatchId == dan.MatchId);
                                    if (con == null)
                                    {
                                        isContainsDan = false;
                                        break;
                                    }
                                }

                                if (isContainsDan)
                                {
                                    var cCount = 1;
                                    foreach (var t in tuoArr)
                                    {
                                        cCount *= t.AnteCode.Split(',').Length;
                                    }
                                    totalCount += cCount;
                                    //if (!isAllow && BusinessHelper.IsSiteLimit(gameCode))
                                    //{
                                    //    if (!string.IsNullOrEmpty(userId) && !BusinessHelper.IsSpecificUser(userId))//如果是特定用户,则不限制投注
                                    //    {
                                    //        if ((cCount * amount * 2M) < 50)
                                    //            throw new Exception("您好,根据您投注的内容将产生多张彩票,每张彩票金额不足50元,请您增加倍数以达到出票条件。");
                                    //    }
                                    //}
                                }

                                #endregion
                            });
                        });
                    }
                }
            }
            totalMoney = totalCount * amount * 2M;

            if (totalMoney != schemeTotalMoney)
            {
                throw new ArgumentException(string.Format("订单金额不正确,应该为:{0};实际为:{1}。", totalMoney, schemeTotalMoney));
            }
            return(totalCount);
        }