diff --git a/CSVDownloader/Program.cs b/CSVDownloader/Program.cs index d6e2489..e549265 100644 --- a/CSVDownloader/Program.cs +++ b/CSVDownloader/Program.cs @@ -70,6 +70,8 @@ namespace CSVDownloader { private DaitoQRDataStore daito_qr_store_; + private DaitoElectronicMoneyDataStore daito_electronic_money_store_; + private CreditCSVDataGMOStore gmo_credit_store_; private GMOElectronicMoneyDataStore gmo_electronic_money_store_; @@ -129,6 +131,7 @@ namespace CSVDownloader { daito_qr_store_ = new DaitoQRDataStore(conn_); gmo_credit_store_ = new CreditCSVDataGMOStore(conn_); gmo_electronic_money_store_ = new GMOElectronicMoneyDataStore(conn_); + daito_electronic_money_store_ = new DaitoElectronicMoneyDataStore(conn_); } catch (Exception e) { logger_.Error("DB接続失敗"); @@ -174,6 +177,7 @@ namespace CSVDownloader { web_controller_list_.Add(controller); credit_datastore_map_.Add(controller.GetCreditAgent(), daito_credit_store_); qr_datastore_map_.Add(controller.GetCreditAgent(), daito_qr_store_); + electronic_money_datastore_map_.Add(controller.GetCreditAgent(), daito_electronic_money_store_); } // Zeus diff --git a/CSVDownloader/Store/ElectricMoneyCSVData/DaitoElectronicMoneyDataStore.cs b/CSVDownloader/Store/ElectricMoneyCSVData/DaitoElectronicMoneyDataStore.cs new file mode 100644 index 0000000..b6f611d --- /dev/null +++ b/CSVDownloader/Store/ElectricMoneyCSVData/DaitoElectronicMoneyDataStore.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Data; + +using MySql.Data.MySqlClient; + + +namespace CSVDownloader.Store.ElectronicMoneyDataStore { + + + class DaitoElectronicMoneyData : ElectronicMoneyCSVData { + + public String parking_name = ""; + public DateTime reception_datetime = DateTime.Now; + public String adjust_type = ""; + public int amount = 0; + public String trade_id = ""; + public String adjust_result = ""; + + public enum ColName { + SpotID = 100, + ParkingName = 0, + ReceptionDatetime, + AdjustType, + Amount, + TradeID, + AdjustResult, + UpdDate, + UpdStaff, + RegDate, + RegStaff + }; + } + + class DaitoElectronicMoneyDataStore : ElectronicMoneyCSVDataStore { + + private static readonly String table_name_ = "electronic_money_download_data_daito"; + + private String delete_sql_ = $"delete from {table_name_} where " + + $"{DaitoElectronicMoneyData.ColName.ReceptionDatetime.ToString()} between " + + $"@From{DaitoElectronicMoneyData.ColName.ReceptionDatetime.ToString()} and " + + $"@To{DaitoElectronicMoneyData.ColName.ReceptionDatetime.ToString()};"; + + + public DaitoElectronicMoneyDataStore(MySqlConnection conn) : base(conn) { + + } + + + public override void Save(List list) { + Code.ResultCode ret; + var table = new DataTable(); + + table.Columns.Add($"{DaitoElectronicMoneyData.ColName.SpotID}"); + table.Columns.Add($"{DaitoElectronicMoneyData.ColName.ParkingName}"); + table.Columns.Add($"{DaitoElectronicMoneyData.ColName.ReceptionDatetime}"); + table.Columns.Add($"{DaitoElectronicMoneyData.ColName.AdjustType}"); + table.Columns.Add($"{DaitoElectronicMoneyData.ColName.Amount}"); + table.Columns.Add($"{DaitoElectronicMoneyData.ColName.TradeID}"); + table.Columns.Add($"{DaitoElectronicMoneyData.ColName.AdjustResult}"); + table.Columns.Add($"{DaitoElectronicMoneyData.ColName.UpdDate}"); + table.Columns.Add($"{DaitoElectronicMoneyData.ColName.UpdStaff}"); + table.Columns.Add($"{DaitoElectronicMoneyData.ColName.RegDate}"); + table.Columns.Add($"{DaitoElectronicMoneyData.ColName.RegStaff}"); + + + foreach (DaitoElectronicMoneyData data in list) { + var row = table.NewRow(); + + row[$"{DaitoElectronicMoneyData.ColName.SpotID}"] = data.spot_id; + row[$"{DaitoElectronicMoneyData.ColName.ParkingName}"] = data.parking_name; + row[$"{DaitoElectronicMoneyData.ColName.ReceptionDatetime}"] = data.reception_datetime; + row[$"{DaitoElectronicMoneyData.ColName.AdjustType}"] = data.adjust_type; + row[$"{DaitoElectronicMoneyData.ColName.Amount}"] = data.amount; + row[$"{DaitoElectronicMoneyData.ColName.TradeID}"] = data.trade_id; + row[$"{DaitoElectronicMoneyData.ColName.AdjustResult}"] = data.adjust_result; + row[$"{DaitoElectronicMoneyData.ColName.UpdDate}"] = data.upd_date; + row[$"{DaitoElectronicMoneyData.ColName.UpdStaff}"] = data.upd_staff; + row[$"{DaitoElectronicMoneyData.ColName.RegDate}"] = data.reg_date; + row[$"{DaitoElectronicMoneyData.ColName.RegStaff}"] = data.reg_staff; + + + table.Rows.Add(row); + } + + + ret = BulkInsertData(table_name_, table); + + if (ret != Code.ResultCode.OK) { + throw new Exception("登録失敗 Daito 電子マネー"); + } + } + public override int Delete(DateTime from, DateTime to) { + + var bindlist = new List<(String, object)> { + ("From"+DaitoElectronicMoneyData.ColName.ReceptionDatetime.ToString(), from.ToString("yyyy-MM-dd")), + ("To"+DaitoElectronicMoneyData.ColName.ReceptionDatetime.ToString(), to.AddDays(1).ToString("yyyy-MM-dd")) + }; + + var delete_count = DeleteData(delete_sql_, bindlist); + if (delete_count == -1) { + throw new Exception("削除失敗 大都電子マネー"); + } + return delete_count; + } + + } +} diff --git a/CSVDownloader/Web/DaitoController.cs b/CSVDownloader/Web/DaitoController.cs index 5e4efb9..783dfee 100644 --- a/CSVDownloader/Web/DaitoController.cs +++ b/CSVDownloader/Web/DaitoController.cs @@ -11,6 +11,7 @@ using CSVDownloader.Store.QRCSVData; using CSVDownloader.Exceptions; using ExpectedConditions = OpenQA.Selenium.Support.UI.ExpectedConditions; +using CSVDownloader.Store.ElectronicMoneyDataStore; namespace CSVDownloader.Web { class DaitoController : WebController { @@ -19,8 +20,9 @@ namespace CSVDownloader.Web { private readonly String home_url_ = "https://crevation.net/"; - private readonly String filename_credit = "daito_credit.csv"; - private readonly String filename_qr = "daito_qr.csv"; + private readonly String filename_credit_ = "daito_credit.csv"; + private readonly String filename_qr_ = "daito_qr.csv"; + private readonly String filename_electronic_money_ = "daito_electronic_money.csv"; private enum XpathKey { INPUT_LOGIN_USERNAME, @@ -29,6 +31,7 @@ namespace CSVDownloader.Web { BUTTON_KESSAI_KANRI, BUTTON_CREDIT_KESSAI, BUTTON_QR_KESSAI, + BUTTON_ELECTORONIC_MONEY_KESSAI, INPUT_TARGET_FROM, INPUT_TARGET_TO, BUTTON_DOWNLOAD_CSV, @@ -43,6 +46,7 @@ namespace CSVDownloader.Web { {XpathKey.BUTTON_KESSAI_KANRI,@"//*[@id='side-menu']/li[4]/a" }, {XpathKey.BUTTON_CREDIT_KESSAI,@"//*[@id='side-menu']/li[4]/ul/li[1]/a" }, {XpathKey.BUTTON_QR_KESSAI,@"//*[@id='side-menu']/li[4]/ul/li[2]/a" }, + {XpathKey.BUTTON_ELECTORONIC_MONEY_KESSAI,@"//*[@id='side-menu']/li[4]/ul/li[3]/a" }, {XpathKey.INPUT_TARGET_FROM,@"//*[@id='settlementTimeFrom']" }, {XpathKey.INPUT_TARGET_TO,@"//*[@id='settlementTimeTo']" }, {XpathKey.BUTTON_DOWNLOAD_CSV,@"//*[@id='submitCreateCsv']" }, @@ -89,7 +93,7 @@ namespace CSVDownloader.Web { wait_.Until(ExpectedConditions.ElementToBeClickable(By.XPath(xpath_map_[XpathKey.BUTTON_DOWNLOAD_CSV]))); Click(xpath_map_[XpathKey.BUTTON_DOWNLOAD_CSV]); - WaitForDownload(filename_credit); + WaitForDownload(filename_credit_); // QR決済結果結果一覧画面に移行 Click(xpath_map_[XpathKey.BUTTON_MENU]); @@ -104,7 +108,22 @@ namespace CSVDownloader.Web { wait_.Until(ExpectedConditions.ElementToBeClickable(By.XPath(xpath_map_[XpathKey.BUTTON_DOWNLOAD_CSV]))); Click(xpath_map_[XpathKey.BUTTON_DOWNLOAD_CSV]); - WaitForDownload(filename_qr); + WaitForDownload(filename_qr_); + + // 電子マネー決済結果結果一覧画面に移行 + Click(xpath_map_[XpathKey.BUTTON_MENU]); + //Click(xpath_map_[XpathKey.BUTTON_KESSAI_KANRI]); なぜかタブがひらいたままなので、これはスキップする。 + Click(xpath_map_[XpathKey.BUTTON_ELECTORONIC_MONEY_KESSAI]); + + // 承認処理日のFrom-Toを入力 + Send(xpath_map_[XpathKey.INPUT_TARGET_FROM], from.ToString(date_format)); + Send(xpath_map_[XpathKey.INPUT_TARGET_TO], to.ToString(date_format)); + + // CSV吐き出しボタンをクリックし、CSVをダウンロード + wait_.Until(ExpectedConditions.ElementToBeClickable(By.XPath(xpath_map_[XpathKey.BUTTON_DOWNLOAD_CSV]))); + + Click(xpath_map_[XpathKey.BUTTON_DOWNLOAD_CSV]); + WaitForDownload(filename_electronic_money_); return ResultCode.OK; @@ -128,8 +147,7 @@ namespace CSVDownloader.Web { var result_list = new List(); - - var list = GetFileContents(filename_credit); + var list = GetFileContents(filename_credit_); bool failed_flg = false; var failed_parking_name_hs_table = new HashSet(); @@ -182,7 +200,7 @@ namespace CSVDownloader.Web { var result_list = new List(); - var list = GetFileContents(filename_qr); + var list = GetFileContents(filename_qr_); bool failed_flg = false; var failed_parking_name_hs_table = new HashSet(); @@ -229,6 +247,57 @@ namespace CSVDownloader.Web { return result_list; } + public override List GetElectronicMoneyCSVDataList() { + + + var result_list = new List(); + + var list = GetFileContents(filename_electronic_money_); + + bool failed_flg = false; + var failed_parking_name_hs_table = new HashSet(); + + foreach (var line in list) { + + var parking_name = line[(int)QRCSVDataDaito.ColName.ParkingName]; + try { + + result_list.Add(new DaitoElectronicMoneyData() { + spot_id = GetSpotID(parking_name), + parking_name = parking_name, + reception_datetime = DateTime.Parse(line[(int)DaitoElectronicMoneyData.ColName.ReceptionDatetime]), + adjust_type = line[(int)DaitoElectronicMoneyData.ColName.AdjustType], + amount = int.Parse(line[(int)DaitoElectronicMoneyData.ColName.Amount]), + trade_id = line[(int)DaitoElectronicMoneyData.ColName.TradeID], + adjust_result = line[(int)DaitoElectronicMoneyData.ColName.AdjustResult], + }); + } catch (ArgumentException) { + failed_parking_name_hs_table.Add(parking_name); + failed_flg = true; + continue; + } + + } + + if (failed_flg) { + + var error_list = new List(); + logger_.Error("失敗駐車場名"); + foreach (var ele in failed_parking_name_hs_table) { + error_list.Add(new Store.ParkingCreditCardAgenciesSpotIDError() { + creditcard_agencies_id = CreditAgenciesMap.GetID(agent_), + creditcard_agencies_spot_name = ele + }); + logger_.Error($"駐車場 \"{ele}\""); + } + + throw new SpotNameNotMatchException(error_list); + + } + + return result_list; + } + private List GetFileContents(String filename) { var list = new List(); var dir = new DirectoryInfo(DriverFactory.GetDownloadDir());