334 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			334 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 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;
 | |
|     //    }
 | |
|     //}
 | |
| }
 | 
