public static void AddOrderToRedis(string gameCode, RedisWaitTicketOrder order)
 {
     if (BusinessHelper.CanRequestBet(gameCode))
     {
         //可以拆票
         DoSplitOrderTicketWithThread(order);
     }
     else
     {
         //不能拆票
         AddOrderToWaitSplitList(order);
     }
 }
        /// <summary>
        /// 订单投注后加入Redis待拆票列表(普通投注)
        /// </summary>
        public static void AddOrderToWaitSplitList(RedisWaitTicketOrder order)
        {
            if (order == null || order.RunningOrder == null || order.AnteCodeList.Count <= 0)
            {
                return;
            }

            //var fullKey = string.Format("{0}_{1}_{2}", RedisKeys.Key_Waiting_Order_List, "General", order.RunningOrder.GameCode.ToUpper());
            var fullKey = GetWaitingOrderUsableKey(order.RunningOrder.GameCode);
            //var json = JsonHelper.SerializeToJson<RedisWaitTicketOrder>(order);
            var json   = order.ToJsonDataFormat(true);
            var result = RedisHelperEx.DB_NoTicket_Order.RPush(fullKey, json);
        }
        /// <summary>
        /// 多线程执行拆票(普通投注)
        /// </summary>
        public static void DoSplitOrderTicketWithThread(RedisWaitTicketOrder order)
        {
            if (order == null || order.RunningOrder == null || order.AnteCodeList == null || order.AnteCodeList.Count <= 0)
            {
                return;
            }

            ThreadPool.QueueUserWorkItem((o) =>
            {
                try
                {
                    DoSplitOrderTicket(o as RedisWaitTicketOrder);
                }
                catch (Exception ex)
                {
                    writerLog.ErrrorLog("Redis_DoSplitOrderTicket-DoSplitOrderTicketWithThread", ex);
                }
            }, order);
        }
        /// <summary>
        /// 执行拆票(普通投注)
        /// </summary>
        public static void DoSplitOrderTicket(RedisWaitTicketOrder order)
        {
            //if (!BusinessHelper.CanRequestBet(order.RunningOrder.GameCode))
            //    return;
            var DB = new DBbase().DB;// DBbase

            try
            {
                var sportsManager = new Sports_Manager();
                var oldCount      = DB.CreateQuery <C_Sports_Ticket>().Count(p => p.SchemeId == order.RunningOrder.SchemeId); //sportsManager.QueryTicketCount(order.RunningOrder.SchemeId);
                if (oldCount <= 0)
                {
                    //清理冻结
                    if (order.RunningOrder.SchemeType == (int)SchemeType.ChaseBetting)
                    {
                        BusinessHelper.Payout_Frozen_To_End(BusinessHelper.FundCategory_Betting, order.RunningOrder.UserId, order.RunningOrder.SchemeId, string.Format("订单{0}出票完成,扣除冻结{1:N2}元", order.RunningOrder.SchemeId, order.RunningOrder.TotalMoney), order.RunningOrder.TotalMoney);
                    }

                    //普通投注
                    var jcGameCodeArray = new string[] { "BJDC", "JCZQ", "JCLQ" };
                    if (jcGameCodeArray.Contains(order.RunningOrder.GameCode))
                    {
                        //竞彩
                        #region 拆票

                        var betInfo = new GatewayTicketOrder_Sport
                        {
                            Amount          = order.RunningOrder.Amount,
                            Attach          = order.RunningOrder.Attach,
                            GameCode        = order.RunningOrder.GameCode,
                            GameType        = order.RunningOrder.GameType,
                            IssuseNumber    = order.RunningOrder.IssuseNumber,
                            IsVirtualOrder  = order.RunningOrder.IsVirtualOrder,
                            OrderId         = order.RunningOrder.SchemeId,
                            PlayType        = order.RunningOrder.PlayType,
                            UserId          = order.RunningOrder.UserId,
                            TotalMoney      = order.RunningOrder.TotalMoney,
                            Price           = 2M,
                            IsRunningTicket = true,
                        };
                        foreach (var code in order.AnteCodeList)
                        {
                            betInfo.AnteCodeList.Add(new GatewayAnteCode_Sport
                            {
                                AnteCode = code.AnteCode,
                                GameType = code.GameType,
                                IsDan    = code.IsDan,
                                MatchId  = code.MatchId,
                            });
                        }
                        new Sports_Business().RequestTicket_Sport(betInfo);

                        //new Thread(() =>
                        //{
                        try
                        {
                            //生成文件
                            var json = JsonHelper.Serialize(betInfo);
                            var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "CacheData", "Orders", DateTime.Today.ToString("yyyyMMdd"), order.RunningOrder.GameCode, order.RunningOrder.SchemeId.Substring(0, 10));
                            if (!Directory.Exists(path))
                            {
                                Directory.CreateDirectory(path);
                            }
                            var fileName = Path.Combine(path, string.Format("{0}.json", order.RunningOrder.SchemeId));
                            File.WriteAllText(fileName, json, Encoding.UTF8);
                        }
                        catch (Exception)
                        {
                        }
                        //}).Start();
                        #endregion
                    }
                    else
                    {
                        //数字彩、传统足球
                        #region 拆票

                        var betInfo = new GatewayTicketOrder
                        {
                            Amount          = order.RunningOrder.Amount,
                            GameCode        = order.RunningOrder.GameCode,
                            IssuseNumber    = order.RunningOrder.IssuseNumber,
                            OrderId         = order.RunningOrder.SchemeId,
                            Price           = ((order.RunningOrder.IsAppend && order.RunningOrder.GameCode == "DLT") ? 3M : 2M),
                            TotalMoney      = order.RunningOrder.TotalMoney,
                            IsVirtualOrder  = false,
                            Attach          = "",
                            IsAppend        = order.RunningOrder.IsAppend,
                            UserId          = order.RunningOrder.UserId,
                            IsRunningTicket = true,
                        };
                        foreach (var item in order.AnteCodeList)
                        {
                            betInfo.AnteCodeList.Add(new GatewayAnteCode
                            {
                                AnteNumber = item.AnteCode,
                                GameType   = item.GameType,
                            });
                        }

                        //new Sports_Business().RequestTicket(betInfo, order.KeyLine, order.StopAfterBonus, order.SchemeType);

                        new Sports_Business().RequestTicket2(betInfo, order.KeyLine, order.StopAfterBonus, order.SchemeType);
                        //new Thread(() =>
                        //{

                        try
                        {
                            //生成文件
                            var json = JsonHelper.Serialize(betInfo);
                            var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "CacheData", "Orders", DateTime.Today.ToString("yyyyMMdd"), order.RunningOrder.GameCode, order.RunningOrder.SchemeId.Substring(0, 10));
                            if (!Directory.Exists(path))
                            {
                                Directory.CreateDirectory(path);
                            }
                            var fileName = Path.Combine(path, string.Format("{0}.json", order.RunningOrder.SchemeId));
                            File.WriteAllText(fileName, json, Encoding.UTF8);
                        }
                        catch (Exception)
                        {
                        }

                        //}).Start();

                        #endregion
                    }

                    //更新订单状态
                    UpdateOrderTicketStatus(order.RunningOrder.SchemeId);

                    //触发出票完成接口
                    BusinessHelper.ExecPlugin <IComplateTicket>(new object[] { order.RunningOrder.UserId, order.RunningOrder.SchemeId, order.RunningOrder.TotalMoney, order.RunningOrder.TotalMoney });
                }
            }
            catch (Exception exp)
            {
                // writerLog("Redis_DoSplitOrderTicket-DoSplitOrderTicketWithThread", ex);
                writerLog.WriteLog("追号订单自动拆票任务", "DoSplitOrderTicket", (int)LogType.Information, "追号订单自动拆票任务日志", exp.Message);
            }
        }