You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

201 lines
7.7KB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Text;
  5. using OpenQA.Selenium;
  6. using OpenQA.Selenium.Chrome;
  7. using CSVDownloader.Code;
  8. using CSVDownloader.Store.CreditCSVData;
  9. using CSVDownloader.Store.QRCSVData;
  10. using ExpectedConditions = OpenQA.Selenium.Support.UI.ExpectedConditions;
  11. namespace CSVDownloader.Web {
  12. class DaitoController : WebController {
  13. private readonly String url_ = "https://crevation.net";
  14. private readonly String home_url_ = "https://crevation.net/";
  15. private readonly String filename_credit = "daito_credit.csv";
  16. private readonly String filename_qr = "daito_qr.csv";
  17. private enum XpathKey {
  18. INPUT_LOGIN_USERNAME,
  19. INPUT_LOGIN_PASSWORD,
  20. BUTTON_MENU,
  21. BUTTON_KESSAI_KANRI,
  22. BUTTON_CREDIT_KESSAI,
  23. BUTTON_QR_KESSAI,
  24. INPUT_TARGET_FROM,
  25. INPUT_TARGET_TO,
  26. BUTTON_DOWNLOAD_CSV,
  27. BUTTON_LOGOUT,
  28. };
  29. private IDictionary<XpathKey, string> xpath_map_ = new Dictionary<XpathKey, string>()
  30. {
  31. {XpathKey.INPUT_LOGIN_USERNAME,@"//*[@id='wrapper']/div/div/div/div/div[2]/form/fieldset/div[1]/input" },
  32. {XpathKey.INPUT_LOGIN_PASSWORD,@"//*[@id='wrapper']/div/div/div/div/div[2]/form/fieldset/div[2]/input" },
  33. {XpathKey.BUTTON_MENU,@"//*[@id='js-show-popup']" },
  34. {XpathKey.BUTTON_KESSAI_KANRI,@"//*[@id='side-menu']/li[4]/a" },
  35. {XpathKey.BUTTON_CREDIT_KESSAI,@"//*[@id='side-menu']/li[4]/ul/li[1]/a" },
  36. {XpathKey.BUTTON_QR_KESSAI,@"//*[@id='side-menu']/li[4]/ul/li[2]/a" },
  37. {XpathKey.INPUT_TARGET_FROM,@"//*[@id='settlementTimeFrom']" },
  38. {XpathKey.INPUT_TARGET_TO,@"//*[@id='settlementTimeTo']" },
  39. {XpathKey.BUTTON_DOWNLOAD_CSV,@"//*[@id='submitCreateCsv']" },
  40. {XpathKey.BUTTON_LOGOUT,@"//*[@id='side-menu']/li[11]/a" },
  41. };
  42. public DaitoController(ChromeDriver driver) : base(driver) {
  43. agent_ = CreditAgent.Daito;
  44. }
  45. public override ResultCode Login(LoginInfo info) {
  46. bool enter = true;
  47. try {
  48. driver_.Navigate().GoToUrl(url_);
  49. Send(xpath_map_[XpathKey.INPUT_LOGIN_USERNAME], info.user_name);
  50. Send(xpath_map_[XpathKey.INPUT_LOGIN_PASSWORD], info.password, enter);
  51. // ログイン後のメニューボタンが表示されることを確認する。
  52. wait_.Until(ExpectedConditions.ElementExists(By.XPath(xpath_map_[XpathKey.BUTTON_MENU])));
  53. } catch (Exception e) {
  54. logger_.Error(e.Message);
  55. return ResultCode.NG;
  56. }
  57. return ResultCode.OK;
  58. }
  59. public override ResultCode Download(DateTime from, DateTime to) {
  60. // クレジットカード承認結果一覧画面に移行
  61. Click(xpath_map_[XpathKey.BUTTON_MENU]);
  62. Click(xpath_map_[XpathKey.BUTTON_KESSAI_KANRI]);
  63. Click(xpath_map_[XpathKey.BUTTON_CREDIT_KESSAI]);
  64. // 承認処理日のFrom-Toを入力
  65. const String date_format = "yyyy年MM月dd日";
  66. Send(xpath_map_[XpathKey.INPUT_TARGET_FROM], from.ToString(date_format));
  67. Send(xpath_map_[XpathKey.INPUT_TARGET_TO], to.ToString(date_format));
  68. // CSV吐き出しボタンをクリックし、CSVをダウンロード
  69. wait_.Until(ExpectedConditions.ElementToBeClickable(By.XPath(xpath_map_[XpathKey.BUTTON_DOWNLOAD_CSV])));
  70. Click(xpath_map_[XpathKey.BUTTON_DOWNLOAD_CSV]);
  71. WaitForDownload(filename_credit);
  72. // QR決済結果結果一覧画面に移行
  73. Click(xpath_map_[XpathKey.BUTTON_MENU]);
  74. Click(xpath_map_[XpathKey.BUTTON_KESSAI_KANRI]);
  75. Click(xpath_map_[XpathKey.BUTTON_QR_KESSAI]);
  76. // 承認処理日のFrom-Toを入力
  77. Send(xpath_map_[XpathKey.INPUT_TARGET_FROM], from.ToString(date_format));
  78. Send(xpath_map_[XpathKey.INPUT_TARGET_TO], to.ToString(date_format));
  79. // CSV吐き出しボタンをクリックし、CSVをダウンロード
  80. wait_.Until(ExpectedConditions.ElementToBeClickable(By.XPath(xpath_map_[XpathKey.BUTTON_DOWNLOAD_CSV])));
  81. Click(xpath_map_[XpathKey.BUTTON_DOWNLOAD_CSV]);
  82. WaitForDownload(filename_qr);
  83. return ResultCode.OK;
  84. }
  85. public override ResultCode Logout() {
  86. driver_.Navigate().GoToUrl(home_url_);
  87. Click(xpath_map_[XpathKey.BUTTON_MENU]);
  88. Click(xpath_map_[XpathKey.BUTTON_LOGOUT]);
  89. wait_.Until(ExpectedConditions.ElementIsVisible(By.XPath(xpath_map_[XpathKey.INPUT_LOGIN_USERNAME])));
  90. return ResultCode.OK;
  91. }
  92. public override List<CreditCSVData> GetCreditCSVDataList() {
  93. var result_list = new List<CreditCSVData>();
  94. var list = GetFileContents(filename_credit);
  95. foreach (var line in list) {
  96. result_list.Add(new CreditCSVDataDaito() {
  97. spot_id = GetSpotID(line[(int)CreditCSVDataDaito.ColName.ParkingName]),
  98. parking_name = line[(int)CreditCSVDataDaito.ColName.ParkingName],
  99. developer = line[(int)CreditCSVDataDaito.ColName.Developer],
  100. adjust_type = line[(int)CreditCSVDataDaito.ColName.AdjustType],
  101. fee_type = line[(int)CreditCSVDataDaito.ColName.FeeType],
  102. reception_datetime = DateTime.Parse(line[(int)CreditCSVDataDaito.ColName.ReceptionDatetime]),
  103. amount = int.Parse(line[(int)CreditCSVDataDaito.ColName.Amount]),
  104. reception_no = line[(int)CreditCSVDataDaito.ColName.ReceptionNo],
  105. response_no = line[(int)CreditCSVDataDaito.ColName.ResponseNo],
  106. error_code1 = line[(int)CreditCSVDataDaito.ColName.ErrorCode1],
  107. error_code2 = line[(int)CreditCSVDataDaito.ColName.ErrorCode2]
  108. });
  109. }
  110. return result_list;
  111. }
  112. public override List<QRCSVData> GetQRCSVDataList() {
  113. var result_list = new List<QRCSVData>();
  114. var list = GetFileContents(filename_qr);
  115. foreach (var line in list) {
  116. result_list.Add(new QRCSVDataDaito() {
  117. spot_id = GetSpotID(line[(int)QRCSVDataDaito.ColName.ParkingName]),
  118. parking_name = line[(int)QRCSVDataDaito.ColName.ParkingName],
  119. developer = line[(int)QRCSVDataDaito.ColName.Developer],
  120. reception_datetime = DateTime.Parse(line[(int)QRCSVDataDaito.ColName.ReceptionDatetime]),
  121. company = line[(int)QRCSVDataDaito.ColName.Company],
  122. amount = int.Parse(line[(int)QRCSVDataDaito.ColName.Amount]),
  123. adjust_no = line[(int)QRCSVDataDaito.ColName.AdjustNo],
  124. error_code = line[(int)QRCSVDataDaito.ColName.ErrorCode],
  125. });
  126. }
  127. return result_list;
  128. }
  129. private List<String[]> GetFileContents(String filename) {
  130. var list = new List<String[]>();
  131. var dir = new DirectoryInfo(DriverFactory.GetDownloadDir());
  132. var config = new CSVConfig() {
  133. header = true,
  134. };
  135. config.remove_char.Add("\"");
  136. var sjis_enc = Encoding.GetEncoding("Shift-JIS");
  137. foreach (var file in dir.GetFiles()) {
  138. if (file.Name.Contains(filename)) {
  139. var result = ReadCsv(file.FullName, config, sjis_enc);
  140. list.AddRange(result);
  141. }
  142. }
  143. return list;
  144. }
  145. }
  146. }