public BonusNoticeInfo AddBonusNotify(string xml)
 {
     BonusNoticeInfo info = XmlAnalyzer.AnalyseXmlToCommunicationObject<BonusNoticeInfo>(xml);
     try
     {
         BonusEntity bonusEntity = new BonusEntity();
         bonusEntity.GameName = info._Body._BonusInfo._Issue.GameName;
         bonusEntity.IssuseNumber = info._Body._BonusInfo._Issue.Number;
         bonusEntity.BonusNumber = info._Body._BonusInfo.BonusNumber;
         bonusEntity.TotalItems = info._Body._BonusInfo.TotalItems;
         bonusEntity.TotalMoney = info._Body._BonusInfo.TotalMoney;
         bonusEntity.NoticeId = info.Id;
         bonusEntity.IsDistributed = false;
         using (ILHDBTran tran = BeginTran())
         {
             BonusManager bonusManager = new BonusManager(tran);
             bonusManager.AddBonus(bonusEntity);
             List<BonusDetailEntity> bonusDetailList = new List<BonusDetailEntity>();
             foreach (BonusMappingInfo.BonusItem bonusItem in info._Body._BonusInfo._BonusItemList)
             {
                 BonusDetailEntity detail = new BonusDetailEntity();
                 detail.TicketId = bonusItem.TicketId;
                 detail.BonusLevel = bonusItem.BonusLevel;
                 detail.PlayType = (int)bonusItem.PlayType;
                 detail.Money = bonusItem.Money;
                 detail.IsBombBonus = bonusItem.IsBombBonus;
                 detail.Size = bonusItem.Size;
                 detail.GameName = bonusEntity.GameName;
                 detail.IssuseNumber = bonusEntity.IssuseNumber;
                 bonusManager.AddBonusDetail(detail);
             }
             tran.Commit();
         }
         return info;
     }
     catch (Exception ex)
     {
         string errMsg = "添加返奖通知失败!" + xml;
         throw HandleException(LogCategory.Notice, errMsg, ex);
     }
 }
        public void DistributeBonus(string gameName, string issueNumber)
        {
            try
            {
                using (ILHDBTran tran = BeginTran())
                {
                    BonusManager bonusManger = new BonusManager(tran);
                    UserManager userManager = new UserManager(tran);

                    BonusEntity bonusEntity = bonusManger.GetBonus(gameName, issueNumber);
                    if (bonusEntity == null)
                    {
                        throw new Exception("要分派的奖期信息不存在 - " + gameName + ":" + issueNumber);
                    }
                    if (bonusEntity.IsDistributed)
                    {
                        throw new Exception("此奖期已经派奖 - " + gameName + ":" + issueNumber);
                    }
                    IList<BonusDetailEntity> bonusDetailList = bonusManger.GetBonusDetailList(gameName, issueNumber);
                    TicketManager ticketManager = new TicketManager(tran);
                    foreach (BonusDetailEntity bonusDetail in bonusDetailList)
                    {
                        TicketEntity ticket = ticketManager.GetTicket(bonusDetail.TicketId);
                        if (ticket != null)
                        {
                            BonusDistributeEntity bonusDistribute = new BonusDistributeEntity();
                            bonusDistribute.TicketId = bonusDetail.TicketId;
                            bonusDistribute.BonusLevel = bonusDetail.BonusLevel;
                            bonusDistribute.UserId = ticket.UserId;
                            bonusDistribute.GameName = bonusDetail.GameName;
                            bonusDistribute.IssuseNumber = bonusDetail.IssuseNumber;
                            bonusDistribute.PlayType = bonusDetail.PlayType;
                            bonusDistribute.IsBombBonus = bonusDetail.IsBombBonus;
                            bonusDistribute.BonusSize = bonusDetail.Size;
                            bonusDistribute.Money = bonusDetail.Money;

                            bonusManger.AddBonusDistribute(bonusDistribute);

                            UserBalanceEntity balanceEntity = userManager.GetBalance(ticket.UserId);
                            if (balanceEntity == null)
                            {
                                throw new Exception("异常 - 彩民的账户不存在 - " + ticket.UserId);
                            }
                            if (!balanceEntity.Balance.HasValue)
                            {
                                throw new Exception("异常 - 彩民的账户为空 - " + ticket.UserId);
                            }
                            balanceEntity.Balance += bonusDetail.Money;
                            userManager.ModifyBalance(balanceEntity);
                        }
                    }
                    bonusEntity.IsDistributed = true;
                    bonusManger.ModifyBonusDistrbite(bonusEntity);

                    tran.Commit();
                }
            }
            catch (Exception ex)
            {
                string errMsg = "派奖失败 - " + gameName + ":" + issueNumber;
                throw HandleException(LogCategory.Distribute, errMsg, ex);
            }
        }