/* Проверяем, если лошади добавлены из одной скачки */ private void CheckSameEvent(JToken outcomesIds) { using (Logger.BeginScope(LoggerHelper.GetCaller())) { var sameEvent = string.Empty; var seenIds = new List <long>(); var horsesInfo = new List <HorseInfo>(); foreach (long outcomeId in outcomesIds.Select(outcomeId => outcomeId.First())) { var horse = (HorseInfo)CurrentBetslip.GetSelectionByKey(outcomeId).Data; horsesInfo.Add(horse); } var eventIds = horsesInfo.Select(horse => horse.Race.Id) ?? new List <long>(); foreach (long id in eventIds) { var sameIds = eventIds.Where(eventId => eventId == id && !seenIds.Contains(id)); if (sameIds.Count() > 1) { var names = horsesInfo.Where(horse => horse.Race.Id == id).Select(horse => horse.Name); sameEvent += "The same event: " + string.Join(" & ", names) + "\n"; seenIds.Add(id); } } if (!string.IsNullOrEmpty(sameEvent)) { throw new Exception(sameEvent); } } }
/* Проверяем response после сделанной ставки(place bet) */ protected void ManagePlaceResult(Bet bet, JToken placeResult) { using (Logger.BeginScope(LoggerHelper.GetCaller())) { var responseCoupon = placeResult["responseCoupon"]; var errors = responseCoupon["generalErrors"]; if (errors != null) { IdentifyError(bet, errors); return; } SetMatchedSingleOdds(responseCoupon); var historyCoupon = responseCoupon["historyCoupon"]; var totalStake = (int?)historyCoupon["stake"] ?? 0; var countStakes = historyCoupon["systems"]?.First()["bets"]?.Count() ?? 0; var unitStake = totalStake / countStakes; CurrentBetslip.Status = BetslipStatus.Placed; var betToPlace = CurrentBetslip.GetBetToPlace(); CurrentBetslip.SetMatched(betToPlace, (double)unitStake / 1000, (double)totalStake / 1000, bet.EW); } }
protected Bet GetBetToPlace() { var bet = CurrentBetslip.GetBetToPlace(); if (bet == null) { throw new Exception("No bets to place"); } return(bet); }
/* Обновляем коэффициент при ошибке "VET_ODDS_CHANGED" */ private void UpdateOdds(Bet bet, int newOdds) { using (Logger.BeginScope(LoggerHelper.GetCaller())) { var selection = CurrentBetslip.GetSelectionByKey(bet.Key); var horseInfo = (HorseInfo)selection.Data; horseInfo.Odds = newOdds / 1000; horseInfo.SelectedOutcomeJData["approvedOdds"] = newOdds; CurrentBetslip.UpdateSelection(selection.Key, (double)newOdds / 1000, selection.Stake, selection.EW, horseInfo); } }
private void SetMatchedSingleOdds(JToken responseCoupon) { using (Logger.BeginScope(LoggerHelper.GetCaller())) { var historyCoupon = responseCoupon["historyCoupon"]; foreach (var system in historyCoupon["systems"]) { var betOutcomes = system["betOutcomes"]; for (int i = 0; i < betOutcomes?.Count(); i++) { var id = (long)betOutcomes[i]["id"]; var odds = (int)betOutcomes[i]["playedOdds"]; var selection = CurrentBetslip.GetSelectionByKey(id); CurrentBetslip.SetMatchedOdds(selection, (double)odds / 1000); } } } }
/* Добавляем возможные ставки */ private void GenerateMultiple() { var count = CurrentBetslip.Selections.Count(); var allowed = FillBetTypes(count); Logger.LogInformation($"allow {allowed.Count()} types"); CurrentBetslip.StartUpdateMultiples(); allowed.ForEach(type => { CurrentBetslip.UpdateMultipleBet( betType: type, key: type, data: CurrentBetslip.Selections .Select(item => (HorseInfo)item.Data) .OrderBy(item => item.Id) ); }); CurrentBetslip.EndUpdateMultiples(); }
/* Проверяем результат валидации coupon-а на ошибки * "betErrors": [ * {"betIndex": 0, * "errors": [{"type": "VET_INVALID_BET"}] * }], * "outcomeErrors": [ * {"outcomeId": 2699153202, * "outcomeIds": [2699153202], * "errors": [ * {"type": "VET_ODDS_CHANGED", * "arguments": ["6000"]} * ]}]*/ protected void ManageValidateResult(Bet bet, JToken responseCheckCoupon) { using (Logger.BeginScope(LoggerHelper.GetCaller())) { var outcomeErrors = responseCheckCoupon["outcomeErrors"]; if (outcomeErrors != null) { for (var i = 0; i < outcomeErrors.Count(); i++) { var id = (long)outcomeErrors[i]["outcomeId"]; var betError = CurrentBetslip.GetSelectionByKey(id); IdentifyError(betError, outcomeErrors[i]["errors"]); } } if (bet.BetType.Code != BetTypeCode.Single) { bet.AddError(BetError.Unexpected); } CheckSameEvent(responseCheckCoupon["requestCoupon"]?["outcomeIds"]); } }