Files
Groupware/FTP_DB_Adapt/FTP_DB_Adapt/Program.cs
2020-04-17 08:17:10 +09:00

237 lines
10 KiB
C#
Raw Blame History

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace FTP_DB_Adapt
{
class Program
{
static System.Data.SqlClient.SqlConnection cn;
static System.Data.SqlClient.SqlCommand cmd;
static System.Data.SqlClient.SqlDataAdapter da;
static arUtil.FTPClient.FTPClient ftp;
static CSetting setting;
static arUtil.Log log;
static string lastfile = "";
static DateTime lasttime = DateTime.Now;
class retdata
{
public int count { get; set; }
public System.Data.DataTable result { get; set; }
public string message { get; set; }
}
static void Main(string[] args)
{
//var jstest = JsonConvert.SerializeObject(retval);
// var jsontest = "{\"count\":1,\"result\":[{\"id\":\"395552\",\"password\":\"B6589FC6AB0DC82CF12099D1C2D40AB994E8410C\",\"nameE\":\"Chikyun.Kim\",\"name\":\"<22><>ġ<EFBFBD><C4A1>\",\"dept\":\"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> K4<4B><34><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>Ʈ\",\"grade\":\"å<><C3A5>\",\"email\":\"Chikyun.Kim@amkor.co.kr\",\"level\":1,\"indate\":\"2018-04-11\",\"outdate\":null";
/// var json = JObject.Parse(jsontest);
// // var cnt = json["count"];
cw("setting load");
setting = new CSetting();
setting.Load();
if (setting.Xml.Exist() == false)
{
setting.Xml.CreateFile();
cw("setting file created");
}
if (setting.ftphost == "")
{
setting.ftphost = "ftp.amkor.co.kr";
setting.ftpid = "k4pcbmgr";
setting.ftppw = "W2$fYiXp";
setting.Save();
cw("setting default");
}
cw(string.Format("ftp info - {0}", setting.ftphost));
Properties.Settings.Default["cs"] = setting.connstr; // "Data Source=10.131.15.18;Initial Catalog=EE;Persist Security Info=True;User ID=eeuser;Password=Amkor123!";
cw("program start v191212-0950" );
cn = new System.Data.SqlClient.SqlConnection(Properties.Settings.Default.cs);
DateTime conntime = DateTime.Now;
//ftp = new arUtil.FTPClient();
while(true)
{
if(cn.State == System.Data.ConnectionState.Open)
{
if(ftp == null)
{
ftp = new arUtil.FTPClient.FTPClient();
ftp.Host = setting.ftphost;
ftp.UserPassword = setting.ftppw;
ftp.UserID = setting.ftpid;
ftp.Port = 21;
cw(string.Format("ftp Initialize {0}",ftp.Host));
}
//monitor file list
string path = "/2D TEST/101369103/Log/QryResult";
var list = ftp.directoryListSimple(path);
var sqllist = list.Where(t => t.ToLower().EndsWith(".sql"));
DateTime findtime = DateTime.Parse("1982-11-23");
foreach(var sqlfile in sqllist)
{
string fn = sqlfile.Substring(0, sqlfile.Length - 3);
string resultfile = fn + "json";
if (list.Contains(resultfile)) continue;
if(lastfile == sqlfile)
{
var ts = DateTime.Now - lasttime;
if (ts.TotalSeconds < 3) continue; //3초이내 연속 실행 불가
}
//다운로드전에 무조건 대기해준다.
System.Threading.Thread.Sleep(200);
// //이파일명에 해당하는 json 파일을 찾는다.
// string rltfile =
var file_local = AppDomain.CurrentDomain.BaseDirectory + sqlfile;
var file_remote = path + "/" + sqlfile;
try
{
if (System.IO.File.Exists(file_local)) System.IO.File.Delete(file_local);
cw(string.Format("Down {0} to {1}",file_remote, file_local));
lastfile = sqlfile;
lasttime = DateTime.Now;
if(ftp.Download(file_remote,file_local))
{
retdata retval = new retdata();
retval.count = 0;
retval.result = null;
retval.message = "";
cw("download ok : " + file_remote);
var jsonStr = "";
var sql = System.IO.File.ReadAllText(file_local, System.Text.Encoding.Default);
if (cmd == null) cmd = new System.Data.SqlClient.SqlCommand(sql);
var downfi = new System.IO.FileInfo(file_local);
if (downfi.Length < 1)
{
retval.message = "0byte File Downaloaded : " + file_local;
}
else if(sql.Trim() == "")
{
retval.message = "No Sql data";
}
else
{
cmd.CommandText = sql;
cmd.Connection = cn;
if (cn.State == System.Data.ConnectionState.Closed) cn.Open();
if (sql.ToLower().StartsWith("select"))
{
cw("select query");
//data table
if (da == null) da = new System.Data.SqlClient.SqlDataAdapter(cmd);
using (var ds = new System.Data.DataSet())
{
try
{
da.Fill(ds);
if (ds != null && ds.Tables.Count > 0)
{
retval.result = ds.Tables[0];
retval.count = retval.result.Rows.Count;
}
}
catch (Exception ex)
{
retval.message = ex.Message + ",sql=" + sql;
}
}
}
else
{
cw("non query");
//insert /update/ delete
cmd.Connection = cn;
try
{
retval.count = cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
retval.message = ex.Message + ",sql=" + sql;
}
}
jsonStr = JsonConvert.SerializeObject(retval);
if (jsonStr != "")
{
file_local = AppDomain.CurrentDomain.BaseDirectory + resultfile;
System.IO.File.WriteAllText(file_local, jsonStr, System.Text.Encoding.Default);
cw("result file save : " + file_local);
file_remote = path + "/" + resultfile;
if (!ftp.Upload(file_remote, file_local))
cw("ftp Upload error remote = " + file_remote + "," + file_local);
}
}
}
else
{
cw("ftp down error remote = " + file_remote);
}
}
catch (Exception ex)
{
cw("conn error:" + ex.Message);
}
}
}
else
{
var ts = DateTime.Now - conntime;
if(ts.TotalSeconds > 5)
{
try
{
cw("Try Database Connect ");
cn.Open();
cw("Database Connected\n\nFTP Monitor ON");
}
catch (Exception ex)
{
cw("conn error:" + ex.Message);
}
finally
{
conntime = DateTime.Now;
}
}
}
System.Threading.Thread.Sleep(1);
}
}
static void cw(string msg,Boolean logon=true)
{
if(log == null)
{
log = new arUtil.Log();
}
if (logon) log.Add(msg);
Console.WriteLine(msg);
}
}
}