EveryDB2のデータベースを読み込んでWinFormでGUI表示するサンプル
リビジョン | 41e7d4cc93ceda722bafabf0b4970b3d7fc1cfe1 (tree) |
---|---|
日時 | 2021-06-01 04:47:41 |
作者 | yoshy <yoshy@user...> |
コミッター | yoshy |
temp_20210601_0447
@@ -8,13 +8,13 @@ using UmaTest.Infra.Helper; | ||
8 | 8 | |
9 | 9 | namespace UmaTest.App.Adaptor.Gateway.ViewModel.Dto |
10 | 10 | { |
11 | - public class UmaRaceRowDto : NUmaRaceInfo | |
11 | + public class UmaRaceRowDto : UmaRaceInfo | |
12 | 12 | { |
13 | 13 | public UmaRaceRowDto() |
14 | 14 | { |
15 | 15 | } |
16 | 16 | |
17 | - public UmaRaceRowDto(NUmaRaceInfo umaRace) | |
17 | + public UmaRaceRowDto(UmaRaceInfo umaRace) | |
18 | 18 | { |
19 | 19 | BeanHelper.Copy(this, umaRace); |
20 | 20 | } |
@@ -26,5 +26,43 @@ namespace UmaTest.App.Adaptor.Gateway.ViewModel.Dto | ||
26 | 26 | public string GradeName => CodeHelper.GetInstance().GetName(CodeHelper.GRADE_CODE, Race.Gradecd, "-"); |
27 | 27 | |
28 | 28 | public string Kimete => CodeHelper.GetInstance().GetName(CodeHelper.KYAKUSITU_KUBUN, Kyakusitukubun, "不明"); |
29 | + | |
30 | + public string BataijyuFormatted | |
31 | + { | |
32 | + get | |
33 | + { | |
34 | + string zogensa; | |
35 | + try | |
36 | + { | |
37 | + zogensa = !String.IsNullOrEmpty(Zogensa) ? $" ({Zogenfugo + int.Parse(Zogensa).ToString()})" : String.Empty; | |
38 | + } | |
39 | + catch (Exception) | |
40 | + { | |
41 | + zogensa = $" ({Zogenfugo}{Zogensa})"; | |
42 | + } | |
43 | + return !String.IsNullOrEmpty(Bataijyu) ? $"{Bataijyu}{zogensa}" : ""; | |
44 | + } | |
45 | + } | |
46 | + | |
47 | + public string TimeFormatted | |
48 | + { | |
49 | + get => Time.Length >= 4 ? $"{Time.Substring(0,1)}:{Time.Substring(1, 2)}.{Time.Substring(3, 1)}" : Time; | |
50 | + } | |
51 | + | |
52 | + public string FutanFormatted | |
53 | + { | |
54 | + get | |
55 | + { | |
56 | + try | |
57 | + { | |
58 | + return !String.IsNullOrEmpty(Futan) ? (int.Parse(Futan) / 10.0f).ToString() : String.Empty; | |
59 | + } | |
60 | + catch (Exception) | |
61 | + { | |
62 | + | |
63 | + return Futan; | |
64 | + } | |
65 | + } | |
66 | + } | |
29 | 67 | } |
30 | 68 | } |
@@ -4,6 +4,7 @@ using System.Globalization; | ||
4 | 4 | using System.Linq; |
5 | 5 | using System.Text; |
6 | 6 | using System.Threading.Tasks; |
7 | +using UmaTest.App.Domain.Model.Repository.Database.Dto; | |
7 | 8 | using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2; |
8 | 9 | using UmaTest.Infra.Helper; |
9 | 10 |
@@ -21,16 +22,24 @@ namespace UmaTest.App.Adaptor.Gateway.ViewModel.Dto | ||
21 | 22 | Wakuban = "仮"; |
22 | 23 | } |
23 | 24 | |
24 | - public UmaSummaryRowDto(NToku uma) | |
25 | + public UmaSummaryRowDto(TokuUmaInfo uma) | |
25 | 26 | { |
26 | 27 | BeanHelper.Copy(this, uma); |
28 | + if (uma.Uma != null) | |
29 | + { | |
30 | + BeanHelper.Copy(this, uma.Uma, true); | |
31 | + } | |
32 | + | |
27 | 33 | Wakuban = "仮"; |
28 | 34 | } |
29 | 35 | |
30 | - public UmaSummaryRowDto(NUmaRace uma) | |
36 | + public UmaSummaryRowDto(UmaInfo uma) | |
31 | 37 | { |
32 | - // FIXME | |
33 | 38 | BeanHelper.Copy(this, uma); |
39 | + if (uma.Uma != null) | |
40 | + { | |
41 | + BeanHelper.Copy(this, uma.Uma, true); | |
42 | + } | |
34 | 43 | } |
35 | 44 | |
36 | 45 | public string Wakuban { get; set; } |
@@ -38,33 +47,10 @@ namespace UmaTest.App.Adaptor.Gateway.ViewModel.Dto | ||
38 | 47 | |
39 | 48 | public string SenSuu { get; set; } |
40 | 49 | |
41 | - public string ChichiBamei { get => Konso?.Chichi.Bamei; } | |
50 | + public string ChichiBamei { get => Konso != null ? Konso.Chichi.Bamei : String.Empty; } | |
42 | 51 | |
43 | 52 | public string HahaChichiBamei { get => Konso?.HahaChichi.Bamei; } |
44 | 53 | |
45 | - public string BataijyuFormatted { | |
46 | - get | |
47 | - { | |
48 | - return !String.IsNullOrEmpty(Konso?.Bataijyu) ? $"{Konso?.Bataijyu} ({Konso?.Zogenfugo + int.Parse(Konso?.Zogensa).ToString()})" : ""; | |
49 | - } | |
50 | - } | |
51 | - | |
52 | - public string KonsoNinki { get => Konso?.OddsTanpku?.Tanninki; } | |
53 | - | |
54 | - public float KonsoTanOdds { | |
55 | - get | |
56 | - { | |
57 | - string odds = Konso?.OddsTanpku?.Tanodds; | |
58 | - if(String.IsNullOrEmpty(odds)) | |
59 | - { | |
60 | - return 0; // String.Empty; | |
61 | - } | |
62 | - | |
63 | - //return int.Parse(odds.Substring(0, 3)).ToString() + "." + odds.Substring(3, 1); | |
64 | - return int.Parse(odds) / 10.0f; | |
65 | - } | |
66 | - } | |
67 | - | |
68 | 54 | public UmaRaceRowDto Konso { get; set; } |
69 | 55 | |
70 | 56 | public UmaRaceRowDto Zenso { get; set; } |
@@ -8,9 +8,9 @@ using System.Windows.Forms; | ||
8 | 8 | using System.Windows.Input; |
9 | 9 | using UmaTest.App.Adaptor.Controller; |
10 | 10 | using UmaTest.App.Domain.UseCase.Request; |
11 | -using UmaTest.App.Domain.UseCase.Response; | |
12 | 11 | using UmaTest.Infra.Adaptor.Command; |
13 | 12 | using UmaTest.Infra.Adaptor.Controller; |
13 | +using UmaTest.Infra.Adaptor.ViewModel; | |
14 | 14 | using UmaTest.Infra.Log; |
15 | 15 | using ICommand = UmaTest.Infra.Adaptor.Command.ICommand; |
16 | 16 |
@@ -8,11 +8,10 @@ using System.Windows.Forms; | ||
8 | 8 | using System.Windows.Input; |
9 | 9 | using UmaTest.App.Adaptor.Controller; |
10 | 10 | using UmaTest.App.Adaptor.Gateway.ViewModel.Dto; |
11 | -using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2; | |
12 | 11 | using UmaTest.App.Domain.UseCase.Request; |
13 | -using UmaTest.App.Domain.UseCase.Response; | |
14 | 12 | using UmaTest.Infra.Adaptor.Command; |
15 | 13 | using UmaTest.Infra.Adaptor.Controller; |
14 | +using UmaTest.Infra.Adaptor.ViewModel; | |
16 | 15 | using UmaTest.Infra.Log; |
17 | 16 | using ICommand = UmaTest.Infra.Adaptor.Command.ICommand; |
18 | 17 |
@@ -8,11 +8,10 @@ using System.Windows.Forms; | ||
8 | 8 | using System.Windows.Input; |
9 | 9 | using UmaTest.App.Adaptor.Controller; |
10 | 10 | using UmaTest.App.Adaptor.Gateway.ViewModel.Dto; |
11 | -using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2; | |
12 | 11 | using UmaTest.App.Domain.UseCase.Request; |
13 | -using UmaTest.App.Domain.UseCase.Response; | |
14 | 12 | using UmaTest.Infra.Adaptor.Command; |
15 | 13 | using UmaTest.Infra.Adaptor.Controller; |
14 | +using UmaTest.Infra.Adaptor.ViewModel; | |
16 | 15 | using UmaTest.Infra.Log; |
17 | 16 | using ICommand = UmaTest.Infra.Adaptor.Command.ICommand; |
18 | 17 |
@@ -140,7 +140,7 @@ namespace UmaTest.App.Gateway.Presenter | ||
140 | 140 | |
141 | 141 | umaSummaryList.Add(summaryDto); |
142 | 142 | |
143 | - if (!res.Races.TryGetValue(kettoNum, out IEnumerable<NUmaRaceInfo> umaRaces) || (umaRaces.Count() == 0)) | |
143 | + if (!res.Races.TryGetValue(kettoNum, out IEnumerable<UmaRaceInfo> umaRaces) || (umaRaces.Count() == 0)) | |
144 | 144 | { |
145 | 145 | Logger.Warn($"血統登録番号: {kettoNum} の馬レース情報が見つかりませんでした"); |
146 | 146 | continue; |
@@ -148,7 +148,7 @@ namespace UmaTest.App.Gateway.Presenter | ||
148 | 148 | |
149 | 149 | List<UmaRaceRowDto> umaRaceList = new List<UmaRaceRowDto>(); |
150 | 150 | |
151 | - foreach (NUmaRaceInfo umaRace in umaRaces) | |
151 | + foreach (UmaRaceInfo umaRace in umaRaces) | |
152 | 152 | { |
153 | 153 | NRace detail = umaRace.Race; |
154 | 154 | Logger.Debug($"{detail.Year}/{detail.Monthday.Substring(0, 2)}/{detail.Monthday.Substring(2, 2)} - {detail.Hondai} - {detail.Kyori} - {detail.Gradecd} - {detail.Jyokencd1} - {umaRace.Nyusenjyuni} - {umaRace.Kakuteijyuni}"); |
@@ -39,14 +39,15 @@ namespace UmaTest.App.Gateway.Presenter | ||
39 | 39 | AsyncLoadSelectedRaceUmaListRequest req = baseRes.Request as AsyncLoadSelectedRaceUmaListRequest; |
40 | 40 | AsyncLoadSelectedRaceUmaListResponse res = baseRes as AsyncLoadSelectedRaceUmaListResponse; |
41 | 41 | |
42 | - IEnumerable<NUmaRace> horses = res.Horses; | |
42 | + IEnumerable<UmaInfo> horses = res.Horses; | |
43 | 43 | |
44 | - foreach (NUmaRace uma in horses) | |
44 | + foreach (UmaInfo uma in horses) | |
45 | 45 | { |
46 | 46 | string kettoNum = uma.Kettonum; |
47 | 47 | |
48 | 48 | statusBar.SetStatusText($"血統登録番号: {kettoNum}, 馬名: {uma.Bamei} の情報をレンダリング中です..."); |
49 | 49 | |
50 | + // FIXME | |
50 | 51 | UmaSummaryRowDto summaryDto = new UmaSummaryRowDto(uma); |
51 | 52 | |
52 | 53 | foreach (ChakudosuuSummary chakudosuu in res.Summaries[kettoNum]) |
@@ -123,7 +124,7 @@ namespace UmaTest.App.Gateway.Presenter | ||
123 | 124 | |
124 | 125 | umaSummaryList.Add(summaryDto); |
125 | 126 | |
126 | - if (!res.Races.TryGetValue(kettoNum, out IEnumerable<NUmaRaceInfo> umaRaces)) // || (umaRaces.Count() == 0)) | |
127 | + if (!res.Races.TryGetValue(kettoNum, out IEnumerable<UmaRaceInfo> umaRaces)) // || (umaRaces.Count() == 0)) | |
127 | 128 | { |
128 | 129 | Logger.Warn($"血統登録番号: {kettoNum} の馬レース情報が見つかりませんでした"); |
129 | 130 | continue; |
@@ -131,7 +132,7 @@ namespace UmaTest.App.Gateway.Presenter | ||
131 | 132 | |
132 | 133 | List<UmaRaceRowDto> umaRaceList = new List<UmaRaceRowDto>(); |
133 | 134 | |
134 | - foreach (NUmaRaceInfo umaRace in umaRaces) | |
135 | + foreach (UmaRaceInfo umaRace in umaRaces) | |
135 | 136 | { |
136 | 137 | NRace detail = umaRace.Race; |
137 | 138 | Logger.Debug($"{detail.Year}/{detail.Monthday.Substring(0, 2)}/{detail.Monthday.Substring(2, 2)} - {detail.Hondai} - {detail.Kyori} - {detail.Gradecd} - {detail.Jyokencd1} - {umaRace.Nyusenjyuni} - {umaRace.Kakuteijyuni}"); |
@@ -45,7 +45,7 @@ namespace UmaTest.App.Gateway.Presenter | ||
45 | 45 | { |
46 | 46 | Logger.Info($"血統登録番号: {kettoNum}"); |
47 | 47 | |
48 | - if (!res.Horses.TryGetValue(kettoNum, out NToku uma)) | |
48 | + if (!res.Horses.TryGetValue(kettoNum, out TokuUmaInfo uma)) | |
49 | 49 | { |
50 | 50 | Logger.Warn($"血統登録番号: {kettoNum} の馬情報が見つかりませんでした"); |
51 | 51 | continue; |
@@ -129,7 +129,7 @@ namespace UmaTest.App.Gateway.Presenter | ||
129 | 129 | |
130 | 130 | umaSummaryList.Add(summaryDto); |
131 | 131 | |
132 | - if (!res.Races.TryGetValue(kettoNum, out IEnumerable<NUmaRaceInfo> umaRaces) || (umaRaces.Count() == 0)) | |
132 | + if (!res.Races.TryGetValue(kettoNum, out IEnumerable<UmaRaceInfo> umaRaces) || (umaRaces.Count() == 0)) | |
133 | 133 | { |
134 | 134 | Logger.Warn($"血統登録番号: {kettoNum} の馬レース情報が見つかりませんでした"); |
135 | 135 | continue; |
@@ -137,7 +137,7 @@ namespace UmaTest.App.Gateway.Presenter | ||
137 | 137 | |
138 | 138 | List<UmaRaceRowDto> umaRaceList = new List<UmaRaceRowDto>(); |
139 | 139 | |
140 | - foreach (NUmaRaceInfo umaRace in umaRaces) | |
140 | + foreach (UmaRaceInfo umaRace in umaRaces) | |
141 | 141 | { |
142 | 142 | NRace detail = umaRace.Race; |
143 | 143 | Logger.Debug($"{detail.Year}/{detail.Monthday.Substring(0, 2)}/{detail.Monthday.Substring(2, 2)} - {detail.Hondai} - {detail.Kyori} - {detail.Gradecd} - {detail.Jyokencd1} - {umaRace.Nyusenjyuni} - {umaRace.Kakuteijyuni}"); |
@@ -145,6 +145,10 @@ namespace UmaTest.App.Gateway.Presenter | ||
145 | 145 | umaRaceList.Add(new UmaRaceRowDto(umaRace)); |
146 | 146 | } |
147 | 147 | |
148 | + // HACK | |
149 | + summaryDto.Zenso = umaRaceList.Count > 0 ? umaRaceList[0] : null; | |
150 | + summaryDto.SenSuu = umaRaceList.Count.ToString(); | |
151 | + | |
148 | 152 | umaRaceMap.Add(kettoNum, umaRaceList); |
149 | 153 | } |
150 | 154 |
@@ -117,7 +117,7 @@ namespace UmaTest.App.Gateway.Presenter | ||
117 | 117 | |
118 | 118 | umaSummaryList.Add(summaryDto); |
119 | 119 | |
120 | - if (!res.Races.TryGetValue(kettoNum, out IEnumerable<NUmaRaceInfo> umaRaces) || (umaRaces.Count() == 0)) | |
120 | + if (!res.Races.TryGetValue(kettoNum, out IEnumerable<UmaRaceInfo> umaRaces) || (umaRaces.Count() == 0)) | |
121 | 121 | { |
122 | 122 | Logger.Warn($"血統登録番号: {kettoNum} の馬レース情報が見つかりませんでした"); |
123 | 123 | return res; |
@@ -125,7 +125,7 @@ namespace UmaTest.App.Gateway.Presenter | ||
125 | 125 | |
126 | 126 | List<UmaRaceRowDto> umaRaceList = new List<UmaRaceRowDto>(); |
127 | 127 | |
128 | - foreach (NUmaRaceInfo umaRace in umaRaces) | |
128 | + foreach (UmaRaceInfo umaRace in umaRaces) | |
129 | 129 | { |
130 | 130 | NRace detail = umaRace.Race; |
131 | 131 | Logger.Debug($"{detail.Year}/{detail.Monthday.Substring(0, 2)}/{detail.Monthday.Substring(2, 2)} - {detail.Hondai} - {detail.Kyori} - {detail.Gradecd} - {detail.Jyokencd1} - {umaRace.Nyusenjyuni} - {umaRace.Kakuteijyuni}"); |
@@ -1,11 +1,12 @@ | ||
1 | 1 | using System.Collections.Generic; |
2 | 2 | using System.Threading.Tasks; |
3 | +using UmaTest.App.Domain.Model.Repository.Database.Dto; | |
3 | 4 | using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2; |
4 | 5 | |
5 | 6 | namespace UmaTest.App.Domain.Model.Logic |
6 | 7 | { |
7 | 8 | public interface ITokuUmaLogic |
8 | 9 | { |
9 | - Task<Dictionary<string, NToku>> LoadHorsesByTokuRaceAsync(NTokuRace race); | |
10 | + Task<Dictionary<string, TokuUmaInfo>> LoadHorsesByTokuRaceAsync(NTokuRace race); | |
10 | 11 | } |
11 | 12 | } |
\ No newline at end of file |
@@ -8,9 +8,9 @@ namespace UmaTest.App.Domain.Model.Logic | ||
8 | 8 | public interface IUmaRaceLogic |
9 | 9 | { |
10 | 10 | Dictionary<string, IEnumerable<ChakudosuuSummary>> LoadChakudosuuSummaries(List<string> kettoNumList); |
11 | - Dictionary<string, IEnumerable<NUmaRaceInfo>> LoadRacesByKettoNumList(List<string> kettoNumList); | |
11 | + Dictionary<string, IEnumerable<UmaRaceInfo>> LoadRacesByKettoNumList(List<string> kettoNumList); | |
12 | 12 | Task<Dictionary<string, IEnumerable<ChakudosuuSummary>>> LoadChakudosuuSummariesAsync(List<string> kettoNumList); |
13 | - Task<Dictionary<string, IEnumerable<NUmaRaceInfo>>> LoadRacesByKettoNumListAsync(List<string> kettoNumList); | |
14 | - Task<IEnumerable<NUmaRace>> LoadHorsesBySelectedRaceAsync(NRace race); | |
13 | + Task<Dictionary<string, IEnumerable<UmaRaceInfo>>> LoadRacesByKettoNumListAsync(List<string> kettoNumList); | |
14 | + Task<IEnumerable<UmaInfo>> LoadHorsesBySelectedRaceAsync(NRace race); | |
15 | 15 | } |
16 | 16 | } |
\ No newline at end of file |
@@ -5,6 +5,7 @@ using System.Linq; | ||
5 | 5 | using System.Text; |
6 | 6 | using System.Threading.Tasks; |
7 | 7 | using UmaTest.App.Domain.Model.Repository.Database.Dao; |
8 | +using UmaTest.App.Domain.Model.Repository.Database.Dto; | |
8 | 9 | using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2; |
9 | 10 | using UmaTest.Infra.Helper; |
10 | 11 |
@@ -18,7 +19,7 @@ namespace UmaTest.App.Domain.Model.Logic | ||
18 | 19 | this.dao = dao; |
19 | 20 | } |
20 | 21 | |
21 | - public async Task<Dictionary<string, NToku>> LoadHorsesByTokuRaceAsync(NTokuRace race) | |
22 | + public async Task<Dictionary<string, TokuUmaInfo>> LoadHorsesByTokuRaceAsync(NTokuRace race) | |
22 | 23 | { |
23 | 24 | return await LogicHelper.tryLogic(() => |
24 | 25 | { |
@@ -23,12 +23,12 @@ namespace UmaTest.App.Domain.Model.Logic | ||
23 | 23 | this.statusBar = statusBar; |
24 | 24 | } |
25 | 25 | |
26 | - public Dictionary<string, IEnumerable<NUmaRaceInfo>> LoadRacesByKettoNumList(List<string> kettoNumList) | |
26 | + public Dictionary<string, IEnumerable<UmaRaceInfo>> LoadRacesByKettoNumList(List<string> kettoNumList) | |
27 | 27 | { |
28 | 28 | return TaskHelper.WaitSingle(LoadRacesByKettoNumListAsync(kettoNumList)); |
29 | 29 | } |
30 | 30 | |
31 | - public async Task<Dictionary<string, IEnumerable<NUmaRaceInfo>>> LoadRacesByKettoNumListAsync(List<string> kettoNumList) | |
31 | + public async Task<Dictionary<string, IEnumerable<UmaRaceInfo>>> LoadRacesByKettoNumListAsync(List<string> kettoNumList) | |
32 | 32 | { |
33 | 33 | return await LogicHelper.tryLogic(() => |
34 | 34 | { |
@@ -65,11 +65,11 @@ namespace UmaTest.App.Domain.Model.Logic | ||
65 | 65 | }); |
66 | 66 | } |
67 | 67 | |
68 | - public Task<IEnumerable<NUmaRace>> LoadHorsesBySelectedRaceAsync(NRace race) | |
68 | + public Task<IEnumerable<UmaInfo>> LoadHorsesBySelectedRaceAsync(NRace race) | |
69 | 69 | { |
70 | 70 | return LogicHelper.tryLogic(() => |
71 | 71 | { |
72 | - return dao.FindAllRacesBySelectedRaceAsync(race); | |
72 | + return dao.FindAllHorsesBySelectedRaceAsync(race); | |
73 | 73 | }); |
74 | 74 | } |
75 | 75 | } |
@@ -1,11 +1,12 @@ | ||
1 | 1 | using System.Collections.Generic; |
2 | 2 | using System.Threading.Tasks; |
3 | +using UmaTest.App.Domain.Model.Repository.Database.Dto; | |
3 | 4 | using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2; |
4 | 5 | |
5 | 6 | namespace UmaTest.App.Domain.Model.Repository.Database.Dao |
6 | 7 | { |
7 | 8 | public interface INTokuUmaDao |
8 | 9 | { |
9 | - Task<Dictionary<string, NToku>> FindAllHorsesByTokuRaceAsync(NTokuRace race); | |
10 | + Task<Dictionary<string, TokuUmaInfo>> FindAllHorsesByTokuRaceAsync(NTokuRace race); | |
10 | 11 | } |
11 | 12 | } |
\ No newline at end of file |
@@ -7,12 +7,12 @@ namespace UmaTest.App.Domain.Model.Repository.Database.Dao | ||
7 | 7 | { |
8 | 8 | public interface INUmaRaceDao |
9 | 9 | { |
10 | - Dictionary<string, IEnumerable<NUmaRaceInfo>> FindAllRacesByKettoNumList(List<string> kettoNumList); | |
10 | + Dictionary<string, IEnumerable<UmaRaceInfo>> FindAllRacesByKettoNumList(List<string> kettoNumList); | |
11 | 11 | IEnumerable<ChakudosuuSummary> FindChakudosuuSummary(string kettoNum); |
12 | - Task<Dictionary<string, IEnumerable<NUmaRaceInfo>>> FindAllRacesByKettoNumListAsync(List<string> kettoNumList); | |
12 | + Task<Dictionary<string, IEnumerable<UmaRaceInfo>>> FindAllRacesByKettoNumListAsync(List<string> kettoNumList); | |
13 | 13 | Task<IEnumerable<ChakudosuuSummary>> FindChakudosuuSummaryAsync(string kettoNum); |
14 | 14 | |
15 | - Task<IEnumerable<NUmaRace>> FindAllRacesBySelectedRaceAsync(NRace race); | |
15 | + Task<IEnumerable<UmaInfo>> FindAllHorsesBySelectedRaceAsync(NRace race); | |
16 | 16 | Task<Dictionary<string, IEnumerable<ChakudosuuSummary>>> FindAllChakudosuuSummariesAsync(List<string> kettoNumList); |
17 | 17 | } |
18 | 18 | } |
\ No newline at end of file |
@@ -4,6 +4,7 @@ using System.Collections.Generic; | ||
4 | 4 | using System.Linq; |
5 | 5 | using System.Text; |
6 | 6 | using System.Threading.Tasks; |
7 | +using UmaTest.App.Domain.Model.Repository.Database.Dto; | |
7 | 8 | using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2; |
8 | 9 | using UmaTest.Infra.Helper; |
9 | 10 | using UmaTest.Infra.Log; |
@@ -19,22 +20,29 @@ namespace UmaTest.App.Domain.Model.Repository.Database.Dao | ||
19 | 20 | this.db = db; |
20 | 21 | } |
21 | 22 | |
22 | - public Task<Dictionary<string, NToku>> FindAllHorsesByTokuRaceAsync(NTokuRace race) | |
23 | + public Task<Dictionary<string, TokuUmaInfo>> FindAllHorsesByTokuRaceAsync(NTokuRace race) | |
23 | 24 | { |
24 | - return Task.Run<Dictionary<string, NToku>>(() => | |
25 | + return Task.Run<Dictionary<string, TokuUmaInfo>>(() => | |
25 | 26 | { |
26 | 27 | return DbHelper.tryQuery(() => |
27 | 28 | { |
28 | - Dictionary<string, NToku> res = new Dictionary<string, NToku>(); | |
29 | + Dictionary<string, TokuUmaInfo> res = new Dictionary<string, TokuUmaInfo>(); | |
29 | 30 | |
30 | 31 | var sql = Sql.Builder |
31 | - .Where("year = @0 and jyocd = @1 and kaiji = @2 and nichiji = @3 and racenum = @4", | |
32 | + //.Where("year = @0 and jyocd = @1 and kaiji = @2 and nichiji = @3 and racenum = @4", | |
33 | + // race.Year, race.Jyocd, race.Kaiji, race.Nichiji, race.Racenum) | |
34 | + //.OrderBy("bamei, kettonum desc"); | |
35 | + .Select("tu.*, u.*") | |
36 | + .From("n_toku tu") | |
37 | + .LeftJoin("n_uma u") | |
38 | + .On("tu.kettonum = u.kettonum") | |
39 | + .Where("tu.year = @0 and tu.jyocd = @1 and tu.kaiji = @2 and tu.nichiji = @3 and tu.racenum = @4", | |
32 | 40 | race.Year, race.Jyocd, race.Kaiji, race.Nichiji, race.Racenum) |
33 | - .OrderBy("bamei, kettonum desc"); | |
41 | + .OrderBy("tu.bamei, tu.kettonum desc"); | |
34 | 42 | |
35 | - var horses = db.Query<NToku>(sql); | |
43 | + var horses = db.Query<TokuUmaInfo, NUma, TokuUmaInfo>((t, u) => { t.Uma = u; return t; }, sql); | |
36 | 44 | |
37 | - foreach (NToku horse in horses) | |
45 | + foreach (TokuUmaInfo horse in horses) | |
38 | 46 | { |
39 | 47 | if (!res.ContainsKey(horse.Kettonum)) |
40 | 48 | { |
@@ -19,59 +19,23 @@ namespace UmaTest.App.Domain.Model.Repository.Database.Dao | ||
19 | 19 | this.db = db; |
20 | 20 | } |
21 | 21 | |
22 | - public Dictionary<string, IEnumerable<NUmaRaceInfo>> FindAllRacesByKettoNumList(List<string> kettoNumList) | |
22 | + public Dictionary<string, IEnumerable<UmaRaceInfo>> FindAllRacesByKettoNumList(List<string> kettoNumList) | |
23 | 23 | { |
24 | 24 | return TaskHelper.WaitSingle(FindAllRacesByKettoNumListAsync(kettoNumList)); |
25 | 25 | } |
26 | 26 | |
27 | - public Task<Dictionary<string, IEnumerable<NUmaRaceInfo>>> FindAllRacesByKettoNumListAsync(List<string> kettoNumList) | |
27 | + public Task<Dictionary<string, IEnumerable<UmaRaceInfo>>> FindAllRacesByKettoNumListAsync(List<string> kettoNumList) | |
28 | 28 | { |
29 | - return Task.Run<Dictionary<string, IEnumerable<NUmaRaceInfo>>>(() => | |
29 | + return Task.Run<Dictionary<string, IEnumerable<UmaRaceInfo>>>(() => | |
30 | 30 | { |
31 | 31 | return DbHelper.tryQuery(() => |
32 | 32 | { |
33 | - Dictionary<string, IEnumerable<NUmaRaceInfo>> res = new Dictionary<string, IEnumerable<NUmaRaceInfo>>(); | |
34 | - | |
35 | - //foreach (string kettoNum in kettoNumList) | |
36 | - //{ | |
37 | - // var sql = Sql.Builder | |
38 | - // .Append("SELECT ur.*, r.*") | |
39 | - // .From("n_uma_race ur") | |
40 | - // .Append("INNER JOIN n_race r USING(year, jyocd, kaiji, nichiji, racenum)") | |
41 | - // .Where("ur.kettonum = @0", kettoNum) | |
42 | - // .OrderBy("ur.year desc, ur.monthday desc"); | |
43 | - | |
44 | - // var races = db.Query<NUmaRace, NRace, NUmaRaceInfo>((ur, r) => new NUmaRaceInfo(ur, r), sql); | |
45 | - // res.Add(kettoNum, races); | |
46 | - //} | |
47 | - | |
48 | - //foreach (string kettoNum in kettoNumList) | |
49 | - //{ | |
50 | - // string sql = "SELECT ur.*, r.*, k.*, c.*, u1.*, u2.* " | |
51 | - // + "FROM n_uma_race ur " | |
52 | - // + "INNER JOIN n_race r USING(year, jyocd, kaiji, nichiji, racenum) " | |
53 | - // + "LEFT JOIN n_kisyu k USING(kisyucode) " | |
54 | - // + "LEFT JOIN n_chokyo c ON ur.chokyosicode = c.chokyosicode " | |
55 | - // + "LEFT JOIN n_uma u1 ON ur.kettonum1 = u1.kettonum " | |
56 | - // + "LEFT JOIN n_uma u2 ON ur.kettonum2 = u2.kettonum " | |
57 | - // + "WHERE ur.kettonum = @0 " | |
58 | - // + "ORDER BY ur.kettonum, ur.year desc, ur.monthday desc"; | |
59 | - | |
60 | - // Func<NUmaRace, NRace, NKisyu, NChokyo, NUma, NUma, NUmaRaceInfo> mapper = | |
61 | - // (ur, r, k, c, u1, u2) => new NUmaRaceInfo(ur, r, k, c, u1, u2); | |
62 | - | |
63 | - // Type[] mapTypes = new Type[] { typeof(NUmaRace), typeof(NRace), typeof(NKisyu), | |
64 | - // typeof(NChokyo), typeof(NUma), typeof(NUma) }; | |
65 | - | |
66 | - // IEnumerable<NUmaRaceInfo> races = db.Query<NUmaRaceInfo>(mapTypes, mapper, sql, kettoNum); | |
67 | - | |
68 | - // res.Add(kettoNum, races.ToList()); | |
69 | - //} | |
33 | + Dictionary<string, IEnumerable<UmaRaceInfo>> res = new Dictionary<string, IEnumerable<UmaRaceInfo>>(); | |
70 | 34 | |
71 | 35 | string sql = "SELECT ur.*, r.*, k.*, c.*, ot.*, h1.*, h5.* " |
72 | 36 | + "FROM n_uma_race ur " |
73 | - + "INNER JOIN n_uma u USING(kettonum) " | |
74 | 37 | + "INNER JOIN n_race r USING(year, jyocd, kaiji, nichiji, racenum) " |
38 | + + "LEFT JOIN n_uma u USING(kettonum) " | |
75 | 39 | + "LEFT JOIN n_kisyu k USING(kisyucode) " |
76 | 40 | + "LEFT JOIN n_chokyo c ON ur.chokyosicode = c.chokyosicode " |
77 | 41 | + "LEFT JOIN n_odds_tanpuku ot USING(year, jyocd, kaiji, nichiji, racenum, umaban) " |
@@ -80,25 +44,25 @@ namespace UmaTest.App.Domain.Model.Repository.Database.Dao | ||
80 | 44 | + "WHERE ur.kettonum in (@KettoNums) " |
81 | 45 | + "ORDER BY ur.kettonum, ur.year desc, ur.monthday desc"; |
82 | 46 | |
83 | - Func<NUmaRace, NRace, NKisyu, NChokyo, NOddsTanpuku, NHansyoku, NHansyoku, NUmaRaceInfo> mapper = | |
84 | - (ur, r, k, c, o, h1, h5) => new NUmaRaceInfo(ur, r, k, c, o, h1, h5); | |
47 | + Func<NUmaRace, NRace, NKisyu, NChokyo, OddsInfo, NHansyoku, NHansyoku, UmaRaceInfo> mapper = | |
48 | + (ur, r, k, c, o, h1, h5) => new UmaRaceInfo(ur, r, k, c, o, h1, h5); | |
85 | 49 | |
86 | 50 | Type[] mapTypes = new Type[] { typeof(NUmaRace), typeof(NRace), typeof(NKisyu), |
87 | - typeof(NChokyo), typeof(NOddsTanpuku), typeof(NHansyoku), typeof(NHansyoku) }; | |
51 | + typeof(NChokyo), typeof(OddsInfo), typeof(NHansyoku), typeof(NHansyoku) }; | |
88 | 52 | |
89 | - IEnumerable<NUmaRaceInfo> races = db.Query<NUmaRaceInfo>( | |
53 | + IEnumerable<UmaRaceInfo> races = db.Query<UmaRaceInfo>( | |
90 | 54 | mapTypes, mapper, sql, new { KettoNums = kettoNumList.ToArray() }); |
91 | 55 | |
92 | - foreach (NUmaRaceInfo race in races) | |
56 | + foreach (UmaRaceInfo race in races) | |
93 | 57 | { |
94 | 58 | string kettoNum = race.Kettonum; |
95 | - if (!res.TryGetValue(kettoNum, out IEnumerable<NUmaRaceInfo> splitRaces)) | |
59 | + if (!res.TryGetValue(kettoNum, out IEnumerable<UmaRaceInfo> splitRaces)) | |
96 | 60 | { |
97 | - splitRaces = new List<NUmaRaceInfo>(); | |
61 | + splitRaces = new List<UmaRaceInfo>(); | |
98 | 62 | res.Add(kettoNum, splitRaces); |
99 | 63 | } |
100 | 64 | |
101 | - ((List<NUmaRaceInfo>)splitRaces).Add(race); | |
65 | + ((List<UmaRaceInfo>)splitRaces).Add(race); | |
102 | 66 | } |
103 | 67 | |
104 | 68 | return res; |
@@ -106,18 +70,22 @@ namespace UmaTest.App.Domain.Model.Repository.Database.Dao | ||
106 | 70 | }); |
107 | 71 | } |
108 | 72 | |
109 | - public Task<IEnumerable<NUmaRace>> FindAllRacesBySelectedRaceAsync(NRace race) | |
73 | + public Task<IEnumerable<UmaInfo>> FindAllHorsesBySelectedRaceAsync(NRace race) | |
110 | 74 | { |
111 | - return Task.Run<IEnumerable<NUmaRace>>(() => | |
75 | + return Task.Run<IEnumerable<UmaInfo>>(() => | |
112 | 76 | { |
113 | 77 | return DbHelper.tryQuery(() => |
114 | 78 | { |
115 | 79 | var sql = Sql.Builder |
116 | - .Where("year = @0 and jyocd = @1 and kaiji = @2 and nichiji = @3 and racenum = @4", | |
80 | + .Select("ur.*, u.*") | |
81 | + .From("n_uma_race ur") | |
82 | + .LeftJoin("n_uma u") | |
83 | + .On("ur.kettonum = u.kettonum") | |
84 | + .Where("ur.year = @0 and ur.jyocd = @1 and ur.kaiji = @2 and ur.nichiji = @3 and ur.racenum = @4", | |
117 | 85 | race.Year, race.Jyocd, race.Kaiji, race.Nichiji, race.Racenum) |
118 | - .OrderBy("wakuban, umaban"); | |
86 | + .OrderBy("ur.wakuban, ur.umaban"); | |
119 | 87 | |
120 | - return db.Query<NUmaRace>(sql).ToList(); | |
88 | + return db.Query<UmaInfo, NUma, UmaInfo>((ur, u) => { ur.Uma = u; return ur; }, sql).ToList(); | |
121 | 89 | }); |
122 | 90 | }); |
123 | 91 | } |
@@ -0,0 +1,36 @@ | ||
1 | +using PetaPoco; | |
2 | +using System; | |
3 | +using System.Collections.Generic; | |
4 | +using System.Linq; | |
5 | +using System.Text; | |
6 | +using System.Threading.Tasks; | |
7 | +using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2; | |
8 | +using UmaTest.Infra.Log; | |
9 | + | |
10 | +namespace UmaTest.App.Domain.Model.Repository.Database.Dto | |
11 | +{ | |
12 | + public class OddsInfo : NOddsTanpuku | |
13 | + { | |
14 | + [Ignore] | |
15 | + public string TanOddsFormatted | |
16 | + { | |
17 | + get | |
18 | + { | |
19 | + if (String.IsNullOrEmpty(Tanodds)) | |
20 | + { | |
21 | + return String.Empty; | |
22 | + } | |
23 | + | |
24 | + try | |
25 | + { | |
26 | + return (int.Parse(Tanodds) / 10.0f).ToString(); | |
27 | + } | |
28 | + catch (Exception) | |
29 | + { | |
30 | + | |
31 | + return Tanodds; | |
32 | + } | |
33 | + } | |
34 | + } | |
35 | + } | |
36 | +} |
@@ -0,0 +1,21 @@ | ||
1 | +using PetaPoco; | |
2 | +using System; | |
3 | +using System.Collections.Generic; | |
4 | +using System.Linq; | |
5 | +using System.Text; | |
6 | +using System.Threading.Tasks; | |
7 | +using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2; | |
8 | +using UmaTest.Infra.Helper; | |
9 | + | |
10 | +namespace UmaTest.App.Domain.Model.Repository.Database.Dto | |
11 | +{ | |
12 | + public class TokuUmaInfo : NToku | |
13 | + { | |
14 | + public TokuUmaInfo() | |
15 | + { | |
16 | + } | |
17 | + | |
18 | + [Ignore] | |
19 | + public NUma Uma { get; set; } | |
20 | + } | |
21 | +} |
@@ -0,0 +1,21 @@ | ||
1 | +using PetaPoco; | |
2 | +using System; | |
3 | +using System.Collections.Generic; | |
4 | +using System.Linq; | |
5 | +using System.Text; | |
6 | +using System.Threading.Tasks; | |
7 | +using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2; | |
8 | +using UmaTest.Infra.Helper; | |
9 | + | |
10 | +namespace UmaTest.App.Domain.Model.Repository.Database.Dto | |
11 | +{ | |
12 | + public class UmaInfo : NUmaRace | |
13 | + { | |
14 | + public UmaInfo() | |
15 | + { | |
16 | + } | |
17 | + | |
18 | + [Ignore] | |
19 | + public NUma Uma { get; set; } | |
20 | + } | |
21 | +} |
@@ -9,19 +9,19 @@ using UmaTest.App.Domain.Model.Repository.Database.Entity.EveryDB2; | ||
9 | 9 | |
10 | 10 | namespace UmaTest.App.Domain.Model.Repository.Database.Dto |
11 | 11 | { |
12 | - public class NUmaRaceInfo : NUmaRace | |
12 | + public class UmaRaceInfo : NUmaRace | |
13 | 13 | { |
14 | - public NUmaRaceInfo() | |
14 | + public UmaRaceInfo() | |
15 | 15 | { |
16 | 16 | } |
17 | 17 | |
18 | - public NUmaRaceInfo(NUmaRace ur, NRace r, NKisyu kisyu, NChokyo chokyo, NOddsTanpuku oddsTanpuku, NHansyoku chichi, NHansyoku hahachichi) | |
18 | + public UmaRaceInfo(NUmaRace ur, NRace r, NKisyu kisyu, NChokyo chokyo, OddsInfo oddsTanpuku, NHansyoku chichi, NHansyoku hahachichi) | |
19 | 19 | { |
20 | 20 | BeanHelper.Copy(this, ur); |
21 | 21 | Race = r; |
22 | 22 | Kisyu = kisyu; |
23 | 23 | Chokyo = chokyo; |
24 | - OddsTanpku = oddsTanpuku; | |
24 | + OddsTanpuku = oddsTanpuku; | |
25 | 25 | Chichi = chichi; |
26 | 26 | HahaChichi = hahachichi; |
27 | 27 | } |
@@ -36,7 +36,7 @@ namespace UmaTest.App.Domain.Model.Repository.Database.Dto | ||
36 | 36 | public NChokyo Chokyo { get; set; } |
37 | 37 | |
38 | 38 | [Ignore] |
39 | - public NOddsTanpuku OddsTanpku { get; set; } | |
39 | + public OddsInfo OddsTanpuku { get; set; } | |
40 | 40 | |
41 | 41 | [Ignore] |
42 | 42 | public NHansyoku Chichi { get; set; } |
@@ -12,7 +12,7 @@ namespace UmaTest.App.Domain.Translator | ||
12 | 12 | LoadManualUmaListResponse res, LoadManualUmaListRequest req, |
13 | 13 | List<string> kettoNums, |
14 | 14 | Dictionary<string, NUma> horses, |
15 | - Dictionary<string, IEnumerable<NUmaRaceInfo>> races, | |
15 | + Dictionary<string, IEnumerable<UmaRaceInfo>> races, | |
16 | 16 | Dictionary<string, IEnumerable<ChakudosuuSummary>> summaries); |
17 | 17 | } |
18 | 18 | } |
\ No newline at end of file |
@@ -13,8 +13,8 @@ namespace UmaTest.App.Domain.Translator | ||
13 | 13 | AsyncLoadSelectedRaceUmaListResponse res, |
14 | 14 | AsyncLoadSelectedRaceUmaListRequest req, |
15 | 15 | List<string> kettoNums, |
16 | - IEnumerable<NUmaRace> horses, | |
17 | - Dictionary<string, IEnumerable<NUmaRaceInfo>> races, | |
16 | + IEnumerable<UmaInfo> horses, | |
17 | + Dictionary<string, IEnumerable<UmaRaceInfo>> races, | |
18 | 18 | Dictionary<string, IEnumerable<ChakudosuuSummary>> summaries); |
19 | 19 | } |
20 | 20 | } |
\ No newline at end of file |
@@ -11,8 +11,8 @@ namespace UmaTest.App.Domain.Translator | ||
11 | 11 | AsyncLoadTokuUmaListResponse Translate( |
12 | 12 | AsyncLoadTokuUmaListResponse res, AsyncLoadTokuUmaListRequest req, |
13 | 13 | List<string> kettoNums, |
14 | - Dictionary<string, NToku> horses, | |
15 | - Dictionary<string, IEnumerable<NUmaRaceInfo>> races, | |
14 | + Dictionary<string, TokuUmaInfo> horses, | |
15 | + Dictionary<string, IEnumerable<UmaRaceInfo>> races, | |
16 | 16 | Dictionary<string, IEnumerable<ChakudosuuSummary>> summaries); |
17 | 17 | } |
18 | 18 | } |
\ No newline at end of file |
@@ -17,7 +17,7 @@ namespace UmaTest.App.Domain.Translator | ||
17 | 17 | LoadManualUmaListResponse res, LoadManualUmaListRequest req, |
18 | 18 | List<string> kettoNums, |
19 | 19 | Dictionary<string, NUma> horses, |
20 | - Dictionary<string, IEnumerable<NUmaRaceInfo>> races, | |
20 | + Dictionary<string, IEnumerable<UmaRaceInfo>> races, | |
21 | 21 | Dictionary<string, IEnumerable<ChakudosuuSummary>> summaries) |
22 | 22 | { |
23 | 23 |
@@ -17,8 +17,8 @@ namespace UmaTest.App.Domain.Translator | ||
17 | 17 | AsyncLoadSelectedRaceUmaListResponse res, |
18 | 18 | AsyncLoadSelectedRaceUmaListRequest req, |
19 | 19 | List<string> kettoNums, |
20 | - IEnumerable<NUmaRace> horses, | |
21 | - Dictionary<string, IEnumerable<NUmaRaceInfo>> races, | |
20 | + IEnumerable<UmaInfo> horses, | |
21 | + Dictionary<string, IEnumerable<UmaRaceInfo>> races, | |
22 | 22 | Dictionary<string, IEnumerable<ChakudosuuSummary>> summaries) |
23 | 23 | { |
24 | 24 | res.KettoNums = kettoNums; |
@@ -16,8 +16,8 @@ namespace UmaTest.App.Domain.Translator | ||
16 | 16 | public AsyncLoadTokuUmaListResponse Translate( |
17 | 17 | AsyncLoadTokuUmaListResponse res, AsyncLoadTokuUmaListRequest req, |
18 | 18 | List<string> kettoNums, |
19 | - Dictionary<string, NToku> horses, | |
20 | - Dictionary<string, IEnumerable<NUmaRaceInfo>> races, | |
19 | + Dictionary<string, TokuUmaInfo> horses, | |
20 | + Dictionary<string, IEnumerable<UmaRaceInfo>> races, | |
21 | 21 | Dictionary<string, IEnumerable<ChakudosuuSummary>> summaries) |
22 | 22 | { |
23 | 23 |
@@ -65,7 +65,7 @@ namespace UmaTest.App.Domain.UseCase.Interactor | ||
65 | 65 | |
66 | 66 | statusBarProxy.SetStatusText("馬に紐付くレース情報を読み込んでいます..."); |
67 | 67 | |
68 | - Dictionary<string, IEnumerable<NUmaRaceInfo>> races = await logicUmaRace.LoadRacesByKettoNumListAsync(kettoNums); | |
68 | + Dictionary<string, IEnumerable<UmaRaceInfo>> races = await logicUmaRace.LoadRacesByKettoNumListAsync(kettoNums); | |
69 | 69 | |
70 | 70 | statusBarProxy.SetStatusText("馬に紐付く着度数情報を読み込んでいます..."); |
71 | 71 |
@@ -35,13 +35,13 @@ namespace UmaTest.App.Domain.UseCase.Interactor | ||
35 | 35 | |
36 | 36 | statusBarProxy.SetStatusText("馬情報を読み込んでいます..."); |
37 | 37 | |
38 | - IEnumerable<NUmaRace> horses = await logicUmaRace.LoadHorsesBySelectedRaceAsync(req.Race); | |
38 | + IEnumerable<UmaInfo> horses = await logicUmaRace.LoadHorsesBySelectedRaceAsync(req.Race); | |
39 | 39 | |
40 | 40 | List<string> kettoNums = horses.Select(h => h.Kettonum).ToList(); |
41 | 41 | |
42 | 42 | statusBarProxy.SetStatusText("馬に紐付くレース情報を読み込んでいます..."); |
43 | 43 | |
44 | - Dictionary<string, IEnumerable<NUmaRaceInfo>> races = await logicUmaRace.LoadRacesByKettoNumListAsync(kettoNums); | |
44 | + Dictionary<string, IEnumerable<UmaRaceInfo>> races = await logicUmaRace.LoadRacesByKettoNumListAsync(kettoNums); | |
45 | 45 | |
46 | 46 | statusBarProxy.SetStatusText("馬に紐付く着度数情報を読み込んでいます..."); |
47 | 47 |
@@ -37,13 +37,13 @@ namespace UmaTest.App.Domain.UseCase.Interactor | ||
37 | 37 | |
38 | 38 | statusBarProxy.SetStatusText("馬情報を読み込んでいます..."); |
39 | 39 | |
40 | - Dictionary<string, NToku> horses = await logicTokuUma.LoadHorsesByTokuRaceAsync(req.Race); | |
40 | + Dictionary<string, TokuUmaInfo> horses = await logicTokuUma.LoadHorsesByTokuRaceAsync(req.Race); | |
41 | 41 | |
42 | 42 | List<string> kettoNums = horses.Select(h => h.Value.Kettonum).OrderBy(k => k).ToList(); |
43 | 43 | |
44 | 44 | statusBarProxy.SetStatusText("馬に紐付くレース情報を読み込んでいます..."); |
45 | 45 | |
46 | - Dictionary<string, IEnumerable<NUmaRaceInfo>> races = await logicUmaRace.LoadRacesByKettoNumListAsync(kettoNums); | |
46 | + Dictionary<string, IEnumerable<UmaRaceInfo>> races = await logicUmaRace.LoadRacesByKettoNumListAsync(kettoNums); | |
47 | 47 | |
48 | 48 | statusBarProxy.SetStatusText("馬に紐付く着度数情報を読み込んでいます..."); |
49 | 49 |
@@ -41,7 +41,7 @@ namespace UmaTest.App.Domain.UseCase.Interactor | ||
41 | 41 | |
42 | 42 | List<string> kettoNums = horses.Select(h => h.Value.Kettonum).OrderBy(k => k).ToList(); |
43 | 43 | |
44 | - Dictionary<string, IEnumerable<NUmaRaceInfo>> races = logicUmaRace.LoadRacesByKettoNumList(kettoNums); | |
44 | + Dictionary<string, IEnumerable<UmaRaceInfo>> races = logicUmaRace.LoadRacesByKettoNumList(kettoNums); | |
45 | 45 | Dictionary<string, IEnumerable<ChakudosuuSummary>> summaries = logicUmaRace.LoadChakudosuuSummaries(kettoNums); |
46 | 46 | |
47 | 47 | return translator.Translate(res, req, kettoNums, horses, races, summaries); |
@@ -17,8 +17,8 @@ namespace UmaTest.App.Domain.UseCase.Response | ||
17 | 17 | } |
18 | 18 | |
19 | 19 | public List<string> KettoNums { get; set; } |
20 | - public IEnumerable<NUmaRace> Horses { get; set; } | |
21 | - public Dictionary<string, IEnumerable<NUmaRaceInfo>> Races { get; set; } | |
20 | + public IEnumerable<UmaInfo> Horses { get; set; } | |
21 | + public Dictionary<string, IEnumerable<UmaRaceInfo>> Races { get; set; } | |
22 | 22 | public Dictionary<string, IEnumerable<ChakudosuuSummary>> Summaries { get; set; } |
23 | 23 | } |
24 | 24 | } |
@@ -17,8 +17,8 @@ namespace UmaTest.App.Domain.UseCase.Response | ||
17 | 17 | } |
18 | 18 | |
19 | 19 | public List<string> KettoNums { get; set; } |
20 | - public Dictionary<string, NToku> Horses { get; set; } | |
21 | - public Dictionary<string, IEnumerable<NUmaRaceInfo>> Races { get; set; } | |
20 | + public Dictionary<string, TokuUmaInfo> Horses { get; set; } | |
21 | + public Dictionary<string, IEnumerable<UmaRaceInfo>> Races { get; set; } | |
22 | 22 | public Dictionary<string, IEnumerable<ChakudosuuSummary>> Summaries { get; set; } |
23 | 23 | } |
24 | 24 | } |
@@ -17,7 +17,7 @@ namespace UmaTest.App.Domain.UseCase.Response | ||
17 | 17 | |
18 | 18 | public List<string> KettoNums { get; set; } |
19 | 19 | public Dictionary<string, NUma> Horses { get; set; } |
20 | - public Dictionary<string, IEnumerable<NUmaRaceInfo>> Races { get; set; } | |
20 | + public Dictionary<string, IEnumerable<UmaRaceInfo>> Races { get; set; } | |
21 | 21 | public Dictionary<string, IEnumerable<ChakudosuuSummary>> Summaries { get; set; } |
22 | 22 | } |
23 | 23 | } |
@@ -247,11 +247,12 @@ namespace UmaTest.App.Presentation.View | ||
247 | 247 | // |
248 | 248 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); |
249 | 249 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; |
250 | - this.BackColor = System.Drawing.SystemColors.Window; | |
250 | + this.BackColor = System.Drawing.SystemColors.Control; | |
251 | 251 | this.ClientSize = new System.Drawing.Size(862, 517); |
252 | 252 | this.Controls.Add(this.splitContainer1); |
253 | 253 | this.Controls.Add(this.statusStrip1); |
254 | 254 | this.Controls.Add(this.menuStrip1); |
255 | + this.DoubleBuffered = true; | |
255 | 256 | this.MainMenuStrip = this.menuStrip1; |
256 | 257 | this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); |
257 | 258 | this.Name = "MainWindow"; |
@@ -126,27 +126,29 @@ namespace UmaTest.App.Presentation.View | ||
126 | 126 | }, |
127 | 127 | new DataGridViewTextBoxColumn |
128 | 128 | { |
129 | - DataPropertyName = "ChichiBamei", | |
129 | + //DataPropertyName = "ChichiBamei", | |
130 | + DataPropertyName = "Konso.Chichi.Bamei", | |
130 | 131 | Name = "父", |
131 | 132 | }, |
132 | 133 | new DataGridViewTextBoxColumn |
133 | 134 | { |
134 | - DataPropertyName = "HahaChichiBamei", | |
135 | + //DataPropertyName = "HahaChichiBamei", | |
136 | + DataPropertyName = "Konso.HahaChichi.Bamei", | |
135 | 137 | Name = "母父", |
136 | 138 | }, |
137 | 139 | new DataGridViewTextBoxColumn |
138 | 140 | { |
139 | - DataPropertyName = "BataijyuFormatted", | |
141 | + DataPropertyName = "Konso.BataijyuFormatted", | |
140 | 142 | Name = "馬体重", |
141 | 143 | }, |
142 | 144 | new DataGridViewTextBoxColumn |
143 | 145 | { |
144 | - DataPropertyName = "KonsoTanOdds", | |
146 | + DataPropertyName = "Konso.OddsTanpuku.TanOddsFormatted", | |
145 | 147 | Name = "オッズ", |
146 | 148 | }, |
147 | 149 | new DataGridViewTextBoxColumn |
148 | 150 | { |
149 | - DataPropertyName = "KonsoNinki", | |
151 | + DataPropertyName = "Konso.Ninki", | |
150 | 152 | Name = "人気", |
151 | 153 | }, |
152 | 154 | new DataGridViewTextBoxColumn |
@@ -309,29 +311,29 @@ namespace UmaTest.App.Presentation.View | ||
309 | 311 | }, |
310 | 312 | new DataGridViewTextBoxColumn |
311 | 313 | { |
314 | + DataPropertyName = "Kimete", | |
315 | + Name = "決手", | |
316 | + }, | |
317 | + new DataGridViewTextBoxColumn | |
318 | + { | |
312 | 319 | DataPropertyName = "Kisyuryakusyo", |
313 | 320 | Name = "騎手", |
314 | 321 | }, |
315 | 322 | new DataGridViewTextBoxColumn |
316 | 323 | { |
317 | - DataPropertyName = "Futan", | |
324 | + DataPropertyName = "FutanFormatted", | |
318 | 325 | Name = "負担", |
319 | 326 | }, |
320 | 327 | new DataGridViewTextBoxColumn |
321 | 328 | { |
322 | - DataPropertyName = "Bataijyu", | |
329 | + DataPropertyName = "BataijyuFormatted", | |
323 | 330 | Name = "馬体重", |
324 | 331 | }, |
325 | 332 | new DataGridViewTextBoxColumn |
326 | 333 | { |
327 | - DataPropertyName = "Time", | |
334 | + DataPropertyName = "TimeFormatted", | |
328 | 335 | Name = "タイム", |
329 | 336 | }, |
330 | - new DataGridViewTextBoxColumn | |
331 | - { | |
332 | - DataPropertyName = "Kimete", | |
333 | - Name = "決手", | |
334 | - }, | |
335 | 337 | }; |
336 | 338 | |
337 | 339 | grid2Cols.Do(col => col.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter); |
@@ -342,21 +344,51 @@ namespace UmaTest.App.Presentation.View | ||
342 | 344 | // Custom Type Descriptor for Child Entity Properties |
343 | 345 | // |
344 | 346 | |
347 | + // 馬レース情報.レース情報 | |
348 | + TypeDescriptor.AddProvider( | |
349 | + new NestedTypeDescriptionProvider<NRace>(TypeDescriptor.GetProvider(typeof(UmaRaceInfo))), | |
350 | + typeof(UmaRaceInfo) | |
351 | + ); | |
352 | + | |
353 | + // 馬レース情報.騎手情報 | |
354 | + TypeDescriptor.AddProvider( | |
355 | + new NestedTypeDescriptionProvider<NKisyu>(TypeDescriptor.GetProvider(typeof(UmaRaceInfo))), | |
356 | + typeof(UmaRaceInfo) | |
357 | + ); | |
358 | + | |
359 | + // 馬レース情報.調教師情報 | |
360 | + TypeDescriptor.AddProvider( | |
361 | + new NestedTypeDescriptionProvider<NChokyo>(TypeDescriptor.GetProvider(typeof(UmaRaceInfo))), | |
362 | + typeof(UmaRaceInfo) | |
363 | + ); | |
364 | + | |
365 | + // 馬レース情報.オッズ単複情報 | |
366 | + TypeDescriptor.AddProvider( | |
367 | + new NestedTypeDescriptionProvider<OddsInfo>(TypeDescriptor.GetProvider(typeof(UmaRaceInfo))), | |
368 | + typeof(UmaRaceInfo) | |
369 | + ); | |
370 | + | |
371 | + // 馬サマリ行.着度数 | |
345 | 372 | TypeDescriptor.AddProvider( |
346 | 373 | new NestedTypeDescriptionProvider<ChakudosuuByGradeRowDto>(TypeDescriptor.GetProvider(typeof(UmaSummaryRowDto))), |
347 | 374 | typeof(UmaSummaryRowDto) |
348 | 375 | ); |
376 | + | |
377 | + // 馬サマリ表.馬毎レース行 | |
378 | + TypeDescriptionProvider nestedUmaRaceRowDtoProvider = | |
379 | + new NestedTypeDescriptionProvider<UmaRaceRowDto>(TypeDescriptor.GetProvider(typeof(UmaSummaryRowDto))); | |
380 | + | |
349 | 381 | TypeDescriptor.AddProvider( |
350 | - new NestedTypeDescriptionProvider<UmaRaceRowDto>(TypeDescriptor.GetProvider(typeof(UmaSummaryRowDto))), | |
351 | - typeof(UmaSummaryRowDto) | |
382 | + nestedUmaRaceRowDtoProvider, typeof(UmaSummaryRowDto) | |
352 | 383 | ); |
384 | + | |
385 | + // 馬サマリ行.馬毎レース行.繁殖馬情報 | |
353 | 386 | TypeDescriptor.AddProvider( |
354 | - new NestedTypeDescriptionProvider<NRace>(TypeDescriptor.GetProvider(typeof(NUmaRaceInfo))), | |
355 | - typeof(NUmaRaceInfo) | |
387 | + new NestedTypeDescriptionProvider<NHansyoku>(nestedUmaRaceRowDtoProvider), typeof(UmaSummaryRowDto) | |
356 | 388 | ); |
357 | 389 | |
358 | 390 | // |
359 | - // Enable Double Buffering for too slow repaint problem on data grid view | |
391 | + // Enable Double Buffering for repainting too slow problem on data grid view | |
360 | 392 | // |
361 | 393 | |
362 | 394 | EnableDoubleBuffering(dataGridView1); |
@@ -31,7 +31,7 @@ namespace UmaTest.Infra.Adaptor.Controller.Handler | ||
31 | 31 | return null; |
32 | 32 | } |
33 | 33 | |
34 | - Logger.Trace($"asyncInteractor={asyncInteractor.ToString()}"); | |
34 | + Logger.Trace($"async interactor={asyncInteractor.ToString()}"); | |
35 | 35 | |
36 | 36 | UseCaseResponse res = await asyncInteractor.InteractAsync(req); |
37 | 37 |
@@ -43,7 +43,7 @@ namespace UmaTest.Infra.Adaptor.Controller.Handler | ||
43 | 43 | |
44 | 44 | if (presenter != null) |
45 | 45 | { |
46 | - Logger.Trace($"asyncPresenter={presenter.ToString()}"); | |
46 | + Logger.Trace($"async presenter={presenter.ToString()}"); | |
47 | 47 | |
48 | 48 | return await presenter.HandleAsync(res); |
49 | 49 | } |
@@ -4,7 +4,7 @@ using System.ComponentModel; | ||
4 | 4 | using System.Linq.Expressions; |
5 | 5 | using UmaTest.Infra.Log; |
6 | 6 | |
7 | -namespace UmaTest.App.Adaptor.Gateway.ViewModel | |
7 | +namespace UmaTest.Infra.Adaptor.ViewModel | |
8 | 8 | { |
9 | 9 | |
10 | 10 | /// <summary> |
@@ -1,4 +1,5 @@ | ||
1 | 1 | using System; |
2 | +using System.Collections.Concurrent; | |
2 | 3 | using System.Collections.Generic; |
3 | 4 | using System.Linq; |
4 | 5 | using System.Linq.Expressions; |
@@ -10,56 +11,104 @@ namespace UmaTest.Infra.Helper | ||
10 | 11 | { |
11 | 12 | internal class BeanHelper |
12 | 13 | { |
13 | - internal static T CreateAndCopy<T>(Type toType, Object from) | |
14 | + private static readonly ConcurrentDictionary<Type, Dictionary<string, PropertyInfo>> gettersOnlyBeanPropInfos | |
15 | + = new ConcurrentDictionary<Type, Dictionary<string, PropertyInfo>>(); | |
16 | + | |
17 | + private static readonly ConcurrentDictionary<Type, Dictionary<string, PropertyInfo>> beanPropInfos | |
18 | + = new ConcurrentDictionary<Type, Dictionary<string, PropertyInfo>>(); | |
19 | + | |
20 | + internal static T CreateAndCopy<T>(Type toType, Object from) | |
14 | 21 | { |
15 | 22 | T to = (T)toType.GetConstructor(Type.EmptyTypes).Invoke(null); |
16 | 23 | Copy(to, from); |
17 | 24 | return to; |
18 | 25 | } |
19 | 26 | |
20 | - internal static T Copy<T>(T to, Object from) | |
27 | + internal static T Copy<T>(T to, Object from, Boolean merge = false) | |
21 | 28 | { |
22 | - //それぞれのタイプを取得 | |
23 | - Type fromType = from.GetType(); | |
24 | - Type toType = to.GetType(); | |
25 | - | |
26 | - //メンバーリスト | |
27 | - MemberInfo[] fromMembers = fromType.GetMembers(BindingFlags.Public | BindingFlags.Instance); | |
28 | - MemberInfo[] toMembers = toType.GetMembers(BindingFlags.Public | BindingFlags.Instance); | |
29 | - //名称用のリストを用意 | |
30 | - List<string> nameList = new List<string>(); | |
31 | - foreach (MemberInfo m in toMembers) | |
32 | - { | |
33 | - //プロパティの場合のみ | |
34 | - if (m.MemberType == MemberTypes.Property) | |
35 | - { | |
36 | - PropertyInfo info = toType.GetProperty(m.Name); | |
37 | - MethodInfo getter = info.GetSetMethod(); | |
38 | - MethodInfo setter = info.GetSetMethod(); | |
39 | - if (getter != null && setter != null) | |
29 | + Dictionary<string, PropertyInfo> fromProperties = ExtractProperties(from.GetType(), true); | |
30 | + Dictionary<string, PropertyInfo> toProperties = ExtractProperties(to.GetType()); | |
31 | + | |
32 | + foreach (string name in fromProperties.Keys) | |
33 | + { | |
34 | + if (toProperties.ContainsKey(name)) | |
35 | + { | |
36 | + PropertyInfo toProperty = toProperties[name]; | |
37 | + PropertyInfo fromProperty = fromProperties[name]; | |
38 | + | |
39 | + object fromValue = fromProperty.GetValue(from, null); | |
40 | + | |
41 | + if (merge) | |
40 | 42 | { |
41 | - nameList.Add(m.Name); | |
42 | - } | |
43 | - } | |
44 | - } | |
45 | - | |
46 | - //同名プロパティの値をコピー | |
47 | - foreach (MemberInfo m in fromMembers) | |
48 | - { | |
49 | - if (m.MemberType == MemberTypes.Property) | |
50 | - { | |
51 | - //同名のプパティがあれば転送する | |
52 | - if (nameList.Contains(m.Name)) | |
53 | - { | |
54 | - toType.GetProperty(m.Name).SetValue(to, fromType.GetProperty(m.Name).GetValue(from, null)); | |
55 | - } | |
56 | - } | |
57 | - } | |
43 | + object toValue = toProperty.GetValue(to, null); | |
44 | + if ((toValue != null) || (fromValue == null)) | |
45 | + { | |
46 | + continue; | |
47 | + } | |
48 | + } | |
58 | 49 | |
59 | - return to; | |
60 | - } | |
50 | + if (toProperty.PropertyType.IsAssignableFrom(fromValue.GetType())) | |
51 | + { | |
52 | + toProperty.SetValue(to, fromValue); | |
53 | + } | |
54 | + else | |
55 | + { | |
56 | + throw new ArgumentException($"]{toProperty.PropertyType} {to.GetType()}.{name}] is not assignable from [{fromProperty.PropertyType} {from.GetType()}.{name}]"); | |
57 | + } | |
58 | + } | |
59 | + } | |
60 | + | |
61 | + return to; | |
62 | + } | |
63 | + | |
64 | + internal static Dictionary<string, PropertyInfo> ExtractProperties(Type type, Boolean allowGetterOnly = false) | |
65 | + { | |
66 | + if (allowGetterOnly) | |
67 | + { | |
68 | + if (gettersOnlyBeanPropInfos.ContainsKey(type)) | |
69 | + { | |
70 | + return gettersOnlyBeanPropInfos[type]; | |
71 | + } | |
72 | + } | |
73 | + else | |
74 | + { | |
75 | + if (beanPropInfos.ContainsKey(type)) | |
76 | + { | |
77 | + return beanPropInfos[type]; | |
78 | + } | |
79 | + } | |
80 | + | |
81 | + MemberInfo[] members = type.GetMembers(BindingFlags.Public | BindingFlags.Instance); | |
82 | + | |
83 | + Dictionary<string, PropertyInfo> res = new Dictionary<string, PropertyInfo>(); | |
84 | + | |
85 | + foreach (MemberInfo m in members) | |
86 | + { | |
87 | + if (m.MemberType == MemberTypes.Property) | |
88 | + { | |
89 | + PropertyInfo info = type.GetProperty(m.Name); | |
90 | + MethodInfo getter = info.GetSetMethod(); | |
91 | + MethodInfo setter = info.GetSetMethod(); | |
92 | + if (getter != null && (allowGetterOnly || (setter != null)) ) | |
93 | + { | |
94 | + res.Add(m.Name, info); | |
95 | + } | |
96 | + } | |
97 | + } | |
98 | + | |
99 | + if (allowGetterOnly) | |
100 | + { | |
101 | + gettersOnlyBeanPropInfos.TryAdd(type, res); | |
102 | + } | |
103 | + else | |
104 | + { | |
105 | + beanPropInfos.TryAdd(type, res); | |
106 | + } | |
107 | + | |
108 | + return res; | |
109 | + } | |
61 | 110 | |
62 | - public static string GetPropertyName<TResult>(Expression<Func<TResult>> propertyName) | |
111 | + public static string GetPropertyName<TResult>(Expression<Func<TResult>> propertyName) | |
63 | 112 | { |
64 | 113 | if (!(propertyName.Body is MemberExpression memberEx)) |
65 | 114 | throw new ArgumentException(); |
@@ -102,6 +102,9 @@ | ||
102 | 102 | <Reference Include="System.Xml" /> |
103 | 103 | </ItemGroup> |
104 | 104 | <ItemGroup> |
105 | + <Compile Include="App\Domain\Model\Repository\Database\Dto\OddsInfo.cs" /> | |
106 | + <Compile Include="App\Domain\Model\Repository\Database\Dto\TokuUmaInfo.cs" /> | |
107 | + <Compile Include="App\Domain\Model\Repository\Database\Dto\UmaInfo.cs" /> | |
105 | 108 | <Compile Include="Infra\Adaptor\Controller\EventObserver.cs" /> |
106 | 109 | <Compile Include="App\Adaptor\Gateway\UI\IManualHorseListProxy.cs" /> |
107 | 110 | <Compile Include="App\Adaptor\Gateway\UI\ISearchRaceViewProxy.cs" /> |
@@ -232,7 +235,7 @@ | ||
232 | 235 | <Compile Include="Infra\Domain\DaoException.cs" /> |
233 | 236 | <Compile Include="App\Domain\Model\Repository\Database\Dao\NUmaRaceDao.cs" /> |
234 | 237 | <Compile Include="App\Domain\Model\Repository\Database\Dto\ChakudosuuSummary.cs" /> |
235 | - <Compile Include="App\Domain\Model\Repository\Database\Dto\NUmaRaceInfo.cs" /> | |
238 | + <Compile Include="App\Domain\Model\Repository\Database\Dto\UmaRaceInfo.cs" /> | |
236 | 239 | <Compile Include="App\Domain\Model\Repository\Database\Entity\EveryDB2.cs" /> |
237 | 240 | <Compile Include="Infra\Adaptor\Gateway\UI\DlgInfo.cs" /> |
238 | 241 | <Compile Include="Infra\Adaptor\Gateway\UI\IUserDialogProxy.cs" /> |