OldDataCenterManage.cs 44 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Data;
  5. using System.Data.Common;
  6. using System.Data.SqlClient;
  7. using System.Linq;
  8. using System.Text;
  9. using CB.Entity;
  10. using CB.Interface.OldDataCenter;
  11. namespace CB.Data.SqlServer
  12. {
  13. public class OldDataCenterManage : IOldDataCenterService
  14. {
  15. private string InterfaceId = "";
  16. public OldDataCenterManage(string interfaceId)
  17. {
  18. InterfaceId = interfaceId;
  19. }
  20. public int GetProcessResultCount(int term)
  21. {
  22. return Convert.ToInt32(DbHelper.ExecuteScalar(InterfaceId, CommandType.Text, "SELECT COUNT([rid]) FROM [tbl_result] WHERE [qi]=" + term.ToString() + " AND [status]=0"));
  23. }
  24. public List<ShortResult> ProcessResultData(int term, int[] openCode)
  25. {
  26. List<ShortResult> rList = new List<ShortResult>();
  27. List<ShortResult> sList = GetSourceResult(term);
  28. if (sList != null && sList.Count > 0)
  29. {
  30. int[] _kjh = openCode;
  31. int kd, hz, hw;
  32. if (_kjh[0] == _kjh[1] && _kjh[0] == _kjh[2])
  33. {
  34. kd = 0;
  35. hz = _kjh[0] * 3;
  36. }
  37. else
  38. {
  39. List<int> list = new List<int>(_kjh.ToList());
  40. list.Sort();
  41. kd = Convert.ToInt32(list[2].ToString()) - Convert.ToInt32(list[0].ToString());
  42. hz = _kjh[0] + _kjh[1] + _kjh[2];
  43. }
  44. hw = hz % 10;
  45. int record = sList.Count;
  46. for (int i = record - 1; i >= 0; i--)
  47. {
  48. string rkjh = _kjh[0].ToString() + _kjh[1].ToString() + _kjh[2].ToString();
  49. string source = sList[i].Source;
  50. int status = 1;
  51. string result = "";
  52. switch (sList[i].Cid)
  53. {
  54. case 1://胆码 记录中奖个数
  55. int j = 0;
  56. string[] tp = source.Split(',');
  57. foreach (string s in tp)
  58. {
  59. if (!String.IsNullOrEmpty(s))
  60. {
  61. if (rkjh.Contains(s))
  62. { j++; }
  63. }
  64. }
  65. j = j > 3 ? 0 : j;
  66. result = j > 0 ? j.ToString() : "";
  67. status = j > 0 ? 2 : 1;
  68. break;
  69. case 2://杀码
  70. break;
  71. case 3://和尾 记录中奖号码
  72. status = 1;
  73. if (source.Contains(hw.ToString()))
  74. {
  75. result = hw.ToString();
  76. status = 2;
  77. }
  78. break;
  79. case 4://五码复式 记录中奖号码
  80. break;
  81. case 5://跨度 记录中奖号码
  82. status = 1;
  83. if (source.Contains(kd.ToString()))
  84. {
  85. result = kd.ToString();
  86. status = 2;
  87. }
  88. break;
  89. case 6://组三
  90. break;
  91. case 7://组六
  92. break;
  93. default:
  94. break;
  95. }
  96. ShortResult info = new ShortResult();
  97. info.Rid = sList[i].Rid;
  98. info.Result = result.ToString();
  99. info.Kjh = rkjh;
  100. info.Status = status;
  101. rList.Add(info);
  102. }
  103. }
  104. return rList;
  105. }
  106. public void UpBatchDataResult(List<ShortResult> results)
  107. {
  108. if (results == null || results.Count <= 0) return;
  109. using (SqlConnection conn = new SqlConnection(DbHelper.ConnectionString(InterfaceId)))
  110. {
  111. List<ShortResult> list = results;
  112. int record = list.Count;
  113. conn.Open();
  114. SqlDataAdapter sd = new SqlDataAdapter();
  115. sd.SelectCommand = new SqlCommand("SELECT TOP " + record.ToString() + " [rid],[kjh],[result],[status] FROM [tbl_result]", conn);
  116. DataSet dataset = new DataSet();
  117. sd.Fill(dataset);
  118. sd.UpdateCommand = new SqlCommand("UPDATE [tbl_result] SET [kjh]=@kjh,[result]=@result,[status]=@status WHERE [rid]=@rid", conn);
  119. sd.UpdateCommand.Parameters.Add("@kjh", SqlDbType.Char, 20, "kjh");
  120. sd.UpdateCommand.Parameters.Add("@result", SqlDbType.VarChar, 200, "result");
  121. sd.UpdateCommand.Parameters.Add("@status", SqlDbType.TinyInt, 2, "status");
  122. sd.UpdateCommand.Parameters.Add("@rid", SqlDbType.Int, 4, "rid");
  123. sd.UpdateCommand.UpdatedRowSource = UpdateRowSource.None;
  124. sd.UpdateBatchSize = 0;
  125. for (int i = record - 1; i >= 0; i--)
  126. {
  127. DataRow dr = dataset.Tables[0].Rows[i];
  128. dr.BeginEdit();
  129. dr["kjh"] = list[i].Kjh;
  130. dr["result"] = list[i].Result;
  131. dr["status"] = list[i].Status;
  132. dr["rid"] = list[i].Rid;
  133. dr.EndEdit();
  134. }
  135. sd.Update(dataset.Tables[0]);
  136. dataset.Tables[0].Clear();
  137. sd.Dispose();
  138. dataset.Dispose();
  139. conn.Close();
  140. }
  141. }
  142. #region 批量更新数据统计表是否中奖
  143. public void UpBatchDataReports(int term, int[] openCode)
  144. {
  145. int[] _kjh = openCode;
  146. string sqlstr = "SELECT [status] FROM tbl_report";
  147. string sqlwhere = " WHERE [qi]=" + term.ToString();
  148. if (_kjh[0] == _kjh[1] && _kjh[0] == _kjh[2])
  149. {
  150. sqlwhere = sqlwhere + " AND (([cid]=1 AND [number]=" + _kjh[0].ToString() + ") OR ([cid]=5 AND [number]=0) OR ([cid]=3 AND [number]=" + ((_kjh[0] * 3) % 10).ToString() + "))";
  151. }
  152. else
  153. {
  154. ArrayList list = new ArrayList(_kjh);
  155. list.Sort();
  156. int zxkjh = Convert.ToInt32(list[0].ToString() + list[1].ToString() + list[2].ToString());
  157. int kd = Convert.ToInt32(list[2].ToString()) - Convert.ToInt32(list[0].ToString());
  158. int hw = (_kjh[0] + _kjh[1] + _kjh[2]) % 10;
  159. sqlwhere = sqlwhere + " AND (([cid]=1 AND ([number]=" + _kjh[0].ToString() + " OR [number]=" + _kjh[1].ToString() + " OR [number]=" + _kjh[2].ToString() + ")) OR ([cid]=5 AND [number]=" + kd.ToString() + ") OR ([cid]=3 AND [number]=" + hw.ToString() + ") OR (([cid]=6 OR [cid]=7) AND [number]=" + zxkjh.ToString() + "))";
  160. }
  161. using (SqlConnection conn = new SqlConnection(DbHelper.ConnectionString(InterfaceId)))
  162. {
  163. conn.Open();
  164. SqlDataAdapter sd = new SqlDataAdapter();
  165. sd.SelectCommand = new SqlCommand(sqlstr + sqlwhere, conn);
  166. DataSet dataset = new DataSet();
  167. sd.Fill(dataset);
  168. sd.UpdateCommand = new SqlCommand("UPDATE tbl_report SET [status]=@status" + sqlwhere, conn);
  169. sd.UpdateCommand.Parameters.Add("@status", SqlDbType.Int, 4, "status");
  170. sd.UpdateCommand.UpdatedRowSource = UpdateRowSource.None;
  171. sd.UpdateBatchSize = 0;
  172. int record = dataset.Tables[0].Rows.Count;
  173. for (int i = record - 1; i >= 0; i--)
  174. {
  175. DataRow dr = dataset.Tables[0].Rows[i];
  176. dr.BeginEdit();
  177. dr["status"] = 1;
  178. dr.EndEdit();
  179. }
  180. sd.Update(dataset.Tables[0]);
  181. dataset.Tables[0].Clear();
  182. sd.Dispose();
  183. dataset.Dispose();
  184. conn.Close();
  185. }
  186. }
  187. public void UpBatchDataEffect(int term, int[] openCode)
  188. {
  189. int[] kjh = openCode;
  190. string sqlstr = "SELECT [status] FROM tbl_effect";
  191. string sqlwhere = " WHERE [qi]=" + term.ToString();
  192. if (kjh[0] == kjh[1] && kjh[0] == kjh[2])
  193. {
  194. sqlwhere = sqlwhere + " AND (([cid]=1 AND [number]=" + kjh[0].ToString() + ") OR ([cid]=5 AND [number]=0) OR ([cid]=3 AND [number]=" + ((kjh[0] * 3) % 10).ToString() + "))";
  195. }
  196. else
  197. {
  198. ArrayList list = new ArrayList(kjh);
  199. list.Sort();
  200. int zxkjh = Convert.ToInt32(list[0].ToString() + list[1].ToString() + list[2].ToString());
  201. int kd = Convert.ToInt32(list[2].ToString()) - Convert.ToInt32(list[0].ToString());
  202. int hw = (kjh[0] + kjh[1] + kjh[2]) % 10;
  203. sqlwhere = sqlwhere + " AND (([cid]=1 AND ([number]=" + kjh[0].ToString() + " OR [number]=" + kjh[1].ToString() + " OR [number]=" + kjh[2].ToString() + ")) OR ([cid]=5 AND [number]=" + kd.ToString() + ") OR ([cid]=3 AND [number]=" + hw.ToString() + ") OR (([cid]=6 OR [cid]=7) AND [number]=" + zxkjh.ToString() + "))";
  204. }
  205. using (SqlConnection conn = new SqlConnection(DbHelper.ConnectionString(InterfaceId)))
  206. {
  207. conn.Open();
  208. SqlDataAdapter sd = new SqlDataAdapter();
  209. sd.SelectCommand = new SqlCommand(sqlstr + sqlwhere, conn);
  210. DataSet dataset = new DataSet();
  211. sd.Fill(dataset);
  212. sd.UpdateCommand = new SqlCommand("UPDATE tbl_effect SET [status]=@status" + sqlwhere, conn);
  213. sd.UpdateCommand.Parameters.Add("@status", SqlDbType.Int, 4, "status");
  214. sd.UpdateCommand.UpdatedRowSource = UpdateRowSource.None;
  215. sd.UpdateBatchSize = 0;
  216. int record = dataset.Tables[0].Rows.Count;
  217. for (int i = record - 1; i >= 0; i--)
  218. {
  219. DataRow dr = dataset.Tables[0].Rows[i];
  220. dr.BeginEdit();
  221. dr["status"] = 1;
  222. dr.EndEdit();
  223. }
  224. sd.Update(dataset.Tables[0]);
  225. dataset.Tables[0].Clear();
  226. sd.Dispose();
  227. dataset.Dispose();
  228. conn.Close();
  229. }
  230. }
  231. #endregion
  232. public void ProcessReportDeviation(int term)
  233. {
  234. List<int> qiList = new List<int>();
  235. List<mReport> dqList = new List<mReport>();
  236. List<mReport> allList = new List<mReport>();
  237. qiList = GetQiList(term);
  238. allList = GetReportList(term, qiList, ref dqList);
  239. int[,] allSum = GetEverLocationHot(term, qiList, allList);
  240. if (dqList != null && dqList.Count > 0)
  241. {
  242. List<mReport> dmList = new List<mReport>();
  243. List<mReport> hwList = new List<mReport>();
  244. List<mReport> kdList = new List<mReport>();
  245. for (int i = dqList.Count - 1; i >= 0; i--)
  246. {
  247. mReport info = dqList[i];
  248. switch (dqList[i].Cid)
  249. {
  250. case 1:
  251. dmList.Add(info);
  252. break;
  253. case 3:
  254. hwList.Add(info);
  255. break;
  256. case 5:
  257. kdList.Add(info);
  258. break;
  259. }
  260. }
  261. int ca = dmList.Count, cb = hwList.Count, cc = kdList.Count;
  262. int count = qiList.Count;
  263. for (int a = 0; a < ca; a++)
  264. { dmList[a].Deviation = allSum[0, a] > 0 ? (allSum[1, a] / (double)count - (allSum[2, a] / (double)allSum[0, a]) * 0.65) : 0d; }
  265. for (int b = 0; b < cb; b++)
  266. { hwList[b].Deviation = allSum[3, b] > 0 ? (allSum[4, b] / (double)count - (allSum[5, b] / (double)allSum[3, b]) * 0.65) : 0d; }
  267. for (int c = 0; c < cc; c++)
  268. { kdList[c].Deviation = allSum[6, c] > 0 ? (allSum[7, c] / (double)count - (allSum[8, c] / (double)allSum[6, c])) : 0d; }
  269. UpReportDeviation(term, 1, dmList);
  270. UpReportDeviation(term, 3, hwList);
  271. UpReportDeviation(term, 5, kdList);
  272. }
  273. }
  274. public void ProcessEffectDeviation(int term)
  275. {
  276. List<int> qiList = new List<int>();
  277. List<mReport> dqList = new List<mReport>();
  278. List<mReport> allList = new List<mReport>();
  279. qiList = GetQiList(term);
  280. allList = GetEffectList(term, qiList, ref dqList);
  281. int[,] allSum = GetEverLocationHot(term, qiList, allList);
  282. if (dqList != null && dqList.Count > 0)
  283. {
  284. List<mReport> dmList = new List<mReport>();
  285. List<mReport> hwList = new List<mReport>();
  286. List<mReport> kdList = new List<mReport>();
  287. for (int i = dqList.Count - 1; i >= 0; i--)
  288. {
  289. mReport info = dqList[i];
  290. switch (dqList[i].Cid)
  291. {
  292. case 1:
  293. dmList.Add(info);
  294. break;
  295. case 3:
  296. hwList.Add(info);
  297. break;
  298. case 5:
  299. kdList.Add(info);
  300. break;
  301. }
  302. }
  303. int ca = dmList.Count, cb = hwList.Count, cc = kdList.Count;
  304. int count = qiList.Count;
  305. for (int a = 0; a < ca; a++)
  306. { dmList[a].Deviation = allSum[0, a] > 0 ? (allSum[1, a] / (double)count - (allSum[2, a] / (double)allSum[0, a]) * 0.65) : 0d; }
  307. for (int b = 0; b < cb; b++)
  308. { hwList[b].Deviation = allSum[3, b] > 0 ? (allSum[4, b] / (double)count - (allSum[5, b] / (double)allSum[3, b]) * 0.65) : 0d; }
  309. for (int c = 0; c < cc; c++)
  310. { kdList[c].Deviation = allSum[6, c] > 0 ? (allSum[7, c] / (double)count - (allSum[8, c] / (double)allSum[6, c])) : 0d; }
  311. UpEffectDeviation(term, 1, dmList);
  312. UpEffectDeviation(term, 3, hwList);
  313. UpEffectDeviation(term, 5, kdList);
  314. }
  315. }
  316. #region 更新配置表tbl_config开奖期数
  317. /// <summary>
  318. /// 更新配置表tbl_config开奖期数
  319. /// </summary>
  320. /// <param name="qi"></param>
  321. public void UpConfigQi(int term)
  322. {
  323. DbHelper.ExecuteNonQuery(InterfaceId, CommandType.Text, "UPDATE [tbl_config] SET [qi]=" + term.ToString());
  324. }
  325. #endregion
  326. public void PushHistoryResultData(int term, int[] openCode)
  327. {
  328. using (SqlConnection conn = new SqlConnection(DbHelper.ConnectionString(InterfaceId)))
  329. {
  330. conn.Open();
  331. SqlDataAdapter sd = new SqlDataAdapter();
  332. sd.SelectCommand = new SqlCommand("SELECT [qi],[cid],[kjh],[source],[result],[status] FROM [tbl_history]", conn);
  333. sd.InsertCommand = new SqlCommand("du_create_historyresult", conn);
  334. sd.InsertCommand.Parameters.Add("@qi", SqlDbType.Int, 4, "qi");
  335. sd.InsertCommand.Parameters.Add("@cid", SqlDbType.Int, 4, "cid");
  336. sd.InsertCommand.Parameters.Add("@kjh", SqlDbType.Char, 5, "kjh");
  337. sd.InsertCommand.Parameters.Add("@source", SqlDbType.NChar, 200, "source");
  338. sd.InsertCommand.Parameters.Add("@result", SqlDbType.NChar, 150, "result");
  339. sd.InsertCommand.Parameters.Add("@status", SqlDbType.Bit, 1, "status");
  340. sd.InsertCommand.UpdatedRowSource = UpdateRowSource.None;
  341. sd.InsertCommand.CommandType = CommandType.StoredProcedure;
  342. sd.UpdateBatchSize = 0;
  343. DataSet dataset = new DataSet();
  344. sd.Fill(dataset);
  345. List<mResult> rList = GetReportHistory(term, openCode);
  346. List<mResult> eList = GetEffectHistory(term, openCode);
  347. string _kjh = openCode[0].ToString() + openCode[1].ToString() + openCode[2].ToString();
  348. int count = 0;
  349. count = rList.Count;
  350. for (int i = count - 1; i >= 0; i--)
  351. {
  352. object[] row = { term, rList[i].Cid, _kjh, rList[i].Source, rList[i].Result, false };
  353. dataset.Tables[0].Rows.Add(row);
  354. }
  355. count = eList.Count;
  356. for (int i = count - 1; i >= 0; i--)
  357. {
  358. object[] row = { term, eList[i].Cid, _kjh, eList[i].Source, eList[i].Result, true };
  359. dataset.Tables[0].Rows.Add(row);
  360. }
  361. sd.Update(dataset.Tables[0]);
  362. dataset.Tables[0].Clear();
  363. sd.Dispose();
  364. dataset.Dispose();
  365. conn.Close();
  366. }
  367. }
  368. public void ResetDataResult(int term)
  369. {
  370. DbHelper.ExecuteNonQuery(InterfaceId, CommandType.Text, "UPDATE [tbl_result] SET [status]=0 WHERE [qi]=" + term.ToString());
  371. }
  372. #region 私有方法
  373. #region 取未处理分表数据
  374. /// <summary>
  375. /// 取未处理分表数据
  376. /// </summary>
  377. /// <param name="qi"></param>
  378. /// <returns></returns>
  379. private DataSet GetProcessResult(int qi)
  380. {
  381. DbParameter[] pars = { DbHelper.MakeInParam(InterfaceId, "@qi", (DbType)SqlDbType.Int, 4, qi), };
  382. return DbHelper.ExecuteDataset(InterfaceId, CommandType.StoredProcedure, "du_st_result", pars);
  383. }
  384. #endregion
  385. /// <summary>
  386. /// 获取未处理分表结果数据
  387. /// </summary>
  388. /// <param name="qi"></param>
  389. /// <returns></returns>
  390. private List<ShortResult> GetSourceResult(int qi)
  391. {
  392. List<ShortResult> rList = new List<ShortResult>();
  393. DataSet ds = GetProcessResult(qi);
  394. if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
  395. {
  396. int record = ds.Tables[0].Rows.Count;
  397. for (int i = record - 1; i >= 0; i--)
  398. {
  399. DataRow dr = ds.Tables[0].Rows[i];
  400. ShortResult info = new ShortResult();
  401. info.Rid = Convert.ToInt32(dr["rid"]);
  402. info.Cid = Convert.ToInt32(dr["cid"]);
  403. info.Qi = Convert.ToInt32(dr["qi"]);
  404. info.Source = dr["source"].ToString().Trim();
  405. rList.Add(info);
  406. }
  407. }
  408. return rList;
  409. }
  410. /// <summary>
  411. /// 获取计算近10期热度偏差的所有期数信息
  412. /// </summary>
  413. /// <returns></returns>
  414. private List<int> GetQiList(int dqQi)
  415. {
  416. List<int> rList = new List<int>();
  417. DataSet ds = GetDeviationQi(dqQi);
  418. if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
  419. {
  420. int count = ds.Tables[0].Rows.Count;
  421. for (int i = count - 1; i >= 0; i--)
  422. {
  423. string str = ds.Tables[0].Rows[i][0].ToString().Trim();
  424. if (!String.IsNullOrEmpty(str))
  425. {
  426. rList.Add(Convert.ToInt32(str));
  427. }
  428. }
  429. }
  430. return rList;
  431. }
  432. #region 获取计算近10期热度偏差的所有期数信息
  433. /// <summary>
  434. /// 获取计算近10期热度偏差的所有期数信息
  435. /// </summary>
  436. /// <param name="dqQi"></param>
  437. /// <returns></returns>
  438. private DataSet GetDeviationQi(int dqQi)
  439. {
  440. return DbHelper.ExecuteDataset(InterfaceId, CommandType.Text, "SELECT TOP 30 [qi] FROM [tbl_report] WHERE [qi]<=" + dqQi.ToString() + " GROUP BY [qi] ORDER BY [qi] DESC");
  441. }
  442. #endregion
  443. /// <summary>
  444. /// 取热度统计数据 条件
  445. /// </summary>
  446. /// <param name="qi"></param>
  447. /// <param name="sList"></param>
  448. /// <returns></returns>
  449. private List<mReport> GetReportList(int qi, List<int> qiList, ref List<mReport> sList)
  450. {
  451. List<mReport> list = new List<mReport>();
  452. string qistr = string.Empty;
  453. if (qiList != null && qiList.Count > 0)
  454. {
  455. int count = qiList.Count;
  456. for (int i = count - 1; i >= 0; i--)
  457. {
  458. if (String.IsNullOrEmpty(qistr))
  459. { qistr = qiList[i].ToString(); }
  460. else
  461. { qistr = qistr + "," + qiList[i].ToString(); }
  462. }
  463. }
  464. if (!String.IsNullOrEmpty(qistr))
  465. {
  466. DataSet ds = GetReportList(qistr);
  467. if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
  468. {
  469. int count = ds.Tables[0].Rows.Count;
  470. for (int i = count - 1; i >= 0; i--)
  471. {
  472. DataRow dr = ds.Tables[0].Rows[i];
  473. mReport info = new mReport();
  474. info.Qi = Convert.ToInt32(dr["qi"]);
  475. info.Cid = Convert.ToInt32(dr["cid"]);
  476. info.Number = Convert.ToInt32(dr["number"]);
  477. info.Record = Convert.ToInt32(dr["record"]);
  478. info.Status = Convert.ToInt32(dr["status"]);
  479. if (info.Qi == qi)
  480. { sList.Add(info); }
  481. list.Add(info);
  482. }
  483. }
  484. }
  485. return list;
  486. }
  487. #region 获取号码热度数据
  488. /// <summary>
  489. /// 取近10期号码热度数据 条件
  490. /// </summary>
  491. /// <param name="qi"></param>
  492. /// <returns></returns>
  493. private DataSet GetReportList(string qi)
  494. {
  495. return DbHelper.ExecuteDataset(InterfaceId, CommandType.Text, "SELECT [qi],[cid],[number],[allcount] AS record,[status] FROM [tbl_report] WHERE [cid]<=5 AND [qi] IN(" + qi + ") ORDER BY [record] DESC");
  496. }
  497. /// <summary>
  498. /// 获取当期热度号码数据 条件
  499. /// </summary>
  500. /// <param name="qi"></param>
  501. /// <returns></returns>
  502. private DataSet GetReportList(int qi)
  503. {
  504. return DbHelper.ExecuteDataset(InterfaceId, CommandType.Text, "SELECT [qi],[cid],[number],[allcount] AS record,[status] FROM [tbl_report] WHERE [qi]=" + qi.ToString() + " ORDER BY [record] DESC");
  505. }
  506. #endregion
  507. /// <summary>
  508. /// 获取单一分类某一位置热度总量 2011-9-29
  509. /// </summary>
  510. /// <param name="rList"></param>
  511. /// <returns></returns>
  512. private static int[,] GetEverLocationHot(int dqi, List<int> qiList, List<mReport> rList)
  513. {
  514. int[,] avg = new int[9, 10];
  515. for (int i = 9; i >= 0; i--)
  516. {
  517. avg[0, i] = 0; avg[1, i] = 0; avg[2, i] = 0; avg[3, i] = 0; avg[4, i] = 0; avg[5, i] = 0; avg[6, i] = 0; avg[7, i] = 0; avg[8, i] = 0;
  518. }
  519. List<int> _qi = qiList;
  520. List<mReport> _list = rList;
  521. if (_qi != null && _qi.Count > 0 && _list != null && _list.Count > 0)
  522. {
  523. int count = _qi.Count;
  524. int len = _list.Count;
  525. for (int i = count - 1; i >= 0; i--)
  526. {
  527. int tpqi = _qi[i];
  528. List<mReport> dmList = new List<mReport>();
  529. List<mReport> hwList = new List<mReport>();
  530. List<mReport> kdList = new List<mReport>();
  531. for (int j = len - 1; j >= 0; j--)
  532. {
  533. mReport info = _list[j];
  534. if (info.Qi == tpqi)
  535. {
  536. if (_list[j].Cid == 1)
  537. { dmList.Add(info); }
  538. if (_list[j].Cid == 3)
  539. { hwList.Add(info); }
  540. if (_list[j].Cid == 5)
  541. { kdList.Add(info); }
  542. }
  543. }
  544. int ca = dmList.Count, cb = hwList.Count, cc = kdList.Count;
  545. for (int a = 0; a < ca; a++)
  546. {
  547. avg[0, a] += dmList[a].Record;
  548. if (dmList[a].Status == 1) { avg[1, a]++; }
  549. if (tpqi == dqi) { avg[2, a] = dmList[a].Record; }
  550. }
  551. for (int b = 0; b < cb; b++)
  552. {
  553. avg[3, b] += hwList[b].Record;
  554. if (hwList[b].Status == 1) { avg[4, b]++; }
  555. if (tpqi == dqi) { avg[5, b] = hwList[b].Record; }
  556. }
  557. for (int c = 0; c < cc; c++)
  558. {
  559. avg[6, c] += kdList[c].Record;
  560. if (kdList[c].Status == 1) { avg[7, c]++; }
  561. if (tpqi == dqi) { avg[8, c] = kdList[c].Record; }
  562. }
  563. }
  564. }
  565. return avg;
  566. }
  567. #region 更新热度偏差数据
  568. /// <summary>
  569. /// 更新热度偏差数据 条件
  570. /// </summary>
  571. /// <param name="qi"></param>
  572. /// <param name="rList"></param>
  573. private void UpReportDeviation(int qi, int cid, List<mReport> rList)
  574. {
  575. if (rList != null && rList.Count > 0)
  576. {
  577. using (SqlConnection conn = new SqlConnection(DbHelper.ConnectionString(InterfaceId)))
  578. {
  579. conn.Open();
  580. SqlDataAdapter sd = new SqlDataAdapter();
  581. sd.SelectCommand = new SqlCommand("SELECT [qi],[cid],[number],[deviation] FROM [tbl_report] WHERE [cid]=" + cid.ToString() + " AND [qi]=" + qi.ToString(), conn);
  582. DataSet dataset = new DataSet();
  583. sd.Fill(dataset);
  584. sd.UpdateCommand = new SqlCommand("UPDATE [tbl_report] SET [deviation]=@deviation WHERE [qi]=@qi AND [cid]=@cid AND [number]=@number", conn);
  585. sd.UpdateCommand.Parameters.Add("@deviation", SqlDbType.Float, 6, "deviation");
  586. sd.UpdateCommand.Parameters.Add("@qi", SqlDbType.Int, 4, "qi");
  587. sd.UpdateCommand.Parameters.Add("@cid", SqlDbType.Int, 4, "cid");
  588. sd.UpdateCommand.Parameters.Add("@number", SqlDbType.Int, 4, "number");
  589. sd.UpdateCommand.UpdatedRowSource = UpdateRowSource.None;
  590. sd.UpdateBatchSize = 0;
  591. int record = dataset.Tables[0].Rows.Count;
  592. for (int i = record - 1; i >= 0; i--)
  593. {
  594. DataRow dr = dataset.Tables[0].Rows[i];
  595. int _cid = Convert.ToInt32(dr["cid"]);
  596. int number = Convert.ToInt32(dr["number"]);
  597. dr.BeginEdit();
  598. dr["deviation"] = GetNumberDeviation(rList, qi, _cid, number);
  599. dr.EndEdit();
  600. }
  601. sd.Update(dataset.Tables[0]);
  602. dataset.Tables[0].Clear();
  603. sd.Dispose();
  604. dataset.Dispose();
  605. conn.Close();
  606. }
  607. }
  608. }
  609. /// <summary>
  610. /// 返回热度偏差
  611. /// </summary>
  612. /// <param name="rList"></param>
  613. /// <param name="qi"></param>
  614. /// <param name="cid"></param>
  615. /// <param name="number"></param>
  616. /// <returns></returns>
  617. public static double GetNumberDeviation(List<mReport> rList, int qi, int cid, int number)
  618. {
  619. if (rList != null && rList.Count > 0)
  620. {
  621. List<mReport> list = rList;
  622. int count = list.Count;
  623. for (int i = count - 1; i >= 0; i--)
  624. {
  625. if (list[i].Qi == qi && list[i].Cid == cid && list[i].Number == number)
  626. {
  627. return list[i].Deviation;
  628. }
  629. }
  630. }
  631. return 0d;
  632. }
  633. #endregion
  634. /// <summary>
  635. /// 取热度统计数据 结果(返算)
  636. /// </summary>
  637. /// <param name="qi"></param>
  638. /// <param name="sList"></param>
  639. /// <returns></returns>
  640. private List<mReport> GetEffectList(int qi, List<int> qiList, ref List<mReport> sList)
  641. {
  642. List<mReport> list = new List<mReport>();
  643. string qistr = string.Empty;
  644. if (qiList != null && qiList.Count > 0)
  645. {
  646. int count = qiList.Count;
  647. for (int i = count - 1; i >= 0; i--)
  648. {
  649. if (String.IsNullOrEmpty(qistr))
  650. { qistr = qiList[i].ToString(); }
  651. else
  652. { qistr = qistr + "," + qiList[i].ToString(); }
  653. }
  654. }
  655. if (!String.IsNullOrEmpty(qistr))
  656. {
  657. DataSet ds = GetEffectList(qistr);
  658. if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
  659. {
  660. int[] avgKD = { 1, 18, 24, 28, 30, 30, 28, 24, 18, 10 };
  661. int count = ds.Tables[0].Rows.Count;
  662. for (int i = count - 1; i >= 0; i--)
  663. {
  664. DataRow dr = ds.Tables[0].Rows[i];
  665. mReport info = new mReport();
  666. info.Qi = Convert.ToInt32(dr["qi"]);
  667. info.Cid = Convert.ToInt32(dr["cid"]);
  668. info.Number = Convert.ToInt32(dr["number"]);
  669. info.Record = Convert.ToInt32(dr["record"]);
  670. if (info.Cid == 1)
  671. { info.Record = info.Record / 54; }
  672. if (info.Cid == 3)
  673. { info.Record = info.Record / 21; }
  674. if (info.Cid == 5)
  675. { info.Record = info.Record / avgKD[info.Number]; }
  676. info.Status = Convert.ToInt32(dr["status"]);
  677. if (info.Qi == qi)
  678. { sList.Add(info); }
  679. list.Add(info);
  680. }
  681. }
  682. }
  683. return list;
  684. }
  685. /// <summary>
  686. /// 更新热度偏差数据 结果(返算)
  687. /// </summary>
  688. /// <param name="qi"></param>
  689. /// <param name="rList"></param>
  690. private void UpEffectDeviation(int qi, int cid, List<mReport> rList)
  691. {
  692. if (rList != null && rList.Count > 0)
  693. {
  694. using (SqlConnection conn = new SqlConnection(DbHelper.ConnectionString(InterfaceId)))
  695. {
  696. conn.Open();
  697. SqlDataAdapter sd = new SqlDataAdapter();
  698. sd.SelectCommand = new SqlCommand("SELECT [qi],[cid],[number],[deviation] FROM [tbl_effect] WHERE [cid]=" + cid.ToString() + " AND [qi]=" + qi.ToString(), conn);
  699. DataSet dataset = new DataSet();
  700. sd.Fill(dataset);
  701. sd.UpdateCommand = new SqlCommand("UPDATE [tbl_effect] SET [deviation]=@deviation WHERE [qi]=@qi AND [cid]=@cid AND [number]=@number", conn);
  702. sd.UpdateCommand.Parameters.Add("@deviation", SqlDbType.Float, 6, "deviation");
  703. sd.UpdateCommand.Parameters.Add("@qi", SqlDbType.Int, 4, "qi");
  704. sd.UpdateCommand.Parameters.Add("@cid", SqlDbType.Int, 4, "cid");
  705. sd.UpdateCommand.Parameters.Add("@number", SqlDbType.Int, 4, "number");
  706. sd.UpdateCommand.UpdatedRowSource = UpdateRowSource.None;
  707. sd.UpdateBatchSize = 0;
  708. int record = dataset.Tables[0].Rows.Count;
  709. for (int i = record - 1; i >= 0; i--)
  710. {
  711. DataRow dr = dataset.Tables[0].Rows[i];
  712. int _cid = Convert.ToInt32(dr["cid"]);
  713. int number = Convert.ToInt32(dr["number"]);
  714. dr.BeginEdit();
  715. dr["deviation"] = GetNumberDeviation(rList, qi, _cid, number);
  716. dr.EndEdit();
  717. }
  718. sd.Update(dataset.Tables[0]);
  719. dataset.Tables[0].Clear();
  720. sd.Dispose();
  721. dataset.Dispose();
  722. conn.Close();
  723. }
  724. }
  725. }
  726. /// <summary>
  727. /// 组合热度统计号码 结果
  728. /// </summary>
  729. /// <param name="qi"></param>
  730. /// <returns></returns>
  731. private List<mResult> GetReportHistory(int qi, int[] kjh)
  732. {
  733. List<mResult> rList = new List<mResult>();
  734. int[] number = kjh;
  735. string _kjh = number[0].ToString() + number[1].ToString() + number[2].ToString();
  736. int hw = (number[0] + number[1] + number[2]) % 10;
  737. ArrayList ary = new ArrayList(number);
  738. ary.Sort();
  739. int kd = Convert.ToInt32(ary[2]) - Convert.ToInt32(ary[0]);
  740. int zx = Convert.ToInt32(ary[0].ToString() + ary[1].ToString() + ary[2].ToString());
  741. List<mReport> sList = GetReportLists(qi);
  742. if (sList != null && sList.Count > 0)
  743. {
  744. mResult dmResult = new mResult(qi, 1, _kjh, false);
  745. mResult hwResult = new mResult(qi, 3, _kjh, false);
  746. mResult kdResult = new mResult(qi, 5, _kjh, false);
  747. mResult zxResult = new mResult(qi, 6, _kjh, false);
  748. int a = 0, b = 0, c = 0, d = 0, e = 0;
  749. int ka = 0, kb = 0, kc = 0, ke = 0;
  750. int count = sList.Count;
  751. int tpnum = -1;
  752. for (int i = count - 1; i >= 0; i--)
  753. {
  754. tpnum = sList[i].Number;
  755. switch (sList[i].Cid)
  756. {
  757. case 1://胆码
  758. if (a < 3)
  759. {
  760. if (_kjh.Contains(tpnum.ToString()))
  761. { ka++; }
  762. dmResult.Source = String.IsNullOrEmpty(dmResult.Source) ? tpnum.ToString() : (dmResult.Source + "," + tpnum.ToString());
  763. a++;
  764. }
  765. break;
  766. case 3://和尾
  767. if (b < 3)
  768. {
  769. if (hw == tpnum)
  770. { kb++; }
  771. hwResult.Source = String.IsNullOrEmpty(hwResult.Source) ? tpnum.ToString() : (hwResult.Source + "," + tpnum.ToString());
  772. b++;
  773. }
  774. break;
  775. case 5://跨度
  776. if (c < 3)
  777. {
  778. if (kd == tpnum)
  779. { kc++; }
  780. kdResult.Source = String.IsNullOrEmpty(kdResult.Source) ? tpnum.ToString() : (kdResult.Source + "," + tpnum.ToString());
  781. c++;
  782. }
  783. break;
  784. case 6://组三
  785. if (d < 10)
  786. {
  787. if (zx == tpnum)
  788. { ke = 1; }
  789. zxResult.Source = String.IsNullOrEmpty(zxResult.Source) ? tpnum.ToString("000") : (zxResult.Source + "," + tpnum.ToString("000")); d++;
  790. }
  791. break;
  792. case 7://组六
  793. if (e < 30)
  794. {
  795. if (zx == tpnum)
  796. { ke = 1; }
  797. zxResult.Source = String.IsNullOrEmpty(zxResult.Source) ? tpnum.ToString("000") : (zxResult.Source + "," + tpnum.ToString("000")); e++;
  798. }
  799. break;
  800. }
  801. }
  802. if (ka > 0) dmResult.Result = "<span style=\"color:#ff0000;\">中" + ka.ToString() + "码</span>";
  803. if (kb > 0) hwResult.Result = "<span style=\"color:#ff0000;\">中和尾" + hw.ToString() + "</span>";
  804. if (kc > 0) kdResult.Result = "<span style=\"color:#ff0000;\">中跨度" + kd.ToString() + "</span>";
  805. if (ke == 1) zxResult.Result = "<span style=\"color:#ff0000;\">组选推荐中" + zx.ToString("000") + "</span>";
  806. rList.Add(dmResult);
  807. rList.Add(hwResult);
  808. rList.Add(kdResult);
  809. rList.Add(zxResult);
  810. }
  811. return rList;
  812. }
  813. /// <summary>
  814. /// 组合热度统计号码 结果
  815. /// </summary>
  816. /// <param name="qi"></param>
  817. /// <returns></returns>
  818. private List<mResult> GetEffectHistory(int qi, int[] kjh)
  819. {
  820. List<mResult> rList = new List<mResult>();
  821. int[] number = kjh;
  822. string _kjh = number[0].ToString() + number[1].ToString() + number[2].ToString();
  823. int hw = (number[0] + number[1] + number[2]) % 10;
  824. ArrayList ary = new ArrayList(number);
  825. ary.Sort();
  826. int kd = Convert.ToInt32(ary[2]) - Convert.ToInt32(ary[0]);
  827. int zx = Convert.ToInt32(ary[0].ToString() + ary[1].ToString() + ary[2].ToString());
  828. List<mReport> sList = GetEffectLists(qi);
  829. if (sList != null && sList.Count > 0)
  830. {
  831. mResult dmResult = new mResult(qi, 1, _kjh, false);
  832. mResult hwResult = new mResult(qi, 3, _kjh, false);
  833. mResult kdResult = new mResult(qi, 5, _kjh, false);
  834. int a = 0, b = 0, c = 0;
  835. int ka = 0, kb = 0, kc = 0;
  836. int count = sList.Count;
  837. int tpnum = -1;
  838. for (int i = count - 1; i >= 0; i--)
  839. {
  840. tpnum = sList[i].Number;
  841. switch (sList[i].Cid)
  842. {
  843. case 1://胆码
  844. if (a < 3)
  845. {
  846. if (_kjh.Contains(tpnum.ToString()))
  847. { ka++; }
  848. dmResult.Source = String.IsNullOrEmpty(dmResult.Source) ? tpnum.ToString() : (dmResult.Source + "," + tpnum.ToString());
  849. a++;
  850. }
  851. break;
  852. case 3://和尾
  853. if (b < 3)
  854. {
  855. if (hw == tpnum)
  856. { kb++; }
  857. hwResult.Source = String.IsNullOrEmpty(hwResult.Source) ? tpnum.ToString() : (hwResult.Source + "," + tpnum.ToString());
  858. b++;
  859. }
  860. break;
  861. case 5://跨度
  862. if (c < 3)
  863. {
  864. if (kd == tpnum)
  865. { kc++; }
  866. kdResult.Source = String.IsNullOrEmpty(kdResult.Source) ? tpnum.ToString() : (kdResult.Source + "," + tpnum.ToString());
  867. c++;
  868. }
  869. break;
  870. }
  871. }
  872. if (ka > 0) dmResult.Result = "<span style=\"color:#ff0000;\">中" + ka.ToString() + "码</span>";
  873. if (kb > 0) hwResult.Result = "<span style=\"color:#ff0000;\">中和尾" + hw.ToString() + "</span>";
  874. if (kc > 0) kdResult.Result = "<span style=\"color:#ff0000;\">中跨度" + kd.ToString() + "</span>";
  875. rList.Add(dmResult);
  876. rList.Add(hwResult);
  877. rList.Add(kdResult);
  878. }
  879. return rList;
  880. }
  881. /// <summary>
  882. /// 获取当期热度号码数据 结果(返算)
  883. /// </summary>
  884. /// <param name="qi"></param>
  885. /// <returns></returns>
  886. private DataSet GetEffectList(int qi)
  887. {
  888. return DbHelper.ExecuteDataset(InterfaceId, CommandType.Text, "SELECT [qi],[cid],[number],[helpcount] AS record,[status] FROM [tbl_effect] WHERE [qi]=" + qi.ToString() + " ORDER BY [record] DESC");
  889. }
  890. /// <summary>
  891. /// 取近10期号码热度数据 结果(返算)
  892. /// </summary>
  893. /// <param name="qi"></param>
  894. /// <returns></returns>
  895. private DataSet GetEffectList(string qi)
  896. {
  897. return DbHelper.ExecuteDataset(InterfaceId, CommandType.Text, "SELECT [qi],[cid],[number],[helpcount] AS record,[status] FROM [tbl_effect] WHERE [cid]<=5 AND [qi] IN(" + qi + ") ORDER BY [record] DESC");
  898. }
  899. /// <summary>
  900. /// 当期热度统计信息 条件
  901. /// </summary>
  902. /// <param name="qi"></param>
  903. /// <returns></returns>
  904. public List<mReport> GetReportLists(int qi)
  905. {
  906. List<mReport> rList = new List<mReport>();
  907. DataSet ds = GetReportList(qi);
  908. if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
  909. {
  910. int count = ds.Tables[0].Rows.Count;
  911. for (int i = count - 1; i >= 0; i--)
  912. {
  913. DataRow dr = ds.Tables[0].Rows[i];
  914. mReport info = new mReport();
  915. info.Qi = Convert.ToInt32(dr["qi"]);
  916. info.Cid = Convert.ToInt32(dr["cid"]);
  917. info.Number = Convert.ToInt32(dr["number"]);
  918. info.Record = Convert.ToInt32(dr["record"]);
  919. info.Status = Convert.ToInt32(dr["status"]);
  920. rList.Add(info);
  921. }
  922. }
  923. return rList;
  924. }
  925. /// <summary>
  926. /// 当期热度统计信息 结果(返算)
  927. /// </summary>
  928. /// <param name="qi"></param>
  929. /// <returns></returns>
  930. private List<mReport> GetEffectLists(int qi)
  931. {
  932. List<mReport> rList = new List<mReport>();
  933. DataSet ds = GetEffectList(qi);
  934. if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
  935. {
  936. int count = ds.Tables[0].Rows.Count;
  937. for (int i = count - 1; i >= 0; i--)
  938. {
  939. DataRow dr = ds.Tables[0].Rows[i];
  940. mReport info = new mReport();
  941. info.Qi = Convert.ToInt32(dr["qi"]);
  942. info.Cid = Convert.ToInt32(dr["cid"]);
  943. info.Number = Convert.ToInt32(dr["number"]);
  944. info.Record = Convert.ToInt32(dr["record"]);
  945. info.Status = Convert.ToInt32(dr["status"]);
  946. rList.Add(info);
  947. }
  948. }
  949. return rList;
  950. }
  951. #endregion
  952. }
  953. }