using Common; using Models; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Business.Util { public static class LottryDataHandle { private static Dictionary<string, LotteryCode> MlotteryCode; static LottryDataHandle() { MlotteryCode = new Dictionary<string, LotteryCode>(); } /// <summary> /// 东方6+1 转生肖 /// </summary> /// <param name="num"></param> /// <returns></returns> public static string GetSx(int num) { switch (num) { case 1: return "鼠"; case 2: return "牛"; case 3: return "虎"; case 4: return "兔"; case 5: return "龙"; case 6: return "蛇"; case 7: return "马"; case 8: return "羊"; case 9: return "猴"; case 10: return "鸡"; case 11: return "狗"; case 12: return "猪"; default: return ""; } } public static string GetJiJie(int num) { switch (num) { case 1: return "春"; case 2: return "夏"; case 3: return "秋"; case 4: return "冬"; default: return ""; } } public static string GetFangWei(int num) { switch (num) { case 1: return "东"; case 2: return "南"; case 3: return "西"; case 4: return "北"; default: return ""; } } /// <summary> /// /// </summary> /// <param name="Typename">类型名</param> /// <param name="Term">期数</param> /// <param name="Opentime">开奖时间</param> /// <param name="OpenCode">开奖号</param> /// <param name="Detail">开奖详情没有传""或者null</param> /// <returns></returns> public static LotteryData GetLotteryData(string Typename, int Term, DateTime Opentime, string ID, IList<int> OpenCode, string Detail, string MenuName = "", string KaiJiHao = "", string ShiJiHao = "") { try { var lotteryCode = GetLotteryCode(Typename); OpenCode = OpenCode.Take(lotteryCode.BallCount).ToArray(); LotteryData tmp = new LotteryData() { Term = Term.ToString(), OpenTime = Opentime.ToString(), LotteryName = lotteryCode.LotteryName, LotteryType = Typename, MenuName = MenuName, ID = ID, KJTime=lotteryCode.KJTime, StartHour=lotteryCode.StartHour, StartMinute=lotteryCode.StartMinute, Interval=lotteryCode.Interval, SkipDate=lotteryCode.SkipDate, KaiJiHao=KaiJiHao, ShiJiHao=ShiJiHao, DaXiaoZJZ=lotteryCode.DaXiaoZJZ, LastTermOfLastYear=GetLastTermOfLastYear(lotteryCode.KJTime) }; tmp.Details = new List<LotteryDetail>(); //LotteryBallType datatype = EnumFunctionType.GetBallType(Typename); if (lotteryCode != null) { if (Typename == SCCLottery.GP_KLPK3_ShanDong.ToString())//快乐扑克3单独处理 { List<LotteryDetail> list = Getklpk3(OpenCode); tmp.Details = list; } else { tmp.BallCount = lotteryCode.BallCount; tmp.RedBall = Array.ConvertAll<int, string>(OpenCode.Take(lotteryCode.RedCount).ToArray(), s => s.ToString()); if (lotteryCode.BlueCount > 0) { tmp.BlueBall = Array.ConvertAll<int, string>(OpenCode.Skip(lotteryCode.RedCount).ToArray(), s => s.ToString()); } if (lotteryCode.BallCount > 1) { LotteryDetail hezhi = new LotteryDetail() { Label = "和值", Value = LotteryUtils.GetSum(OpenCode.Take(lotteryCode.RedCount).ToList()).ToString() }; tmp.Details.Add(hezhi); LotteryDetail kuadu = new LotteryDetail() { Label = "跨度", Value = LotteryUtils.GetSpan(OpenCode.Take(lotteryCode.RedCount).ToList()).ToString() }; tmp.Details.Add(kuadu); LotteryDetail jio = new LotteryDetail() { Label = "奇偶比", Value = LotteryUtils.GetProportionOfJO(OpenCode.Take(lotteryCode.RedCount).ToList()) }; tmp.Details.Add(jio); LotteryDetail zihebi = new LotteryDetail() { Label = "质合比", Value = LotteryUtils.GetProportionOfZh(OpenCode) }; tmp.Details.Add(zihebi); LotteryDetail jioxt = new LotteryDetail() { Label = "奇偶形态", Value = LotteryUtils.GetJOString(OpenCode) }; tmp.Details.Add(jioxt); LotteryDetail dxxt = new LotteryDetail() { Label = "大小形态", Value = LotteryUtils.GetDXString(OpenCode, lotteryCode.DaXiaoZJZ) }; tmp.Details.Add(dxxt); LotteryDetail zotgsb = new LotteryDetail() { Label = "012路个数比", Value = LotteryUtils.GetProportionOf012(OpenCode) }; tmp.Details.Add(zotgsb); LotteryDetail hzxt = new LotteryDetail() { Label = "和值特征", //Value= LotteryUtils.ge() }; if (Typename == SCCLottery.DF_DF6J1.ToString())//东方6+1篮球转生sw { int blueball = OpenCode.Skip(lotteryCode.RedCount).ToArray()[0]; tmp.BlueBall = new string[] { GetSx(blueball) }; // Array.ConvertAll<int, string>(OpenCode.Skip(datatype.RedCount).ToArray(), s => s.ToString()); } if (Typename==SCCLottery.DF_HC1_GuangDong.ToString()) { int shengxiao = OpenCode.Skip(lotteryCode.RedCount).ToArray()[0]; int jijie = OpenCode.Skip(lotteryCode.RedCount).ToArray()[1]; int fangxiang = OpenCode.Skip(lotteryCode.RedCount).ToArray()[2]; tmp.BlueBall = new string[] { GetSx(shengxiao),GetJiJie(jijie),GetFangWei(fangxiang) }; } } } } else { tmp.BallCount = OpenCode.Count; tmp.RedBall = Array.ConvertAll<int, string>(OpenCode.ToArray(), s => s.ToString()); // tmp.BlueBall = OpenCode.Skip(datatype.RedCount).ToArray(); } //开奖号码补0 if (OpenCode.Max()>=10&& Typename != SCCLottery.DF_HC1_GuangDong.ToString()&& Typename != SCCLottery.DF_DF6J1.ToString()&& Typename != SCCLottery.GP_KLPK3_ShanDong.ToString()) { if (tmp.RedBall!=null) { tmp.RedBall = tmp.RedBall.Select(w => w.PadLeft(2, '0')).ToArray(); } if (tmp.BlueBall!=null) { tmp.BlueBall = tmp.BlueBall.Select(w => w.PadLeft(2, '0')).ToArray(); } } //要大小比的,要三区比的,要转生肖的,有开奖详情的, if (lotteryCode.SanQu>0)//EnumFunctionType.Sanqu.Contains(Typename) { LotteryDetail sanqu = new LotteryDetail() { Label = "三区比", Value = LotteryUtils.SsqSanQu(OpenCode.Take(6).ToList())//三区的目前只有双色球一个 }; tmp.Details.Add(sanqu); } //要大小比的 if (lotteryCode.DataXiao>0)//EnumFunctionType.DaxiaoType.Contains(Typename) { int takenum = lotteryCode.DaxiaoTake;//EnumFunctionType.GetDaXiaoTake(Typename); if (takenum == 0)//无take { if (lotteryCode.DaXiaoCount==0)//EnumFunctionType.GetDaxiaoCount(Typename) == 0个数默认 { LotteryDetail daxiao = new LotteryDetail() { Label = "大小比", Value = LotteryUtils.GetProportionOfDX(OpenCode, lotteryCode.DaXiaoZJZ) }; tmp.Details.Add(daxiao); } if (lotteryCode.DaXiaoCount> 0)//EnumFunctionType.GetDaxiaoCount(Typename) 指定个数 { LotteryDetail daxiao = new LotteryDetail() { Label = "大小比", Value = LotteryUtils.GetProportionOfDX(OpenCode, lotteryCode.DaXiaoZJZ,lotteryCode.DaXiaoCount)//EnumFunctionType.GetDaxiaoCount(Typename)EnumFunctionType.GetDaXiaoZJZ(Typename) }; tmp.Details.Add(daxiao); } } else //有take { if (lotteryCode.DaXiaoCount == 0)//EnumFunctionType.GetDaxiaoCount(Typename)个数默认 { LotteryDetail daxiao = new LotteryDetail() { Label = "大小比", Value = LotteryUtils.GetProportionOfDX(OpenCode.Take(takenum).ToList(),lotteryCode.DaXiaoZJZ )//EnumFunctionType.GetDaXiaoZJZ(Typename) }; tmp.Details.Add(daxiao); } if ( lotteryCode.DaXiaoCount> 0)//EnumFunctionType.GetDaxiaoCount(Typename)指定个数 { LotteryDetail daxiao = new LotteryDetail() { Label = "大小比", Value = LotteryUtils.GetProportionOfDX(OpenCode.Take(takenum).ToList(),lotteryCode.DaXiaoZJZ,lotteryCode.DaXiaoCount ) //EnumFunctionType.GetDaXiaoZJZ(Typename), EnumFunctionType.GetDaxiaoCount(Typename) }; tmp.Details.Add(daxiao); } } } if (!string.IsNullOrEmpty(Detail))//开奖详情内容 { var data = ToData<KaijiangDetailsEntity>(Detail); if (data!=null) { if (!string.IsNullOrEmpty(data.Trje)) { tmp.MoneyCount = data.Trje.Replace(",", ""); } if (!string.IsNullOrEmpty(data.Gdje)) { tmp.MoneyPond = data.Gdje.Replace(",", ""); } // int takenum = EnumFunctionType.ContainDetailType.Contains(Typename) ? 1 : 2; List < LotteryResults > list = new List<LotteryResults>(); if (data.KaiJiangItems!=null) { for (int i = 0; i < data.KaiJiangItems.Count; i++) { int couttotal = 0; int.TryParse(data.KaiJiangItems[i].Total, out couttotal); LotteryResults tmpresults = new LotteryResults() { LevelName=data.KaiJiangItems[i].Name, Count= couttotal, Money=data.KaiJiangItems[i].TotalMoney }; list.Add(tmpresults); } } tmp.ResultsList = list; //List<LotteryResults> list = new List<LotteryResults>(); //if (Typename == "QGC_PL3" || Typename == "QGC_FC3D") //{ // list = EnumFunctionType.GetLotteryResultsP3(Detail); //} //else if (Typename == "QGC_PL5") //{ // list = EnumFunctionType.GetLotteryResultsP5(Detail); //} //else //{ // list = EnumFunctionType.GetLotteryResults(Detail, takenum); //} } //string[] results = Detail.Split(new char[] { '^', '|', ',' }); //tmp.MoneyCount = results[0]; //int moneyPond = 0; //int.TryParse(results[1], out moneyPond); //tmp.MoneyPond = moneyPond.ToString(); } return tmp; } catch (Exception ee) { LogHelper.Error(typeof(LottryDataHandle), "GetLotteryData"); return null; } } public static T ToData<T>(string obj) { try { return JsonConvert.DeserializeObject<T>(obj); } catch (Exception ee) { return default(T); } } /// <summary> /// 获取快乐扑克3 /// </summary> /// <param name="OpenCode"></param> /// <returns></returns> public static List<LotteryDetail> Getklpk3(IList<int> OpenCode) { List<LotteryDetail> rtlist = new List<LotteryDetail>(); string[] _pokerSuitName = new string[] { "", "fangpian", "meihua", "hongtao", "heitao" }; foreach (var item in OpenCode) { LotteryDetail tmp = new LotteryDetail(); var pkSuit = item / 100; var pknum = item % 100; var pkstr = pknum.ToString(); if (pknum == 11) pkstr = "J"; else if (pknum == 12) pkstr = "Q"; else if (pknum == 13) pkstr = "K"; else if (pknum == 1) pkstr = "A"; tmp.Value = pkstr; tmp.Label = _pokerSuitName[pkSuit]; rtlist.Add(tmp); } return rtlist; } public static List<LotteryDetail> GetHc1guangdong(IList<int> OpenCode) { List<LotteryDetail> rtlist = new List<LotteryDetail>(); return rtlist; } public static LotteryCode GetLotteryCode(string lottertCode) { try { if (MlotteryCode.Keys.Count == 0) { GetLotteryCodeList(); } return MlotteryCode[lottertCode]; } catch (Exception ee) { LogHelper.Error(typeof(LottryDataHandle), ee.Message + "GetLotteryCode"); return null; } } public static List<LotteryCode> GetLotteryCode() { try { if (MlotteryCode.Keys.Count == 0) { GetLotteryCodeList(); } return MlotteryCode.Values.ToList(); } catch (Exception ee) { LogHelper.Error(typeof(LottryDataHandle), ee.Message + "GetLotteryCodeoflist"); return null; } } public static void GetLotteryCodeList() { try { string configFile = AppDomain.CurrentDomain.BaseDirectory + "/config/LotteryCode.xml"; List<LotteryCode> configs = CommonHelper.ConvertXMLToObject<LotteryCode>(configFile, "CodeSettings"); for (int i = 0; i < configs.Count; i++) { MlotteryCode[configs[i].lotteryCode] = configs[i]; } } catch (Exception ee) { LogHelper.Error(typeof(LottryDataHandle), ee.Message + "GetLotteryCodeList"); } } /// <summary> /// 根据配置获取彩种去年的最后一期 /// </summary> /// <param name="KJTime">配置中的KJTime项</param> /// <returns></returns> public static int GetLastTermOfLastYear(string KJTime) { try { var kjtime = KJTime.Split(','); DateTime time = DateTime.Now; int year = time.Year - 1; DateTime etime = new DateTime(year,12,31); DateTime stime = new DateTime(year, 1, 1); var tp = etime - stime; int caday = tp.Days; int termcount = 0; for (int i = 0; i < caday; i++) { stime = stime.AddDays(1); if (kjtime.Contains(((int)stime.DayOfWeek).ToString())) { termcount += 1; } } return termcount; } catch (Exception ee) { LogHelper.Error(typeof(LottryDataHandle), ee.Message + ":GetLastTermOfLastYear"); return 0; } } } }