274 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			274 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Linq;
 | |
| using System.Text;
 | |
| using System.IO;
 | |
| 
 | |
| namespace Project.Manager
 | |
| {
 | |
|     public struct sModelInfo
 | |
|     {
 | |
|         public string Group;
 | |
|         public string QRCode;
 | |
|         public int QRx;
 | |
|         public int QRy;
 | |
|         public string Asset;
 | |
|         public string Memo;
 | |
|         public void Clear()
 | |
|         {
 | |
|             Group = string.Empty;
 | |
|             QRCode = string.Empty;
 | |
|             QRx = 0;
 | |
|             QRy = 0;
 | |
|             Asset = string.Empty;
 | |
|             Memo = string.Empty;    
 | |
|         }
 | |
| 
 | |
|     }
 | |
|     public class ModelManager
 | |
|     {
 | |
|         public enum eModelType : int
 | |
|         {
 | |
|             Users = 0,
 | |
|             Model,
 | |
|         }
 | |
| 
 | |
| 
 | |
|         public DataSet1 dataSet;
 | |
|         private string[] fn;
 | |
| 
 | |
|         public ModelManager()
 | |
|         {
 | |
|             string path = AppDomain.CurrentDomain.BaseDirectory + "Model";
 | |
|             if (!System.IO.Directory.Exists(path)) System.IO.Directory.CreateDirectory(path);
 | |
|             this.fn = new string[] { path + "\\Users.csv", path + "\\Model.csv" };
 | |
|             dataSet = new DataSet1();
 | |
|         }
 | |
| 
 | |
|         public void LoadData(eModelType model)
 | |
|         {
 | |
|             //set filename
 | |
|             string filename = fn[(int)model];
 | |
|             int lineCount = 0;
 | |
|             string buffer = string.Empty;
 | |
| 
 | |
|             Pub.log.Add("ModelData Load : " + model.ToString() + "fn=" + filename);
 | |
| 
 | |
|             //read file
 | |
|             var fi = new FileInfo(filename);
 | |
|             if (fi.Exists == false)
 | |
|             {
 | |
|                 Pub.log.AddE(string.Format("▣ No Data",model));
 | |
|                 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("ItemData Error File={0},Message={1}", filename, ex.Message));
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             //존재하는 컬럼확인을 위해 미리 저장함
 | |
|             List<String> dbCols = new List<string>();
 | |
|             foreach (System.Data.DataColumn col in dataSet.Tables[model.ToString()].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;
 | |
|                 }
 | |
| 
 | |
|                 //데이터를 각 컬럼에 넣는다.
 | |
|                 System.Data.DataRow dr = dataSet.Tables[model.ToString()].NewRow();
 | |
| 
 | |
|                 //비젼속성은 컬럼명이 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+1];
 | |
|                     }
 | |
|                     catch (Exception ex)
 | |
|                     {
 | |
|                         Pub.log.AddE("Item Load Error:" + ex.Message);
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 
 | |
|                 try
 | |
|                 {
 | |
|                     if (dr.RowState == System.Data.DataRowState.Detached)
 | |
|                     {
 | |
|                         dataSet.Tables[model.ToString()].Rows.Add(dr);
 | |
|                     }
 | |
|                     else if (dr.RowState != System.Data.DataRowState.Deleted) dr.EndEdit();
 | |
|                 }
 | |
|                 catch (Exception ex)
 | |
|                 {
 | |
|                     Pub.log.AddE("Load Item file" + ex.Message);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             dataSet.AcceptChanges();
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// project , model read from file
 | |
|         /// </summary>
 | |
|         public void Load()
 | |
|         {
 | |
|             //데이터셋 초기화
 | |
|             if (dataSet == null) dataSet = new DataSet1();
 | |
|             else dataSet.Clear();
 | |
| 
 | |
|             //파일로부터 데이터를 읽어들인다.
 | |
|             this.LoadData(eModelType.Users);
 | |
|             this.LoadData(eModelType.Model);
 | |
|             this.dataSet.AcceptChanges();
 | |
| 
 | |
|             System.Text.StringBuilder sb = new StringBuilder();
 | |
|             sb.Append("model data list");
 | |
|             for(int i = 0; i< dataSet.Tables.Count;i++)
 | |
|             {
 | |
|                 var dt = dataSet.Tables[i];
 | |
|                 if (dt.TableName.ToLower() == "resultdata") continue;
 | |
|                 sb.AppendLine(dt.TableName + " : " + dt.Rows.Count.ToString() + "건");
 | |
|             }
 | |
| 
 | |
|             Pub.log.AddI(sb.ToString());
 | |
|         }
 | |
| 
 | |
|         public void Save()
 | |
|         {
 | |
|             this.dataSet.AcceptChanges();
 | |
|             System.IO.DirectoryInfo di = new DirectoryInfo (Util.CurrentPath + "\\Model");
 | |
|             if (!di.Exists) di.Create();
 | |
|             SaveData(eModelType.Users);
 | |
|             SaveData(eModelType.Model);
 | |
|         }
 | |
| 
 | |
|         public void SaveData(eModelType model)
 | |
|         {
 | |
|             var data = new StringBuilder();
 | |
|             data.AppendLine("ver,:" + model.ToString()); //version
 | |
| 
 | |
|             List<string> baseCols = new List<string>();
 | |
|             if (model == eModelType.Users) baseCols.AddRange(new string[] { "No", "Name", "Memo" });
 | |
|             else if (model == eModelType.Model) baseCols.AddRange(new string[] { "Group", "Asset" });
 | |
|             
 | |
|             List<String> cols = new List<string>();
 | |
|             foreach (System.Data.DataColumn col in this.dataSet.Tables[model.ToString()].Columns)
 | |
|             {
 | |
|                 string colname = col.ColumnName.ToLower();
 | |
|                 if (colname == "idx" || colname.StartsWith("_")) continue; //기본열은 제외한다.
 | |
|                 if (baseCols.IndexOf(col.ColumnName) >= 0) continue;
 | |
|                 cols.Add(col.ColumnName);
 | |
|             }
 | |
| 
 | |
|             //열을 정렬해서 추가한다.
 | |
|             var bb = cols.OrderBy(t => t);
 | |
|             baseCols.AddRange(bb);  //정렬된 열을 추가해준다.
 | |
| 
 | |
|             foreach (string colname in baseCols)
 | |
|                 data.Append("," + colname);
 | |
|             data.AppendLine();
 | |
| 
 | |
|             //output data(글로벌 셋팅하고 MC코드값만 취한다)v
 | |
|             var dt = dataSet.Tables[model.ToString()];
 | |
|             var drows = dt.Select("", "idx");
 | |
|             foreach (var dr in drows)
 | |
|             {
 | |
|                 foreach (string colname in baseCols) //지정된 열제목의 데이터를 가져온다.
 | |
|                 {
 | |
|                     data.Append(",");
 | |
|                     if (dr[colname] != DBNull.Value) data.Append(dr[colname].ToString());
 | |
|                     else if (dt.Columns[colname].DataType == typeof(double) ||
 | |
|                         dt.Columns[colname].DataType == typeof(Int32) ||
 | |
|                         dt.Columns[colname].DataType == typeof(UInt32) ||
 | |
|                         dt.Columns[colname].DataType == typeof(Single) ||
 | |
|                         dt.Columns[colname].DataType == typeof(byte) ||
 | |
|                         dt.Columns[colname].DataType == typeof(Boolean) ||
 | |
|                         dt.Columns[colname].DataType == typeof(Int16) ||
 | |
|                         dt.Columns[colname].DataType == typeof(UInt16))
 | |
|                     {
 | |
|                         if (dt.Columns[colname].DataType == typeof(Boolean)) data.Append("False");
 | |
|                         else data.Append("0");
 | |
|                     }
 | |
|                     else data.Append("");
 | |
|                 }
 | |
|                 data.AppendLine();
 | |
|             }
 | |
|             try
 | |
|             {
 | |
|                 System.IO.File.WriteAllText(fn[(int)model], data.ToString(), System.Text.Encoding.Default);
 | |
|                 Pub.log.AddAT("Save "+ model.ToString()+" Parameter - OK");
 | |
|             }
 | |
|             catch (Exception ex)
 | |
|             {
 | |
|                 Util.MsgE("Save Error\r\n" + ex.Message);
 | |
|                 Pub.log.AddE("Save Error :: " + ex.Message);
 | |
|             }
 | |
|         }
 | |
|       
 | |
|        
 | |
|        
 | |
|         public DataSet1.UsersRow GetUser(string no)
 | |
|         {
 | |
|             var datas = this.dataSet.Users.Where(t => t.No == no);
 | |
|             if (datas.Count() < 1) return null;
 | |
|             return datas.First();
 | |
|         }
 | |
|         public DataSet1.UsersRow[] GetUsers()
 | |
|         {
 | |
|             var datas = dataSet.Users.Select("", "No");
 | |
|             if (datas.Length < 1) return null;
 | |
|             return datas as DataSet1.UsersRow[];
 | |
|         }
 | |
| 
 | |
|         public DataSet1.ModelRow GetModel(string Asset)
 | |
|         {
 | |
|             if (Asset.isEmpty()) return null;
 | |
|             if (dataSet.Model == null || dataSet.Model.Rows.Count < 1) return null;
 | |
|             var datas = dataSet.Model.Where(t => t.Asset == Asset).ToArray();
 | |
|             if (datas.Length != 1) return null;
 | |
|             return datas[0];
 | |
|         }
 | |
|         public sModelInfo GetModelInfo(string qrData)
 | |
|         {
 | |
|             sModelInfo retval = new sModelInfo();
 | |
|             retval.Clear();
 | |
|             var model = GetModel(qrData);
 | |
|             if(model != null)
 | |
|             {
 | |
|                 retval.Asset = model.Asset;
 | |
|                 retval.Memo = model.Memo;
 | |
|             }
 | |
|             return retval;
 | |
|         }
 | |
|         
 | |
|     }
 | |
| 
 | |
| }
 | 
