コード例 #1
0
 internal static Foresight.DataAccess.Wechat_LotteryActivityPrize[] GetActivityPrizeList(int activityID)
 {
     Foresight.DataAccess.Wechat_LotteryActivityPrize[] list = new Foresight.DataAccess.Wechat_LotteryActivityPrize[] { };
     InitData(activityID);
     if (sPrize.ContainsKey(activityID))
     {
         list = sPrize[activityID].Values.ToArray();
     }
     return(list);
 }
コード例 #2
0
        internal static LotteryCodeDefine CreateRecord(int activityID, string openID, out Foresight.DataAccess.Wechat_LotteryActivityRecord record, out Foresight.DataAccess.Wechat_LotteryActivityPrize prize, out string err, out int leftTime)
        {
            InitData(activityID);
            record   = null;
            prize    = null;
            err      = string.Empty;
            leftTime = 0;

            var activity = GetActivity(activityID);

            if (activity == null)
            {
                return(LotteryCodeDefine.ActivityNotExists);
            }

            DateTime timenow = DateTime.Now;

            if (activity.StartTime > timenow)
            {
                return(LotteryCodeDefine.NotBegin);
            }
            if (activity.EndTime < timenow)
            {
                return(LotteryCodeDefine.HasEnd);
            }


            if (!sRecords[activityID].ContainsKey(openID))
            {
                lock (sRecords[activityID])
                {
                    if (!sRecords[activityID].ContainsKey(openID))
                    {
                        sRecords[activityID].Add(openID, new List <Foresight.DataAccess.Wechat_LotteryActivityRecord>());
                    }
                }
            }

            var myRecords = sRecords[activityID][openID];

            lock (myRecords)
            {
                bool canjoin = CheckRecord(activityID, openID, out err, out leftTime);

                if (canjoin)
                {
                    leftTime--;

                    int prizeID = 0;
                    var queue   = sPrizeQueue[activityID];

                    lock (queue)
                    {
                        if (queue.Count > 0)
                        {
                            prizeID = (int)(queue.Pop());
                        }
                    }
                    if (prizeID > 0)
                    {
                        prize = sPrize[activityID][prizeID];
                        if (prize.RepeatTime > 1)                                               //可以重复中奖
                        {
                            if (myRecords.Count(p => p.PrizeID == prizeID) >= prize.RepeatTime) //超过允许中奖次数
                            {
                                prize = null;
                                lock (queue)
                                {
                                    queue.Push(prizeID);
                                }
                            }
                        }
                        else//不能重复中奖
                        {
                            if (myRecords.Count(p => p.PrizeID > 0 && sPrize[activityID][p.PrizeID].RepeatTime <= 1) > 0)//已经有中奖纪录
                            {
                                prize = null;
                                lock (queue)
                                {
                                    queue.Push(prizeID);
                                }
                            }
                        }
                    }

                    var newRecord = new Foresight.DataAccess.Wechat_LotteryActivityRecord()
                    {
                        ActivityID = activityID,
                        OpenID     = openID,
                        PrizeID    = prize == null ? 0 : prize.ID,
                        RecordTime = timenow,
                    };

                    newRecord.Save();

                    myRecords.Add(newRecord);

                    record = newRecord;


                    return(LotteryCodeDefine.Succeed);
                }
                else
                {
                    return(LotteryCodeDefine.HasRecord);
                }
            }
        }