Пример #1
0
        public Issuse_QueryInfo QueryIssuseInfo(string gameCode, string gameType, string issuseNumber)
        {
            var issuse = new LotteryGameManager().QueryGameIssuseByKey(gameCode, gameType, issuseNumber);

            if (issuse == null)
            {
                return new Issuse_QueryInfo {
                           Status = IssuseStatus.OnSale
                }
            }
            ;
            return(new Issuse_QueryInfo
            {
                CreateTime = issuse.CreateTime,
                GameCode_IssuseNumber = issuse.GameCode_IssuseNumber,
                Game = new GameInfo
                {
                    //DisplayName = issuse.Game.DisplayName,
                    GameCode = issuse.GameCode
                },
                GatewayStopTime = issuse.GatewayStopTime,
                IssuseNumber = issuse.IssuseNumber,
                LocalStopTime = issuse.LocalStopTime,
                OfficialStopTime = issuse.OfficialStopTime,
                StartTime = issuse.StartTime,
                Status = issuse.Status,
                WinNumber = issuse.WinNumber,
            });
        }
Пример #2
0
        public void IssuseOpen(string gameCode, string issuseNumber)
        {
            using (var biz = new GameBizBusinessManagement())
            {
                biz.BeginTran();

                var manager = new LotteryGameManager();
                var issuse  = manager.QueryGameIssuse(gameCode, issuseNumber);
                if (!string.IsNullOrEmpty(issuse.WinNumber))
                {
                    throw new Exception(string.Format("{0}第{1}期已有开奖号", gameCode, issuseNumber));
                }
                if (issuse.Status != IssuseStatus.OnSale)
                {
                    throw new Exception(string.Format("{0}第{1}期奖期状态不正确 -应该是OnSale,而实际是:  {2}", gameCode, issuseNumber, issuse.Status.ToString()));
                }
                if (issuse.Status == IssuseStatus.Awarded)
                {
                    throw new Exception("已开奖");
                }

                issuse.Status = IssuseStatus.Awarded;
                manager.UpdateGameIssuse(issuse);



                biz.CommitTran();
            }
        }
        public static LotteryIssuse_QueryInfoCollection QueryAllGameCurrentIssuse(bool byOfficial)
        {
            var coll = new LotteryIssuse_QueryInfoCollection();
            var list = new LotteryGameManager().QueryAllGameCurrentIssuse(byOfficial);

            coll.AddRange(list);
            return(coll);
        }
Пример #4
0
        public void AddGame(GameInfo info)
        {
            var manager = new LotteryGameManager();

            manager.AddLotteryGame(new LotteryGame
            {
                DisplayName  = info.DisplayName,
                GameCode     = info.GameCode,
                EnableStatus = EnableStatus.Enable,
            });
        }
Пример #5
0
        /// <summary>
        /// 返回彩种状态
        /// </summary>
        public EnableStatus LotteryGameToStatus(string gameCode)
        {
            var manager = new LotteryGameManager();
            var entity  = manager.QueryLotteryGame(gameCode);

            if (entity == null)
            {
                throw new Exception("没有查到该彩种!");
            }
            return(entity.EnableStatus);
        }
Пример #6
0
        public void AddGameType(GameTypeInfo info)
        {
            var manager = new LotteryGameManager();

            manager.AddLotteryGameType(new LotteryGameType
            {
                DisplayName  = info.DisplayName,
                EnableStatus = EnableStatus.Enable,
                Game         = new LotteryGameManager().LoadGame(info.Game.GameCode),
                GameType     = info.GameType,
                GameTypeId   = string.Format("{0}|{1}", info.Game.GameCode, info.GameType),
            });
        }
Пример #7
0
        private void CheckDisableGame(string gameCode, string gameType)
        {
            var manager = new LotteryGameManager();
            var entity  = manager.QueryLotteryGame(gameCode);

            if (entity == null)
            {
                throw new Exception("没有查到该彩种!");
            }
            var status = entity.EnableStatus;

            // var status = new GameBusiness().LotteryGameToStatus(gameCode);
            if (status != (int)EnableStatus.Enable)
            {
                throw new Exception("彩种暂时不能投注");
            }
        }
Пример #8
0
        /// <summary>
        /// 更新彩种状态
        /// </summary>
        public void UpdateLotteryGame(string gameCode, int enableStatus)
        {
            var manager = new LotteryGameManager();
            var entity  = manager.QueryLotteryGame(gameCode);

            if (entity == null)
            {
                throw new Exception("没有查到该彩种!");
            }
            entity.EnableStatus = (EnableStatus)enableStatus;
            if (_gameList == null)
            {
                _gameList = new GameInfoCollection();
            }
            _gameList.Clear();
            manager.UpdateLotteryGame(entity);

            //清空缓存
            BusinessHelper.ReloadLotteryGame();
        }
Пример #9
0
        public Issuse_QueryInfo QueryCurrentIssuseInfoWithOffical(string gameCode)
        {
            var entity = new LotteryGameManager().QueryCurrentIssuseWithOffical(gameCode);

            if (entity == null)
            {
                return(null);
            }
            var info = new Issuse_QueryInfo {
                Status = IssuseStatus.OnSale
            };

            ObjectConvert.ConverEntityToInfo <GameIssuse, Issuse_QueryInfo>(entity, ref info);
            var gameInfo = new GameInfo();

            gameInfo.GameCode = entity.GameCode;
            //ObjectConvert.ConverEntityToInfo<LotteryGame, GameInfo>(entity.Game, ref gameInfo);
            info.Game = gameInfo;
            return(info);
        }
Пример #10
0
        public void AddIssuseInfo(Issuse_AddInfo info)
        {
            var manager = new LotteryGameManager();

            if (manager.GetGameIssuse(string.Format("{0}|{1}", info.Game.GameCode, info.IssuseNumber)) == null)
            {
                manager.AddGameIssuse(new GameIssuse
                {
                    CreateTime            = DateTime.Now,
                    GameCode              = info.Game.GameCode,
                    GameCode_IssuseNumber = string.Format("{0}|{1}", info.Game.GameCode, info.IssuseNumber),
                    GatewayStopTime       = info.GatewayStopTime,
                    IssuseNumber          = info.IssuseNumber,
                    LocalStopTime         = info.LocalStopTime,
                    OfficialStopTime      = info.OfficialStopTime,
                    StartTime             = info.StartTime,
                    Status = info.Status,
                });
            }
        }
Пример #11
0
        public void IssusePrize(string gameCode, string issuseNumber, string winNumber)
        {
            using (var biz = new GameBizBusinessManagement())
            {
                biz.BeginTran();

                LotteryGameManager manager = new LotteryGameManager();
                var issuse = manager.QueryGameIssuse(gameCode, issuseNumber);
                if (issuse.Status == IssuseStatus.Stopped)
                {
                    throw new Exception(string.Format("{0}第{1}期奖期状态不正确 - 不能是{2}", gameCode, issuseNumber, issuse.Status.ToString()));
                }
                //throw new Exception(string.Format("{0}第{1}期奖期状态不正确 -应该是Awarded,而实际是:  {2}", gameCode, issuseNumber, issuse.Status.ToString()));

                issuse.WinNumber = winNumber;
                issuse.AwardTime = DateTime.Now;
                issuse.Status    = IssuseStatus.Stopped;
                manager.UpdateGameIssuse(issuse);

                biz.CommitTran();
            }
        }
Пример #12
0
        /// <summary>
        /// 最号订单处理
        /// </summary>
        /// <returns></returns>
        public static string WriteChaseOrderToDb()
        {
            //  var logList = new List<string>();
            //  logList.Add("<---------开始写入追号订单数据到数据库 ");
            ////  Console.WriteLine("<---------开始写入追号订单数据到数据库 ");


            var maxDay    = 5;
            var gameTypes = new LotteryGameManager().QueryEnableGameTypes();

            for (int i = 0; i < maxDay; i++)
            {
                var now  = DateTime.Today.AddDays(-i);
                var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "CacheData", "ChaseOrder", now.ToString("yyyy-MM-dd"));
                //   logList.Add(string.Format("查询目录:{0} ", path));

                //  Console.WriteLine(string.Format("查询目录:{0} ", path));
                if (!Directory.Exists(path))
                {
                    continue;
                }

                var sportsManager = new Sports_Manager();
                var schemeManager = new SchemeManager();

                //日期下面只有一级文件
                var fileArray = Directory.GetFiles(path);
                // logList.Add(string.Format("文件数:{0}个 ", fileArray.Length));
                // Console.WriteLine(string.Format("文件数:{0}个 ", fileArray.Length));
                foreach (var item in fileArray)
                {
                    var json         = File.ReadAllText(item, Encoding.UTF8);
                    var chaseOrderId = item.Substring(item.LastIndexOf("\\") + 1).Replace(".json", "");
                    var order        = JsonSerializer.Deserialize <LotteryBettingInfo>(json);

                    order.IssuseNumberList.Sort((x, y) =>
                    {
                        return(x.IssuseNumber.CompareTo(y.IssuseNumber));
                    });

                    // logList.Add(string.Format("开始处理{0} ", chaseOrderId));
                    //  Console.WriteLine(string.Format("开始处理{0} ", chaseOrderId));
                    //一个追号订单,保存到数据库
                    try
                    {
                        var chaseSchemeList = sportsManager.QueryAllLotterySchemeByKeyLine(chaseOrderId);
                        //   Console.WriteLine(string.Format("开始处理1{0} ", chaseOrderId));
                        var schemeIdArray = chaseSchemeList.Select(p => p.SchemeId).ToArray();
                        //   Console.WriteLine(string.Format("开始处理2{0} ", chaseOrderId));
                        //查询三个订单表数据
                        //  string log1 = string.Join(",", schemeIdArray);
                        //   Console.WriteLine(string.Format("订单号****{0} ", log1));
                        var orderDetailList = schemeManager.QueryOrderDetailListBySchemeId(schemeIdArray);
                        //   Console.WriteLine(string.Format("开始处理3{0} ", chaseOrderId));
                        var orderRunningList = sportsManager.QueryOrderRunningBySchemeIdArray(schemeIdArray);
                        //  Console.WriteLine(string.Format("开始处理4{0} ", chaseOrderId));
                        var orderComplateList = sportsManager.QueryOrderComplateBySchemeIdArray(schemeIdArray);
                        //  Console.WriteLine(string.Format("开始处理5{0} ", chaseOrderId));
                        if (chaseSchemeList.Count == orderDetailList.Count && chaseSchemeList.Count == orderRunningList.Count + orderComplateList.Count)
                        {
                            //订单数据正常,删除订单文件
                            //logList.Add("订单数据正常,删除订单文件 ");
                            //   Console.WriteLine("订单数据正常,删除订单文件 ");
                            File.Delete(item);
                            continue;
                        }

                        var gameTypeList = new List <GameTypeInfo>();
                        foreach (var code in order.AnteCodeList)
                        {
                            var t = gameTypes.FirstOrDefault(a => a.Game.GameCode == order.GameCode && a.GameType == code.GameType.ToUpper());
                            if (t != null && !gameTypeList.Contains(t))
                            {
                                gameTypeList.Add(t);
                            }
                        }
                        var gameType = string.Join(",", (from g in gameTypeList group g by g.GameType into g select g.Key).ToArray());

                        //计算OrderDetail表没有的数据并写入
                        foreach (var scheme in chaseSchemeList)
                        {
                            var orderDetail = orderDetailList.FirstOrDefault(p => p.SchemeId == scheme.SchemeId);
                            if (orderDetail == null)
                            {
                                // logList.Add("写入orderDetail ");
                                // Console.WriteLine("写入orderDetail ");
                                var currentIssuse = order.IssuseNumberList.FirstOrDefault(p => p.IssuseNumber == scheme.IssuseNumber);

                                schemeManager.AddOrderDetail(new C_OrderDetail
                                {
                                    SchemeId              = scheme.SchemeId,
                                    AddMoney              = 0M,
                                    AfterTaxBonusMoney    = 0M,
                                    AgentId               = string.Empty,
                                    Amount                = currentIssuse == null ? 1 : currentIssuse.Amount,
                                    BetTime               = DateTime.Now,
                                    BonusAwardsMoney      = 0M,
                                    BonusStatus           = (int)BonusStatus.Waitting,
                                    ComplateTime          = null,
                                    CreateTime            = DateTime.Now,
                                    CurrentBettingMoney   = 0M,
                                    CurrentIssuseNumber   = currentIssuse == null ? string.Empty : currentIssuse.IssuseNumber,
                                    GameCode              = order.GameCode,
                                    GameType              = gameType,
                                    GameTypeName          = BettingHelper.FormatGameType(order.GameCode, gameType), //FormatGameType(order.GameCode, gameType),
                                    IsAppend              = order.IsAppend,
                                    IsVirtualOrder        = false,
                                    PlayType              = string.Empty,
                                    PreTaxBonusMoney      = 0M,
                                    ProgressStatus        = (int)ProgressStatus.Waitting,
                                    RealPayRebateMoney    = 0M,
                                    RedBagAwardsMoney     = 0M,
                                    RedBagMoney           = 0M,
                                    SchemeBettingCategory = (int)SchemeBettingCategory.GeneralBetting,
                                    SchemeSource          = (int)order.SchemeSource,
                                    SchemeType            = (int)SchemeType.ChaseBetting,
                                    StartIssuseNumber     = string.Empty,
                                    StopAfterBonus        = order.StopAfterBonus,
                                    TicketStatus          = (int)TicketStatus.Waitting,
                                    TicketTime            = null,
                                    TotalIssuseCount      = order.IssuseNumberList.Count,
                                    TotalMoney            = currentIssuse.IssuseTotalMoney,
                                    TotalPayRebateMoney   = 0M,
                                    UserId                = order.UserId,
                                });
                            }
                        }

                        //计算OrderRunning表没有的数据并写入
                        foreach (var scheme in chaseSchemeList)
                        {
                            var runningOrder = orderRunningList.FirstOrDefault(p => p.SchemeId == scheme.SchemeId);
                            var comlateOrder = orderComplateList.FirstOrDefault(p => p.SchemeId == scheme.SchemeId);
                            if (runningOrder == null && comlateOrder == null)
                            {
                                //  logList.Add("写入runningOrder ");
                                // Console.WriteLine("写入runningOrder ");
                                var currentIssuse = order.IssuseNumberList.FirstOrDefault(p => p.IssuseNumber == scheme.IssuseNumber);
                                sportsManager.AddSports_Order_Running(new C_Sports_Order_Running
                                {
                                    AfterTaxBonusMoney = 0M,
                                    AgentId            = string.Empty,
                                    Amount             = currentIssuse == null ? 1 : currentIssuse.Amount,
                                    Attach             = string.Empty,

                                    BonusStatus           = (int)BonusStatus.Waitting,
                                    CanChase              = false,
                                    IsVirtualOrder        = false,
                                    IsPayRebate           = false,
                                    RealPayRebateMoney    = 0M,
                                    TotalPayRebateMoney   = 0M,
                                    CreateTime            = DateTime.Now,
                                    GameCode              = order.GameCode,
                                    GameType              = gameType,
                                    IssuseNumber          = currentIssuse == null ? string.Empty : currentIssuse.IssuseNumber,
                                    PlayType              = string.Empty,
                                    PreTaxBonusMoney      = 0M,
                                    ProgressStatus        = (int)ProgressStatus.Waitting,
                                    SchemeId              = scheme.SchemeId,
                                    SchemeType            = (int)SchemeType.ChaseBetting,
                                    SchemeBettingCategory = (int)SchemeBettingCategory.GeneralBetting,
                                    TicketId              = string.Empty,
                                    TicketLog             = string.Empty,
                                    TicketStatus          = (int)TicketStatus.Waitting,
                                    TotalMatchCount       = 0,
                                    TotalMoney            = currentIssuse.IssuseTotalMoney,
                                    SuccessMoney          = 0M,
                                    UserId              = order.UserId,
                                    StopTime            = DateTime.Now,
                                    SchemeSource        = (int)SchemeSource.Web,
                                    BetCount            = 0,
                                    BonusCount          = 0,
                                    HitMatchCount       = 0,
                                    RightCount          = 0,
                                    Error1Count         = 0,
                                    Error2Count         = 0,
                                    MaxBonusMoney       = 0,
                                    MinBonusMoney       = 0,
                                    Security            = (int)TogetherSchemeSecurity.Public,
                                    TicketGateway       = string.Empty,
                                    TicketProgress      = 1M,
                                    BetTime             = DateTime.Now,
                                    ExtensionOne        = string.Format("{0}{1}", "3X1_", (int)order.ActivityType),
                                    QueryTicketStopTime = DateTime.Now.AddMinutes(1).ToString("yyyyMMddHHmm"),
                                    IsAppend            = false,
                                    RedBagMoney         = 0,
                                    IsSplitTickets      = false,
                                    TicketTime          = null,
                                });
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        //  logList.Add(string.Format("保存追号订单数据失败:{0}", ex.ToString()));
                        // Console.WriteLine(string.Format("保存追号订单数据失败:{0}", ex.ToString()));
                    }
                }
            }
            //写入日志
            // logList.Add("本次处理全部完成----------> ");
            // Console.WriteLine("本次处理全部完成----------> ");

            //   string log= string.Join(Environment.NewLine, logList.ToArray());
            //  // Console.WriteLine(log);
            ////   string log = Common.JSON.JsonHelper.Serialize(logList);
            //   Log4Log.Info( "追号消息***", new Exception(log));

            return("");
        }
Пример #13
0
        static void Main(string[] args)
        {
            string consul = ConfigHelper.AllConfigInfo["ConsulSettings"]["IpAddrs"].ToString();
            string Token  = ConfigHelper.AllConfigInfo["ConsulSettings"]["Token"].ToString();

            JToken RebbitMqSettings        = ConfigHelper.AllConfigInfo["RebbitMqSettings"];
            JToken HostSettings            = ConfigHelper.AllConfigInfo["HostSettings"];
            string Sports_SchemeJobSeconds = ConfigHelper.AllConfigInfo["Sports_SchemeJobSeconds"].ToString();
            var    config = new ConfigInfo(consul, reloadOnChange: true);

            config.Token = Token;
            //JToken ORMSettings = ConfigHelper.AllConfigInfo["ORMSettings"];
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            var host = new ServiceHostBuilder()
                       // .CaptureStartupErrors(true),
                       .RegisterServices(builder =>
            {
                builder.AddMicroService(option =>
                {
                    option.AddServiceRuntime()
                    .AddRelateService()
                    .AddConfigurationWatch()
                    //option.UseZooKeeperManager(new ConfigInfo("127.0.0.1:2181"));
                    .UseConsulManager(config)
                    .UseDotNettyTransport()
                    //.UseRabbitMQTransport()
                    //.AddRabbitMQAdapt()

                    // .AddCache()
                    //.UseKafkaMQTransport(kafkaOption =>
                    //{
                    //    kafkaOption.Servers = "127.0.0.1";
                    //    kafkaOption.LogConnectionClose = false;
                    //    kafkaOption.MaxQueueBuffering = 10;
                    //    kafkaOption.MaxSocketBlocking = 10;
                    //    kafkaOption.EnableAutoCommit = false;
                    //})
                    //.AddKafkaMQAdapt()
                    //.UseProtoBufferCodec()
                    .UseMessagePackCodec();
                    builder.Register(p => new CPlatformContainer(ServiceLocator.Current));
                });
            })
                       //.SubscribeAt()
                       // .UseLog4net(LogLevel.Error, "Config/log4net.config")
                       // .UseNLog(LogLevel.Error, "Config/NLog.config")
                       .UseLog4net("Config/log4net.config")

                       .UseServer(options =>
            {
                options.Token = "True";
                options.ExecutionTimeoutInMilliseconds = 30000;

                options.MaxConcurrentRequests = 2000;
            })
                       // .UseServiceCache()
                       //.Configure(build =>
                       //build.AddEventBusJson(RebbitMqSettings))
                       .Configure(build =>
                       //build.AddCacheFile("cacheSettings.json", optional: false, reloadOnChange: true))
                       //  .Configure(build =>
                                  build.AddCPlatformJSON(HostSettings))
                       .UseProxy()
                       .UseStartup <Startup>()
                       .Build();



            //var list = JsonHelper.Deserialize<List<KaSon.FrameWork.ORM.OrmConfigInfo>>(ORMSettings.ToString());
            //DbProvider.InitConfigJson(list);

            // InitConfigInfo.logFactory = ServiceLocator.GetService<ILoggerProvider>();



            using (host.Run())
            {
                #region 初始化配置
                InitConfigInfo.logFactory = ServiceLocator.GetService <ILoggerFactory>();

                #endregion

                Console.WriteLine($"服务端启动成功,{DateTime.Now}。");
                AutoTaskServices.AutoCaheData(int.Parse(Sports_SchemeJobSeconds));
            }
            //初始化内存期号 k_todo,可用彩种类型,执行一次
            LotteryGameManager lotGm = new LotteryGameManager();
            lotGm.StartInitData();
            //清空打印
            ConsoleHelper.Clear();
            //这个要保留,认主线程一直运行
            Console.ReadLine();
        }
Пример #14
0
        public DateTime CheckGeneralBettingMatch(Sports_Manager sportsManager, string gameCode, string gameType, string playType, List <Sports_AnteCodeInfo> codeList, string issuseNumber, SchemeBettingCategory?bettingCategory = null)
        {
            if (gameCode == "BJDC")
            {
                var matchIdArray = (from l in codeList select string.Format("{0}|{1}", issuseNumber, l.MatchId)).Distinct().ToArray();
                var matchList    = sportsManager.QueryBJDCSaleMatchCount(matchIdArray);
                if (gameType.ToUpper() == "SF")
                {
                    var SFGGMatchList = sportsManager.QuerySFGGSaleMatchCount(matchIdArray);

                    if (SFGGMatchList.Count != matchIdArray.Length)
                    {
                        throw new LogicException("所选比赛中有停止销售的比赛。");
                    }
                    BettingHelper.CheckPrivilegesType_BJDC(gameCode, gameType, playType, issuseNumber, codeList, matchList);
                    return(SFGGMatchList.Min(m => m.BetStopTime));
                }
                else
                {
                    if (matchList.Count != matchIdArray.Length)
                    {
                        throw new LogicException("所选比赛中有停止销售的比赛。");
                    }
                    BettingHelper.CheckPrivilegesType_BJDC(gameCode, gameType, playType, issuseNumber, codeList, matchList);
                    return(matchList.Min(m => m.LocalStopTime));
                }
                //if (matchList.Count != matchIdArray.Length && gameType != "HH")
                //    throw new ArgumentException("所选比赛中有停止销售的比赛。");
            }
            if (gameCode == "JCZQ")
            {
                var matchIdArray = (from l in codeList select l.MatchId).Distinct().ToArray();
                var matchList    = sportsManager.QueryJCZQSaleMatchCount(matchIdArray);
                //if (matchList.Count != matchIdArray.Length && gameType != "HH")
                //    throw new ArgumentException("所选比赛中有停止销售的比赛。");
                if (matchList.Count != matchIdArray.Length)
                {
                    throw new LogicException("所选比赛中有停止销售的比赛。");
                }
                //var matchResultList = sportsManager.QueryJCZQMatchResult(matchIdArray);
                //if (matchResultList.Count > 0)
                //    throw new ArgumentException(string.Format("所选比赛中包含结束的比赛:{0}", string.Join(",", matchResultList.Select(p => p.MatchId).ToArray())));

                BettingHelper.CheckPrivilegesType_JCZQ(gameCode, gameType, playType, codeList, matchList);

                //if (playType == "1_1")
                if (bettingCategory != null && bettingCategory.Value == SchemeBettingCategory.SingleBetting)
                {
                    return(matchList.Min(m => m.DSStopBettingTime));
                }
                return(matchList.Min(m => m.FSStopBettingTime));
            }
            if (gameCode == "JCLQ")
            {
                var matchIdArray = (from l in codeList select l.MatchId).Distinct().ToArray();
                var matchList    = sportsManager.QueryJCLQSaleMatchCount(matchIdArray);
                //if (matchList.Count != matchIdArray.Length && gameType != "HH")
                //    throw new ArgumentException("所选比赛中有停止销售的比赛。");
                if (matchList.Count != matchIdArray.Length)
                {
                    throw new LogicException("所选比赛中有停止销售的比赛。");
                }
                var matchResultList = sportsManager.QueryJCLQMatchResult(matchIdArray);
                if (matchResultList.Count > 0)
                {
                    throw new LogicException(string.Format("所选比赛中包含结束的比赛:{0}", string.Join(",", matchResultList.Select(p => p.MatchId).ToArray())));
                }

                BettingHelper.CheckPrivilegesType_JCLQ(gameCode, gameType, playType, codeList, matchList);

                //if (playType == "1_1")
                if (bettingCategory != null && bettingCategory.Value == SchemeBettingCategory.SingleBetting)
                {
                    return(matchList.Min(m => m.DSStopBettingTime));
                }
                return(matchList.Min(m => m.FSStopBettingTime));
            }
            if (gameCode == "CTZQ")
            {
                var issuse = new LotteryGameManager().QueryGameIssuseByKey(gameCode, gameType, issuseNumber);
                if (issuse == null)
                {
                    throw new LogicException(string.Format("{0},{1}奖期{2}不存在", gameCode, gameType, issuseNumber));
                }
                if (issuse.LocalStopTime < DateTime.Now)
                {
                    throw new LogicException(string.Format("{0},{1}奖期{2}结束时间为{3}", gameCode, gameType, issuseNumber, issuse.LocalStopTime.ToString("yyyy-MM-dd HH:mm")));
                }
                return(issuse.LocalStopTime);
            }
            //其它数字彩
            var currentIssuse = new LotteryGameManager().QueryGameIssuseByKey(gameCode, gameCode == "CTZQ" ? gameType : string.Empty, issuseNumber);

            if (currentIssuse == null)
            {
                throw new LogicException(string.Format("{0},{1}奖期{2}不存在", gameCode, gameType, issuseNumber));
            }
            if (currentIssuse.LocalStopTime < DateTime.Now)
            {
                throw new LogicException(string.Format("{0},{1}奖期{2}结束时间为{3}", gameCode, gameType, issuseNumber, currentIssuse.LocalStopTime.ToString("yyyy-MM-dd HH:mm")));
            }
            return(currentIssuse.LocalStopTime);
        }
        public void PrizeIssuse_AfterTranCommit(string gameCode, string issuseNumber, string winNumber, decimal prevTotalMoney, decimal afterTotalMoney)
        {
            var log = Common.Log.LogWriterGetter.GetLogWriter();

            log.Write("合买战绩更新-", "。。。", Common.Log.LogType.Information, "", "彩种:" + gameCode + "期号:" + issuseNumber);
            try
            {
                var manager        = new SchemeManager();
                var bonusManager   = new BonusManager();
                var lotteryManager = new LotteryGameManager();
                //主表SchemeId
                var togetherMain = manager.QueryTogetherMain(gameCode, issuseNumber);
                var business     = new TogetherBusiness();

                //合买中奖数
                //成功提升战绩数
                var winCount      = 0;
                var beedingsCount = 0;
                foreach (var item in togetherMain)
                {
                    var winMoney = 0M;
                    //查询战绩
                    var togetherBeedings = manager.QueryBeedingsByGame(item.CreateUser.UserId, item.Game.GameCode);
                    //
                    //    log.Write("查询主表", "", Common.Log.LogType.Information, "", "FailCount:" + togetherBeedings.FailCount + ";FailWinCount:" + togetherBeedings.FailWinCount + ";FailBeedingsCount:" + togetherBeedings.FailWinCount + ";FailBeedings" + togetherBeedings.FailBeedings);
                    int amount = 0;
                    //得到倍数
                    var bettingIssuse = manager.QueryTempBettingIssuse(item.SchemeId, issuseNumber);
                    if (bettingIssuse == null)
                    {
                        amount = manager.QueryBettingIssuse(item.SchemeId, issuseNumber).Amount;
                    }
                    else
                    {
                        amount = bettingIssuse.Amount;
                    }
                    manager.QueryAnteCodeBySchemeId(item.SchemeId).ForEach(code =>
                    {
                        var analyzer = AnalyzerFactory.GetAntecodeAnalyzer(gameCode, code.GameType);
                        var group    = analyzer.CaculateBonus(code.AnteCode, winNumber).GroupBy(l => l);
                        foreach (var item1 in group)
                        {
                            var rule  = bonusManager.QueryBonusRule(gameCode, code.GameType, item1.Key) ?? new BonusRule();
                            winMoney += rule.BonusMoney * item1.Count() * amount;
                        }
                    });
                    var beeding = 0;
                    //战绩金额
                    var beedingMoney = winMoney - item.TotalMoney;
                    if (winMoney != 0M)//中奖
                    {
                        winCount = 1;
                    }
                    if (beedingMoney > 100)//有战绩
                    {
                        //达到标准增加战绩
                        beeding       = business.StatisticsBeedings(beedingMoney);
                        beedingsCount = 1;
                    }
                    if (item.State != TogetherState.Fail) //合买成功
                    {
                        togetherBeedings.FinishCount   += 1;
                        togetherBeedings.WinCount      += winCount;
                        togetherBeedings.BeedingsCount += beedingsCount;
                        togetherBeedings.Beedings      += beeding;
                    }
                    else
                    {
                        togetherBeedings.FailCount         += 1;
                        togetherBeedings.FailWinCount      += winCount;
                        togetherBeedings.FailBeedingsCount += beedingsCount;
                        togetherBeedings.FailBeedings      += beeding;
                    }
                    business.UpdateTogetherBeedingsGame(togetherBeedings);
                }
            }
            catch (Exception ex)
            {
                log.Write("合买战绩更新-", "异常出错", Common.Log.LogType.Information, "", ex.ToString());
            }
        }