Пример #1
0
        public override void QueryForBeforeRequestIn3M(out TopicStatusCollection experiesTopicStatus, out List<int> autoFinalQuestionThreadIds, out Dictionary<int, Dictionary<int, int>> autoFinalQuestionForumIDAndRewards)
        {

            //供放置查出的已经过期的提问
            //List<Question> expiresQuestions = new List<Question>();

            List<QuestionThread> expiresQuestions = new List<QuestionThread>();

            Dictionary<int, int> threadIDAndPostUserIDs = new Dictionary<int, int>();
            Dictionary<int, int> threadIDAndForumIDs = new Dictionary<int, int>();

            autoFinalQuestionThreadIds = new List<int>();

            using (SqlQuery query = new SqlQuery())
            {
                query.CommandText = "bx_QueryForBeforeRequestIn3M";
                query.CommandType = CommandType.StoredProcedure;
                query.CommandTimeout = 30;

                try
                {
                    if (IsAutoFinalQuestion == true)
                    {
                        experiesTopicStatus = new TopicStatusCollection();
                        autoFinalQuestionForumIDAndRewards = new Dictionary<int, Dictionary<int, int>>();
                        return;
                    }
                    IsAutoFinalQuestion = true;

                    using (XSqlDataReader reader = query.ExecuteReader())
                    {
                        experiesTopicStatus = new TopicStatusCollection(reader);

                        reader.NextResult();

                        while (reader.Read())
                        {
                            //Question question = ConvertData.ConvertToQuestion(reader);
                            QuestionThread question = new QuestionThread();
                            question.ThreadID = reader.Get<int>(reader.GetOrdinal("ThreadID"));
                            question.FillQuestion(reader);

                            expiresQuestions.Add(question);

                            int forumID = reader.Get<int>("ForumID");

                            threadIDAndForumIDs.Add(question.ThreadID, forumID);

                            threadIDAndPostUserIDs.Add(question.ThreadID, reader.GetInt32(reader.GetOrdinal("PostUserID")));
                        }
                    }


                    query.CommandText = "bx_AutoFinalQuestion";
                    query.CommandType = CommandType.StoredProcedure;
                    query.CommandTimeout = 30;

                    autoFinalQuestionForumIDAndRewards = new Dictionary<int, Dictionary<int, int>>();
                    foreach (QuestionThread q in expiresQuestions)
                    {
                        int forumID;
                        if (threadIDAndForumIDs.ContainsKey(q.ThreadID))
                            forumID = threadIDAndForumIDs[q.ThreadID];
                        else
                            continue;

                        query.Parameters.Clear();
                        query.CreateParameter<int>("@ThreadID", q.ThreadID, SqlDbType.Int);
                        query.CreateParameter<int>("@UserID", threadIDAndPostUserIDs[q.ThreadID], SqlDbType.Int);
                        query.CreateParameter<int>("@RewardCount", q.RewardCount, SqlDbType.Int);
                        query.CreateParameter<int>("@TotalReward", q.Reward, SqlDbType.Int);

                        if (autoFinalQuestionForumIDAndRewards.ContainsKey(forumID) == false)
                            autoFinalQuestionForumIDAndRewards.Add(forumID, new Dictionary<int, int>());

                        using (XSqlDataReader reader = query.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                int userID = reader.Get<int>("UserID");
                                int reward = reader.Get<int>("Reward");

                                if (autoFinalQuestionForumIDAndRewards[forumID].ContainsKey(userID))
                                {
                                    autoFinalQuestionForumIDAndRewards[forumID][userID] = autoFinalQuestionForumIDAndRewards[forumID][userID] + reward;
                                }
                                else
                                {
                                    autoFinalQuestionForumIDAndRewards[forumID].Add(userID, reward);
                                }
                            }
                        }
                        if (!autoFinalQuestionThreadIds.Contains(q.ThreadID))
                            autoFinalQuestionThreadIds.Add(q.ThreadID);
                    }

                    IsAutoFinalQuestion = false;
                }
                catch (Exception ex)
                {
                    IsAutoFinalQuestion = false;
                    throw ex;
                }
            }


        }