/// <summary> /// 添加订单(单式)到Redis库,本方法决定拆票或不拆票 /// </summary> public static void AddOrderToRedis(string gameCode, RedisWaitTicketOrderSingle order) { if (BettingHelper.CanRequestBet(gameCode)) { //可以拆票 DoSplitOrderTicketWithThread_Single(order); } else { //不能拆票 AddOrderToWaitSplitList(order); } }
/// <summary> /// 订单投注后加入Redis待拆票列表(单式投注) /// </summary> public static void AddOrderToWaitSplitList(RedisWaitTicketOrderSingle order) { if (order == null || order.RunningOrder == null || order.AnteCode == null) { return; } var fullKey = string.Format("{0}_{1}_{2}", RedisKeys.Key_Waiting_Order_List, "Single", order.RunningOrder.GameCode.ToUpper()); //var json = JsonHelper.Serialize<RedisWaitTicketOrderSingle>(order); var json = order.ToJsonDataFormat(true); var db = RedisHelperEx.DB_NoTicket_Order; db.RPush(fullKey, json); }
/// <summary> /// 多线程执行拆票(单式投注) /// </summary> public static void DoSplitOrderTicketWithThread_Single(RedisWaitTicketOrderSingle order) { if (order == null || order.AnteCode == null) { return; } ThreadPool.QueueUserWorkItem((o) => { try { DoSplitOrderTicket_Single(o as RedisWaitTicketOrderSingle); } catch (Exception ex) { Log4Log.Error("Redis_DoSplitOrderTicket_Single-DoSplitOrderTicketWithThread_Single", ex); } }, order); }
/// <summary> /// 执行拆票(单式投注) /// </summary> public static void DoSplitOrderTicket_Single(RedisWaitTicketOrderSingle order) { //if (!BusinessHelper.CanRequestBet(order.RunningOrder.GameCode)) // return; var sportsManager = new Sports_Manager(); var oldCount = 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); } #region 拆票 new Sports_Business().RequestTicketByGateway_SingleScheme_New(new GatewayTicketOrder_SingleScheme { AllowCodes = order.AnteCode.AllowCodes, Amount = order.RunningOrder.Amount, ContainsMatchId = order.AnteCode.ContainsMatchId, FileBuffer = order.AnteCode.FileBuffer, GameCode = order.RunningOrder.GameCode, GameType = order.RunningOrder.GameType, IsRunningTicket = true, IssuseNumber = order.RunningOrder.IssuseNumber, IsVirtualOrder = false, OrderId = order.RunningOrder.SchemeId, PlayType = order.RunningOrder.PlayType, SelectMatchId = order.AnteCode.SelectMatchId, TotalMoney = order.RunningOrder.TotalMoney, UserId = order.RunningOrder.UserId, }); //new Thread(() => //{ try { //生成文件 var json = Encoding.UTF8.GetString(order.AnteCode.FileBuffer); 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 }); } }