LottryDataHandle.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488
  1. 
  2. using Common;
  3. using Models;
  4. using Newtonsoft.Json;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace Business.Util
  11. {
  12. public static class LottryDataHandle
  13. {
  14. private static Dictionary<string, LotteryCode> MlotteryCode;
  15. static LottryDataHandle()
  16. {
  17. MlotteryCode = new Dictionary<string, LotteryCode>();
  18. }
  19. /// <summary>
  20. /// 东方6+1 转生肖
  21. /// </summary>
  22. /// <param name="num"></param>
  23. /// <returns></returns>
  24. public static string GetSx(int num)
  25. {
  26. switch (num)
  27. {
  28. case 1:
  29. return "鼠";
  30. case 2:
  31. return "牛";
  32. case 3:
  33. return "虎";
  34. case 4:
  35. return "兔";
  36. case 5:
  37. return "龙";
  38. case 6:
  39. return "蛇";
  40. case 7:
  41. return "马";
  42. case 8:
  43. return "羊";
  44. case 9:
  45. return "猴";
  46. case 10:
  47. return "鸡";
  48. case 11:
  49. return "狗";
  50. case 12:
  51. return "猪";
  52. default:
  53. return "";
  54. }
  55. }
  56. public static string GetJiJie(int num)
  57. {
  58. switch (num)
  59. {
  60. case 1: return "春";
  61. case 2: return "夏";
  62. case 3: return "秋";
  63. case 4: return "冬";
  64. default:
  65. return "";
  66. }
  67. }
  68. public static string GetFangWei(int num)
  69. {
  70. switch (num)
  71. {
  72. case 1: return "东";
  73. case 2: return "南";
  74. case 3: return "西";
  75. case 4: return "北";
  76. default:
  77. return "";
  78. }
  79. }
  80. /// <summary>
  81. ///
  82. /// </summary>
  83. /// <param name="Typename">类型名</param>
  84. /// <param name="Term">期数</param>
  85. /// <param name="Opentime">开奖时间</param>
  86. /// <param name="OpenCode">开奖号</param>
  87. /// <param name="Detail">开奖详情没有传""或者null</param>
  88. /// <returns></returns>
  89. public static LotteryData GetLotteryData(string Typename, int Term, DateTime Opentime, string ID, IList<int> OpenCode, string Detail, string MenuName = "", string KaiJiHao = "", string ShiJiHao = "")
  90. {
  91. try
  92. {
  93. var lotteryCode = GetLotteryCode(Typename);
  94. OpenCode = OpenCode.Take(lotteryCode.BallCount).ToArray();
  95. LotteryData tmp = new LotteryData()
  96. {
  97. Term = Term.ToString(),
  98. OpenTime = Opentime.ToString(),
  99. LotteryName = lotteryCode.LotteryName,
  100. LotteryType = Typename,
  101. MenuName = MenuName,
  102. ID = ID,
  103. KJTime=lotteryCode.KJTime,
  104. StartHour=lotteryCode.StartHour,
  105. StartMinute=lotteryCode.StartMinute,
  106. Interval=lotteryCode.Interval,
  107. SkipDate=lotteryCode.SkipDate,
  108. KaiJiHao=KaiJiHao,
  109. ShiJiHao=ShiJiHao,
  110. DaXiaoZJZ=lotteryCode.DaXiaoZJZ,
  111. LastTermOfLastYear=GetLastTermOfLastYear(lotteryCode.KJTime)
  112. };
  113. tmp.Details = new List<LotteryDetail>();
  114. //LotteryBallType datatype = EnumFunctionType.GetBallType(Typename);
  115. if (lotteryCode != null)
  116. {
  117. if (Typename == SCCLottery.GP_KLPK3_ShanDong.ToString())//快乐扑克3单独处理
  118. {
  119. List<LotteryDetail> list = Getklpk3(OpenCode);
  120. tmp.Details = list;
  121. }
  122. else
  123. {
  124. tmp.BallCount = lotteryCode.BallCount;
  125. tmp.RedBall = Array.ConvertAll<int, string>(OpenCode.Take(lotteryCode.RedCount).ToArray(), s => s.ToString());
  126. if (lotteryCode.BlueCount > 0)
  127. {
  128. tmp.BlueBall = Array.ConvertAll<int, string>(OpenCode.Skip(lotteryCode.RedCount).ToArray(), s => s.ToString());
  129. }
  130. if (lotteryCode.BallCount > 1)
  131. {
  132. LotteryDetail hezhi = new LotteryDetail()
  133. {
  134. Label = "和值",
  135. Value = LotteryUtils.GetSum(OpenCode.Take(lotteryCode.RedCount).ToList()).ToString()
  136. };
  137. tmp.Details.Add(hezhi);
  138. LotteryDetail kuadu = new LotteryDetail()
  139. {
  140. Label = "跨度",
  141. Value = LotteryUtils.GetSpan(OpenCode.Take(lotteryCode.RedCount).ToList()).ToString()
  142. };
  143. tmp.Details.Add(kuadu);
  144. LotteryDetail jio = new LotteryDetail()
  145. {
  146. Label = "奇偶比",
  147. Value = LotteryUtils.GetProportionOfJO(OpenCode.Take(lotteryCode.RedCount).ToList())
  148. };
  149. tmp.Details.Add(jio);
  150. LotteryDetail zihebi = new LotteryDetail()
  151. {
  152. Label = "质合比",
  153. Value = LotteryUtils.GetProportionOfZh(OpenCode)
  154. };
  155. tmp.Details.Add(zihebi);
  156. LotteryDetail jioxt = new LotteryDetail()
  157. {
  158. Label = "奇偶形态",
  159. Value = LotteryUtils.GetJOString(OpenCode)
  160. };
  161. tmp.Details.Add(jioxt);
  162. LotteryDetail dxxt = new LotteryDetail()
  163. {
  164. Label = "大小形态",
  165. Value = LotteryUtils.GetDXString(OpenCode, lotteryCode.DaXiaoZJZ)
  166. };
  167. tmp.Details.Add(dxxt);
  168. LotteryDetail zotgsb = new LotteryDetail()
  169. {
  170. Label = "012路个数比",
  171. Value = LotteryUtils.GetProportionOf012(OpenCode)
  172. };
  173. tmp.Details.Add(zotgsb);
  174. LotteryDetail hzxt = new LotteryDetail()
  175. {
  176. Label = "和值特征",
  177. //Value= LotteryUtils.ge()
  178. };
  179. if (Typename == SCCLottery.DF_DF6J1.ToString())//东方6+1篮球转生sw
  180. {
  181. int blueball = OpenCode.Skip(lotteryCode.RedCount).ToArray()[0];
  182. tmp.BlueBall = new string[] { GetSx(blueball) };
  183. // Array.ConvertAll<int, string>(OpenCode.Skip(datatype.RedCount).ToArray(), s => s.ToString());
  184. }
  185. if (Typename==SCCLottery.DF_HC1_GuangDong.ToString())
  186. {
  187. int shengxiao = OpenCode.Skip(lotteryCode.RedCount).ToArray()[0];
  188. int jijie = OpenCode.Skip(lotteryCode.RedCount).ToArray()[1];
  189. int fangxiang = OpenCode.Skip(lotteryCode.RedCount).ToArray()[2];
  190. tmp.BlueBall = new string[] { GetSx(shengxiao),GetJiJie(jijie),GetFangWei(fangxiang) };
  191. }
  192. }
  193. }
  194. }
  195. else
  196. {
  197. tmp.BallCount = OpenCode.Count;
  198. tmp.RedBall = Array.ConvertAll<int, string>(OpenCode.ToArray(), s => s.ToString());
  199. // tmp.BlueBall = OpenCode.Skip(datatype.RedCount).ToArray();
  200. }
  201. //开奖号码补0
  202. if (OpenCode.Max()>=10&& Typename != SCCLottery.DF_HC1_GuangDong.ToString()&& Typename != SCCLottery.DF_DF6J1.ToString()&& Typename != SCCLottery.GP_KLPK3_ShanDong.ToString())
  203. {
  204. if (tmp.RedBall!=null)
  205. {
  206. tmp.RedBall = tmp.RedBall.Select(w => w.PadLeft(2, '0')).ToArray();
  207. }
  208. if (tmp.BlueBall!=null)
  209. {
  210. tmp.BlueBall = tmp.BlueBall.Select(w => w.PadLeft(2, '0')).ToArray();
  211. }
  212. }
  213. //要大小比的,要三区比的,要转生肖的,有开奖详情的,
  214. if (lotteryCode.SanQu>0)//EnumFunctionType.Sanqu.Contains(Typename)
  215. {
  216. LotteryDetail sanqu = new LotteryDetail()
  217. {
  218. Label = "三区比",
  219. Value = LotteryUtils.SsqSanQu(OpenCode.Take(6).ToList())//三区的目前只有双色球一个
  220. };
  221. tmp.Details.Add(sanqu);
  222. }
  223. //要大小比的
  224. if (lotteryCode.DataXiao>0)//EnumFunctionType.DaxiaoType.Contains(Typename)
  225. {
  226. int takenum = lotteryCode.DaxiaoTake;//EnumFunctionType.GetDaXiaoTake(Typename);
  227. if (takenum == 0)//无take
  228. {
  229. if (lotteryCode.DaXiaoCount==0)//EnumFunctionType.GetDaxiaoCount(Typename) == 0个数默认
  230. {
  231. LotteryDetail daxiao = new LotteryDetail()
  232. {
  233. Label = "大小比",
  234. Value = LotteryUtils.GetProportionOfDX(OpenCode, lotteryCode.DaXiaoZJZ)
  235. };
  236. tmp.Details.Add(daxiao);
  237. }
  238. if (lotteryCode.DaXiaoCount> 0)//EnumFunctionType.GetDaxiaoCount(Typename) 指定个数
  239. {
  240. LotteryDetail daxiao = new LotteryDetail()
  241. {
  242. Label = "大小比",
  243. Value = LotteryUtils.GetProportionOfDX(OpenCode, lotteryCode.DaXiaoZJZ,lotteryCode.DaXiaoCount)//EnumFunctionType.GetDaxiaoCount(Typename)EnumFunctionType.GetDaXiaoZJZ(Typename)
  244. };
  245. tmp.Details.Add(daxiao);
  246. }
  247. }
  248. else //有take
  249. {
  250. if (lotteryCode.DaXiaoCount == 0)//EnumFunctionType.GetDaxiaoCount(Typename)个数默认
  251. {
  252. LotteryDetail daxiao = new LotteryDetail()
  253. {
  254. Label = "大小比",
  255. Value = LotteryUtils.GetProportionOfDX(OpenCode.Take(takenum).ToList(),lotteryCode.DaXiaoZJZ )//EnumFunctionType.GetDaXiaoZJZ(Typename)
  256. };
  257. tmp.Details.Add(daxiao);
  258. }
  259. if ( lotteryCode.DaXiaoCount> 0)//EnumFunctionType.GetDaxiaoCount(Typename)指定个数
  260. {
  261. LotteryDetail daxiao = new LotteryDetail()
  262. {
  263. Label = "大小比",
  264. Value = LotteryUtils.GetProportionOfDX(OpenCode.Take(takenum).ToList(),lotteryCode.DaXiaoZJZ,lotteryCode.DaXiaoCount )
  265. //EnumFunctionType.GetDaXiaoZJZ(Typename), EnumFunctionType.GetDaxiaoCount(Typename)
  266. };
  267. tmp.Details.Add(daxiao);
  268. }
  269. }
  270. }
  271. if (!string.IsNullOrEmpty(Detail))//开奖详情内容
  272. {
  273. var data = ToData<KaijiangDetailsEntity>(Detail);
  274. if (data!=null)
  275. {
  276. if (!string.IsNullOrEmpty(data.Trje))
  277. {
  278. tmp.MoneyCount = data.Trje.Replace(",", "");
  279. }
  280. if (!string.IsNullOrEmpty(data.Gdje))
  281. {
  282. tmp.MoneyPond = data.Gdje.Replace(",", "");
  283. }
  284. // int takenum = EnumFunctionType.ContainDetailType.Contains(Typename) ? 1 : 2;
  285. List < LotteryResults > list = new List<LotteryResults>();
  286. if (data.KaiJiangItems!=null)
  287. {
  288. for (int i = 0; i < data.KaiJiangItems.Count; i++)
  289. {
  290. int couttotal = 0;
  291. int.TryParse(data.KaiJiangItems[i].Total, out couttotal);
  292. LotteryResults tmpresults = new LotteryResults() {
  293. LevelName=data.KaiJiangItems[i].Name,
  294. Count= couttotal,
  295. Money=data.KaiJiangItems[i].TotalMoney
  296. };
  297. list.Add(tmpresults);
  298. }
  299. }
  300. tmp.ResultsList = list;
  301. //List<LotteryResults> list = new List<LotteryResults>();
  302. //if (Typename == "QGC_PL3" || Typename == "QGC_FC3D")
  303. //{
  304. // list = EnumFunctionType.GetLotteryResultsP3(Detail);
  305. //}
  306. //else if (Typename == "QGC_PL5")
  307. //{
  308. // list = EnumFunctionType.GetLotteryResultsP5(Detail);
  309. //}
  310. //else
  311. //{
  312. // list = EnumFunctionType.GetLotteryResults(Detail, takenum);
  313. //}
  314. }
  315. //string[] results = Detail.Split(new char[] { '^', '|', ',' });
  316. //tmp.MoneyCount = results[0];
  317. //int moneyPond = 0;
  318. //int.TryParse(results[1], out moneyPond);
  319. //tmp.MoneyPond = moneyPond.ToString();
  320. }
  321. return tmp;
  322. }
  323. catch (Exception ee)
  324. {
  325. LogHelper.Error(typeof(LottryDataHandle), "GetLotteryData");
  326. return null;
  327. }
  328. }
  329. public static T ToData<T>(string obj)
  330. {
  331. try
  332. {
  333. return JsonConvert.DeserializeObject<T>(obj);
  334. }
  335. catch (Exception ee)
  336. {
  337. return default(T);
  338. }
  339. }
  340. /// <summary>
  341. /// 获取快乐扑克3
  342. /// </summary>
  343. /// <param name="OpenCode"></param>
  344. /// <returns></returns>
  345. public static List<LotteryDetail> Getklpk3(IList<int> OpenCode)
  346. {
  347. List<LotteryDetail> rtlist = new List<LotteryDetail>();
  348. string[] _pokerSuitName = new string[] { "", "fangpian", "meihua", "hongtao", "heitao" };
  349. foreach (var item in OpenCode)
  350. {
  351. LotteryDetail tmp = new LotteryDetail();
  352. var pkSuit = item / 100;
  353. var pknum = item % 100;
  354. var pkstr = pknum.ToString();
  355. if (pknum == 11) pkstr = "J";
  356. else if (pknum == 12) pkstr = "Q";
  357. else if (pknum == 13) pkstr = "K";
  358. else if (pknum == 1) pkstr = "A";
  359. tmp.Value = pkstr;
  360. tmp.Label = _pokerSuitName[pkSuit];
  361. rtlist.Add(tmp);
  362. }
  363. return rtlist;
  364. }
  365. public static List<LotteryDetail> GetHc1guangdong(IList<int> OpenCode)
  366. {
  367. List<LotteryDetail> rtlist = new List<LotteryDetail>();
  368. return rtlist;
  369. }
  370. public static LotteryCode GetLotteryCode(string lottertCode)
  371. {
  372. try
  373. {
  374. if (MlotteryCode.Keys.Count == 0)
  375. {
  376. GetLotteryCodeList();
  377. }
  378. return MlotteryCode[lottertCode];
  379. }
  380. catch (Exception ee)
  381. {
  382. LogHelper.Error(typeof(LottryDataHandle), ee.Message + "GetLotteryCode");
  383. return null;
  384. }
  385. }
  386. public static List<LotteryCode> GetLotteryCode()
  387. {
  388. try
  389. {
  390. if (MlotteryCode.Keys.Count == 0)
  391. {
  392. GetLotteryCodeList();
  393. }
  394. return MlotteryCode.Values.ToList();
  395. }
  396. catch (Exception ee)
  397. {
  398. LogHelper.Error(typeof(LottryDataHandle), ee.Message + "GetLotteryCodeoflist");
  399. return null;
  400. }
  401. }
  402. public static void GetLotteryCodeList()
  403. {
  404. try
  405. {
  406. string configFile = AppDomain.CurrentDomain.BaseDirectory + "/config/LotteryCode.xml";
  407. List<LotteryCode> configs = CommonHelper.ConvertXMLToObject<LotteryCode>(configFile, "CodeSettings");
  408. for (int i = 0; i < configs.Count; i++)
  409. {
  410. MlotteryCode[configs[i].lotteryCode] = configs[i];
  411. }
  412. }
  413. catch (Exception ee)
  414. {
  415. LogHelper.Error(typeof(LottryDataHandle), ee.Message + "GetLotteryCodeList");
  416. }
  417. }
  418. /// <summary>
  419. /// 根据配置获取彩种去年的最后一期
  420. /// </summary>
  421. /// <param name="KJTime">配置中的KJTime项</param>
  422. /// <returns></returns>
  423. public static int GetLastTermOfLastYear(string KJTime)
  424. {
  425. try
  426. {
  427. var kjtime = KJTime.Split(',');
  428. DateTime time = DateTime.Now;
  429. int year = time.Year - 1;
  430. DateTime etime = new DateTime(year,12,31);
  431. DateTime stime = new DateTime(year, 1, 1);
  432. var tp = etime - stime;
  433. int caday = tp.Days;
  434. int termcount = 0;
  435. for (int i = 0; i < caday; i++)
  436. {
  437. stime = stime.AddDays(1);
  438. if (kjtime.Contains(((int)stime.DayOfWeek).ToString()))
  439. {
  440. termcount += 1;
  441. }
  442. }
  443. return termcount;
  444. }
  445. catch (Exception ee)
  446. {
  447. LogHelper.Error(typeof(LottryDataHandle), ee.Message + ":GetLastTermOfLastYear");
  448. return 0;
  449. }
  450. }
  451. }
  452. }