Example #1
0
        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;
        }
Example #2
0
 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();
         }
     }
 }
Example #3
0
 private void ChangeNowAward(string awardType)
 {
     foreach (Award award in allAward)
     {
         if (award.AwardType == awardType)
         {
             nowAward = award;
             break;
         }
     }
 }
Example #4
0
 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;
         }
     }
 }
Example #5
0
        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);
        }