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); }
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); } } }