private void GetWinRoleNum(List <int> value, out int no1Num, out int no2Num, out int no3Num, out List <KFBoCaoHistoryData> Hsitory)
 {
     no1Num  = 0;
     no2Num  = 0;
     no3Num  = 0;
     Hsitory = new List <KFBoCaoHistoryData>();
     lock (this.mutex)
     {
         foreach (List <KFBuyBocaiData> BuyDataList in this.RoleBuyDict.Values)
         {
             foreach (KFBuyBocaiData BuyData in BuyDataList)
             {
                 int        sameNum = 0;
                 List <int> tempList;
                 KFBoCaiDbManager.String2ListInt(BuyData.BuyValue, out tempList);
                 if (tempList.Count == value.Count)
                 {
                     for (int i = 0; i < value.Count; i++)
                     {
                         if (value[i] == tempList[i])
                         {
                             sameNum++;
                         }
                     }
                     KFBoCaoHistoryData HistoryData = new KFBoCaoHistoryData();
                     HistoryData.DataPeriods = this.OpenData.DataPeriods;
                     HistoryData.RoleID      = BuyData.RoleID;
                     HistoryData.ZoneID      = BuyData.ZoneID;
                     HistoryData.ServerID    = BuyData.ServerID;
                     HistoryData.RoleName    = BuyData.RoleName;
                     HistoryData.BuyNum      = BuyData.BuyNum;
                     if (5 == sameNum)
                     {
                         no1Num           += BuyData.BuyNum;
                         HistoryData.WinNo = 1;
                     }
                     else if (4 == sameNum)
                     {
                         no2Num           += BuyData.BuyNum;
                         HistoryData.WinNo = 2;
                     }
                     else
                     {
                         if (3 != sameNum)
                         {
                             continue;
                         }
                         no3Num           += BuyData.BuyNum;
                         HistoryData.WinNo = 3;
                     }
                     Hsitory.Add(HistoryData);
                 }
             }
         }
     }
 }
        public bool IsCanBuy(string buyValue, int buyNum, long DataPeriods)
        {
            bool result;

            if (this.Stage != BoCaiStageEnum.Stage_Buy || DataPeriods != this.OpenData.DataPeriods)
            {
                result = false;
            }
            else
            {
                List <int> value = new List <int>();
                KFBoCaiDbManager.String2ListInt(buyValue, out value);
                result = (value.Count == 5);
            }
            return(result);
        }
 public override void Thread()
 {
     try
     {
         lock (this.mutex)
         {
             if (BoCaiStageEnum.Stage_Ready < this.Stage && this.UpToDBOpenData.AllBalance != this.OpenData.AllBalance && this.OpenData.DataPeriods > 1L)
             {
                 this.SetUpToDBOpenData();
                 if (!KFBoCaiDbManager.InserOpenLottery(this.OpenData))
                 {
                     this.UpToDBOpenData.AllBalance = 0L;
                 }
             }
         }
     }
     catch (Exception ex)
     {
         LogManager.WriteLog(LogTypes.Exception, string.Format("[ljl_caidaxiao_猜数字]{0}", ex.ToString()), null, true);
     }
     if (BoCaiStageEnum.Stage_Open == this.Stage)
     {
         try
         {
             List <int> value  = new List <int>();
             int        no3Num = 0;
             if ((long)this.Config.ChuFaBiZhong <= this.OpenData.AllBalance && this.RoleBuyDict.Count > 0)
             {
                 int                   index   = Global.GetRandomNumber(0, this.RoleBuyDict.Count);
                 List <string>         keyList = this.RoleBuyDict.Keys.ToList <string>();
                 List <KFBuyBocaiData> buyList = this.RoleBuyDict[keyList[index]];
                 index = Global.GetRandomNumber(0, buyList.Count);
                 KFBoCaiDbManager.String2ListInt(buyList[index].BuyValue, out value);
             }
             else
             {
                 while (value.Count < 5)
                 {
                     value.Add(Global.GetRandomNumber(0, 10));
                 }
             }
             int no1Num;
             int no2Num;
             List <KFBoCaoHistoryData> Hsitory;
             this.GetWinRoleNum(value, out no1Num, out no2Num, out no3Num, out Hsitory);
             LogManager.WriteLog(LogTypes.Info, string.Format("[ljl_CaiShuZi_猜数字]猜数1等奖人数={0},二等奖={1},3等奖={2}", no1Num, no2Num, no3Num), null, true);
             long No1Money = 0L;
             long No2Money = 0L;
             long No3Money = 0L;
             lock (this.mutex)
             {
                 long no1Win = (long)((double)this.OpenData.AllBalance * this.Config.AnNiuList[0].Percent);
                 long no2Win = (long)((double)this.OpenData.AllBalance * this.Config.AnNiuList[1].Percent);
                 long no3Win = (long)((double)this.OpenData.AllBalance * this.Config.AnNiuList[2].Percent);
                 this.OpenData.SurplusBalance = this.OpenData.AllBalance;
                 if (no1Num > 0)
                 {
                     this.OpenData.SurplusBalance -= no1Win;
                     No1Money = no1Win / (long)no1Num;
                 }
                 if (no2Num > 0)
                 {
                     this.OpenData.SurplusBalance -= no2Win;
                     No2Money = no2Win / (long)no2Num;
                 }
                 if (no3Num > 0)
                 {
                     this.OpenData.SurplusBalance -= no3Win;
                     No3Money = no3Win / (long)no3Num;
                 }
                 this.OpenData.WinInfo   = string.Format("{0},{1},{2}", No1Money, No2Money, No3Money);
                 this.OpenData.strWinNum = KFBoCaiDbManager.ListInt2String(value);
                 if (!KFBoCaiDbManager.InserOpenLottery(this.OpenData))
                 {
                     LogManager.WriteLog(LogTypes.Error, "[ljl_CaiShuZi_猜数字]开始计算中奖了 KFBoCaiDbManager.InserOpenLottery(data) false", null, true);
                     this.OpenData.SurplusBalance = 0L;
                     this.OpenData.WinInfo        = "";
                     this.OpenData.strWinNum      = "";
                     return;
                 }
                 this.BoCaiWinHistoryList.Clear();
                 this.BoCaiWinHistoryList.AddRange(Hsitory);
                 base.SetOpenHistory(this.GetOpenLottery());
                 this.Stage = BoCaiStageEnum.Stage_End;
             }
             foreach (KFBoCaoHistoryData item in Hsitory)
             {
                 if (1 == item.WinNo)
                 {
                     item.WinMoney = (long)item.BuyNum * No1Money;
                 }
                 else if (2 == item.WinNo)
                 {
                     item.WinMoney = (long)item.BuyNum * No2Money;
                 }
                 else if (3 == item.WinNo)
                 {
                     item.WinMoney = (long)item.BuyNum * No3Money;
                 }
                 if (!KFBoCaiDbManager.InsertLotteryHistory(this.BoCaiType, item))
                 {
                     LogManager.WriteLog(LogTypes.Error, string.Format("[ljl_CaiShuZi_猜数字]插入中奖历史 false DataPeriods ={0}, name={1},id={2},WinNo={3},WinMoney={4}", new object[]
                     {
                         item.DataPeriods,
                         item.RoleName,
                         item.RoleID,
                         item.WinNo,
                         item.WinMoney
                     }), null, true);
                 }
             }
             if (!KFBoCaiDbManager.DelTableData("t_bocai_lottery_history", string.Format("DataPeriods < {0}", this.OpenData.DataPeriods)))
             {
                 LogManager.WriteLog(LogTypes.Error, string.Format("[ljl_CaiShuZi_猜数字] DelTableData  t_bocai_lottery_history false DataPeriods ={0}", this.OpenData.DataPeriods), null, true);
             }
             base.KFSendPeriodsData();
             base.KFSendStageData();
         }
         catch (Exception ex)
         {
             this.Stage = BoCaiStageEnum.Stage_End;
             LogManager.WriteLog(LogTypes.Exception, string.Format("[ljl_CaiShuZi_猜数字]{0}", ex.ToString()), null, true);
         }
     }
 }