Przeglądaj źródła

大都電子マネー対応

master
sosuke.iwabuchi 2 lat temu
rodzic
commit
45b9160014
3 zmienionych plików z 188 dodań i 7 usunięć
  1. +4
    -0
      CSVDownloader/Program.cs
  2. +108
    -0
      CSVDownloader/Store/ElectricMoneyCSVData/DaitoElectronicMoneyDataStore.cs
  3. +76
    -7
      CSVDownloader/Web/DaitoController.cs

+ 4
- 0
CSVDownloader/Program.cs Wyświetl plik

@@ -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


+ 108
- 0
CSVDownloader/Store/ElectricMoneyCSVData/DaitoElectronicMoneyDataStore.cs Wyświetl plik

@@ -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<ElectronicMoneyCSVData> 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;
}

}
}

+ 76
- 7
CSVDownloader/Web/DaitoController.cs Wyświetl plik

@@ -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<CreditCSVData>();


var list = GetFileContents(filename_credit);
var list = GetFileContents(filename_credit_);

bool failed_flg = false;
var failed_parking_name_hs_table = new HashSet<String>();
@@ -182,7 +200,7 @@ namespace CSVDownloader.Web {

var result_list = new List<QRCSVData>();

var list = GetFileContents(filename_qr);
var list = GetFileContents(filename_qr_);

bool failed_flg = false;
var failed_parking_name_hs_table = new HashSet<String>();
@@ -229,6 +247,57 @@ namespace CSVDownloader.Web {
return result_list;
}

public override List<ElectronicMoneyCSVData> GetElectronicMoneyCSVDataList() {


var result_list = new List<ElectronicMoneyCSVData>();

var list = GetFileContents(filename_electronic_money_);

bool failed_flg = false;
var failed_parking_name_hs_table = new HashSet<String>();

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<Store.ParkingCreditCardAgenciesSpotIDError>();
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<String[]> GetFileContents(String filename) {
var list = new List<String[]>();
var dir = new DirectoryInfo(DriverFactory.GetDownloadDir());


Ładowanie…
Anuluj
Zapisz