Initial commit
This commit is contained in:
369
Handler/Project/Manager/DataBaseManagerCount.cs
Normal file
369
Handler/Project/Manager/DataBaseManagerCount.cs
Normal file
@@ -0,0 +1,369 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Project.Manager
|
||||
{
|
||||
public class DatabaseManagerCount
|
||||
{
|
||||
/// <summary>
|
||||
/// 파일검색방법
|
||||
/// </summary>
|
||||
public enum eFileSearchMode
|
||||
{
|
||||
Normal,
|
||||
Project,
|
||||
Model,
|
||||
MCCode,
|
||||
Barcode,
|
||||
All,
|
||||
}
|
||||
|
||||
public enum eStripSearchResult
|
||||
{
|
||||
None,
|
||||
OK,
|
||||
NG,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 최종파일
|
||||
/// </summary>
|
||||
private String LastFileName;
|
||||
public string dataPath = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 파일디비초기화작업(클라이언트 갯수만큼 버퍼를 확보한다)
|
||||
/// </summary>
|
||||
public DatabaseManagerCount()
|
||||
{
|
||||
LastFileName = string.Empty;
|
||||
}
|
||||
|
||||
public Boolean UpdateCountDate(DateTime jobStartTime, int shutIndex, int slotIndex, int count = 1)
|
||||
{
|
||||
//대상파일을 설정한다.
|
||||
var fileName = System.IO.Path.Combine(AR.SETTING.Data.Path_Data, "Count",
|
||||
jobStartTime.Year.ToString("0000"),
|
||||
jobStartTime.Month.ToString("00"),
|
||||
jobStartTime.Day.ToString("00"),
|
||||
"S" + (shutIndex == 0 ? "F" : "B") + "_" + slotIndex.ToString("0000") + ".xml");
|
||||
return UpdateCount(fileName, "", count);
|
||||
}
|
||||
|
||||
public Boolean UpdateCountDM(string DataMatrix, int count = 1)
|
||||
{
|
||||
string ww, seq;
|
||||
PUB.splitID(DataMatrix, out ww, out seq);
|
||||
|
||||
//대상파일을 설정한다.
|
||||
try
|
||||
{
|
||||
var fileName = "";
|
||||
if (seq.Length > 2)
|
||||
{
|
||||
fileName = System.IO.Path.Combine(this.dataPath, "Count", ww, seq.Substring(0, 2), seq + ".xml");
|
||||
}
|
||||
else
|
||||
fileName = System.IO.Path.Combine(this.dataPath, "Count", ww, seq + ".xml");
|
||||
|
||||
return UpdateCount(fileName, DataMatrix, count);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE("UpdateCountDM(" + DataMatrix + ") " + ex.Message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public enum eCountTarget
|
||||
{
|
||||
Year = 0,
|
||||
Month,
|
||||
Day
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 전체수량을 업데이트 합니다.
|
||||
/// </summary>
|
||||
public void AddTotalCount(UInt32 New, UInt32 Good, UInt32 Over, UInt32 Err, UInt32 Empty, string modelName)
|
||||
{
|
||||
AddTotalCount(eCountTarget.Year, New, Good, Over, Err, Empty, "");
|
||||
AddTotalCount(eCountTarget.Month, New, Good, Over, Err, Empty, "");
|
||||
AddTotalCount(eCountTarget.Day, New, Good, Over, Err, Empty, "");
|
||||
|
||||
//모델별로 추가 기록을 해준다
|
||||
if (modelName != "")
|
||||
{
|
||||
AddTotalCount(eCountTarget.Year, New, Good, Over, Err, Empty, modelName);
|
||||
AddTotalCount(eCountTarget.Month, New, Good, Over, Err, Empty, modelName);
|
||||
AddTotalCount(eCountTarget.Day, New, Good, Over, Err, Empty, modelName);
|
||||
}
|
||||
|
||||
//기존값에 해당값을 누적만 시킨다.
|
||||
}
|
||||
private void AddTotalCount(eCountTarget target, UInt32 New, UInt32 good, UInt32 Over, UInt32 Err, UInt32 Empty, string modelName)
|
||||
{
|
||||
DateTime dt = DateTime.Now;
|
||||
var filename = "";
|
||||
if (target == eCountTarget.Year)
|
||||
{
|
||||
filename = System.IO.Path.Combine(this.dataPath, "Count",
|
||||
dt.Year.ToString("0000"), "count.xml");
|
||||
}
|
||||
else if (target == eCountTarget.Month)
|
||||
{
|
||||
filename = System.IO.Path.Combine(this.dataPath, "Count",
|
||||
dt.Year.ToString("0000"),
|
||||
dt.Month.ToString("00"), "count.xml");
|
||||
}
|
||||
else if (target == eCountTarget.Day)
|
||||
{
|
||||
filename = System.IO.Path.Combine(this.dataPath, "Count",
|
||||
dt.Year.ToString("0000"),
|
||||
dt.Month.ToString("00"),
|
||||
dt.Day.ToString("00"), "count.xml");
|
||||
}
|
||||
|
||||
var keyname = modelName == "" ? "userdata" : modelName;
|
||||
|
||||
//파일이 없다면 생성한다
|
||||
var fi = new System.IO.FileInfo(filename);
|
||||
if (fi.Directory.Exists == false) fi.Directory.Create();
|
||||
var xml = new arUtil.XMLHelper(fi.FullName);
|
||||
if (xml.Exist() == false) xml.CreateFile();
|
||||
|
||||
var str_new = xml.get_Data(keyname,"cnt_new");
|
||||
var str_good = xml.get_Data(keyname, "cnt_good");
|
||||
var str_over = xml.get_Data(keyname, "cnt_over");
|
||||
var str_empty = xml.get_Data(keyname, "cnt_empty");
|
||||
var str_err = xml.get_Data(keyname, "cnt_error");
|
||||
if (str_new == "") str_new = "0";
|
||||
if (str_good == "") str_good = "0";
|
||||
if (str_over == "") str_over = "0";
|
||||
if (str_empty == "") str_empty = "0";
|
||||
if (str_err == "") str_err = "0";
|
||||
|
||||
var cnt_New = UInt32.Parse(str_new);
|
||||
var cnt_good = UInt32.Parse(str_good);
|
||||
var cnt_Over = UInt32.Parse(str_over);
|
||||
var cnt_Empty = UInt32.Parse(str_empty);
|
||||
var cnt_Err = UInt32.Parse(str_err);
|
||||
|
||||
//기존수량에 누적
|
||||
cnt_New += New;
|
||||
cnt_good += good;
|
||||
cnt_Over += Over;
|
||||
cnt_Empty += Empty;
|
||||
cnt_Err += Err;
|
||||
|
||||
//값을 더해서 다시 기록해준다.
|
||||
xml.set_Data(keyname, "cnt_new", (cnt_New).ToString());
|
||||
xml.set_Data(keyname, "cnt_good", cnt_good.ToString());
|
||||
xml.set_Data(keyname, "cnt_over", cnt_Over.ToString());
|
||||
xml.set_Data(keyname, "cnt_empty", cnt_Empty.ToString());
|
||||
xml.set_Data(keyname, "cnt_error", cnt_Err.ToString());
|
||||
string msg;
|
||||
xml.Save(out msg);
|
||||
}
|
||||
|
||||
public struct eCountData
|
||||
{
|
||||
public UInt32 NewCount;
|
||||
public UInt32 GoodCount;
|
||||
public UInt32 OverCount;
|
||||
public UInt32 EmptyCount;
|
||||
public UInt32 ErrorCount;
|
||||
public UInt32 TotalCount
|
||||
{
|
||||
get
|
||||
{
|
||||
return NewCount + GoodCount + OverCount + EmptyCount + ErrorCount;
|
||||
}
|
||||
}
|
||||
public void clear()
|
||||
{
|
||||
NewCount = 0;
|
||||
GoodCount = 0;
|
||||
OverCount = 0;
|
||||
EmptyCount = 0;
|
||||
ErrorCount = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public eCountData ReadTotalCount(eCountTarget target,string modelName)
|
||||
{
|
||||
var cnt = new eCountData();
|
||||
cnt.clear();
|
||||
|
||||
DateTime dt = DateTime.Now;
|
||||
var fi = "";
|
||||
if (target == eCountTarget.Year)
|
||||
{
|
||||
fi = System.IO.Path.Combine(this.dataPath, "Count",
|
||||
dt.Year.ToString("0000"), "count.xml");
|
||||
}
|
||||
else if (target == eCountTarget.Month)
|
||||
{
|
||||
fi = System.IO.Path.Combine(this.dataPath, "Count",
|
||||
dt.Year.ToString("0000"),
|
||||
dt.Month.ToString("00"), "count.xml");
|
||||
}
|
||||
else if (target == eCountTarget.Day)
|
||||
{
|
||||
fi = System.IO.Path.Combine(this.dataPath, "Count",
|
||||
dt.Year.ToString("0000"),
|
||||
dt.Month.ToString("00"),
|
||||
dt.Day.ToString("00"), "count.xml");
|
||||
}
|
||||
|
||||
var appkey = modelName == "" ? "userdata" : modelName;
|
||||
|
||||
//년도데이터가없다면 처리안함
|
||||
if (System.IO.File.Exists(fi))
|
||||
{
|
||||
var xmlYear = new arUtil.XMLHelper(fi);
|
||||
var str_new = xmlYear.get_Data(appkey,"cnt_new");
|
||||
var str_good = xmlYear.get_Data(appkey, "cnt_good");
|
||||
var str_over = xmlYear.get_Data(appkey, "cnt_over");
|
||||
var str_empty = xmlYear.get_Data(appkey, "cnt_empty");
|
||||
var str_err = xmlYear.get_Data(appkey, "cnt_error");
|
||||
|
||||
if (str_new == "") str_new = "0";
|
||||
if (str_good == "") str_good = "0";
|
||||
if (str_over == "") str_over = "0";
|
||||
if (str_empty == "") str_empty = "0";
|
||||
if (str_err == "") str_err = "0";
|
||||
|
||||
cnt.NewCount = UInt32.Parse(str_new);
|
||||
cnt.GoodCount = UInt32.Parse(str_good);
|
||||
cnt.OverCount = UInt32.Parse(str_over);
|
||||
cnt.EmptyCount = UInt32.Parse(str_empty);
|
||||
cnt.ErrorCount = UInt32.Parse(str_err);
|
||||
}
|
||||
|
||||
return cnt;
|
||||
}
|
||||
|
||||
//해다 자료가 있다면 수량을 올려주고, 그렇지 않다면 파일을 생성해준다.
|
||||
private Boolean UpdateCount(string fileName, string DataMatrix, int count = 1)
|
||||
{
|
||||
var fi = new System.IO.FileInfo(fileName);
|
||||
|
||||
try
|
||||
{
|
||||
var xml = new arUtil.XMLHelper(fileName);
|
||||
var newCount = count;
|
||||
if (fi.Exists == false)
|
||||
{
|
||||
//신규이다
|
||||
if (fi.Directory.Exists == false) fi.Directory.Create();
|
||||
|
||||
//생성해서 추가한다
|
||||
xml.CreateFile();
|
||||
xml.set_Data("id", DataMatrix);
|
||||
newCount = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
//기존에 있으므로 수량을 읽어서 증가시킨다.
|
||||
int curCnt;
|
||||
var cntStr = xml.get_Data("count");
|
||||
if (int.TryParse(cntStr, out curCnt) == false)
|
||||
{
|
||||
curCnt = 2;
|
||||
PUB.log.AddE("기존 사용수량 읽기 실패 카운트문자=" + cntStr + "기본값(1)으로 설정");
|
||||
}
|
||||
newCount = curCnt + newCount;
|
||||
}
|
||||
xml.set_Data("count", newCount.ToString());
|
||||
|
||||
//이수량입력되는 시점의 데이터를 기록한다 200117
|
||||
string saveMssage;
|
||||
xml.set_Data("History" + newCount.ToString("000"), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
||||
xml.Save(out saveMssage);
|
||||
|
||||
LastFileName = fileName;
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 지정된 파일의 모든 내용을 읽어서 DataTable 로 반환합니다.
|
||||
/// </summary>
|
||||
/// <param name="files"></param>
|
||||
/// <returns></returns>
|
||||
public Dictionary<String, int> GetDatas(int sYear, int sWorkWeek, int eYear, int eWorkWeek, string searchDataMatrix = "")
|
||||
{
|
||||
var retval = new Dictionary<String, int>();
|
||||
//모든파일을 대상으로한다.
|
||||
|
||||
List<System.IO.FileInfo> retfiles = new List<System.IO.FileInfo>();
|
||||
|
||||
//날짜사이의 모든 파일을 대상으로해야함
|
||||
int sy = sYear;
|
||||
int ey = eYear;
|
||||
int sw = sWorkWeek;
|
||||
int ew = eWorkWeek;
|
||||
|
||||
int eym = ey * 100 + ew;
|
||||
int sym = sy * 100 + sw;
|
||||
|
||||
Boolean endtast = false;
|
||||
for (int y = sy; y <= ey; y++)
|
||||
{
|
||||
var yPath = System.IO.Path.Combine(dataPath, "Count", y.ToString("0000"));
|
||||
if (System.IO.Directory.Exists(yPath) == false) continue;
|
||||
|
||||
for (int w = 1; w <= 50; w++)
|
||||
{
|
||||
var ym = y * 100 + w;
|
||||
if (ym == eym) endtast = true; //마지막 날짜이다.
|
||||
if (ym < sym) continue; //이전 WW는 넘어간다
|
||||
|
||||
var path = new System.IO.DirectoryInfo(System.IO.Path.Combine(yPath, w.ToString("00")));
|
||||
if (path.Exists == false) continue; //경로가 없다면 처리하지 않음
|
||||
|
||||
//검색할 파일 혹은 조건을 생성
|
||||
var searchFileName = (searchDataMatrix == "") ? "*.xml" : (searchDataMatrix + ".xml");
|
||||
|
||||
var files = path.GetFiles(searchFileName, System.IO.SearchOption.TopDirectoryOnly);
|
||||
foreach (var file in files)
|
||||
{
|
||||
try
|
||||
{
|
||||
var xml = new arUtil.XMLHelper(file.FullName);
|
||||
var id = xml.get_Data("id");
|
||||
int curCnt;
|
||||
var cntStr = xml.get_Data("count");
|
||||
if (int.TryParse(cntStr, out curCnt) == false)
|
||||
{
|
||||
curCnt = 1;
|
||||
PUB.log.AddE("기존 사용수량 읽기 실패 카운트문자=" + cntStr + "기본값(1)으로 설정");
|
||||
}
|
||||
retval.Add(id, curCnt);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE("database count getdata" + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
if (endtast)
|
||||
break; // TODO: might not be correct. Was : Exit For
|
||||
}
|
||||
if (endtast)
|
||||
break; // TODO: might not be correct. Was : Exit For
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
333
Handler/Project/Manager/DatabaseManagerHistory.cs
Normal file
333
Handler/Project/Manager/DatabaseManagerHistory.cs
Normal file
@@ -0,0 +1,333 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Project.Manager
|
||||
{
|
||||
//public class DatabaseManagerHistory
|
||||
//{
|
||||
// /// <summary>
|
||||
// /// 최종파일
|
||||
// /// </summary>
|
||||
// private String LastFileName;
|
||||
// // private DataSet1.ResultDataDataTable dt;
|
||||
// private string baseDirName = "History";
|
||||
|
||||
// /// <summary>
|
||||
// /// 파일디비초기화작업(클라이언트 갯수만큼 버퍼를 확보한다)
|
||||
// /// </summary>
|
||||
// public DatabaseManagerHistory(string basedirbname = "History")
|
||||
// {
|
||||
// LastFileName = string.Empty;
|
||||
// //dt = new DataSet1.ResultDataDataTable();
|
||||
// baseDirName = basedirbname;
|
||||
// }
|
||||
|
||||
// /// <summary>
|
||||
// /// JOB데이터를 작업기록에 추가한다
|
||||
// /// </summary>
|
||||
// /// <param name="job"></param>
|
||||
// /// <returns></returns>
|
||||
// public Boolean Add(Class.JobData job)
|
||||
// {
|
||||
// //작업기록은 별도 xml 에 데이터를 넣는다
|
||||
// var newdr = this.dt.NewResultDataRow();
|
||||
|
||||
|
||||
// newdr.model_motion = Pub.Result.mModel.Title;
|
||||
// newdr.model_device = Pub.Result.vModel.Title;
|
||||
// newdr.time_jobs = job.JobStart;
|
||||
// newdr.time_jobe = job.JobEnd;
|
||||
// newdr.runtime_job = job.JobRun.TotalSeconds;
|
||||
|
||||
// newdr.info_filename = string.Empty; //이 값을 파일불러올떄 자동생성됨
|
||||
|
||||
// newdr.info_message = job.Message;
|
||||
// newdr.info_imagel = job.VisionData.FileNameL;
|
||||
// newdr.info_imageu = job.VisionData.FileNameU;
|
||||
// newdr.info_portpos = job.PortPos;
|
||||
// newdr.info_printpos = job.PrintPos;
|
||||
// newdr.info_angle = job.VisionData.Angle;
|
||||
// newdr.info_inputraw = job.VisionData.QRInputRaw;
|
||||
// newdr.info_outputraw = job.VisionData.QROutRaw;
|
||||
// newdr.info_rid = job.VisionData.RID;
|
||||
// newdr.info_sid = job.VisionData.SID;
|
||||
// newdr.info_lot = job.VisionData.VLOT;
|
||||
// newdr.info_mfgdate = job.VisionData.MFGDATE;
|
||||
// newdr.info_manu = job.VisionData.MANU;
|
||||
// if (job.VisionData.QTY.isEmpty()) newdr.info_qty = -1;
|
||||
// else newdr.info_qty = int.Parse(job.VisionData.QTY);
|
||||
|
||||
// this.dt.AddResultDataRow(newdr);
|
||||
// try
|
||||
// {
|
||||
// Flush(); //파일에 실제저장한다.
|
||||
// return true;
|
||||
// }
|
||||
// catch (Exception ex)
|
||||
// {
|
||||
// Pub.log.AddE("history data add" + ex.Message);
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
// //해당 결과를 버퍼에 추가한다.
|
||||
// public Boolean Add(DataSet1.ResultDataRow dataRow, Boolean autoFlush = false)
|
||||
// {
|
||||
// //입력된 자료를 복사해서 버퍼에 넣는다.
|
||||
// var newdr = this.dt.NewResultDataRow();
|
||||
// foreach (string col in getDataColumnList())
|
||||
// {
|
||||
// if (col.ToLower() == "idx") continue;
|
||||
// newdr[col] = dataRow[col];
|
||||
// }
|
||||
// this.dt.AddResultDataRow(newdr);
|
||||
|
||||
// try
|
||||
// {
|
||||
// Flush(); //파일에 실제저장한다.
|
||||
// return true;
|
||||
// }
|
||||
// catch (Exception ex)
|
||||
// {
|
||||
// Pub.log.AddE("history data add" + ex.Message);
|
||||
// return false;
|
||||
// }
|
||||
|
||||
// }
|
||||
|
||||
// /// <summary>
|
||||
// /// 신규파일을 생성합니다.
|
||||
// /// </summary>
|
||||
// /// <param name="filename"></param>
|
||||
// void MakeFile(string filename)
|
||||
// {
|
||||
// //파일이없다면 헤더를 만들어준다.
|
||||
// var cols = getDataColumnList();
|
||||
// var headerstr = string.Join("\t", cols);
|
||||
// System.IO.File.WriteAllText(filename, headerstr, System.Text.Encoding.UTF8);
|
||||
// }
|
||||
|
||||
// /// <summary>
|
||||
// /// 저장해야할 컬럼명을 반환한다.(idx는 제외한다)
|
||||
// /// </summary>
|
||||
// /// <returns></returns>
|
||||
// public string[] getDataColumnList()
|
||||
// {
|
||||
// //저장하고자하는 순서를 미리 지정한다.(지정안된 자료는 알아서 저장된다)
|
||||
// string[] reserveCols = new string[] { };
|
||||
// List<String> cols = new List<string>();
|
||||
// cols.AddRange(reserveCols);
|
||||
|
||||
// for (int i = 0; i < this.dt.Columns.Count; i++)
|
||||
// {
|
||||
// string colname = dt.Columns[i].ColumnName;
|
||||
// if (colname.ToLower() == "idx") continue; //제외한다
|
||||
// if (reserveCols.Contains(colname)) continue;
|
||||
// cols.Add(colname);
|
||||
// }
|
||||
// return cols.ToArray();
|
||||
// }
|
||||
|
||||
// public string GetFileName(DateTime time_jobs, string jobseqdate, string jobseqno)
|
||||
// {
|
||||
// var saveFileName = System.IO.Path.Combine(COMM.SETTING.Data.Path_Data, baseDirName,
|
||||
// time_jobs.Year.ToString("0000"),
|
||||
// time_jobs.Month.ToString("00"),
|
||||
// time_jobs.Day.ToString("00"),
|
||||
// string.Format("{0}_{1}_{2}", jobseqdate, jobseqno, time_jobs.ToString("HHmmss")));
|
||||
// return saveFileName;
|
||||
// }
|
||||
|
||||
// public void Flush()
|
||||
// {
|
||||
// //데이터가없다면 처리하지 않음
|
||||
// if (this.dt.Rows.Count < 1) return;
|
||||
|
||||
// //쓸데이터를 모두 버퍼에 밀어넣는다.
|
||||
|
||||
// foreach (DataSet1.ResultDataRow dr in dt.Rows)
|
||||
// {
|
||||
// if (dr.RowState == System.Data.DataRowState.Deleted || dr.RowState == System.Data.DataRowState.Detached) continue;
|
||||
|
||||
// //lot date check
|
||||
// //if (dr.time_lotstart.Year == 1982) dr.time_lotstart = DateTime.Now;
|
||||
|
||||
// //작업이 종료된 시간을 기준으로 파일을 생성한다.
|
||||
// // if (dr.info_lot.isEmpty()) dr.info_lot = "NoLot";
|
||||
// //if (dr.info_stripid.isEmpty()) dr.info_stripid = "S" + dr.time_pcbstart.ToString("yyyyMMddHHmmss");
|
||||
|
||||
// //string curdatestr = string.Format("{0:0000}\\{1:00}\\{2:00}\\{3}\\{4}",
|
||||
// // dr.time_lotstart.Year, dr.time_lotstart.Month, dr.time_lotstart.Day, dr.info_lot,dr.info_stripid);
|
||||
|
||||
// //작업이 시작한 시간으로 데이터 파일을 저장해야함
|
||||
// var saveFileName = System.IO.Path.Combine(COMM.SETTING.Data.Path_Data, baseDirName,
|
||||
// dr.time_jobs.Year.ToString("0000"),
|
||||
// dr.time_jobs.Month.ToString("00"),
|
||||
// dr.time_jobs.Day.ToString("00"),
|
||||
// string.Format("{0}.tab", dr.time_jobs.ToString("HH")));
|
||||
|
||||
// dr.info_filename = saveFileName;
|
||||
// dr.EndEdit();
|
||||
|
||||
// //저장할 파일 체크
|
||||
// System.IO.FileInfo fi = new System.IO.FileInfo(saveFileName);
|
||||
|
||||
// //폴더새엇ㅇ
|
||||
// if (!fi.Directory.Exists) fi.Directory.Create();
|
||||
|
||||
// //파일없는경우 헤더생성
|
||||
// if (!fi.Exists) MakeFile(fi.FullName);
|
||||
|
||||
// //파일에기록
|
||||
// try
|
||||
// {
|
||||
// //general info
|
||||
// //파일의 내용을 탭으로 분리되게 저장한다
|
||||
// //var xml = new arUtil.XMLHelper(fi.FullName);
|
||||
// var cols = this.getDataColumnList();
|
||||
// List<string> buffer = new List<string>();
|
||||
// foreach (var col in cols)
|
||||
// {
|
||||
// var dc = dt.Columns[col];
|
||||
// if (dc.ColumnName.ToLower() == "idx") continue;
|
||||
// if (dc.ColumnName.ToLower() == "info_filename") continue;
|
||||
// var colname = dc.ColumnName.Split('_');
|
||||
// var data = dr[dc.ColumnName];
|
||||
// if (colname[0].ToLower() == "time")
|
||||
// {
|
||||
// string date_value = "";
|
||||
// if (data != null && data != DBNull.Value)
|
||||
// date_value = ((DateTime)data).ToString("yyyy-MM-dd HH:mm:ss");
|
||||
// buffer.Add(date_value); //xml.set_Data(colname[0], colname[1], date_value);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if (data != null && data != DBNull.Value)
|
||||
// buffer.Add(data.ToString());// xml.set_Data(colname[0], colname[1], data.ToString());
|
||||
// else
|
||||
// buffer.Add("");// xml.set_Data(colname[0], colname[1], "");
|
||||
// }
|
||||
// }
|
||||
// string savemsg;
|
||||
// // xml.Save(out savemsg);
|
||||
// System.IO.File.AppendAllText(fi.FullName, "\r\n" + string.Join("\t", buffer), System.Text.Encoding.UTF8);
|
||||
// }
|
||||
// catch (Exception ex)
|
||||
// {
|
||||
// Pub.log.AddE("DBMAN:FLUSH:" + ex.Message);
|
||||
// return;
|
||||
// }
|
||||
|
||||
// Pub.log.Add("DATABASE", string.Format("◆ Data Saved : {0}", fi.Name));
|
||||
// }
|
||||
|
||||
// dt.Clear();
|
||||
// dt.AcceptChanges();
|
||||
// }
|
||||
|
||||
// /// <summary>
|
||||
// /// 지정된 파일의 모든 내용을 읽어서 DataTable 로 반환합니다.
|
||||
// /// </summary>
|
||||
// /// <param name="files"></param>
|
||||
// /// <returns></returns>
|
||||
// public DataSet1.ResultDataDataTable GetDatas(List<System.IO.FileInfo> files)
|
||||
// {
|
||||
// DataSet1.ResultDataDataTable retval = new DataSet1.ResultDataDataTable();
|
||||
// //모든파일을 대상으로한다.
|
||||
|
||||
// foreach (var file in files)
|
||||
// {
|
||||
// var newdr = retval.NewResultDataRow();
|
||||
|
||||
// arUtil.XMLHelper xml = new arUtil.XMLHelper(file.FullName);
|
||||
// foreach (System.Data.DataColumn col in retval.Columns)
|
||||
// {
|
||||
// if (col.ColumnName.ToLower() == "idx") continue;
|
||||
// if (col.ColumnName.ToLower() == "filename") continue;
|
||||
// var colbuf = col.ColumnName.Split('_');
|
||||
|
||||
// var readstr = xml.get_Data(colbuf[0], colbuf[1]);
|
||||
// if (col.DataType == typeof(DateTime))
|
||||
// {
|
||||
// if (readstr != "")
|
||||
// {
|
||||
// DateTime dt;
|
||||
// if (DateTime.TryParse(readstr, out dt))
|
||||
// newdr[col.ColumnName] = dt;
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if (readstr.isEmpty() == false)
|
||||
// newdr[col.ColumnName] = readstr;
|
||||
// }
|
||||
// }
|
||||
// newdr.info_filename = file.FullName;
|
||||
// retval.AddResultDataRow(newdr);
|
||||
// }
|
||||
|
||||
|
||||
// retval.AcceptChanges();
|
||||
// return retval;
|
||||
// }
|
||||
|
||||
|
||||
|
||||
// /// <summary>
|
||||
// /// 지정된 기간사이의 파일명을 반환합니다.
|
||||
// /// </summary>
|
||||
// /// <param name="sdate">검색시작일(시간은 적용안함)</param>
|
||||
// /// <param name="edate">검색종료일(시간은 적용안함)</param>
|
||||
// /// <param name="extFilter">검색필터</param>
|
||||
// /// <param name="SearchNo">장치번호</param>
|
||||
// /// <param name="SearchBarcode">검색바코드</param>
|
||||
// /// <returns></returns>
|
||||
// public List<System.IO.FileInfo> Getfiles(DateTime sdate, DateTime edate)
|
||||
// {
|
||||
// List<System.IO.FileInfo> retfiles = new List<System.IO.FileInfo>();
|
||||
// //날짜사이의 모든 파일을 대상으로해야함
|
||||
|
||||
// string sd = sdate.ToShortDateString();
|
||||
// string ed = edate.ToShortDateString();
|
||||
|
||||
// int sy = sdate.Year;
|
||||
// int ey = edate.Year;
|
||||
// int sm = sdate.Month;
|
||||
// int em = edate.Month;
|
||||
// int sday = sdate.Day;
|
||||
// int eday = edate.Day;
|
||||
|
||||
// Boolean endtast = false;
|
||||
// for (int y = sy; y <= ey; y++)
|
||||
// {
|
||||
// for (int m = 1; m <= 12; m++)
|
||||
// {
|
||||
// for (int d = 1; d <= 31; d++)
|
||||
// {
|
||||
// string daystr = string.Format("{0:0000}-{1:00}-{2:00}", y, m, d);
|
||||
// if (ed == daystr) endtast = true; //마지막 날짜이다.
|
||||
|
||||
// if (y == sy && m < sm) continue; //시작년도 시작월 이전의 자료라면 넘어간다.
|
||||
// else if (y == sy && m == sm && d < sday) continue; //시작년도 시작월 시작일 이전의 자료라면 넘어간다.
|
||||
|
||||
// var path = new System.IO.DirectoryInfo(
|
||||
// System.IO.Path.Combine(COMM.SETTING.Data.Path_Data, baseDirName, daystr.Replace("-", "\\")));
|
||||
// if (path.Exists == false) continue;
|
||||
// var files = path.GetFiles("*.xml", System.IO.SearchOption.TopDirectoryOnly);
|
||||
// if (files != null && files.Length > 0) retfiles.AddRange(files.OrderBy(t => t.Name).ToList());
|
||||
|
||||
// if (endtast)
|
||||
// break; // TODO: might not be correct. Was : Exit For
|
||||
// }
|
||||
// if (endtast)
|
||||
// break; // TODO: might not be correct. Was : Exit For
|
||||
// }
|
||||
// if (endtast)
|
||||
// break; // TODO: might not be correct. Was : Exit For
|
||||
// }
|
||||
// return retfiles;
|
||||
// }
|
||||
//}
|
||||
}
|
||||
276
Handler/Project/Manager/DatabaseManagerSIDHistory.cs
Normal file
276
Handler/Project/Manager/DatabaseManagerSIDHistory.cs
Normal file
@@ -0,0 +1,276 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Project.Manager
|
||||
{
|
||||
public class DatabaseManagerSIDHistory
|
||||
{
|
||||
/// <summary>
|
||||
/// 최종파일
|
||||
/// </summary>
|
||||
private String LastFileName;
|
||||
private DataSet1.SIDHistoryDataTable dt;
|
||||
private string baseDirName;
|
||||
|
||||
/// <summary>
|
||||
/// 파일디비초기화작업(클라이언트 갯수만큼 버퍼를 확보한다)
|
||||
/// </summary>
|
||||
public DatabaseManagerSIDHistory(string basedirbname = "HistorySID")
|
||||
{
|
||||
LastFileName = string.Empty;
|
||||
dt = new DataSet1.SIDHistoryDataTable();
|
||||
baseDirName = basedirbname;
|
||||
}
|
||||
|
||||
//해당 결과를 버퍼에 추가한다.
|
||||
public Boolean Add(DataSet1.SIDHistoryRow dataRow, Boolean autoFlush = false)
|
||||
{
|
||||
//입력된 자료를 복사해서 버퍼에 넣는다.
|
||||
var newdr = this.dt.NewSIDHistoryRow();
|
||||
foreach (string col in getDataColumnList())
|
||||
{
|
||||
if (col.ToLower() == "idx") continue;
|
||||
newdr[col] = dataRow[col];
|
||||
}
|
||||
this.dt.AddSIDHistoryRow(newdr);
|
||||
|
||||
try
|
||||
{
|
||||
Flush(); //파일에 실제저장한다.
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE("history data add" + ex.Message);
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 신규파일을 생성합니다.
|
||||
/// </summary>
|
||||
/// <param name="filename"></param>
|
||||
void MakeFile(string filename)
|
||||
{
|
||||
//파일이없다면 헤더를 만들어준다.
|
||||
var xml = new arUtil.XMLHelper(filename);
|
||||
xml.CreateFile();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 저장해야할 컬럼명을 반환한다.(idx는 제외한다)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public string[] getDataColumnList()
|
||||
{
|
||||
//저장하고자하는 순서를 미리 지정한다.(지정안된 자료는 알아서 저장된다)
|
||||
string[] reserveCols = new string[] { };
|
||||
List<String> cols = new List<string>();
|
||||
cols.AddRange(reserveCols);
|
||||
|
||||
for (int i = 0; i < this.dt.Columns.Count; i++)
|
||||
{
|
||||
string colname = dt.Columns[i].ColumnName;
|
||||
if (reserveCols.Contains(colname)) continue;
|
||||
cols.Add(colname);
|
||||
}
|
||||
return cols.ToArray();
|
||||
}
|
||||
|
||||
public string GetFileName(string jobseqdate, string jobseqno, string sid)
|
||||
{
|
||||
var saveFileName = System.IO.Path.Combine(AR.SETTING.Data.Path_Data, baseDirName,
|
||||
jobseqdate.Substring(0, 4),
|
||||
jobseqdate.Substring(4, 2),
|
||||
jobseqdate.Substring(6, 2),
|
||||
string.Format("{0}_{1}_{2}", jobseqdate, jobseqno, sid));
|
||||
return saveFileName;
|
||||
}
|
||||
|
||||
public void Flush()
|
||||
{
|
||||
//데이터가없다면 처리하지 않음
|
||||
if (this.dt.Rows.Count < 1) return;
|
||||
|
||||
//쓸데이터를 모두 버퍼에 밀어넣는다.
|
||||
|
||||
foreach (DataSet1.SIDHistoryRow dr in dt.Rows)
|
||||
{
|
||||
if (dr.RowState == System.Data.DataRowState.Deleted || dr.RowState == System.Data.DataRowState.Detached) continue;
|
||||
|
||||
//lot date check
|
||||
//if (dr.time_lotstart.Year == 1982) dr.time_lotstart = DateTime.Now;
|
||||
|
||||
//작업이 종료된 시간을 기준으로 파일을 생성한다.
|
||||
// if (dr.info_lot.isEmpty()) dr.info_lot = "NoLot";
|
||||
//if (dr.info_stripid.isEmpty()) dr.info_stripid = "S" + dr.time_pcbstart.ToString("yyyyMMddHHmmss");
|
||||
|
||||
//string curdatestr = string.Format("{0:0000}\\{1:00}\\{2:00}\\{3}\\{4}",
|
||||
// dr.time_lotstart.Year, dr.time_lotstart.Month, dr.time_lotstart.Day, dr.info_lot,dr.info_stripid);
|
||||
|
||||
//작업이 시작한 시간으로 데이터 파일을 저장해야함
|
||||
var saveFileName = System.IO.Path.Combine(AR.SETTING.Data.Path_Data, baseDirName,
|
||||
dr.seqdate.Substring(0, 4),
|
||||
dr.seqdate.Substring(4, 2),
|
||||
dr.seqdate.Substring(6, 2),
|
||||
string.Format("{0}_{1}_{2}.csv", dr.seqdate, dr.seqno, dr.sid));
|
||||
|
||||
|
||||
dr.EndEdit();
|
||||
|
||||
//저장할 파일 체크
|
||||
System.IO.FileInfo fi = new System.IO.FileInfo(saveFileName);
|
||||
|
||||
//폴더새엇ㅇ
|
||||
if (!fi.Directory.Exists) fi.Directory.Create();
|
||||
|
||||
//파일없는경우 헤더생성
|
||||
// if (!fi.Exists) MakeFile(fi.FullName);
|
||||
|
||||
//파일에기록
|
||||
try
|
||||
{
|
||||
//general info
|
||||
//데이터는 csv 형태로 저장한다
|
||||
var line = string.Format("{2},{0},{1},{3}\r\n", dr.rid, dr.qty, dr.time.ToString("yyyy-MM-dd HH:mm:ss"), dr.rev);
|
||||
System.IO.File.AppendAllText(fi.FullName, line, System.Text.Encoding.UTF8);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE("DBMAN:FLUSH:" + ex.Message);
|
||||
return;
|
||||
}
|
||||
|
||||
PUB.log.Add("DATABASE", string.Format("◆ Data Saved : {0}", fi.Name));
|
||||
}
|
||||
|
||||
dt.Clear();
|
||||
dt.AcceptChanges();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 지정된 파일의 모든 내용을 읽어서 DataTable 로 반환합니다.
|
||||
/// </summary>
|
||||
/// <param name="files"></param>
|
||||
/// <returns></returns>
|
||||
public DataSet1.SIDHistoryDataTable GetDatas(System.IO.FileInfo[] files)
|
||||
{
|
||||
DataSet1.SIDHistoryDataTable retval = new DataSet1.SIDHistoryDataTable();
|
||||
//모든파일을 대상으로한다.
|
||||
|
||||
if (files != null && files.Count() > 0)
|
||||
{
|
||||
foreach (var file in files)
|
||||
{
|
||||
|
||||
|
||||
var lines = System.IO.File.ReadAllLines(file.FullName, System.Text.Encoding.UTF8);
|
||||
foreach (var line in lines)
|
||||
{
|
||||
var onlyName = file.Name.Replace(file.Extension, "").Split('_');
|
||||
if (String.IsNullOrEmpty(line.Trim())) continue;
|
||||
var buf = line.Split(',');
|
||||
|
||||
var newdr = retval.NewSIDHistoryRow();
|
||||
newdr.seqdate = onlyName[0];
|
||||
newdr.seqno = onlyName[1];
|
||||
newdr.sid = onlyName[2];
|
||||
|
||||
newdr.time = DateTime.Parse(buf[0]);
|
||||
newdr.rid = buf[1];
|
||||
|
||||
int qty, rev;
|
||||
if (int.TryParse(buf[2], out qty)) newdr.qty = qty;
|
||||
else newdr.qty = 0;
|
||||
if (buf.Length > 3 && int.TryParse(buf[3], out rev)) newdr.rev = rev;
|
||||
else newdr.rev = 0;
|
||||
|
||||
//newdr.qty = int.Parse(buf[2]);
|
||||
//newdr.rev = int.Parse(buf[3]);
|
||||
|
||||
retval.AddSIDHistoryRow(newdr);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
retval.AcceptChanges();
|
||||
return retval;
|
||||
}
|
||||
|
||||
public System.IO.FileInfo[] Getfiles(string seqdate, string seqno)
|
||||
{
|
||||
var path = System.IO.Path.Combine(AR.SETTING.Data.Path_Data, baseDirName,
|
||||
seqdate.Substring(0, 4),
|
||||
seqdate.Substring(4, 2),
|
||||
seqdate.Substring(6, 2));
|
||||
|
||||
var di = new System.IO.DirectoryInfo(path);
|
||||
if (di.Exists == false) return null;
|
||||
else return di.GetFiles(string.Format("{0}_{1}_*.csv", seqdate, seqno));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 지정된 기간사이의 파일명을 반환합니다.
|
||||
/// </summary>
|
||||
/// <param name="sdate">검색시작일(시간은 적용안함)</param>
|
||||
/// <param name="edate">검색종료일(시간은 적용안함)</param>
|
||||
/// <param name="extFilter">검색필터</param>
|
||||
/// <param name="SearchNo">장치번호</param>
|
||||
/// <param name="SearchBarcode">검색바코드</param>
|
||||
/// <returns></returns>
|
||||
//public List<System.IO.FileInfo> Getfiles(DateTime sdate, DateTime edate)
|
||||
//{
|
||||
// List<System.IO.FileInfo> retfiles = new List<System.IO.FileInfo>();
|
||||
// //날짜사이의 모든 파일을 대상으로해야함
|
||||
|
||||
// string sd = sdate.ToShortDateString();
|
||||
// string ed = edate.ToShortDateString();
|
||||
|
||||
// int sy = sdate.Year;
|
||||
// int ey = edate.Year;
|
||||
// int sm = sdate.Month;
|
||||
// int em = edate.Month;
|
||||
// int sday = sdate.Day;
|
||||
// int eday = edate.Day;
|
||||
|
||||
// Boolean endtast = false;
|
||||
// for (int y = sy; y <= ey; y++)
|
||||
// {
|
||||
// for (int m = 1; m <= 12; m++)
|
||||
// {
|
||||
// for (int d = 1; d <= 31; d++)
|
||||
// {
|
||||
// string daystr = string.Format("{0:0000}-{1:00}-{2:00}", y, m, d);
|
||||
// if (ed == daystr) endtast = true; //마지막 날짜이다.
|
||||
|
||||
// if (y == sy && m < sm) continue; //시작년도 시작월 이전의 자료라면 넘어간다.
|
||||
// else if (y == sy && m == sm && d < sday) continue; //시작년도 시작월 시작일 이전의 자료라면 넘어간다.
|
||||
|
||||
// var path = new System.IO.DirectoryInfo(
|
||||
// System.IO.Path.Combine(COMM.SETTING.Data.Path_Data, baseDirName, daystr.Replace("-", "\\")));
|
||||
// if (path.Exists == false) continue;
|
||||
// var files = path.GetFiles("*.csv", System.IO.SearchOption.TopDirectoryOnly);
|
||||
// if (files != null && files.Length > 0) retfiles.AddRange(files.OrderBy(t => t.Name).ToList());
|
||||
|
||||
// if (endtast)
|
||||
// break; // TODO: might not be correct. Was : Exit For
|
||||
// }
|
||||
// if (endtast)
|
||||
// break; // TODO: might not be correct. Was : Exit For
|
||||
// }
|
||||
// if (endtast)
|
||||
// break; // TODO: might not be correct. Was : Exit For
|
||||
// }
|
||||
// return retfiles;
|
||||
//}
|
||||
}
|
||||
}
|
||||
504
Handler/Project/Manager/ModelManager.cs
Normal file
504
Handler/Project/Manager/ModelManager.cs
Normal file
@@ -0,0 +1,504 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using AR;
|
||||
|
||||
namespace Project.Manager
|
||||
{
|
||||
public class ModelManager
|
||||
{
|
||||
public DataSet1 dataSet;
|
||||
readonly private string fn_ModelV;
|
||||
readonly private string fn_ModelM;
|
||||
readonly private string fn_Error;
|
||||
readonly private string fn_Input;
|
||||
readonly private string fn_Output;
|
||||
|
||||
public ModelManager(string fnVision, string fnMachine, string fnError, string fnInput, string fnOutput)
|
||||
{
|
||||
this.fn_ModelV = fnVision;
|
||||
this.fn_ModelM = fnMachine;
|
||||
this.fn_Error = fnError;
|
||||
this.fn_Input = fnInput;
|
||||
this.fn_Output = fnOutput;
|
||||
|
||||
dataSet = new DataSet1();
|
||||
}
|
||||
public void LoadModelE()
|
||||
{
|
||||
//set filename
|
||||
string filename = fn_Error;
|
||||
|
||||
//read file
|
||||
var fi = new FileInfo(filename);
|
||||
if (fi.Exists == false)
|
||||
{
|
||||
PUB.log.AddE("▣ No Load Model(Error)-Data)");
|
||||
return;
|
||||
}
|
||||
dataSet.ErrorDescription.Clear();
|
||||
dataSet.ErrorDescription.ReadXml(fi.FullName);
|
||||
dataSet.ErrorDescription.AcceptChanges();
|
||||
}
|
||||
public void LoadModelV()
|
||||
{
|
||||
//set filename
|
||||
string filename = fn_ModelV;
|
||||
int lineCount = 0;
|
||||
string buffer = string.Empty;
|
||||
|
||||
//read file
|
||||
var fi = new FileInfo(filename);
|
||||
if (fi.Exists == false)
|
||||
{
|
||||
PUB.log.AddE("▣ No Load Model(Vision)-Data)");
|
||||
return;
|
||||
}
|
||||
|
||||
lineCount = 0;
|
||||
try
|
||||
{
|
||||
buffer = System.IO.File.ReadAllText(fi.FullName, System.Text.Encoding.Default);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
buffer = string.Empty;
|
||||
PUB.log.AddE(string.Format("Model(Vision) Error File={0},Message={1}", filename, ex.Message));
|
||||
return;
|
||||
}
|
||||
|
||||
//존재하는 컬럼확인을 위해 미리 저장함
|
||||
List<String> dbCols = new List<string>();
|
||||
foreach (System.Data.DataColumn col in dataSet.OPModel.Columns)
|
||||
dbCols.Add(col.ColumnName);
|
||||
|
||||
List<String> Cols = new List<string>();
|
||||
foreach (string items in buffer.Split('\r'))
|
||||
{
|
||||
lineCount += 1;
|
||||
var line = items.Replace("\r", "").Replace("\n", "");
|
||||
if (line.Trim() == "" || line.StartsWith("ver")) continue; //빈줄과 버젼표기는 제거한다.
|
||||
string[] buf = line.Split(',');
|
||||
|
||||
//첫줄에는 컬럼명이 들어있다.
|
||||
if (Cols.Count < 1)
|
||||
{
|
||||
foreach (string colname in buf)
|
||||
{
|
||||
if (colname.isEmpty()) continue; //비어있는값은 처리하지 않는다.
|
||||
Cols.Add(colname);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
//데이터를 각 컬럼에 넣는다.
|
||||
DataSet1.OPModelRow dr = dataSet.OPModel.NewOPModelRow();
|
||||
|
||||
//비젼속성은 컬럼명이 v_로 시작한다.
|
||||
for (int i = 0; i < Cols.Count; i++) //0번은 Mccode이므로 제외한다.
|
||||
{
|
||||
try
|
||||
{
|
||||
if (dbCols.IndexOf(Cols[i]) == -1) continue; //존재하지 않는 컬럼은 제외한다.
|
||||
if (Cols[i].ToUpper() == "IDX") continue;
|
||||
dr[Cols[i]] = buf[i];
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE("Model(Vision) Load Error:" + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
//if (dr.TagBarcode.isEmpty()) dr.Delete();
|
||||
try
|
||||
{
|
||||
if (dr.RowState == System.Data.DataRowState.Detached) dataSet.OPModel.AddOPModelRow(dr);//신규자료일경우에는 추가함
|
||||
else if (dr.RowState != System.Data.DataRowState.Deleted) dr.EndEdit();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE("Load Model(Vision) file" + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
dataSet.OPModel.AcceptChanges();
|
||||
}
|
||||
public void LoadModelM()
|
||||
{
|
||||
//set filename
|
||||
string filename = fn_ModelM;
|
||||
int lineCount = 0;
|
||||
string buffer = string.Empty;
|
||||
|
||||
//read file
|
||||
var fi = new FileInfo(filename);
|
||||
if (fi.Exists == false)
|
||||
{
|
||||
PUB.log.AddE("▣ No Load M/C Model-Data)");
|
||||
return;
|
||||
}
|
||||
|
||||
lineCount = 0;
|
||||
try
|
||||
{
|
||||
buffer = System.IO.File.ReadAllText(fi.FullName, System.Text.Encoding.Default);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
buffer = string.Empty;
|
||||
PUB.log.AddE(string.Format("M/C ModelData Error File={0},Message={1}", filename, ex.Message));
|
||||
return;
|
||||
}
|
||||
|
||||
//존재하는 컬럼확인을 위해 미리 저장함
|
||||
List<String> dbCols = new List<string>();
|
||||
foreach (System.Data.DataColumn col in dataSet.MCModel.Columns)
|
||||
dbCols.Add(col.ColumnName);
|
||||
|
||||
List<String> Cols = new List<string>();
|
||||
foreach (string items in buffer.Split('\r'))
|
||||
{
|
||||
lineCount += 1;
|
||||
var line = items.Replace("\r", "").Replace("\n", "");
|
||||
if (line.Trim() == "" || line.StartsWith("ver")) continue; //빈줄과 버젼표기는 제거한다.
|
||||
string[] buf = line.Split('\t');
|
||||
|
||||
//첫줄에는 컬럼명이 들어있다.
|
||||
if (Cols.Count < 1)
|
||||
{
|
||||
foreach (string colname in buf)
|
||||
{
|
||||
if (colname.isEmpty()) continue; //비어있는값은 처리하지 않는다.
|
||||
Cols.Add(colname);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
//데이터를 각 컬럼에 넣는다.
|
||||
var dr = dataSet.MCModel.NewMCModelRow();
|
||||
|
||||
//비젼속성은 컬럼명이 v_로 시작한다.
|
||||
for (int i = 0; i < Cols.Count; i++) //0번은 Mccode이므로 제외한다.
|
||||
{
|
||||
try
|
||||
{
|
||||
if (dbCols.IndexOf(Cols[i]) == -1) continue; //존재하지 않는 컬럼은 제외한다.
|
||||
// if (Cols[i].ToUpper() == "IDX") continue;
|
||||
dr[Cols[i]] = buf[i];
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE("M/C Model Load Error:" + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
//if (dr.TagBarcode.isEmpty()) dr.Delete();
|
||||
try
|
||||
{
|
||||
if (dr.RowState == System.Data.DataRowState.Detached) dataSet.MCModel.AddMCModelRow(dr);//신규자료일경우에는 추가함
|
||||
else if (dr.RowState != System.Data.DataRowState.Deleted) dr.EndEdit();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PUB.log.AddE("Load M/C Model Data file" + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
//자료중 보정
|
||||
foreach (var dr in this.dataSet.MCModel)
|
||||
{
|
||||
if (dr.IsSpeedAccNull()) dr.SpeedAcc = 100;
|
||||
if (dr.IsSpeedDccNull()) dr.SpeedDcc = 0;
|
||||
if (dr.IsSpeedNull()) dr.Speed = 50;
|
||||
}
|
||||
dataSet.OPModel.AcceptChanges();
|
||||
|
||||
}
|
||||
public void LoadModelI()
|
||||
{
|
||||
//set filename
|
||||
string filename = fn_Input;
|
||||
|
||||
//read file
|
||||
var fi = new FileInfo(filename);
|
||||
if (fi.Exists == false)
|
||||
{
|
||||
PUB.log.AddE("▣ No Load Model(Error)-Data)");
|
||||
return;
|
||||
}
|
||||
dataSet.InputDescription.Clear();
|
||||
dataSet.InputDescription.ReadXml(fi.FullName);
|
||||
dataSet.InputDescription.AcceptChanges();
|
||||
}
|
||||
public void LoadModelO()
|
||||
{
|
||||
//set filename
|
||||
string filename = fn_Output;
|
||||
|
||||
//read file
|
||||
var fi = new FileInfo(filename);
|
||||
if (fi.Exists == false)
|
||||
{
|
||||
PUB.log.AddE("▣ No Load Model(Error)-Data)");
|
||||
return;
|
||||
}
|
||||
dataSet.OutputDescription.Clear();
|
||||
dataSet.OutputDescription.ReadXml(fi.FullName);
|
||||
dataSet.OutputDescription.AcceptChanges();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// project , model read from file
|
||||
/// </summary>
|
||||
public void Load()
|
||||
{
|
||||
//데이터셋 초기화
|
||||
if (dataSet == null) dataSet = new DataSet1();
|
||||
else dataSet.Clear();
|
||||
|
||||
//파일로부터 데이터를 읽어들인다.
|
||||
this.LoadModelV();
|
||||
this.LoadModelM();
|
||||
this.LoadModelE();
|
||||
this.LoadModelI();
|
||||
this.LoadModelO();
|
||||
this.dataSet.AcceptChanges();
|
||||
|
||||
var cntP = dataSet.OPModel.Rows.Count;
|
||||
var cntM = dataSet.MCModel.Rows.Count;
|
||||
var cntE = dataSet.ErrorDescription.Rows.Count;
|
||||
var cntI = dataSet.InputDescription.Rows.Count;
|
||||
var cntO = dataSet.OutputDescription.Rows.Count;
|
||||
|
||||
PUB.log.AddI(string.Format("※ Model Manager : P{0},M{1},E{2},I{3},O:{4}", cntP, cntM, cntE, cntI, cntO));
|
||||
}
|
||||
|
||||
//public void Save()
|
||||
//{
|
||||
// this.dataSet.AcceptChanges();
|
||||
// System.IO.DirectoryInfo di = new DirectoryInfo(modelPath);
|
||||
// if (!di.Exists) di.Create();
|
||||
// SaveModelM();
|
||||
// SaveModelV();
|
||||
//}
|
||||
|
||||
public string modelPath
|
||||
{
|
||||
get
|
||||
{
|
||||
return System.IO.Path.Combine(UTIL.CurrentPath, "Model");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void SaveModelM()
|
||||
{
|
||||
this.dataSet.MCModel.AcceptChanges();
|
||||
var data = new StringBuilder();
|
||||
data.AppendLine("ver\t" + "1"); //version
|
||||
// data.Append("Title"); //첫열에는 Mccode를 넣는다.
|
||||
|
||||
List<String> cols = new List<string>();
|
||||
//cols.AddRange(new string[] { "title","idx","pidx"});
|
||||
|
||||
foreach (System.Data.DataColumn col in this.dataSet.MCModel.Columns)
|
||||
{
|
||||
string colname = col.ColumnName.ToLower();
|
||||
if (cols.Contains(colname) == true) continue; //이미 존재하면 처리하지 않음
|
||||
// if (colname == "idx") continue; //기본열은 제외한다.
|
||||
cols.Add(col.ColumnName);
|
||||
}
|
||||
|
||||
//열을 정렬해서 추가한다.
|
||||
//var bb = cols.OrderBy(t => t);
|
||||
for (int i = 0; i < cols.Count; i++)
|
||||
{
|
||||
var colname = cols[i];
|
||||
if (i > 0) data.Append("\t");
|
||||
data.Append(colname);
|
||||
}
|
||||
data.AppendLine();
|
||||
|
||||
//output data(글로벌 셋팅하고 MC코드값만 취한다)
|
||||
foreach (var list in dataSet.MCModel.Rows)
|
||||
{
|
||||
var dr = list as DataSet1.MCModelRow;
|
||||
//bb = cols.OrderBy(t => t);
|
||||
for (int i = 0; i < cols.Count; i++)
|
||||
{
|
||||
var colname = cols[i];
|
||||
if (i > 0) data.Append("\t");
|
||||
|
||||
if (dr[colname] != DBNull.Value)
|
||||
data.Append(dr[colname].ToString());
|
||||
else if ( dataSet.MCModel.Columns[colname].DataType == typeof(Boolean))
|
||||
data.Append("False");
|
||||
else if (dataSet.MCModel.Columns[colname].DataType == typeof(double) ||
|
||||
dataSet.MCModel.Columns[colname].DataType == typeof(Int32) ||
|
||||
dataSet.MCModel.Columns[colname].DataType == typeof(UInt32) ||
|
||||
dataSet.MCModel.Columns[colname].DataType == typeof(Single) ||
|
||||
dataSet.MCModel.Columns[colname].DataType == typeof(byte) ||
|
||||
dataSet.MCModel.Columns[colname].DataType == typeof(Int16) ||
|
||||
dataSet.MCModel.Columns[colname].DataType == typeof(UInt16))
|
||||
{
|
||||
//숫자는 기본 0으로 처리한다
|
||||
data.Append("0");
|
||||
}
|
||||
else data.Append("");
|
||||
}
|
||||
data.AppendLine();
|
||||
}
|
||||
try
|
||||
{
|
||||
var mfile = new System.IO.FileInfo(fn_ModelM);
|
||||
var bakfile = new System.IO.FileInfo(System.IO.Path.Combine(mfile.Directory.FullName, "Backup", "m" + DateTime.Now.ToString("yyyyMMddHHmmss") + mfile.Extension));
|
||||
if (bakfile.Exists) bakfile.Delete();
|
||||
if (bakfile.Directory.Exists == false) bakfile.Directory.Create();
|
||||
if (mfile.Exists) System.IO.File.Copy(mfile.FullName, bakfile.FullName, true);
|
||||
PUB.log.Add("model backup(motion) : " + bakfile.FullName);
|
||||
|
||||
System.IO.File.WriteAllText(fn_ModelM, data.ToString(), System.Text.Encoding.Default);
|
||||
PUB.log.AddAT("Save M/C Model Parameter - OK");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
UTIL.MsgE("M/C Model Save Error\r\n" + ex.Message);
|
||||
PUB.log.AddE("M/C Model Save Error :: " + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public void SaveModelV()
|
||||
{
|
||||
this.dataSet.OPModel.AcceptChanges();
|
||||
var data = new StringBuilder();
|
||||
data.AppendLine("ver,:" + "1"); //version
|
||||
data.Append("Title"); //첫열에는 Mccode를 넣는다.
|
||||
|
||||
List<String> cols = new List<string>();
|
||||
foreach (System.Data.DataColumn col in this.dataSet.OPModel.Columns)
|
||||
{
|
||||
string colname = col.ColumnName.ToLower();
|
||||
if (colname == "Memo" || colname == "idx") continue; //기본열은 제외한다.
|
||||
cols.Add(col.ColumnName);
|
||||
}
|
||||
cols.Add("Memo");
|
||||
|
||||
//열을 정렬해서 추가한다.
|
||||
var bb = cols.OrderBy(t => t);
|
||||
foreach (string colname in bb)
|
||||
data.Append("," + colname);
|
||||
data.AppendLine();
|
||||
|
||||
//output data(글로벌 셋팅하고 MC코드값만 취한다)
|
||||
foreach (var list in dataSet.OPModel.Select("isnull(Title,'') <> ''", "Title"))
|
||||
{
|
||||
var dr = list as DataSet1.OPModelRow;
|
||||
data.Append(dr.Title); //일반셋팅은 mccode 값 그대로 넣는다.
|
||||
bb = cols.OrderBy(t => t);
|
||||
foreach (string colname in bb) //지정된 열제목의 데이터를 가져온다.
|
||||
{
|
||||
data.Append(",");
|
||||
if (dr[colname] != DBNull.Value) data.Append(dr[colname].ToString());
|
||||
else if (dataSet.OPModel.Columns[colname].DataType == typeof(Boolean))
|
||||
data.Append("False");
|
||||
else if (dataSet.OPModel.Columns[colname].DataType == typeof(double) ||
|
||||
dataSet.OPModel.Columns[colname].DataType == typeof(Int32) ||
|
||||
dataSet.OPModel.Columns[colname].DataType == typeof(UInt32) ||
|
||||
dataSet.OPModel.Columns[colname].DataType == typeof(Single) ||
|
||||
dataSet.OPModel.Columns[colname].DataType == typeof(byte) ||
|
||||
dataSet.OPModel.Columns[colname].DataType == typeof(Int16) ||
|
||||
dataSet.OPModel.Columns[colname].DataType == typeof(UInt16))
|
||||
{
|
||||
//숫자는 기본 0으로 처리한다
|
||||
data.Append("0");
|
||||
}
|
||||
else data.Append("0");
|
||||
}
|
||||
data.AppendLine();
|
||||
}
|
||||
try
|
||||
{
|
||||
//기존파일은 백업을 한다.
|
||||
var mfile = new System.IO.FileInfo(fn_ModelV);
|
||||
var bakfile = new System.IO.FileInfo(System.IO.Path.Combine(mfile.Directory.FullName, "Backup", "v" + DateTime.Now.ToString("yyyyMMddHHmmss") + mfile.Extension));
|
||||
if (bakfile.Exists) bakfile.Delete();
|
||||
if (bakfile.Directory.Exists == false) bakfile.Directory.Create();
|
||||
if (mfile.Exists) System.IO.File.Copy(mfile.FullName, bakfile.FullName, true);
|
||||
PUB.log.Add("model backup(vision) : " + bakfile.FullName);
|
||||
System.IO.File.WriteAllText(fn_ModelV, data.ToString(), System.Text.Encoding.Default);
|
||||
PUB.log.AddAT("Save Model(Vision) Parameter - OK");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
UTIL.MsgE(" Model(Vision) Save Error\r\n" + ex.Message);
|
||||
PUB.log.AddE(" Model(Vision) Save Error :: " + ex.Message);
|
||||
}
|
||||
}
|
||||
public void SaveModelI()
|
||||
{
|
||||
SaveModel(fn_Input, "i", dataSet.InputDescription);
|
||||
}
|
||||
public void SaveModelO()
|
||||
{
|
||||
SaveModel(fn_Output, "o", dataSet.OutputDescription);
|
||||
}
|
||||
public void SaveModelE()
|
||||
{
|
||||
SaveModel(fn_Error, "e", dataSet.ErrorDescription);
|
||||
}
|
||||
|
||||
void SaveModel(string fn, string prefix, System.Data.DataTable dt)
|
||||
{
|
||||
dt.AcceptChanges();
|
||||
|
||||
try
|
||||
{
|
||||
var mfile = new System.IO.FileInfo(fn);
|
||||
var bakfile = new System.IO.FileInfo(System.IO.Path.Combine(mfile.Directory.FullName, "Backup", prefix + DateTime.Now.ToString("yyyyMMddHHmmss") + mfile.Extension));
|
||||
if (bakfile.Exists) bakfile.Delete();
|
||||
if (bakfile.Directory.Exists == false) bakfile.Directory.Create();
|
||||
if (mfile.Exists) System.IO.File.Copy(mfile.FullName, bakfile.FullName, true);
|
||||
//Pub.log.Add($"model backup({dt.TableName}) : " + bakfile.FullName);
|
||||
|
||||
var savefeil = mfile.FullName;
|
||||
if (savefeil.EndsWith(".csv")) savefeil = savefeil.Replace(".csv", ".xml");
|
||||
|
||||
dt.WriteXml(savefeil, true);
|
||||
//System.IO.File.WriteAllText(savefeil, data.ToString(), System.Text.Encoding.Default);
|
||||
PUB.log.AddAT($"Save {dt.TableName} Model Parameter - OK");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
UTIL.MsgE($"{dt.TableName} Model Save Error\r\n" + ex.Message);
|
||||
PUB.log.AddE($"{dt.TableName} Model Save Error :: " + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 지정된 mccode 의 개체를 반환합니다. (없거나 중복일경우 mccode 가 비어있습니다)
|
||||
/// </summary>
|
||||
/// <param name="tagBcd"></param>
|
||||
/// <returns></returns>
|
||||
public DataSet1.MCModelRow GetDataM(string title)
|
||||
{
|
||||
if (title.isEmpty()) return null;
|
||||
if (dataSet.MCModel == null || dataSet.MCModel.Rows.Count < 1) return null;
|
||||
var datas = dataSet.MCModel.Where(t => t.Title == title).ToArray();
|
||||
if (datas.Length != 1) return null;
|
||||
return datas[0];
|
||||
}
|
||||
public DataSet1.OPModelRow GetDataV(string title)
|
||||
{
|
||||
if (title.isEmpty()) return null;
|
||||
if (dataSet.OPModel == null || dataSet.OPModel.Rows.Count < 1) return null;
|
||||
var datas = dataSet.OPModel.Where(t => t.Title == title).ToArray();
|
||||
if (datas.Length != 1) return null;
|
||||
return datas[0];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user