using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Data.SqlClient; using System.Linq; using System.Text; using CB.Entity; using CB.Interface.OldDataCenter; namespace CB.Data.SqlServer { public class OldDataCenterManage : IOldDataCenterService { private string InterfaceId = ""; public OldDataCenterManage(string interfaceId) { InterfaceId = interfaceId; } public int GetProcessResultCount(int term) { return Convert.ToInt32(DbHelper.ExecuteScalar(InterfaceId, CommandType.Text, "SELECT COUNT([rid]) FROM [tbl_result] WHERE [qi]=" + term.ToString() + " AND [status]=0")); } public List ProcessResultData(int term, int[] openCode) { List rList = new List(); List sList = GetSourceResult(term); if (sList != null && sList.Count > 0) { int[] _kjh = openCode; int kd, hz, hw; if (_kjh[0] == _kjh[1] && _kjh[0] == _kjh[2]) { kd = 0; hz = _kjh[0] * 3; } else { List list = new List(_kjh.ToList()); list.Sort(); kd = Convert.ToInt32(list[2].ToString()) - Convert.ToInt32(list[0].ToString()); hz = _kjh[0] + _kjh[1] + _kjh[2]; } hw = hz % 10; int record = sList.Count; for (int i = record - 1; i >= 0; i--) { string rkjh = _kjh[0].ToString() + _kjh[1].ToString() + _kjh[2].ToString(); string source = sList[i].Source; int status = 1; string result = ""; switch (sList[i].Cid) { case 1://胆码 记录中奖个数 int j = 0; string[] tp = source.Split(','); foreach (string s in tp) { if (!String.IsNullOrEmpty(s)) { if (rkjh.Contains(s)) { j++; } } } j = j > 3 ? 0 : j; result = j > 0 ? j.ToString() : ""; status = j > 0 ? 2 : 1; break; case 2://杀码 break; case 3://和尾 记录中奖号码 status = 1; if (source.Contains(hw.ToString())) { result = hw.ToString(); status = 2; } break; case 4://五码复式 记录中奖号码 break; case 5://跨度 记录中奖号码 status = 1; if (source.Contains(kd.ToString())) { result = kd.ToString(); status = 2; } break; case 6://组三 break; case 7://组六 break; default: break; } ShortResult info = new ShortResult(); info.Rid = sList[i].Rid; info.Result = result.ToString(); info.Kjh = rkjh; info.Status = status; rList.Add(info); } } return rList; } public void UpBatchDataResult(List results) { if (results == null || results.Count <= 0) return; using (SqlConnection conn = new SqlConnection(DbHelper.ConnectionString(InterfaceId))) { List list = results; int record = list.Count; conn.Open(); SqlDataAdapter sd = new SqlDataAdapter(); sd.SelectCommand = new SqlCommand("SELECT TOP " + record.ToString() + " [rid],[kjh],[result],[status] FROM [tbl_result]", conn); DataSet dataset = new DataSet(); sd.Fill(dataset); sd.UpdateCommand = new SqlCommand("UPDATE [tbl_result] SET [kjh]=@kjh,[result]=@result,[status]=@status WHERE [rid]=@rid", conn); sd.UpdateCommand.Parameters.Add("@kjh", SqlDbType.Char, 20, "kjh"); sd.UpdateCommand.Parameters.Add("@result", SqlDbType.VarChar, 200, "result"); sd.UpdateCommand.Parameters.Add("@status", SqlDbType.TinyInt, 2, "status"); sd.UpdateCommand.Parameters.Add("@rid", SqlDbType.Int, 4, "rid"); sd.UpdateCommand.UpdatedRowSource = UpdateRowSource.None; sd.UpdateBatchSize = 0; for (int i = record - 1; i >= 0; i--) { DataRow dr = dataset.Tables[0].Rows[i]; dr.BeginEdit(); dr["kjh"] = list[i].Kjh; dr["result"] = list[i].Result; dr["status"] = list[i].Status; dr["rid"] = list[i].Rid; dr.EndEdit(); } sd.Update(dataset.Tables[0]); dataset.Tables[0].Clear(); sd.Dispose(); dataset.Dispose(); conn.Close(); } } #region 批量更新数据统计表是否中奖 public void UpBatchDataReports(int term, int[] openCode) { int[] _kjh = openCode; string sqlstr = "SELECT [status] FROM tbl_report"; string sqlwhere = " WHERE [qi]=" + term.ToString(); if (_kjh[0] == _kjh[1] && _kjh[0] == _kjh[2]) { 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() + "))"; } else { ArrayList list = new ArrayList(_kjh); list.Sort(); int zxkjh = Convert.ToInt32(list[0].ToString() + list[1].ToString() + list[2].ToString()); int kd = Convert.ToInt32(list[2].ToString()) - Convert.ToInt32(list[0].ToString()); int hw = (_kjh[0] + _kjh[1] + _kjh[2]) % 10; 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() + "))"; } using (SqlConnection conn = new SqlConnection(DbHelper.ConnectionString(InterfaceId))) { conn.Open(); SqlDataAdapter sd = new SqlDataAdapter(); sd.SelectCommand = new SqlCommand(sqlstr + sqlwhere, conn); DataSet dataset = new DataSet(); sd.Fill(dataset); sd.UpdateCommand = new SqlCommand("UPDATE tbl_report SET [status]=@status" + sqlwhere, conn); sd.UpdateCommand.Parameters.Add("@status", SqlDbType.Int, 4, "status"); sd.UpdateCommand.UpdatedRowSource = UpdateRowSource.None; sd.UpdateBatchSize = 0; int record = dataset.Tables[0].Rows.Count; for (int i = record - 1; i >= 0; i--) { DataRow dr = dataset.Tables[0].Rows[i]; dr.BeginEdit(); dr["status"] = 1; dr.EndEdit(); } sd.Update(dataset.Tables[0]); dataset.Tables[0].Clear(); sd.Dispose(); dataset.Dispose(); conn.Close(); } } public void UpBatchDataEffect(int term, int[] openCode) { int[] kjh = openCode; string sqlstr = "SELECT [status] FROM tbl_effect"; string sqlwhere = " WHERE [qi]=" + term.ToString(); if (kjh[0] == kjh[1] && kjh[0] == kjh[2]) { 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() + "))"; } else { ArrayList list = new ArrayList(kjh); list.Sort(); int zxkjh = Convert.ToInt32(list[0].ToString() + list[1].ToString() + list[2].ToString()); int kd = Convert.ToInt32(list[2].ToString()) - Convert.ToInt32(list[0].ToString()); int hw = (kjh[0] + kjh[1] + kjh[2]) % 10; 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() + "))"; } using (SqlConnection conn = new SqlConnection(DbHelper.ConnectionString(InterfaceId))) { conn.Open(); SqlDataAdapter sd = new SqlDataAdapter(); sd.SelectCommand = new SqlCommand(sqlstr + sqlwhere, conn); DataSet dataset = new DataSet(); sd.Fill(dataset); sd.UpdateCommand = new SqlCommand("UPDATE tbl_effect SET [status]=@status" + sqlwhere, conn); sd.UpdateCommand.Parameters.Add("@status", SqlDbType.Int, 4, "status"); sd.UpdateCommand.UpdatedRowSource = UpdateRowSource.None; sd.UpdateBatchSize = 0; int record = dataset.Tables[0].Rows.Count; for (int i = record - 1; i >= 0; i--) { DataRow dr = dataset.Tables[0].Rows[i]; dr.BeginEdit(); dr["status"] = 1; dr.EndEdit(); } sd.Update(dataset.Tables[0]); dataset.Tables[0].Clear(); sd.Dispose(); dataset.Dispose(); conn.Close(); } } #endregion public void ProcessReportDeviation(int term) { List qiList = new List(); List dqList = new List(); List allList = new List(); qiList = GetQiList(term); allList = GetReportList(term, qiList, ref dqList); int[,] allSum = GetEverLocationHot(term, qiList, allList); if (dqList != null && dqList.Count > 0) { List dmList = new List(); List hwList = new List(); List kdList = new List(); for (int i = dqList.Count - 1; i >= 0; i--) { mReport info = dqList[i]; switch (dqList[i].Cid) { case 1: dmList.Add(info); break; case 3: hwList.Add(info); break; case 5: kdList.Add(info); break; } } int ca = dmList.Count, cb = hwList.Count, cc = kdList.Count; int count = qiList.Count; for (int a = 0; a < ca; a++) { dmList[a].Deviation = allSum[0, a] > 0 ? (allSum[1, a] / (double)count - (allSum[2, a] / (double)allSum[0, a]) * 0.65) : 0d; } for (int b = 0; b < cb; b++) { hwList[b].Deviation = allSum[3, b] > 0 ? (allSum[4, b] / (double)count - (allSum[5, b] / (double)allSum[3, b]) * 0.65) : 0d; } for (int c = 0; c < cc; c++) { kdList[c].Deviation = allSum[6, c] > 0 ? (allSum[7, c] / (double)count - (allSum[8, c] / (double)allSum[6, c])) : 0d; } UpReportDeviation(term, 1, dmList); UpReportDeviation(term, 3, hwList); UpReportDeviation(term, 5, kdList); } } public void ProcessEffectDeviation(int term) { List qiList = new List(); List dqList = new List(); List allList = new List(); qiList = GetQiList(term); allList = GetEffectList(term, qiList, ref dqList); int[,] allSum = GetEverLocationHot(term, qiList, allList); if (dqList != null && dqList.Count > 0) { List dmList = new List(); List hwList = new List(); List kdList = new List(); for (int i = dqList.Count - 1; i >= 0; i--) { mReport info = dqList[i]; switch (dqList[i].Cid) { case 1: dmList.Add(info); break; case 3: hwList.Add(info); break; case 5: kdList.Add(info); break; } } int ca = dmList.Count, cb = hwList.Count, cc = kdList.Count; int count = qiList.Count; for (int a = 0; a < ca; a++) { dmList[a].Deviation = allSum[0, a] > 0 ? (allSum[1, a] / (double)count - (allSum[2, a] / (double)allSum[0, a]) * 0.65) : 0d; } for (int b = 0; b < cb; b++) { hwList[b].Deviation = allSum[3, b] > 0 ? (allSum[4, b] / (double)count - (allSum[5, b] / (double)allSum[3, b]) * 0.65) : 0d; } for (int c = 0; c < cc; c++) { kdList[c].Deviation = allSum[6, c] > 0 ? (allSum[7, c] / (double)count - (allSum[8, c] / (double)allSum[6, c])) : 0d; } UpEffectDeviation(term, 1, dmList); UpEffectDeviation(term, 3, hwList); UpEffectDeviation(term, 5, kdList); } } #region 更新配置表tbl_config开奖期数 /// /// 更新配置表tbl_config开奖期数 /// /// public void UpConfigQi(int term) { DbHelper.ExecuteNonQuery(InterfaceId, CommandType.Text, "UPDATE [tbl_config] SET [qi]=" + term.ToString()); } #endregion public void PushHistoryResultData(int term, int[] openCode) { using (SqlConnection conn = new SqlConnection(DbHelper.ConnectionString(InterfaceId))) { conn.Open(); SqlDataAdapter sd = new SqlDataAdapter(); sd.SelectCommand = new SqlCommand("SELECT [qi],[cid],[kjh],[source],[result],[status] FROM [tbl_history]", conn); sd.InsertCommand = new SqlCommand("du_create_historyresult", conn); sd.InsertCommand.Parameters.Add("@qi", SqlDbType.Int, 4, "qi"); sd.InsertCommand.Parameters.Add("@cid", SqlDbType.Int, 4, "cid"); sd.InsertCommand.Parameters.Add("@kjh", SqlDbType.Char, 5, "kjh"); sd.InsertCommand.Parameters.Add("@source", SqlDbType.NChar, 200, "source"); sd.InsertCommand.Parameters.Add("@result", SqlDbType.NChar, 150, "result"); sd.InsertCommand.Parameters.Add("@status", SqlDbType.Bit, 1, "status"); sd.InsertCommand.UpdatedRowSource = UpdateRowSource.None; sd.InsertCommand.CommandType = CommandType.StoredProcedure; sd.UpdateBatchSize = 0; DataSet dataset = new DataSet(); sd.Fill(dataset); List rList = GetReportHistory(term, openCode); List eList = GetEffectHistory(term, openCode); string _kjh = openCode[0].ToString() + openCode[1].ToString() + openCode[2].ToString(); int count = 0; count = rList.Count; for (int i = count - 1; i >= 0; i--) { object[] row = { term, rList[i].Cid, _kjh, rList[i].Source, rList[i].Result, false }; dataset.Tables[0].Rows.Add(row); } count = eList.Count; for (int i = count - 1; i >= 0; i--) { object[] row = { term, eList[i].Cid, _kjh, eList[i].Source, eList[i].Result, true }; dataset.Tables[0].Rows.Add(row); } sd.Update(dataset.Tables[0]); dataset.Tables[0].Clear(); sd.Dispose(); dataset.Dispose(); conn.Close(); } } public void ResetDataResult(int term) { DbHelper.ExecuteNonQuery(InterfaceId, CommandType.Text, "UPDATE [tbl_result] SET [status]=0 WHERE [qi]=" + term.ToString()); } #region 私有方法 #region 取未处理分表数据 /// /// 取未处理分表数据 /// /// /// private DataSet GetProcessResult(int qi) { DbParameter[] pars = { DbHelper.MakeInParam(InterfaceId, "@qi", (DbType)SqlDbType.Int, 4, qi), }; return DbHelper.ExecuteDataset(InterfaceId, CommandType.StoredProcedure, "du_st_result", pars); } #endregion /// /// 获取未处理分表结果数据 /// /// /// private List GetSourceResult(int qi) { List rList = new List(); DataSet ds = GetProcessResult(qi); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { int record = ds.Tables[0].Rows.Count; for (int i = record - 1; i >= 0; i--) { DataRow dr = ds.Tables[0].Rows[i]; ShortResult info = new ShortResult(); info.Rid = Convert.ToInt32(dr["rid"]); info.Cid = Convert.ToInt32(dr["cid"]); info.Qi = Convert.ToInt32(dr["qi"]); info.Source = dr["source"].ToString().Trim(); rList.Add(info); } } return rList; } /// /// 获取计算近10期热度偏差的所有期数信息 /// /// private List GetQiList(int dqQi) { List rList = new List(); DataSet ds = GetDeviationQi(dqQi); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { int count = ds.Tables[0].Rows.Count; for (int i = count - 1; i >= 0; i--) { string str = ds.Tables[0].Rows[i][0].ToString().Trim(); if (!String.IsNullOrEmpty(str)) { rList.Add(Convert.ToInt32(str)); } } } return rList; } #region 获取计算近10期热度偏差的所有期数信息 /// /// 获取计算近10期热度偏差的所有期数信息 /// /// /// private DataSet GetDeviationQi(int dqQi) { return DbHelper.ExecuteDataset(InterfaceId, CommandType.Text, "SELECT TOP 30 [qi] FROM [tbl_report] WHERE [qi]<=" + dqQi.ToString() + " GROUP BY [qi] ORDER BY [qi] DESC"); } #endregion /// /// 取热度统计数据 条件 /// /// /// /// private List GetReportList(int qi, List qiList, ref List sList) { List list = new List(); string qistr = string.Empty; if (qiList != null && qiList.Count > 0) { int count = qiList.Count; for (int i = count - 1; i >= 0; i--) { if (String.IsNullOrEmpty(qistr)) { qistr = qiList[i].ToString(); } else { qistr = qistr + "," + qiList[i].ToString(); } } } if (!String.IsNullOrEmpty(qistr)) { DataSet ds = GetReportList(qistr); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { int count = ds.Tables[0].Rows.Count; for (int i = count - 1; i >= 0; i--) { DataRow dr = ds.Tables[0].Rows[i]; mReport info = new mReport(); info.Qi = Convert.ToInt32(dr["qi"]); info.Cid = Convert.ToInt32(dr["cid"]); info.Number = Convert.ToInt32(dr["number"]); info.Record = Convert.ToInt32(dr["record"]); info.Status = Convert.ToInt32(dr["status"]); if (info.Qi == qi) { sList.Add(info); } list.Add(info); } } } return list; } #region 获取号码热度数据 /// /// 取近10期号码热度数据 条件 /// /// /// private DataSet GetReportList(string qi) { 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"); } /// /// 获取当期热度号码数据 条件 /// /// /// private DataSet GetReportList(int qi) { 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"); } #endregion /// /// 获取单一分类某一位置热度总量 2011-9-29 /// /// /// private static int[,] GetEverLocationHot(int dqi, List qiList, List rList) { int[,] avg = new int[9, 10]; for (int i = 9; i >= 0; i--) { 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; } List _qi = qiList; List _list = rList; if (_qi != null && _qi.Count > 0 && _list != null && _list.Count > 0) { int count = _qi.Count; int len = _list.Count; for (int i = count - 1; i >= 0; i--) { int tpqi = _qi[i]; List dmList = new List(); List hwList = new List(); List kdList = new List(); for (int j = len - 1; j >= 0; j--) { mReport info = _list[j]; if (info.Qi == tpqi) { if (_list[j].Cid == 1) { dmList.Add(info); } if (_list[j].Cid == 3) { hwList.Add(info); } if (_list[j].Cid == 5) { kdList.Add(info); } } } int ca = dmList.Count, cb = hwList.Count, cc = kdList.Count; for (int a = 0; a < ca; a++) { avg[0, a] += dmList[a].Record; if (dmList[a].Status == 1) { avg[1, a]++; } if (tpqi == dqi) { avg[2, a] = dmList[a].Record; } } for (int b = 0; b < cb; b++) { avg[3, b] += hwList[b].Record; if (hwList[b].Status == 1) { avg[4, b]++; } if (tpqi == dqi) { avg[5, b] = hwList[b].Record; } } for (int c = 0; c < cc; c++) { avg[6, c] += kdList[c].Record; if (kdList[c].Status == 1) { avg[7, c]++; } if (tpqi == dqi) { avg[8, c] = kdList[c].Record; } } } } return avg; } #region 更新热度偏差数据 /// /// 更新热度偏差数据 条件 /// /// /// private void UpReportDeviation(int qi, int cid, List rList) { if (rList != null && rList.Count > 0) { using (SqlConnection conn = new SqlConnection(DbHelper.ConnectionString(InterfaceId))) { conn.Open(); SqlDataAdapter sd = new SqlDataAdapter(); sd.SelectCommand = new SqlCommand("SELECT [qi],[cid],[number],[deviation] FROM [tbl_report] WHERE [cid]=" + cid.ToString() + " AND [qi]=" + qi.ToString(), conn); DataSet dataset = new DataSet(); sd.Fill(dataset); sd.UpdateCommand = new SqlCommand("UPDATE [tbl_report] SET [deviation]=@deviation WHERE [qi]=@qi AND [cid]=@cid AND [number]=@number", conn); sd.UpdateCommand.Parameters.Add("@deviation", SqlDbType.Float, 6, "deviation"); sd.UpdateCommand.Parameters.Add("@qi", SqlDbType.Int, 4, "qi"); sd.UpdateCommand.Parameters.Add("@cid", SqlDbType.Int, 4, "cid"); sd.UpdateCommand.Parameters.Add("@number", SqlDbType.Int, 4, "number"); sd.UpdateCommand.UpdatedRowSource = UpdateRowSource.None; sd.UpdateBatchSize = 0; int record = dataset.Tables[0].Rows.Count; for (int i = record - 1; i >= 0; i--) { DataRow dr = dataset.Tables[0].Rows[i]; int _cid = Convert.ToInt32(dr["cid"]); int number = Convert.ToInt32(dr["number"]); dr.BeginEdit(); dr["deviation"] = GetNumberDeviation(rList, qi, _cid, number); dr.EndEdit(); } sd.Update(dataset.Tables[0]); dataset.Tables[0].Clear(); sd.Dispose(); dataset.Dispose(); conn.Close(); } } } /// /// 返回热度偏差 /// /// /// /// /// /// public static double GetNumberDeviation(List rList, int qi, int cid, int number) { if (rList != null && rList.Count > 0) { List list = rList; int count = list.Count; for (int i = count - 1; i >= 0; i--) { if (list[i].Qi == qi && list[i].Cid == cid && list[i].Number == number) { return list[i].Deviation; } } } return 0d; } #endregion /// /// 取热度统计数据 结果(返算) /// /// /// /// private List GetEffectList(int qi, List qiList, ref List sList) { List list = new List(); string qistr = string.Empty; if (qiList != null && qiList.Count > 0) { int count = qiList.Count; for (int i = count - 1; i >= 0; i--) { if (String.IsNullOrEmpty(qistr)) { qistr = qiList[i].ToString(); } else { qistr = qistr + "," + qiList[i].ToString(); } } } if (!String.IsNullOrEmpty(qistr)) { DataSet ds = GetEffectList(qistr); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { int[] avgKD = { 1, 18, 24, 28, 30, 30, 28, 24, 18, 10 }; int count = ds.Tables[0].Rows.Count; for (int i = count - 1; i >= 0; i--) { DataRow dr = ds.Tables[0].Rows[i]; mReport info = new mReport(); info.Qi = Convert.ToInt32(dr["qi"]); info.Cid = Convert.ToInt32(dr["cid"]); info.Number = Convert.ToInt32(dr["number"]); info.Record = Convert.ToInt32(dr["record"]); if (info.Cid == 1) { info.Record = info.Record / 54; } if (info.Cid == 3) { info.Record = info.Record / 21; } if (info.Cid == 5) { info.Record = info.Record / avgKD[info.Number]; } info.Status = Convert.ToInt32(dr["status"]); if (info.Qi == qi) { sList.Add(info); } list.Add(info); } } } return list; } /// /// 更新热度偏差数据 结果(返算) /// /// /// private void UpEffectDeviation(int qi, int cid, List rList) { if (rList != null && rList.Count > 0) { using (SqlConnection conn = new SqlConnection(DbHelper.ConnectionString(InterfaceId))) { conn.Open(); SqlDataAdapter sd = new SqlDataAdapter(); sd.SelectCommand = new SqlCommand("SELECT [qi],[cid],[number],[deviation] FROM [tbl_effect] WHERE [cid]=" + cid.ToString() + " AND [qi]=" + qi.ToString(), conn); DataSet dataset = new DataSet(); sd.Fill(dataset); sd.UpdateCommand = new SqlCommand("UPDATE [tbl_effect] SET [deviation]=@deviation WHERE [qi]=@qi AND [cid]=@cid AND [number]=@number", conn); sd.UpdateCommand.Parameters.Add("@deviation", SqlDbType.Float, 6, "deviation"); sd.UpdateCommand.Parameters.Add("@qi", SqlDbType.Int, 4, "qi"); sd.UpdateCommand.Parameters.Add("@cid", SqlDbType.Int, 4, "cid"); sd.UpdateCommand.Parameters.Add("@number", SqlDbType.Int, 4, "number"); sd.UpdateCommand.UpdatedRowSource = UpdateRowSource.None; sd.UpdateBatchSize = 0; int record = dataset.Tables[0].Rows.Count; for (int i = record - 1; i >= 0; i--) { DataRow dr = dataset.Tables[0].Rows[i]; int _cid = Convert.ToInt32(dr["cid"]); int number = Convert.ToInt32(dr["number"]); dr.BeginEdit(); dr["deviation"] = GetNumberDeviation(rList, qi, _cid, number); dr.EndEdit(); } sd.Update(dataset.Tables[0]); dataset.Tables[0].Clear(); sd.Dispose(); dataset.Dispose(); conn.Close(); } } } /// /// 组合热度统计号码 结果 /// /// /// private List GetReportHistory(int qi, int[] kjh) { List rList = new List(); int[] number = kjh; string _kjh = number[0].ToString() + number[1].ToString() + number[2].ToString(); int hw = (number[0] + number[1] + number[2]) % 10; ArrayList ary = new ArrayList(number); ary.Sort(); int kd = Convert.ToInt32(ary[2]) - Convert.ToInt32(ary[0]); int zx = Convert.ToInt32(ary[0].ToString() + ary[1].ToString() + ary[2].ToString()); List sList = GetReportLists(qi); if (sList != null && sList.Count > 0) { mResult dmResult = new mResult(qi, 1, _kjh, false); mResult hwResult = new mResult(qi, 3, _kjh, false); mResult kdResult = new mResult(qi, 5, _kjh, false); mResult zxResult = new mResult(qi, 6, _kjh, false); int a = 0, b = 0, c = 0, d = 0, e = 0; int ka = 0, kb = 0, kc = 0, ke = 0; int count = sList.Count; int tpnum = -1; for (int i = count - 1; i >= 0; i--) { tpnum = sList[i].Number; switch (sList[i].Cid) { case 1://胆码 if (a < 3) { if (_kjh.Contains(tpnum.ToString())) { ka++; } dmResult.Source = String.IsNullOrEmpty(dmResult.Source) ? tpnum.ToString() : (dmResult.Source + "," + tpnum.ToString()); a++; } break; case 3://和尾 if (b < 3) { if (hw == tpnum) { kb++; } hwResult.Source = String.IsNullOrEmpty(hwResult.Source) ? tpnum.ToString() : (hwResult.Source + "," + tpnum.ToString()); b++; } break; case 5://跨度 if (c < 3) { if (kd == tpnum) { kc++; } kdResult.Source = String.IsNullOrEmpty(kdResult.Source) ? tpnum.ToString() : (kdResult.Source + "," + tpnum.ToString()); c++; } break; case 6://组三 if (d < 10) { if (zx == tpnum) { ke = 1; } zxResult.Source = String.IsNullOrEmpty(zxResult.Source) ? tpnum.ToString("000") : (zxResult.Source + "," + tpnum.ToString("000")); d++; } break; case 7://组六 if (e < 30) { if (zx == tpnum) { ke = 1; } zxResult.Source = String.IsNullOrEmpty(zxResult.Source) ? tpnum.ToString("000") : (zxResult.Source + "," + tpnum.ToString("000")); e++; } break; } } if (ka > 0) dmResult.Result = "中" + ka.ToString() + "码"; if (kb > 0) hwResult.Result = "中和尾" + hw.ToString() + ""; if (kc > 0) kdResult.Result = "中跨度" + kd.ToString() + ""; if (ke == 1) zxResult.Result = "组选推荐中" + zx.ToString("000") + ""; rList.Add(dmResult); rList.Add(hwResult); rList.Add(kdResult); rList.Add(zxResult); } return rList; } /// /// 组合热度统计号码 结果 /// /// /// private List GetEffectHistory(int qi, int[] kjh) { List rList = new List(); int[] number = kjh; string _kjh = number[0].ToString() + number[1].ToString() + number[2].ToString(); int hw = (number[0] + number[1] + number[2]) % 10; ArrayList ary = new ArrayList(number); ary.Sort(); int kd = Convert.ToInt32(ary[2]) - Convert.ToInt32(ary[0]); int zx = Convert.ToInt32(ary[0].ToString() + ary[1].ToString() + ary[2].ToString()); List sList = GetEffectLists(qi); if (sList != null && sList.Count > 0) { mResult dmResult = new mResult(qi, 1, _kjh, false); mResult hwResult = new mResult(qi, 3, _kjh, false); mResult kdResult = new mResult(qi, 5, _kjh, false); int a = 0, b = 0, c = 0; int ka = 0, kb = 0, kc = 0; int count = sList.Count; int tpnum = -1; for (int i = count - 1; i >= 0; i--) { tpnum = sList[i].Number; switch (sList[i].Cid) { case 1://胆码 if (a < 3) { if (_kjh.Contains(tpnum.ToString())) { ka++; } dmResult.Source = String.IsNullOrEmpty(dmResult.Source) ? tpnum.ToString() : (dmResult.Source + "," + tpnum.ToString()); a++; } break; case 3://和尾 if (b < 3) { if (hw == tpnum) { kb++; } hwResult.Source = String.IsNullOrEmpty(hwResult.Source) ? tpnum.ToString() : (hwResult.Source + "," + tpnum.ToString()); b++; } break; case 5://跨度 if (c < 3) { if (kd == tpnum) { kc++; } kdResult.Source = String.IsNullOrEmpty(kdResult.Source) ? tpnum.ToString() : (kdResult.Source + "," + tpnum.ToString()); c++; } break; } } if (ka > 0) dmResult.Result = "中" + ka.ToString() + "码"; if (kb > 0) hwResult.Result = "中和尾" + hw.ToString() + ""; if (kc > 0) kdResult.Result = "中跨度" + kd.ToString() + ""; rList.Add(dmResult); rList.Add(hwResult); rList.Add(kdResult); } return rList; } /// /// 获取当期热度号码数据 结果(返算) /// /// /// private DataSet GetEffectList(int qi) { 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"); } /// /// 取近10期号码热度数据 结果(返算) /// /// /// private DataSet GetEffectList(string qi) { 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"); } /// /// 当期热度统计信息 条件 /// /// /// public List GetReportLists(int qi) { List rList = new List(); DataSet ds = GetReportList(qi); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { int count = ds.Tables[0].Rows.Count; for (int i = count - 1; i >= 0; i--) { DataRow dr = ds.Tables[0].Rows[i]; mReport info = new mReport(); info.Qi = Convert.ToInt32(dr["qi"]); info.Cid = Convert.ToInt32(dr["cid"]); info.Number = Convert.ToInt32(dr["number"]); info.Record = Convert.ToInt32(dr["record"]); info.Status = Convert.ToInt32(dr["status"]); rList.Add(info); } } return rList; } /// /// 当期热度统计信息 结果(返算) /// /// /// private List GetEffectLists(int qi) { List rList = new List(); DataSet ds = GetEffectList(qi); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { int count = ds.Tables[0].Rows.Count; for (int i = count - 1; i >= 0; i--) { DataRow dr = ds.Tables[0].Rows[i]; mReport info = new mReport(); info.Qi = Convert.ToInt32(dr["qi"]); info.Cid = Convert.ToInt32(dr["cid"]); info.Number = Convert.ToInt32(dr["number"]); info.Record = Convert.ToInt32(dr["record"]); info.Status = Convert.ToInt32(dr["status"]); rList.Add(info); } } return rList; } #endregion } }