Parcourir la source

GMO対応

master
sosuke.iwabuchi il y a 2 ans
Parent
révision
291fb3581e
9 fichiers modifiés avec 780 ajouts et 6 suppressions
  1. +57
    -6
      CSVDownloader/Program.cs
  2. +155
    -0
      CSVDownloader/Store/CreditCSVData/GMOCreditDataStore.cs
  3. +26
    -0
      CSVDownloader/Store/ElectricMoneyCSVData/ElectronicMoneyDataStore.cs
  4. +168
    -0
      CSVDownloader/Store/ElectricMoneyCSVData/GMOElectronicMoneyDataStore.cs
  5. +345
    -0
      CSVDownloader/Web/GMOController.cs
  6. +1
    -0
      CSVDownloader/Web/LoginInfo.cs
  7. +28
    -0
      CSVDownloader/Web/WebController.cs
  8. BIN
      CSVDownloader/chromedriver.exe
  9. BIN
      chromedriver.exe

+ 57
- 6
CSVDownloader/Program.cs Voir le fichier

@@ -13,6 +13,8 @@ using CSVDownloader.File;
using CSVDownloader.Store;
using CSVDownloader.Store.CreditCSVData;
using CSVDownloader.Store.QRCSVData;
using CSVDownloader.Store.ElectronicMoneyDataStore;

using CSVDownloader.Web;
using CSVDownloader.Exceptions;

@@ -68,6 +70,10 @@ namespace CSVDownloader {

private DaitoQRDataStore daito_qr_store_;

private CreditCSVDataGMOStore gmo_credit_store_;

private GMOElectronicMoneyDataStore gmo_electronic_money_store_;

private ParkingCreditCardAgenciesSpotIDErrorDAO parking_credit_card_agencies_spotID_error_dao_;

private IConfigReader config_;
@@ -82,6 +88,8 @@ namespace CSVDownloader {

private Dictionary<Code.CreditAgent, QRCSVDataStore> qr_datastore_map_ = new Dictionary<Code.CreditAgent, QRCSVDataStore>();

private Dictionary<Code.CreditAgent, ElectronicMoneyCSVDataStore> electronic_money_datastore_map_ = new Dictionary<Code.CreditAgent, ElectronicMoneyCSVDataStore>();

private int save_chunk_num_ = 100;


@@ -119,6 +127,8 @@ namespace CSVDownloader {
itec_credit_store_ = new ItecCreditDataStore(conn_);
hello_techno_credit_store_ = new HelloTechnoCreditDataStore(conn_);
daito_qr_store_ = new DaitoQRDataStore(conn_);
gmo_credit_store_ = new CreditCSVDataGMOStore(conn_);
gmo_electronic_money_store_ = new GMOElectronicMoneyDataStore(conn_);

} catch (Exception e) {
logger_.Error("DB接続失敗");
@@ -185,11 +195,20 @@ namespace CSVDownloader {

// HelloTechno
{
var controller = new HelloTechnoController(driver_);
//var controller = new HelloTechnoController(driver_);
//var dic = parking_credit_card_agencies_spotID_dao_.GetDictionary(controller.GetCreditAgent());
//controller.SetParkingDic(dic);
//web_controller_list_.Add(controller);
//credit_datastore_map_.Add(controller.GetCreditAgent(), hello_techno_credit_store_);
}
// HelloTechno(GMO)
{
var controller = new GMOController(driver_);
var dic = parking_credit_card_agencies_spotID_dao_.GetDictionary(controller.GetCreditAgent());
controller.SetParkingDic(dic);
web_controller_list_.Add(controller);
credit_datastore_map_.Add(controller.GetCreditAgent(), hello_techno_credit_store_);
credit_datastore_map_.Add(controller.GetCreditAgent(), gmo_credit_store_);
electronic_money_datastore_map_.Add(controller.GetCreditAgent(), gmo_electronic_money_store_);
}


@@ -250,6 +269,7 @@ namespace CSVDownloader {
bool list_get_success = true;
List<CreditCSVData> credit_info_list = null;
List<QRCSVData> qr_info_list = null;
List<ElectronicMoneyCSVData> electronic_money_info_list = null;

try {
credit_info_list = web_controller.GetCreditCSVDataList();
@@ -266,6 +286,13 @@ namespace CSVDownloader {
parking_credit_card_agencies_spotID_error_dao_.Save(e.GetList());
}

try {
electronic_money_info_list = web_controller.GetElectronicMoneyCSVDataList();
} catch (SpotNameNotMatchException e) {
list_get_success = false;
parking_credit_card_agencies_spotID_error_dao_.Save(e.GetList());
}


if (!list_get_success) {
throw new Exception("データリスト取得失敗");
@@ -274,6 +301,7 @@ namespace CSVDownloader {
// データ保存
int delete_count_credit = 0;
int delete_count_qr = 0;
int delete_count_electronic_money = 0;
transaction_ = conn_.BeginTransaction();

// クレジット
@@ -310,14 +338,33 @@ namespace CSVDownloader {
ShowCurrentCount(current_count);
}
}
// 電子マネー
if (0 < electronic_money_info_list.Count) {
ShowTotalCount(electronic_money_info_list.Count);
var store = electronic_money_datastore_map_[agent];
delete_count_electronic_money = store.Delete(from, to);
var current_count = 0;
ShowCurrentCount(current_count);
var chunk_data_list = electronic_money_info_list.Select((ElectronicMoneyCSVData data, int index) => new { data, index })
.GroupBy(x => x.index / save_chunk_num_)
.Select(g => g.Select(r => r.data));
foreach (var data_list in chunk_data_list) {
var list = data_list.ToList();
store.Save(list);
current_count += list.Count;
ShowCurrentCount(current_count);
}
}


// コミット処理
transaction_.Commit();
logger_.Info($"削除件数 CREDIT:{delete_count_credit}");
logger_.Info($"削除件数 QR: {delete_count_qr}");
logger_.Info($"登録件数 CREDIT:{credit_info_list.Count}");
logger_.Info($"登録件数 QR :{qr_info_list.Count}");
logger_.Info($"削除件数 CREDIT :{delete_count_credit}");
logger_.Info($"削除件数 QR :{delete_count_qr}");
logger_.Info($"削除件数 電子マネー :{delete_count_electronic_money}");
logger_.Info($"登録件数 CREDIT :{credit_info_list.Count}");
logger_.Info($"登録件数 QR :{qr_info_list.Count}");
logger_.Info($"登録件数 電子マネー :{electronic_money_info_list.Count}");
web_controller.Archive(GetArchiveFilename(agent, DateTime.Now));

// 履歴の登録
@@ -327,6 +374,7 @@ namespace CSVDownloader {
} catch (Exception e) {
// ロールバック処理
logger_.Error(e.Message);
logger_.Error(e.StackTrace);
if (transaction_ != null) {
transaction_.Rollback();
}
@@ -394,6 +442,9 @@ namespace CSVDownloader {
throw new Exception($"ログイン情報不足 password {agent.ToString()}");
}

login_info.company_name = config_.Read(sesction, "company");


return login_info;
}



+ 155
- 0
CSVDownloader/Store/CreditCSVData/GMOCreditDataStore.cs Voir le fichier

@@ -0,0 +1,155 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MySql.Data.MySqlClient;


namespace CSVDownloader.Store.CreditCSVData {


class CreditCSVDataGMO : CreditCSVData {

public String customer_code = "";
public String output_datetime = "";
public String processing_code = "";
public String operation_code = "";
public String return_code = "";
public String device_no = "";
public String target_company_code = "";
public String target_company_sub_code = "";
public String device_trade_no = "";
public DateTime processing_date = DateTime.Today;
public String approval_no = "";
public int amount = 0;
public int tax_send_amount = 0;
public String customer_name = "";
public String shop_name = "";
public String cancel_receipt_no = "";
public String split_count_info = "";
public String paying_type = "";

public enum ColName {
SpotID = 100,
CustomerCode = 0,
OutputDatetime,
ProcessingCode,
OperationCode,
ReturnCode,
DeviceNo,
TargetCompanyCode,
TargetCompanySubCode,
DeviceTradeNo,
ProcessingDate,
ApprovalNo,
Amount,
TaxSendAmount,
CustomerName,
ShopName,
CancelReceiptNo,
SplitCountInfo,
PayingType,
UpdDate,
UpdStaff,
RegDate,
RegStaff,

};
}

class CreditCSVDataGMOStore : CreditCSVDataStore {

private static readonly String table_name_ = "creditcard_download_data_gmo";
private String delete_sql_ = $"delete from {table_name_} where " +
$"{CreditCSVDataGMO.ColName.ProcessingDate} between " +
$"@From{CreditCSVDataGMO.ColName.ProcessingDate} and " +
$"@To{CreditCSVDataGMO.ColName.ProcessingDate};";


public CreditCSVDataGMOStore(MySqlConnection conn) : base(conn) {

}

public override void Save(List<CreditCSVData> list) {
Code.ResultCode ret;
var table = new DataTable();

table.Columns.Add(CreditCSVDataGMO.ColName.SpotID.ToString());
table.Columns.Add(CreditCSVDataGMO.ColName.CustomerCode.ToString());
table.Columns.Add(CreditCSVDataGMO.ColName.OutputDatetime.ToString());
table.Columns.Add(CreditCSVDataGMO.ColName.ProcessingCode.ToString());
table.Columns.Add(CreditCSVDataGMO.ColName.OperationCode.ToString());



table.Columns.Add(CreditCSVDataGMO.ColName.ReturnCode.ToString());
table.Columns.Add(CreditCSVDataGMO.ColName.DeviceNo.ToString());
table.Columns.Add(CreditCSVDataGMO.ColName.TargetCompanyCode.ToString());
table.Columns.Add(CreditCSVDataGMO.ColName.TargetCompanySubCode.ToString());
table.Columns.Add(CreditCSVDataGMO.ColName.DeviceTradeNo.ToString());
table.Columns.Add(CreditCSVDataGMO.ColName.ProcessingDate.ToString());
table.Columns.Add(CreditCSVDataGMO.ColName.ApprovalNo.ToString());
table.Columns.Add(CreditCSVDataGMO.ColName.Amount.ToString());
table.Columns.Add(CreditCSVDataGMO.ColName.TaxSendAmount.ToString());
table.Columns.Add(CreditCSVDataGMO.ColName.CustomerName.ToString());
table.Columns.Add(CreditCSVDataGMO.ColName.ShopName.ToString());
table.Columns.Add(CreditCSVDataGMO.ColName.CancelReceiptNo.ToString());
table.Columns.Add(CreditCSVDataGMO.ColName.SplitCountInfo.ToString());
table.Columns.Add(CreditCSVDataGMO.ColName.PayingType.ToString());
table.Columns.Add(CreditCSVDataGMO.ColName.UpdStaff.ToString());
table.Columns.Add(CreditCSVDataGMO.ColName.RegStaff.ToString());

foreach (CreditCSVDataGMO data in list) {
var row = table.NewRow();
row[CreditCSVDataGMO.ColName.SpotID.ToString()] = data.spot_id;
row[CreditCSVDataGMO.ColName.CustomerCode.ToString()] = data.customer_code;


row[CreditCSVDataGMO.ColName.OutputDatetime.ToString()] = data.output_datetime;
row[CreditCSVDataGMO.ColName.ProcessingCode.ToString()] = data.processing_code;
row[CreditCSVDataGMO.ColName.OperationCode.ToString()] = data.operation_code;
row[CreditCSVDataGMO.ColName.ReturnCode.ToString()] = data.return_code;
row[CreditCSVDataGMO.ColName.DeviceNo.ToString()] = data.device_no;
row[CreditCSVDataGMO.ColName.TargetCompanyCode.ToString()] = data.target_company_code;
row[CreditCSVDataGMO.ColName.TargetCompanySubCode.ToString()] = data.target_company_sub_code;
row[CreditCSVDataGMO.ColName.DeviceTradeNo.ToString()] = data.device_trade_no;
row[CreditCSVDataGMO.ColName.ProcessingDate.ToString()] = data.processing_date;
row[CreditCSVDataGMO.ColName.ApprovalNo.ToString()] = data.approval_no;
row[CreditCSVDataGMO.ColName.Amount.ToString()] = data.amount;
row[CreditCSVDataGMO.ColName.TaxSendAmount.ToString()] = data.tax_send_amount;
row[CreditCSVDataGMO.ColName.CustomerName.ToString()] = data.customer_name;
row[CreditCSVDataGMO.ColName.ShopName.ToString()] = data.shop_name;
row[CreditCSVDataGMO.ColName.CancelReceiptNo.ToString()] = data.cancel_receipt_no;
row[CreditCSVDataGMO.ColName.SplitCountInfo.ToString()] = data.split_count_info;
row[CreditCSVDataGMO.ColName.PayingType.ToString()] = data.paying_type;
row[CreditCSVDataGMO.ColName.UpdStaff.ToString()] = data.upd_staff;
row[CreditCSVDataGMO.ColName.RegStaff.ToString()] = data.reg_staff;

table.Rows.Add(row);
}


ret = BulkInsertData(table_name_, table);

if (ret != Code.ResultCode.OK) {
throw new Exception("登録失敗 GMOクレジット");
}

}

public override int Delete(DateTime from, DateTime to) {

var bindlist = new List<(String, object)> {
("From"+CreditCSVDataGMO.ColName.ProcessingDate.ToString(), from.ToString("yyyy-MM-dd")),
("To"+CreditCSVDataGMO.ColName.ProcessingDate.ToString(), to.AddDays(1).ToString("yyyy-MM-dd"))
};

var delete_count = DeleteData(delete_sql_, bindlist);
if (delete_count == -1) {
throw new Exception("削除失敗 GMOクレジット");
}
return delete_count;
}
}
}

+ 26
- 0
CSVDownloader/Store/ElectricMoneyCSVData/ElectronicMoneyDataStore.cs Voir le fichier

@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Text;

using MySql.Data.MySqlClient;

namespace CSVDownloader.Store.ElectronicMoneyDataStore {

class ElectronicMoneyCSVData {
public String spot_id = "";
public DateTime upd_date = DateTime.Now;
public String upd_staff = "auto_tool";
public DateTime reg_date = DateTime.Now;
public String reg_staff = "auto_tool";
}
abstract class ElectronicMoneyCSVDataStore : MySQL {

public ElectronicMoneyCSVDataStore(MySqlConnection conn) : base(conn) {

}

abstract public void Save(List<ElectronicMoneyCSVData> list);

abstract public int Delete(DateTime from, DateTime to);
}
}

+ 168
- 0
CSVDownloader/Store/ElectricMoneyCSVData/GMOElectronicMoneyDataStore.cs Voir le fichier

@@ -0,0 +1,168 @@
using System;
using System.Collections.Generic;
using System.Data;

using MySql.Data.MySqlClient;


namespace CSVDownloader.Store.ElectronicMoneyDataStore {


class GMOElectronicMoneyData : ElectronicMoneyCSVData {

public String customer_code = "";
public String acquirer_id = "";
public String acquirer_name = "";
public String customer_id = "";
public String customer_name = "";
public String shop_name = "";
public String device_id = "";
public String host_device_id = "";
public String device_no = "";
public DateTime adjust_datetime = DateTime.Now;
public String trade_code = "";
public int amount = 0;
public int auto_charge_amount = 0;
public int before_deposit = 0;
public String brand = "";
public String card_id = "";
public String trade_status = "";
public String last_proccesing_datetime = "";
public String point = "";
public String trade_no = "";
public String origin_trade_no = "";


public enum ColName {
SpotID = 100,
CustomerCode = 0,
AcquirerID,
AcquirerName,
CustomerID, CustomerName,
ShopName,
DeviceID,
HostDeviceID,
DeviceNo,
AdjustDatetime,
TradeCode,
Amount,
AutoChargeAmount,
BeforeDeposit,
Brand,
CardID,
TradeStatus,
LastProccesingDatetime,
Point,
TradeNo,
OriginTradeNo,
UpdDate,
UpdStaff,
RegDate,
RegStaff
};
}

class GMOElectronicMoneyDataStore : ElectronicMoneyCSVDataStore {

private static readonly String table_name_ = "electronic_money_download_data_gmo";

private String delete_sql_ = $"delete from {table_name_} where " +
$"{GMOElectronicMoneyData.ColName.AdjustDatetime.ToString()} between " +
$"@From{GMOElectronicMoneyData.ColName.AdjustDatetime.ToString()} and " +
$"@To{GMOElectronicMoneyData.ColName.AdjustDatetime.ToString()};";


public GMOElectronicMoneyDataStore(MySqlConnection conn) : base(conn) {

}


public override void Save(List<ElectronicMoneyCSVData> list) {
Code.ResultCode ret;
var table = new DataTable();

table.Columns.Add($"{GMOElectronicMoneyData.ColName.SpotID}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.CustomerCode}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.AcquirerID}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.AcquirerName}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.CustomerID}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.CustomerName}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.ShopName}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.DeviceID}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.HostDeviceID}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.DeviceNo}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.AdjustDatetime}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.TradeCode}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.Amount}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.AutoChargeAmount}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.BeforeDeposit}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.Brand}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.CardID}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.TradeStatus}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.LastProccesingDatetime}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.Point}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.TradeNo}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.OriginTradeNo}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.UpdDate}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.UpdStaff}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.RegDate}");
table.Columns.Add($"{GMOElectronicMoneyData.ColName.RegStaff}");


foreach (GMOElectronicMoneyData data in list) {
var row = table.NewRow();

row[$"{GMOElectronicMoneyData.ColName.SpotID}"] = data.spot_id;
row[$"{GMOElectronicMoneyData.ColName.CustomerCode}"] = data.customer_code;
row[$"{GMOElectronicMoneyData.ColName.AcquirerID}"] = data.acquirer_id;
row[$"{GMOElectronicMoneyData.ColName.AcquirerName}"] = data.acquirer_name;
row[$"{GMOElectronicMoneyData.ColName.CustomerID}"] = data.customer_id;
row[$"{GMOElectronicMoneyData.ColName.CustomerName}"] = data.customer_name;
row[$"{GMOElectronicMoneyData.ColName.ShopName}"] = data.shop_name;
row[$"{GMOElectronicMoneyData.ColName.DeviceID}"] = data.device_id;
row[$"{GMOElectronicMoneyData.ColName.HostDeviceID}"] = data.host_device_id;
row[$"{GMOElectronicMoneyData.ColName.DeviceNo}"] = data.device_no;
row[$"{GMOElectronicMoneyData.ColName.AdjustDatetime}"] = data.adjust_datetime;
row[$"{GMOElectronicMoneyData.ColName.TradeCode}"] = data.trade_code;
row[$"{GMOElectronicMoneyData.ColName.Amount}"] = data.amount;
row[$"{GMOElectronicMoneyData.ColName.AutoChargeAmount}"] = data.auto_charge_amount;
row[$"{GMOElectronicMoneyData.ColName.BeforeDeposit}"] = data.before_deposit;
row[$"{GMOElectronicMoneyData.ColName.Brand}"] = data.brand;
row[$"{GMOElectronicMoneyData.ColName.CardID}"] = data.card_id;
row[$"{GMOElectronicMoneyData.ColName.TradeStatus}"] = data.trade_status;
row[$"{GMOElectronicMoneyData.ColName.LastProccesingDatetime}"] = data.last_proccesing_datetime;
row[$"{GMOElectronicMoneyData.ColName.Point}"] = data.point;
row[$"{GMOElectronicMoneyData.ColName.TradeNo}"] = data.trade_no;
row[$"{GMOElectronicMoneyData.ColName.OriginTradeNo}"] = data.origin_trade_no;
row[$"{GMOElectronicMoneyData.ColName.UpdDate}"] = data.upd_date;
row[$"{GMOElectronicMoneyData.ColName.UpdStaff}"] = data.upd_staff;
row[$"{GMOElectronicMoneyData.ColName.RegDate}"] = data.reg_date;
row[$"{GMOElectronicMoneyData.ColName.RegStaff}"] = data.reg_staff;


table.Rows.Add(row);
}


ret = BulkInsertData(table_name_, table);

if (ret != Code.ResultCode.OK) {
throw new Exception("登録失敗 GMO 電子マネー");
}
}
public override int Delete(DateTime from, DateTime to) {

var bindlist = new List<(String, object)> {
("From"+GMOElectronicMoneyData.ColName.AdjustDatetime.ToString(), from.ToString("yyyy-MM-dd")),
("To"+GMOElectronicMoneyData.ColName.AdjustDatetime.ToString(), to.AddDays(1).ToString("yyyy-MM-dd"))
};

var delete_count = DeleteData(delete_sql_, bindlist);
if (delete_count == -1) {
throw new Exception("削除失敗 大都QR");
}
return delete_count;
}

}
}

+ 345
- 0
CSVDownloader/Web/GMOController.cs Voir le fichier

@@ -0,0 +1,345 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Threading;
using System.Text;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;

using CSVDownloader.Code;
using CSVDownloader.Store.ElectronicMoneyDataStore;
using CSVDownloader.Store.CreditCSVData;
using CSVDownloader.Exceptions;

using ExpectedConditions = OpenQA.Selenium.Support.UI.ExpectedConditions;
using System.Globalization;

namespace CSVDownloader.Web {
class GMOController : WebController {

private readonly String url_ = "https://webinq.gmo-fg.net/KessaisyoukaiGUI/#no-back";


private readonly String filename_zip = "gmo.zip";
private readonly String filename_credit = "gmo_credit.csv";
private readonly String filename_electronic_money = "gmo_electronic_money.csv";

private enum XpathKey {
INPUT_LOGIN_CUSTOMER_CODE,
INPUT_LOGIN_USERNAME,
INPUT_LOGIN_PASSWORD,

BUTTON_LOGIN,

FRAME_MAIN,


LOADING,
PROGRESS,

INPUT_FROM_DATE,
INPUT_TO_DATE,
BUTTON_SEARCH,
BUTTON_DOWNLOAD_ZIP,

BUTTON_LOGOUT,
};

private IDictionary<XpathKey, string> xpath_map_ = new Dictionary<XpathKey, string>()
{
{XpathKey.INPUT_LOGIN_CUSTOMER_CODE,@"//*[@id='companyCode']"},
{XpathKey.INPUT_LOGIN_USERNAME,@"//*[@id='userName']"},
{XpathKey.INPUT_LOGIN_PASSWORD,@"//*[@id='password']"},

{XpathKey.BUTTON_LOGIN,@"//*[@id='loginForm']//input[@type='submit']"},

{XpathKey.FRAME_MAIN,@"//*[@id='main']"},



{XpathKey.INPUT_FROM_DATE,@"//*[@id='_searchDateFrom']"},
{XpathKey.INPUT_TO_DATE,@"//*[@id='_searchDateTo']"},


{XpathKey.BUTTON_SEARCH,$"//*[@id='Content']//input[@value='検索']" },
{XpathKey.BUTTON_DOWNLOAD_ZIP,$"//*[@id='Content']//input[@value='実売上取引出力']" },

{XpathKey.BUTTON_LOGOUT,@"//a[@href='javascript:logout();']" },

{XpathKey.LOADING,@"//*[@id='loadingFont']"},
{XpathKey.PROGRESS,@"//*[@id='progress']"},

};

public GMOController(ChromeDriver driver) : base(driver) {
agent_ = CreditAgent.HT;
}

public override ResultCode Login(LoginInfo info) {

try {
driver_.Navigate().GoToUrl(url_);
Send(xpath_map_[XpathKey.INPUT_LOGIN_CUSTOMER_CODE], info.company_name);
Send(xpath_map_[XpathKey.INPUT_LOGIN_USERNAME], info.user_name);
Send(xpath_map_[XpathKey.INPUT_LOGIN_PASSWORD], info.password);

Click(xpath_map_[XpathKey.BUTTON_LOGIN]);

CloseAlert();

// ログイン後の「端末決済データダウンロード」が表示されることを確認する。
SwitchToMainFrame();
wait_.Until(ExpectedConditions.ElementToBeClickable(By.XPath(xpath_map_[XpathKey.BUTTON_DOWNLOAD_ZIP])));
SwitchToFrame();


} catch (Exception e) {
logger_.Error(e.Message);
return ResultCode.NG;
}
return ResultCode.OK;
}

public override ResultCode Download(DateTime from, DateTime to) {


SwitchToMainFrame();

// 承認処理日のFrom-Toを入力
Clear(xpath_map_[XpathKey.INPUT_FROM_DATE]);
Clear(xpath_map_[XpathKey.INPUT_TO_DATE]);
Send(xpath_map_[XpathKey.INPUT_FROM_DATE], from.ToString("yyyy/MM/dd"));
Send(xpath_map_[XpathKey.INPUT_TO_DATE], to.ToString("yyyy/MM/dd"));


// ダウンロード開始

Click(xpath_map_[XpathKey.BUTTON_SEARCH]);
wait_.Until(ExpectedConditions.InvisibilityOfElementLocated(By.XPath(xpath_map_[XpathKey.LOADING])));
Click(xpath_map_[XpathKey.BUTTON_DOWNLOAD_ZIP]);
CloseAlert();


var long_wait = new WebDriverWait(driver_, TimeSpan.FromSeconds(360));
long_wait.Until(ExpectedConditions.InvisibilityOfElementLocated(By.XPath(xpath_map_[XpathKey.PROGRESS])));


WaitForDownload(filename_zip);



// 解凍
ArchiveExtract();

SwitchToFrame();

return ResultCode.OK;
}

public override ResultCode Logout() {

try {
Click(xpath_map_[XpathKey.BUTTON_LOGOUT]);

} catch (Exception e) {
logger_.Error(e.Message);
return ResultCode.NG;
}

return ResultCode.OK;
}


public override List<CreditCSVData> GetCreditCSVDataList() {

var result_list = new List<CreditCSVData>();


var list = GetFileContents(filename_credit);

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

foreach (var line in list) {
var parking_name = line[(int)CreditCSVDataGMO.ColName.ShopName];
try {


int amount = 0;
int.TryParse(line[(int)CreditCSVDataGMO.ColName.Amount], out amount);

int tax_send_amount = 0;
int.TryParse(line[(int)CreditCSVDataGMO.ColName.TaxSendAmount], out tax_send_amount);

DateTime processing_date;
DateTime.TryParseExact(line[(int)CreditCSVDataGMO.ColName.ProcessingDate], "yyMMdd", null, DateTimeStyles.None, out processing_date);

result_list.Add(new CreditCSVDataGMO() {
spot_id = GetSpotID(parking_name),
customer_code = line[(int)CreditCSVDataGMO.ColName.CustomerCode],
output_datetime = line[(int)CreditCSVDataGMO.ColName.OutputDatetime],
processing_code = line[(int)CreditCSVDataGMO.ColName.ProcessingCode],
operation_code = line[(int)CreditCSVDataGMO.ColName.OperationCode],
return_code = line[(int)CreditCSVDataGMO.ColName.ReturnCode],
device_no = line[(int)CreditCSVDataGMO.ColName.DeviceNo],
target_company_code = line[(int)CreditCSVDataGMO.ColName.TargetCompanyCode],
target_company_sub_code = line[(int)CreditCSVDataGMO.ColName.TargetCompanySubCode],
device_trade_no = line[(int)CreditCSVDataGMO.ColName.DeviceTradeNo],
processing_date = processing_date,
approval_no = line[(int)CreditCSVDataGMO.ColName.ApprovalNo],
amount = amount,
tax_send_amount = tax_send_amount,
customer_name = line[(int)CreditCSVDataGMO.ColName.CustomerName],
shop_name = line[(int)CreditCSVDataGMO.ColName.ShopName],
cancel_receipt_no = line[(int)CreditCSVDataGMO.ColName.CancelReceiptNo],
split_count_info = line[(int)CreditCSVDataGMO.ColName.SplitCountInfo],
paying_type = line[(int)CreditCSVDataGMO.ColName.PayingType],
});

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

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)GMOElectronicMoneyData.ColName.ShopName];
try {


int amount = 0;
int.TryParse(line[(int)GMOElectronicMoneyData.ColName.Amount], out amount);

int auto_charge_amount = 0;
int.TryParse(line[(int)GMOElectronicMoneyData.ColName.AutoChargeAmount], out auto_charge_amount);

int before_deposit = 0;
int.TryParse(line[(int)GMOElectronicMoneyData.ColName.BeforeDeposit], out before_deposit);

//DateTime adjust_datetime;
//DateTime.TryParseExact(line[(int)GMOElectronicMoneyData.ColName.AdjustDatetime], "yyMMdd", null, DateTimeStyles.None, out adjust_datetime);


result_list.Add(new GMOElectronicMoneyData() {
spot_id = GetSpotID(parking_name),
customer_code = line[(int)GMOElectronicMoneyData.ColName.CustomerCode],
acquirer_id = line[(int)GMOElectronicMoneyData.ColName.AcquirerID],
acquirer_name = line[(int)GMOElectronicMoneyData.ColName.AcquirerName],
customer_id = line[(int)GMOElectronicMoneyData.ColName.CustomerID],
customer_name = line[(int)GMOElectronicMoneyData.ColName.CustomerName],
shop_name = line[(int)GMOElectronicMoneyData.ColName.ShopName],
device_id = line[(int)GMOElectronicMoneyData.ColName.DeviceID],
host_device_id = line[(int)GMOElectronicMoneyData.ColName.HostDeviceID],
device_no = line[(int)GMOElectronicMoneyData.ColName.DeviceNo],
adjust_datetime = DateTime.Parse(line[(int)GMOElectronicMoneyData.ColName.AdjustDatetime]),
trade_code = line[(int)GMOElectronicMoneyData.ColName.TradeCode],
amount = amount,
auto_charge_amount = auto_charge_amount,
before_deposit = before_deposit,
brand = line[(int)GMOElectronicMoneyData.ColName.Brand],
card_id = line[(int)GMOElectronicMoneyData.ColName.CardID],
trade_status = line[(int)GMOElectronicMoneyData.ColName.TradeStatus],
last_proccesing_datetime = line[(int)GMOElectronicMoneyData.ColName.LastProccesingDatetime],
point = line[(int)GMOElectronicMoneyData.ColName.Point],
trade_no = line[(int)GMOElectronicMoneyData.ColName.TradeNo],
origin_trade_no = line[(int)GMOElectronicMoneyData.ColName.OriginTradeNo],

});

} 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());
var config = new CSVConfig() {
header = true,
};
config.remove_char.Add("\"");
var sjis_enc = Encoding.GetEncoding("Shift-JIS");

foreach (var file in dir.GetFiles()) {
if (file.Name.Contains(filename)) {
var result = ReadCsv(file.FullName, config, sjis_enc);
list.AddRange(result);
}
}

return list;
}


private void ArchiveExtract() {
using (ZipArchive archive = ZipFile.OpenRead(Path.Combine(DriverFactory.GetDownloadDir(), filename_zip))) {
foreach (ZipArchiveEntry entry in archive.Entries) {
if (entry.FullName.Contains("FEP")) {
entry.ExtractToFile(Path.Combine(DriverFactory.GetDownloadDir(), filename_credit));
}
if (entry.FullName.Contains("DEN")) {
entry.ExtractToFile(Path.Combine(DriverFactory.GetDownloadDir(), filename_electronic_money));
}
}
}

}

private void SwitchToMainFrame() {
SwitchToFrame(xpath_map_[XpathKey.FRAME_MAIN]);
}
}
}

+ 1
- 0
CSVDownloader/Web/LoginInfo.cs Voir le fichier

@@ -2,6 +2,7 @@

namespace CSVDownloader.Web {
class LoginInfo {
public String company_name = "";
public String user_name = "";
public String password = "";
}


+ 28
- 0
CSVDownloader/Web/WebController.cs Voir le fichier

@@ -12,6 +12,8 @@ using OpenQA.Selenium.Support.UI;
using CSVDownloader.Code;
using CSVDownloader.Store.CreditCSVData;
using CSVDownloader.Store.QRCSVData;
using CSVDownloader.Store.ElectronicMoneyDataStore;

using ExpectedConditions = OpenQA.Selenium.Support.UI.ExpectedConditions;

namespace CSVDownloader.Web {
@@ -85,6 +87,10 @@ namespace CSVDownloader.Web {
return new List<QRCSVData>();
}

public virtual List<ElectronicMoneyCSVData> GetElectronicMoneyCSVDataList() {
return new List<ElectronicMoneyCSVData>();
}

protected void Click(String xpath, bool wait = true) {

if (wait) {
@@ -116,6 +122,14 @@ namespace CSVDownloader.Web {
Wait(interval_milisec_);
}

protected void Clear(String xpath) {
var ele = wait_.Until(ExpectedConditions.ElementExists(By.XPath(xpath)));

ele.Clear();

Wait(interval_milisec_);
}

protected void Select(String xpath, String value) {
try {

@@ -293,5 +307,19 @@ namespace CSVDownloader.Web {
}

}


protected void CloseAlert() {
try {

var alert = wait_.Until(ExpectedConditions.AlertIsPresent());
alert.Accept();


} catch (Exception) {
logger_.Info("アラート表示なし");
return;
}
}
}
}

BIN
CSVDownloader/chromedriver.exe Voir le fichier


BIN
chromedriver.exe Voir le fichier


Chargement…
Annuler
Enregistrer