using System; using System.Data; using System.IO; using Microsoft.VisualBasic.CompilerServices; using static iMESCore.DataBase.iMESSql; namespace AutoLoaderLib_C { public class ParseQEL : EPIParseTemplate { // 呼叫父類別的建構子 public ParseQEL(string paramSourcePath, string paramDestinationPath, string paramQueuePath, string paramFailPath) : base(paramSourcePath, paramDestinationPath, paramQueuePath, paramFailPath) { } /// /// 設定暫存資料表的欄位 /// /// /// /// internal override bool AddColumns(DataTable dt) { bool blnResult = false; try { dt.Columns.Add("WaferID", Type.GetType("System.String")); dt.Columns.Add("POS", Type.GetType("System.Decimal")); dt.Columns.Add("LOP1", Type.GetType("System.Decimal")); dt.Columns.Add("LOP2", Type.GetType("System.Decimal")); dt.Columns.Add("WLP1", Type.GetType("System.Decimal")); dt.Columns.Add("WLD1", Type.GetType("System.Decimal")); dt.Columns.Add("VF1", Type.GetType("System.Decimal")); dt.Columns.Add("VF2", Type.GetType("System.Decimal")); blnResult = true; } catch (Exception ex) { throw; } return blnResult; } /// /// 將暫存資料表寫入資料庫 /// /// /// /// internal override bool InsertTable(DataTable dt) { bool blnResult = false; string strSQL_Raw; string strSQL_Avg; string WaferID = ""; decimal LOP1 = 0m; decimal LOP2 = 0m; decimal WLP1 = 0m; decimal WLD1 = 0m; decimal VF1 = 0m; decimal VF2 = 0m; strSQL_Raw = " INSERT INTO TBL_LEDLD_EL_Q_RAW " + " (WaferID, CreateDate, POS, LOP1, LOP2, WLP1, WLD1, VF1, VF2) " + " VALUES ('{0}', SYSDATE, {1}, {2}, {3}, {4}, {5}, {6}, {7}) "; strSQL_Avg = " INSERT INTO TBL_LEDLD_EL_Q " + " (WaferID, CreateDate, LOP1, LOP2, WLP1, WLD1, VF1, VF2) " + " VALUES ('{0}', SYSDATE, {1}, {2}, {3}, {4}, {5}, {6}) "; try { using (var oTran = objConnection.BeginTransaction()) { try { using (var cmd = CreateCommand()) { cmd.Connection = objConnection; cmd.Transaction = oTran; if (dt.Rows.Count > 0) { for (int i = 0, loopTo = dt.Rows.Count - 1; i <= loopTo; i++) { cmd.CommandText = string.Format(strSQL_Raw, dt.Rows[i]["WaferID"], dt.Rows[i]["POS"], dt.Rows[i]["LOP1"], dt.Rows[i]["LOP2"], dt.Rows[i]["WLP1"], dt.Rows[i]["WLD1"], dt.Rows[i]["VF1"], dt.Rows[i]["VF2"]); cmd.ExecuteNonQuery(); WaferID = Conversions.ToString(dt.Rows[i]["WaferID"]); LOP1 = LOP1 + (decimal)dt.Rows[i]["LOP1"]; LOP2 = LOP2 + (decimal)dt.Rows[i]["LOP2"]; WLP1 = WLP1 + (decimal)dt.Rows[i]["WLP1"]; WLD1 = WLD1 + (decimal)dt.Rows[i]["WLD1"]; VF1 = VF1 + (decimal)dt.Rows[i]["VF1"]; VF2 = VF2 + (decimal)dt.Rows[i]["VF2"]; } cmd.CommandText = string.Format(strSQL_Avg, WaferID, LOP1 / dt.Rows.Count, LOP2 / dt.Rows.Count, WLP1 / dt.Rows.Count, WLD1 / dt.Rows.Count, VF1 / dt.Rows.Count, VF2 / dt.Rows.Count); cmd.ExecuteNonQuery(); } } oTran.Commit(); blnResult = true; } catch (Exception ex) { oTran.Rollback(); throw; } } } catch (Exception ex) { throw; } return blnResult; } /// /// 解析資料, 並寫入暫存資料表 /// /// /// /// /// internal override bool ParsingFile(DataTable dt, string file) { bool blnResult = false; DataRow dr = null; string line; string[] tmpData; bool startParsing = false; string WaferID; try { // 檔名即為 WaferID var fi = new FileInfo(file); WaferID = fi.Name.Replace(fi.Extension, ""); fi = null; using (var sr = new StreamReader(file)) { do { line = sr.ReadLine(); if (!string.IsNullOrEmpty(line)) { if (startParsing) { tmpData = line.Split(','); dr = dt.NewRow(); dr["WaferID"] = WaferID; dr["POS"] = Convert.ToDecimal(tmpData[0].Trim()); dr["LOP1"] = Convert.ToDecimal(tmpData[4].Trim()); dr["LOP2"] = Convert.ToDecimal(tmpData[14].Trim()); dr["WLP1"] = Convert.ToDecimal(tmpData[6].Trim()); dr["WLD1"] = Convert.ToDecimal(tmpData[5].Trim()); dr["VF1"] = Convert.ToDecimal(tmpData[3].Trim()); dr["VF2"] = Convert.ToDecimal(tmpData[13].Trim()); dt.Rows.Add(dr); } else if (line.IndexOf("PosX") >= 0 && line.IndexOf("PosY") >= 0) { startParsing = true; } } } while (!(line == null)); blnResult = true; } } catch (Exception ex) { throw; } finally { if (dr != null) { dr = null; } } return blnResult; } } }