Esempio n. 1
0
        protected void dlEnroll_ItemCommand(object source, DataListCommandEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                UserCookiesInfo user = BllOperationAboutUser.GetUserCookiesInfo();

                DalOperationAboutGameDrawList dal = new DalOperationAboutGameDrawList();
                if (e.CommandName == "draw")
                {
                    int gameCategoryId = int.Parse(e.CommandArgument.ToString().Split(",".ToCharArray())[0]);
                    int gameTypeId = int.Parse(e.CommandArgument.ToString().Split(",".ToCharArray())[1]);

                    DalOperationAboutGameCategory dalgc = new DalOperationAboutGameCategory();
                    DataTable _dt = dalgc.CheckIsOpenDrawByGameCategoryId(gameCategoryId).Tables[0];
                    //首先判断当前届次和活动类型是否已经开放抽签
                    if (_dt.Rows.Count == 0)
                    {
                        Javascript.GoHistory(-1, "参数错误:(", Page);
                        return;
                    }

                    if (_dt.Rows[0]["isOpenDraw"].ToString().Trim() != "1")
                    {
                        Javascript.GoHistory(-1, "当前活动届次和活动类型暂未开放抽签:(", Page);
                        return;
                    }

                    //其次判断是否已经抽过签
                    if (dal.Exists(user.userNo, gameCategoryId, gameTypeId) > 0)
                    {
                        Javascript.GoHistory(-1, "当前活动届次和活动类型已经抽过签,请勿重复抽签哟:)", Page);
                        return;
                    }
                    //使用事务进行抽签控制
                    using (TransactionScope scope = new TransactionScope())
                    {
                        try
                        {
                            DalOperationAboutGameType dalgt = new DalOperationAboutGameType();
                            //首先获取组容量
                            int _groupCapability = int.Parse(dalgt.GetGroupCapabilityByGameTypeId(gameCategoryId, gameTypeId).Tables[0].Rows[0]["groupCapability"].ToString().Trim());
                            //其次获取总报名人数
                            DalOperationAboutGameEnrollList dalel = new DalOperationAboutGameEnrollList();
                            int _enrollListCount = int.Parse(dalel.GetEnrollListCountByGameCategoryIdAndGameTypeId(gameCategoryId, gameTypeId).Tables[0].Rows[0][0].ToString().Trim());

                            //获取分组数
                            int groupMod = _enrollListCount % _groupCapability;

                            int groupCount = 0;

                            if (groupMod == 0)
                            {
                                groupCount = _enrollListCount / _groupCapability;
                            }
                            else
                            {
                                groupCount = (_enrollListCount / _groupCapability) + 1;
                            }

                            //先判断需要几个字母
                            string characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
                            //所需要使用的字母个数
                            string usedCharacters = characters.Substring(0, groupCount);
                            //Response.Write(usedCharacters.Length);

                            List<string> listGroupNumAndIndex = new List<string>();

                            List<string> listNotUsedGroupNumAndIndex = new List<string>();

                            for (int i = 0; i < usedCharacters.Length; i++)
                            {
                                for (int j = 0; j < _groupCapability; j++)
                                {
                                    //最后一组编号需要连续,因此需要进行特殊处理
                                    if (groupMod != 0)
                                    {
                                        //访问到最后一组
                                        if (i == usedCharacters.Length - 1)
                                        {
                                            if (groupMod >= j + 1)
                                            {
                                                //Response.Write(usedCharacters.Substring(i, 1) + (j + 1).ToString() + "ss<br/>");
                                                listGroupNumAndIndex.Add(usedCharacters.Substring(i, 1) + (j + 1).ToString());
                                            }
                                        }
                                        else
                                        {
                                            listGroupNumAndIndex.Add(usedCharacters.Substring(i, 1) + (j + 1).ToString());
                                        }
                                    }
                                    else
                                    {
                                        //Response.Write(usedCharacters.Substring(i, 1) + (j + 1).ToString() + "aa<br/>");
                                        listGroupNumAndIndex.Add(usedCharacters.Substring(i, 1) + (j + 1).ToString());
                                    }
                                }
                            }
                            //Response.Write(listGroupNumAndIndex.Count + "<br/>");

                            //获取已经使用的编号列表
                            DataTable _dtGroupNumAndIndex = dal.GetGroupNumAndIndexByGameCategoryIdAndGameTypeId(gameCategoryId, gameTypeId).Tables[0];

                            List<string> listGroupNumAndIndexCopy = new List<string>();

                            foreach (string _item in listGroupNumAndIndex)
                            {
                                //Response.Write(_item + "<br/>");
                                listGroupNumAndIndexCopy.Add(_item);
                            }

                            foreach (string _item in listGroupNumAndIndex)
                            {
                                for (int j = 0; j < _dtGroupNumAndIndex.Rows.Count; j++)
                                {
                                    if (_dtGroupNumAndIndex.Rows[j]["groupNumAndIndex"].ToString().Trim() == _item)
                                    {
                                        //Response.Write(_item + "<br/>");
                                        //移除已使用的编号
                                        listGroupNumAndIndexCopy.Remove(_item);
                                    }
                                }
                            }

                            //Response.Write(listGroupNumAndIndexCopy.Count + "<br/>");

                            //为使效果更随机,再次对编号数组使用随机方法打乱
                            while (listGroupNumAndIndexCopy.Count > 0)
                            {
                                Random random = new Random();
                                int _index = int.Parse(random.NextDouble().ToString().Substring(2, 4)) % listGroupNumAndIndexCopy.Count;

                                listNotUsedGroupNumAndIndex.Insert(0, listGroupNumAndIndexCopy[_index]);

                                listGroupNumAndIndexCopy.RemoveAt(_index);
                            }

                            //Response.Write(groupMod + "groupMod<br/>");

                            //Response.Write(groupCount + "groupCount<br/>");

                            //Response.Write(listNotUsedGroupNumAndIndex.Count + "listNotUsedGroupNumAndIndex<br/>");

                            Random random1 = new Random();

                            int _index1 = int.Parse(random1.NextDouble().ToString().Substring(2, 4)) % listNotUsedGroupNumAndIndex.Count;
                            //Response.Write(_index1 + "<br/>");
                            //Response.End();

                            //得到随机取到的编号值
                            string _result = string.Empty;

                            _result = listNotUsedGroupNumAndIndex[_index1];

                            if (string.IsNullOrEmpty(_result))
                            {
                                Javascript.GoHistory(-1, "抽签失败:(,请重试", Page);
                                return;
                            }

                            dal.Add(new GameDrawList { gameCategoryId = gameCategoryId, gameTypeId = gameTypeId, groupIndex = int.Parse(_result.Substring(1, 1)), groupNum = _result.Substring(0, 1), updateTime = DateTime.Now, teacherNo = user.userNo });
                            scope.Complete();
                            Javascript.AlertAndRedirect("抽签成功!", "/Administrator/EnrollManage.aspx?fragment=2&page=" + pageIndex + "&gameCategoryId=" + gameCategoryId + "&gameTypeId=" + gameTypeId, Page);
                        }
                        catch (System.Exception ex)
                        {
                            MongoDBLog.LogRecord(ex);
                            Javascript.GoHistory(-1, "抽签失败:(,请重试", Page);
                        }
                    }
                }
            }
        }