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); }
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); }
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); }