/// <summary> /// 遊技履歴から狙い目台の情報解析を行う /// </summary> /// <param name="searchDate"></param> /// <returns></returns> private static async Task <(string Output, List <string> OutputUri)> GetAnalyseResult(DateTime searchDate) { var output = new StringBuilder(string.Empty); var outputUri = new List <string>(); var tenpoInfo = ExcelData.GetTenpoInfo(); var slotMachineSearchNames = ExcelData.GetSlotMachineSearchNames(); var analyseSlotData = new AnalyseSlotData(searchDate); foreach (var slotMachineSearchName in slotMachineSearchNames) { //機種名を検索する文字列を取得して解析する var aimMachineInfo = ExcelData.GetAimMachineInfo().Where(x => x.MachineName == slotMachineSearchName.Key).ToList(); await analyseSlotData.GetSlotDataAsync(tenpoInfo, slotMachineSearchName.Value, aimMachineInfo); //狙える台がない場合 if (!analyseSlotData.SlotPlayDataCollection.Any()) { continue; output.AppendLine("(設置されて)ないです。"); } else if (analyseSlotData.AimMachineCollection.Any()) { //機種名を出力 output.AppendLine(Environment.NewLine + "【" + slotMachineSearchName.Key + "】"); //ステータスでグルーピングする var aimMachineStatusGrouping = analyseSlotData.AimMachineCollection .OrderByDescending(x => x.CoinPrice) //コレクションの中身をコイン単価で降順に並べる .ThenByDescending(x => x.StartCount) //コレクションの中身をスタート数で降順に並べる .GroupBy(x => new { x.Status, x.ExceptValue, }) //ステータスと期待値でグループ化する .OrderByDescending(x => x.Key.ExceptValue); //グループを期待値で降順に並べる foreach (var aimMachines in aimMachineStatusGrouping) { output.AppendLine("[" + aimMachines.Key.Status + "]"); foreach (var aimMachine in aimMachines) { output.AppendLine("(" + aimMachine.CoinPrice + "円) " + aimMachine.StoreName + " " + aimMachine.StartCount + "G"); output.AppendLine(aimMachine.SlotMachineUri.ToString()); outputUri.Add(aimMachine.SlotMachineUri.ToString()); } } } else { continue; output.AppendLine("狙える台は無いンゴなぁ"); } } output.AppendLine(); return(output.ToString(), outputUri.OrderBy(x => x).ToList()); }