public static async Task <IForecastPlanModel> GetForecastData(LotteryType type, Planner planer, int rule) { var response = await HttpUtil.GetAsync(GetForecastUrl(type, planer, rule)); try { if (string.IsNullOrWhiteSpace(response)) { return(null); } var result = JsonConvert.DeserializeObject <JinMaForecastPlanModel>(response); result.Plan = planer.GetPlan(); if (result.ForecastData != null && result.ForecastData.Any()) { var current = result.ForecastData.LastOrDefault(); var pn = current.LastDrawnPeriod % 1000 >= current.LastPeriod ? current.LastPeriod / 1000 * 1000 + current.LastPeriod - 1 : current.LastDrawnPeriod; current.LastDrawnPeriod = pn; result.LastDrawnPeriod = pn; } return(result); } catch (Exception ex) { ExceptionlessUtil.Warn(ex, $"预测数据反序列化失败,内容:{response}"); return(null); } }
/// <summary> /// 计算"挂"分数 (结束挂优先) /// </summary> /// <param name="forecastData"></param> /// <param name="keepGuaCnt">有效连挂次数(连挂已结束)</param> /// <param name="chaseTimesAfterEndGua">第几段跟投(连挂结束后)</param> /// <param name="keepGuaingCnt">连挂次数(连挂中)</param> /// <returns></returns> private static float CalculateGua(IReadOnlyCollection <IForecastModel> forecastData, out int keepGuaCnt, out int chaseTimesAfterEndGua, out int keepGuaingCnt) { float total = 0; //从最新期开始连挂次数 keepGuaCnt = 0; chaseTimesAfterEndGua = 0; keepGuaingCnt = 0; if (forecastData.Count < 2) { ExceptionlessUtil.Error("预测历史数据不足,无法进行评估"); return(0); } var results = forecastData.Take(forecastData.Count - 1).Select(f => f.IsWin).Reverse().ToList(); //第一个非挂 var firstWinIndex = results.FindIndex(f => f == true); //最近挂尚未结束 if (firstWinIndex > 0) { total = results.Count(f => f == false) * Config.GuaBase; keepGuaingCnt = firstWinIndex; } else { //第一个有效挂 var firstValidWrongIndex = results.Skip(firstWinIndex + 1).ToList().FindIndex(f => f == false) + firstWinIndex + 1; chaseTimesAfterEndGua = firstValidWrongIndex + 1; //有效连挂次数 var validGua = results.Skip(firstValidWrongIndex + 1).ToList().FindIndex(f => f == true) + 1; //普通挂次数 var normalGua = results.Skip(firstValidWrongIndex + validGua + 1).Count(f => f == false); if (validGua >= Config.StartGuaTime && firstValidWrongIndex > 0 && firstValidWrongIndex < validGua) { var baseScore = validGua >= Config.KeepGuaTime ? Config.Gua : (1 - (Config.KeepGuaTime - validGua) * Config.DeltaReduce) * Config.Gua; total += baseScore - (firstValidWrongIndex + 1) * Config.DeltaReduce * Config.Gua; keepGuaCnt = validGua; } //过期有效挂视为普通挂 if (firstValidWrongIndex >= validGua) { normalGua += validGua; } if (normalGua > 0) { total += Config.GuaBase * normalGua; } } return(total); }
private static async void Service_DataCollectedError(object sender, CollectErrorEventArgs e) { await Pk10Context.Clients.Groups(new List <string> { e.Rule.ToString(), "AllRules" }) .SendAsync("NoResult", e.Rule.ToStringName()); ExceptionlessUtil.Warn("目标网站扫水接口异常,请尽快检查恢复"); }
public void OnException(ExceptionContext context) { //提交异常信息 ExceptionlessUtil.TraceException(context.Exception); //转到错误页面 context.Result = new RedirectResult("/error"); context.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; //标记已处理 context.ExceptionHandled = true; }
public static async Task StartConnection() { var hubUrls = ConfigUtil.GetAppSettings <SourceHubUrls>("SourceHubUrls"); var connection = new HubConnectionBuilder() .WithUrl(hubUrls.Pk10) .Build(); connection.ServerTimeout = TimeSpan.FromMinutes(10); connection.On <JArray>("ShowPlans", BetPk10); try { await connection.StartAsync(); await connection.InvokeAsync("RegisterAllRules"); } catch (Exception ex) { ExceptionlessUtil.Fatal(ex, "模拟下注启动失败", true); } }
public static async Task NotifyAsync(MailNotifyModel model) { var config = ConfigUtil.GetAppSettings <MailNotifyConfig>("MailNotify"); var subject = $"{model.Lottery}-{model.Rule}-{model.Plan}-{model.CurrentPeriod.KeepGuaCnt}连挂-第{model.CurrentPeriod.ChaseTimes}期"; string content; switch (config.ContentType) { case MailContentType.Html: content = GetEmailContent(config.Template, model); break; case MailContentType.Plain: content = config.Content; break; default: ExceptionlessUtil.Error("邮件通知内容格式未知,请检查配置文件"); return; } await MailUtil.MailAsync(config.ApiKey, config.From, config.To.Split(','), subject, content, config.ContentType); }