for Push.
This commit is contained in:
@@ -0,0 +1,246 @@
|
||||
using KssSmaPlaLib.Batch.Interface;
|
||||
using KssSmaPlaLib.Commons;
|
||||
using KssSmaPlaLib.Communications;
|
||||
using KssSmaPlaLib.Ini;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Interop;
|
||||
using static System.Net.WebRequestMethods;
|
||||
|
||||
namespace KssSmaPlaLib.Batch.Sftp
|
||||
{
|
||||
public class SftpStepHandlerUxer
|
||||
{
|
||||
public FuncSftpByIniResultDto TryFuncSftpUploadByIni(
|
||||
string iniFilePath,
|
||||
string sessionName)
|
||||
{
|
||||
const string KEY_HOST = "Host";
|
||||
const string KEY_REMOTE_PATH = "RemotePath";
|
||||
const string KEY_FILE_NAME_PATTERNS = "FileNamePatterns";
|
||||
const string KEY_IN_FOLDER_PATH = "InFolderPath";
|
||||
|
||||
var result = new FuncSftpByIniResultDto();
|
||||
|
||||
var iniSftpDic = IniReferenceResolveUxer.ReadSectionWithReference(iniFilePath, sessionName);
|
||||
var host = DictionaryUxer.GetValueOrDefault(iniSftpDic, KEY_HOST, string.Empty);
|
||||
if (string.IsNullOrEmpty(host))
|
||||
{
|
||||
LoggerUxer.Info("ホストが未指定のためSFTPアップロード機能をスキップしました。");
|
||||
result.Succeeded = true;
|
||||
return result;
|
||||
}
|
||||
|
||||
// オブジェクト生成
|
||||
if (!SftpUxer.TryCreateByDic(iniSftpDic, out SftpUxer sftp, out var messageForMe))
|
||||
{
|
||||
result.ResultMessage = $"SFTPアップロード機能でオブジェクト生成に失敗しました。[エラー内容:{messageForMe}]";
|
||||
result.ExitCode = (int)RetCodeUxer.RetCode.SftpObjectCreateError;
|
||||
result.Succeeded = false;
|
||||
return result;
|
||||
}
|
||||
|
||||
// テスト接続
|
||||
if (!sftp.TestConnect(out messageForMe))
|
||||
{
|
||||
result.ResultMessage = $"SFTPアップロード機能でテスト接続に失敗しました。[エラー内容:{messageForMe}]";
|
||||
result.ExitCode = (int)RetCodeUxer.RetCode.SftpTestConnectError;
|
||||
result.Succeeded = false;
|
||||
return result;
|
||||
}
|
||||
LoggerUxer.Info($"SFTPテスト接続成功");
|
||||
|
||||
// リモートパス
|
||||
var remotePath = DictionaryUxer.GetValueOrDefault(iniSftpDic, KEY_REMOTE_PATH, string.Empty);
|
||||
|
||||
// 入力フォルダパス
|
||||
var inFolderPath = DictionaryUxer.GetValueOrDefault(iniSftpDic, KEY_IN_FOLDER_PATH, ".");
|
||||
if (!Directory.Exists(inFolderPath))
|
||||
{
|
||||
result.ResultMessage = $"SFTPアップロード機能で入力フォルダパスが存在しません。[{KEY_IN_FOLDER_PATH}:{inFolderPath}]";
|
||||
result.ExitCode = (int)RetCodeUxer.RetCode.SftpInFolderPathNotExist;
|
||||
result.Succeeded = false;
|
||||
return result;
|
||||
}
|
||||
|
||||
// ファイル名パターン
|
||||
var fileNamePatterns = DictionaryUxer.GetValueOrDefault(iniSftpDic, KEY_FILE_NAME_PATTERNS, "*");
|
||||
var fileNamePatternList = fileNamePatterns.Split(',').ToList();
|
||||
|
||||
// ファイルパスリストの作成
|
||||
var filePathList = new List<string>();
|
||||
foreach(var pattern in fileNamePatternList)
|
||||
{
|
||||
foreach(var filePath in Directory.GetFiles(inFolderPath, pattern))
|
||||
{
|
||||
filePathList.Add(filePath);
|
||||
}
|
||||
}
|
||||
LoggerUxer.Info($"[対象ファイル数:{filePathList.Count},対象ファイルパス:{string.Join(",", filePathList)}]");
|
||||
|
||||
if (filePathList.Count == 0)
|
||||
{
|
||||
var msg = $"SFTPアップロード機能で対象ファイルが無かったためSTFPアップロードは実行されませんでした。";
|
||||
LoggerUxer.Info(msg);
|
||||
result.ResultMessage = msg;
|
||||
result.Succeeded = true;
|
||||
return result;
|
||||
}
|
||||
|
||||
// 対象のアップロード
|
||||
if (!sftp.Upload(filePathList, remotePath, out messageForMe))
|
||||
{
|
||||
result.ResultMessage = $"SFTPアップロード機能のアップロードに失敗しました。[エラー内容:{messageForMe}]";
|
||||
result.ExitCode = (int)RetCodeUxer.RetCode.SftpUploadError;
|
||||
result.Succeeded = false;
|
||||
return result;
|
||||
}
|
||||
LoggerUxer.Info($"SFTPアップロード機能完了[対象ファイル数:{filePathList.Count},対象ファイル:{string.Join(",", filePathList)},リモートパス:{remotePath},ファイル名パターン:{string.Join(",", fileNamePatternList)}]");
|
||||
result.Succeeded = true;
|
||||
return result;
|
||||
}
|
||||
|
||||
public FuncSftpByIniResultDto TryFuncSftpDownloadByIni(
|
||||
string iniFilePath,
|
||||
string sectionName)
|
||||
{
|
||||
const string KEY_HOST = "Host";
|
||||
const string KEY_REMOTE_PATH = "RemotePath";
|
||||
const string KEY_OUT_FOLDER_PATH = "OutFolderPath";
|
||||
const string KEY_FILE_NAME_PATTERNS = "FileNamePatterns";
|
||||
|
||||
var result = new FuncSftpByIniResultDto();
|
||||
|
||||
var iniDic = IniReferenceResolveUxer.ReadSectionWithReference(iniFilePath, sectionName);
|
||||
|
||||
var host = DictionaryUxer.GetValueOrDefault(iniDic, KEY_HOST, string.Empty);
|
||||
if (!string.IsNullOrEmpty(host))
|
||||
{
|
||||
LoggerUxer.Info($"SFTPダウンロード処理を開始します。");
|
||||
|
||||
try
|
||||
{
|
||||
// SFTPから対象ファイルをダウンロード
|
||||
|
||||
// オブジェクト生成
|
||||
if (!SftpUxer.TryCreateByDic(iniDic, out SftpUxer sftp, out string messageForMe))
|
||||
{
|
||||
LoggerUxer.Error(messageForMe);
|
||||
result.Succeeded = false;
|
||||
result.ExitCode = (int)RetCodeUxer.RetCode.SftpObjectCreateError;
|
||||
result.ResultMessage = messageForMe;
|
||||
return result;
|
||||
}
|
||||
|
||||
// テスト接続
|
||||
if (!sftp.TestConnect(out messageForMe))
|
||||
{
|
||||
LoggerUxer.Error(messageForMe);
|
||||
result.Succeeded = false;
|
||||
result.ExitCode = (int)RetCodeUxer.RetCode.SftpTestConnectError;
|
||||
result.ResultMessage = messageForMe;
|
||||
return result;
|
||||
}
|
||||
LoggerUxer.Info($"SFTPテスト接続成功");
|
||||
|
||||
// パターンにマッチするファイルのダウンロード
|
||||
var fileNamePatterns = DictionaryUxer.GetValueOrDefault(iniDic, KEY_FILE_NAME_PATTERNS, string.Empty);
|
||||
if (string.IsNullOrEmpty(fileNamePatterns))
|
||||
{
|
||||
var msg = $"SFTPのファイル名パターンが設定されていません。[キー:{KEY_FILE_NAME_PATTERNS}]";
|
||||
LoggerUxer.Error(msg);
|
||||
result.Succeeded = false;
|
||||
result.ExitCode = (int)RetCodeUxer.RetCode.SftpCsvFileNamePatternsNotSetting;
|
||||
result.ResultMessage = msg;
|
||||
return result;
|
||||
}
|
||||
|
||||
var remotePath = DictionaryUxer.GetValueOrDefault(iniDic, KEY_REMOTE_PATH, string.Empty);
|
||||
var outFolderPath = DictionaryUxer.GetValueOrDefault(iniDic, KEY_OUT_FOLDER_PATH, string.Empty);
|
||||
LoggerUxer.Info($"[リモートパス:{remotePath},CSV一時フォルダ:{outFolderPath}]");
|
||||
|
||||
foreach (var pattern in fileNamePatterns.Split(','))
|
||||
{
|
||||
LoggerUxer.Info($"[ファイルパターン:{pattern}]");
|
||||
|
||||
if (!sftp.DownloadMatchingFiles(remotePath, outFolderPath, out var downloadedFileCount, out messageForMe, pattern))
|
||||
{
|
||||
var msg = $"STFPでのダウンロードに失敗しました。[エラー内容:{messageForMe}]";
|
||||
LoggerUxer.Error(msg);
|
||||
result.Succeeded = false;
|
||||
result.ExitCode = (int)RetCodeUxer.RetCode.SftpMatchFilesDownloadError;
|
||||
result.ResultMessage = msg;
|
||||
return result;
|
||||
}
|
||||
|
||||
LoggerUxer.Info($"[ダウンロードしたファイル数:{downloadedFileCount}]");
|
||||
}
|
||||
result.Succeeded = true;
|
||||
return result;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var msg = $"SFTPダウンロードでエラーが発生しました。[エラー内容:{ex.Message}]";
|
||||
LoggerUxer.Error(msg);
|
||||
result.Succeeded = false;
|
||||
result.ExitCode = (int)RetCodeUxer.RetCode.SftpDownloadException;
|
||||
result.ResultMessage = msg;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LoggerUxer.Info($"SFTP処理の設定がないため、スキップします。");
|
||||
result.Succeeded = true;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
public FuncSftpByIniResultDto TryFuncSftpDeleteByIni(
|
||||
string iniFilePath,
|
||||
string sectionName)
|
||||
{
|
||||
const string KEY_REMOTE_PATH = "RemotePath";
|
||||
const string KEY_FILE_NAME_PATTERNS = "FileNamePatterns";
|
||||
|
||||
FuncSftpByIniResultDto result = new FuncSftpByIniResultDto();
|
||||
|
||||
var iniDic = IniReferenceResolveUxer.ReadSectionWithReference(iniFilePath, sectionName);
|
||||
|
||||
// オブジェクト生成
|
||||
if (!SftpUxer.TryCreateByDic(iniDic, out SftpUxer sftp, out string messageForMe))
|
||||
{
|
||||
LoggerUxer.Error(messageForMe);
|
||||
result.Succeeded = false;
|
||||
result.ExitCode = (int)RetCodeUxer.RetCode.SftpObjectCreateError;
|
||||
result.ResultMessage = messageForMe;
|
||||
return result;
|
||||
}
|
||||
|
||||
foreach (var pattern in iniDic[KEY_FILE_NAME_PATTERNS].Split(','))
|
||||
{
|
||||
if (!sftp.DeleteMatchingFiles(iniDic[KEY_REMOTE_PATH], out var deletedFileCount, out messageForMe, pattern))
|
||||
{
|
||||
LoggerUxer.Error(messageForMe);
|
||||
result.Succeeded = false;
|
||||
result.ExitCode = (int)RetCodeUxer.RetCode.SftpDeleteMatchingFilesError;
|
||||
result.ResultMessage = messageForMe;
|
||||
return result;
|
||||
}
|
||||
LoggerUxer.Info($"SFTPのファイルを削除しました。[ファイル名パターン:{pattern},削除ファイル数:{deletedFileCount}]");
|
||||
}
|
||||
result.Succeeded = true;
|
||||
return result;
|
||||
}
|
||||
|
||||
public class FuncSftpByIniResultDto: IFuncResultDto
|
||||
{
|
||||
public bool Succeeded { get; set; } = false;
|
||||
public int ExitCode { get; set; } = 0;
|
||||
public string ResultMessage { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user