public List<Award> DataGetAwards(string sql) { List<Award> awards = new List<Award>(); ConnectionOpen(); OleDbDataAdapter oleDA = new OleDbDataAdapter(sql, oleConnection); DataSet ds = new DataSet(); try { oleDA.Fill(ds); foreach (DataRow row in ds.Tables[0].Rows) { Award award = new Award(); award.ID = Convert.ToInt32(row["ID"]); award.AwardName = row["AwardName"].ToString(); award.AwardType= row["AwardType"].ToString(); award.AwardNumber = Convert.ToInt32(row["AwardNumber"]); awards.Add(award); } } catch (Exception ex) { new ADOException() { msg = "奖项数据检索失败" }; } finally { ConnectionClosed(); } return awards; }
private void startDraw() { if (thread.ThreadState == ThreadState.Unstarted) { this.btnStart.Text = "结束"; thread.Start(); if (allAward.Count > 0) { nowAward = allAward[0]; } else { DrawOver(); } } if (thread.ThreadState == ThreadState.Suspended) { this.btnStart.Text = "结束"; thread.Resume(); if (allAward.Count > 0) { nowAward = allAward[0]; } else { DrawOver(); } } }
private void ChangeNowAward(string awardType) { foreach (Award award in allAward) { if (award.AwardType == awardType) { nowAward = award; break; } } }
private void ChangeNowAward() { for (int i = 0; i < allAward.Count; i++) { if (nowAward == allAward[i]) { if (i + 1 == allAward.Count) { nowAward = allAward[0]; } else { nowAward = allAward[i + 1]; } break; } } }
public int DataUpdateAward(Award award) { ConnectionOpen(); string sql = "update [Award] set "; sql = (award.AwardName == "") ? sql : sql + " AwardName = '" + award.AwardName + "'"; sql = (award.AwardType == "") ? sql : sql + ",AwardType = '" + award.AwardType + "'"; sql = sql + ",AwardNumber = " + award.AwardNumber; sql = sql + " where ID = " + award.ID; OleDbCommand cmd = new OleDbCommand(sql, oleConnection); int result; try { result = cmd.ExecuteNonQuery(); } catch (Exception ex) { throw new ADOException() { msg = "奖项数据更新失败,不可关闭软件" }; } finally { ConnectionClosed(); } return result; }
public static string LuckyDraw(string filter, string key, DateTime start, DateTime end, DateTime open, string prize, int count, string path) { setFilter(filter); setKeyWord(key); setStart(start); setEnd(end); setOpen(open); setPrize(prize); setCount(count); SQLManager sl = new SQLManager(); DataTable dt = sl.UniversalGetAPI("select *from message"); Dictionary <string, Join> dictionary = new Dictionary <string, Join>();//存储潜在有效参与抽奖者 //过滤处理 for (int i = 0; dt != null && i < dt.Rows.Count; ++i) { Message message = new Message { id = dt.Rows[i]["id"].ToString(), qq = dt.Rows[i]["qq"].ToString(), nickname = dt.Rows[i]["nickname"].ToString(), publish_time = dt.Rows[i]["publish_time"].ToString(), contain = dt.Rows[i]["contain"].ToString() }; if (islegal(message)) { if (!dictionary.ContainsKey(message.qq)) { Join join = new Join { qq = message.qq, nickname = message.nickname }; if (message.contain.Contains(canPrizeStr) && DateTime.Compare(DateTime.Parse(message.publish_time), start) >= 0 && DateTime.Compare(DateTime.Parse(message.publish_time), end) <= 0) { join.publish_time = Convert.ToDateTime(message.publish_time); join.canPrize = true; } join.datetime_contain.Add(Convert.ToDateTime(message.publish_time), message.contain); dictionary.Add(message.qq, join); } else { Join join; dictionary.TryGetValue(message.qq, out join); if (message.contain.Contains(canPrizeStr) && DateTime.Compare(DateTime.Parse(message.publish_time), start) >= 0 && DateTime.Compare(DateTime.Parse(message.publish_time), end) <= 0) { join.publish_time = Convert.ToDateTime(message.publish_time); join.canPrize = true; } try { join.datetime_contain.Add(Convert.ToDateTime(message.publish_time), message.contain); } catch (Exception e) { } } } } //抽奖 award = randomPrize(dictionary, path); return("success"); }
/// <summary> /// 抽取所有人 /// </summary> /// <param name="dic"></param> /// <returns></returns> public static Award randomPrize(Dictionary <string, Join> dic, string path) { List <Join> joins = new List <Join>(); Award award = new Award(); award.title = canPrizeStr; StreamWriter writer; if (!File.Exists(path + "blacklist.txt")) { writer = new StreamWriter(new FileStream(path + "blacklist.txt", FileMode.CreateNew)); } else { File.Delete(path + "blacklist.txt"); writer = new StreamWriter(new FileStream(path + "blacklist.txt", FileMode.CreateNew)); } foreach (Join join in dic.Values.ToList <Join>()) { if (join.canPrize && filter == Filter.none)//有效参与者,不过滤 { TimeSpan ts = DateTime.Parse("2030-1-1") - join.publish_time; join.score = (int)sigmoid(statNumRate * join.datetime_contain.Count + statTimeRate * ts.TotalMilliseconds) * 10; joins.Add(join); } else if (join.canPrize && filter == Filter.normal && join.datetime_contain.Count > 1)//有效参与者,普通过滤 { TimeSpan ts = DateTime.Parse("2030-1-1") - join.publish_time; join.score = (int)sigmoid(statNumRate * join.datetime_contain.Count + statTimeRate * ts.TotalMilliseconds) * 10; joins.Add(join); } else if (join.canPrize && filter == Filter.deep && join.datetime_contain.Count > 1)//有效参与者,深度过滤 { TimeSpan ts = DateTime.Parse("2030-1-1") - join.publish_time; join.score = (int)sigmoid(statNumRate * join.datetime_contain.Count + statTimeRate * ts.TotalMilliseconds) * 100; if (!map.ContainsKey(join.nickname + "(" + join.qq + ")"))//加入灌水名单 { List <string> list = new List <string>(); map.Add(join.nickname + "(" + join.qq + ")", list); } foreach (KeyValuePair <DateTime, string> item in join.datetime_contain)//过滤刷广告,刷空内容,刷表情(检测到灌水则将对应分数-1直到0) { if (deepFilte(item.Value)) { join.score = join.score > 0 ? join.score - 1 : 0; List <string> list; if (map.TryGetValue(join.nickname + "(" + join.qq + ")", out list)) { list.Add(item.Value); } else { list = new List <string>(); list.Add(item.Value); map.Add(join.nickname + "(" + join.qq + ")", list); } } } joins.Add(join); } } foreach (KeyValuePair <string, List <string> > item in map)//写入灌水黑名单 { List <string> info = item.Value; writer.WriteLine("----------------------------------------------"); writer.WriteLine("灌水者:" + item.Key); writer.WriteLine("灌水内容如下"); foreach (string str in info) { writer.WriteLine(str); } } map = new Dictionary <string, List <string> >(); writer.Close(); int prizeNum = count; for (int i = 0; i < prizeNum; ++i)//开始抽取 { try { award.awardList.Add(weightedRandom(ref joins)); } catch (Exception) { } } return(award); }