public bool SaveOutputInfo(EmsMachineOutputInfo oInfo) { bool ret = false; EmsMachineRow mcRow = GetMachine(oInfo.ProcessName, oInfo.MCNo); if (mcRow != null) { //กรณีหากถ้าเคยได้รับการ Register แล้วเก็บไว้ใน Memory แล้ว mcRow.CurrentLotNo = oInfo.CurrentLotNo; mcRow.CurrentTotalGood = oInfo.CurrentTotalGood; mcRow.CurrentTotalNG = oInfo.CurrentTotalNG; mcRow.CurrentStandardRPM = oInfo.CurrentStandardRPM; mcRow.CutTotalGood = oInfo.CutTotalGood; mcRow.CutTotalNG = oInfo.CutTotalNG; //save to db try { m_DB.SaveEmsMachineRow(mcRow); ret = true; } catch (Exception ex) { RaiseErrorCatchedEvent("SaveOutputInfo", ex, "SaveEmsMachineRow"); } } return(ret); }
public void RecordActivityBeforeChange(EmsMachineRow mc, DateTime timeStamp) { if (string.IsNullOrEmpty(mc.CurrentActivityName)) { return; } //วันเวลาที่เคยบันทึกก่อนหน้า DateTime lastActivityChangedTimeStamp = mc.ActivityChangeTime; //Rohm date ของเวลาที่มีการบันทึก RohmDate timeStampRohmDate = RohmDate.FromDateTime(timeStamp); //Rohm date ของเวลาที่เคยบันทึกก่อนหน้า RohmDate lastActivityStampRohmDate = RohmDate.FromDateTime(lastActivityChangedTimeStamp); //ถ้าเป็นคนละวันกัน ให้ทำการบันทึกแยก if (timeStampRohmDate.Date != lastActivityStampRohmDate.Date) { //ทำการหา Duraition เพื่อปิดท้ายให้กับวันนั้น TimeSpan d1 = mc.ActivityChangeTime.Subtract(lastActivityStampRohmDate.EndDate).Duration(); PrivateRecordActivity(mc.ProcessName, mc.MCNo, mc.CurrentActivityName, mc.CurrentActivityCategoryName, lastActivityStampRohmDate, d1); //กรณีเป็นคนละวันกันให้เปลี่ยน เวลาที่เคยบันทึกล่าสุดเป็น เวลาเริ่มต้นของวัน lastActivityChangedTimeStamp = timeStampRohmDate.StartDate; } TimeSpan d2 = lastActivityChangedTimeStamp.Subtract(timeStamp).Duration(); PrivateRecordActivity(mc.ProcessName, mc.MCNo, mc.CurrentActivityName, mc.CurrentActivityCategoryName, timeStampRohmDate, d2); }
public EmsMachineOutputInfo(EmsMachineRow data) { m_ID = data.ID; m_MCNo = data.MCNo; m_ProcessName = data.ProcessName; m_CurrentLotNo = data.CurrentLotNo; m_CurrentTotalGood = data.CurrentTotalGood; m_CurrentTotalNG = data.CurrentTotalNG; m_CurrentStandardRPM = data.CurrentStandardRPM; m_CutTotalGood = data.CutTotalGood; m_CutTotalNG = data.CutTotalNG; }
public int SetCurrentActivity(string processName, string mcNo, string activityName, string activityCategoryName) { int errorCode = 0; //ค้นหาจากใน Collection ด้วย ProcessName และ MCNo EmsMachineRow mc = GetMachine(processName, mcNo); if (mc != null) { DateTime timeStamp = DateTime.Now; //record m_ActivityRecorder.RecordActivityBeforeChange(mc, timeStamp); //change current activity mc.CurrentActivityName = activityName; mc.CurrentActivityCategoryName = activityCategoryName; mc.ActivityChangeTime = timeStamp; if (activityCategoryName == "ChokotieLoss") { mc.AlarmCount += 1; } try { m_DB.InsertActivityHistory(processName, mcNo, activityName, activityCategoryName, timeStamp); } catch (Exception ex) { //raise error RaiseErrorCatchedEvent("SetCurrentActivity-001", ex, ""); } try { int aff = m_DB.SaveEmsMachineRow(mc); } catch (Exception ex) { RaiseErrorCatchedEvent("SetCurrentActivity-002", ex, ""); } } else { //machine is not registered errorCode = 1; } return(errorCode); }
public int SaveEmsMachineRow(EmsMachineRow data) { int aff = 0; data.LastUpdateDate = DateTime.Now; bool updateIDRequire = (data.ID == -1); SqlCommand cmd = new SqlCommand(); cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "dbo.SAVE_EMS_MACHINE"; cmd.Parameters.Add("@ID", SqlDbType.Int); cmd.Parameters["@ID"].Direction = ParameterDirection.InputOutput; cmd.Parameters["@ID"].Value = data.ID; cmd.Parameters.Add("@MCNo", SqlDbType.VarChar, 15).Value = data.MCNo; cmd.Parameters.Add("@RegisteredDate", SqlDbType.DateTime).Value = data.RegisteredDate; cmd.Parameters.Add("@CurrentActivityName", SqlDbType.VarChar, 50).Value = data.CurrentActivityName; cmd.Parameters.Add("@CurrentActivityCategoryName", SqlDbType.VarChar, 50).Value = data.CurrentActivityCategoryName; cmd.Parameters.Add("@AreaName", SqlDbType.VarChar, 50).Value = data.AreaName; cmd.Parameters.Add("@ProcessName", SqlDbType.VarChar, 10).Value = data.ProcessName; cmd.Parameters.Add("@MachineTypeName", SqlDbType.VarChar, 20).Value = data.MachineTypeName; cmd.Parameters.Add("@CurrentLotNo", SqlDbType.VarChar, 10).Value = (data.CurrentLotNo == null?"":data.CurrentLotNo); cmd.Parameters.Add("@CurrentTotalGood", SqlDbType.Int).Value = data.CurrentTotalGood; cmd.Parameters.Add("@CurrentTotalNG", SqlDbType.Int).Value = data.CurrentTotalNG; cmd.Parameters.Add("@CurrentStandardRPM", SqlDbType.Float).Value = data.CurrentStandardRPM; cmd.Parameters.Add("@LastUpdateDate", SqlDbType.DateTime).Value = data.LastUpdateDate; cmd.Parameters.Add("@CutTotalGood", SqlDbType.Int).Value = data.CutTotalGood; cmd.Parameters.Add("@CutTotalNG", SqlDbType.Int).Value = data.CutTotalNG; cmd.Parameters.Add("@ActivityChangeTime", SqlDbType.DateTime).Value = data.ActivityChangeTime; cmd.Parameters.Add("@AlarmCount", SqlDbType.Int).Value = data.AlarmCount; cmd.Parameters.Add("@BMCount", SqlDbType.Int).Value = data.BMCount; aff = ExecuteNonQuery(cmd); if (aff == 1 && updateIDRequire) { data.ID = (int)cmd.Parameters["@ID"].Value; } return(aff); }
private EmsMachineRow GetMachine(string processName, string mcNo) { string mcKey = GetMachineUniqueKey(processName, mcNo); EmsMachineRow mc = null; if (m_MachineList.ContainsKey(mcKey)) { mc = m_MachineList[mcKey]; } else { mc = m_DB.GetMachine(processName, mcNo); if (mc != null) { m_MachineList.Add(mcKey, mc); } } return(mc); }
public EmsMachineRow GetMachine(string processName, string mcNo) { string strSQL = "SELECT [ID],[MCNo],[RegisteredDate],[CurrentActivityName]" + ",[CurrentActivityCategoryName],[AreaName],[ProcessName],[MachineTypeName]" + ",[CurrentLotNo],[CurrentTotalGood],[CurrentTotalNG],[CurrentStandardRPM]" + ",[LastUpdateDate],[CutTotalGood],[CutTotalNG],[ActivityChangeTime],[AlarmCount],[BMCount] " + "FROM [EMS].[Machine] WHERE [MCNo] = @MCNo AND [ProcessName] = @ProcessName"; EmsMachineRow mc = null; using (SqlCommand cmd = new SqlCommand()) { cmd.CommandText = strSQL; cmd.Parameters.Add("@ProcessName", SqlDbType.VarChar, 10).Value = processName; cmd.Parameters.Add("@MCNo", SqlDbType.VarChar, 15).Value = mcNo; using (DataTable dt = ExecuteDataTable(cmd)) { if (dt.Rows.Count == 1) { mc = new EmsMachineRow(dt.Rows[0]); } } } return(mc); }
//ใช้ในการสอบถามข้อมูล OutputInfo ล่าสุดที่ทำการบันทึกไว้ในฐานข้อมูล public EmsMachineOutputInfo RegisterMachine(EmsMachineRegisterInfo regInfo) { EmsMachineOutputInfo ret = null; EmsMachineRow mc = null; string key = GetMachineUniqueKey(regInfo.ProcessName, regInfo.MCNo); mc = GetMachine(regInfo.ProcessName, regInfo.MCNo); if (mc != null) { mc.AreaName = regInfo.AreaName; if (mc.CurrentLotNo != regInfo.CurrentLotNo) { mc.CurrentLotNo = regInfo.CurrentLotNo; mc.CurrentStandardRPM = regInfo.CurrentStandardRPM; mc.CutTotalGood = regInfo.CutTotalGood; //always 0 mc.CutTotalNG = regInfo.CutTotalNG; //always 0 } else { mc.CurrentTotalGood = regInfo.CurrentTotalGood; mc.CurrentTotalNG = regInfo.CurrentTotalNG; } } else { try { mc = new EmsMachineRow(); //add to data base mc.ID = -1; mc.MCNo = regInfo.MCNo; mc.RegisteredDate = DateTime.Now; mc.CurrentActivityName = ""; mc.CurrentActivityCategoryName = ""; mc.AreaName = regInfo.AreaName; mc.ProcessName = regInfo.ProcessName; mc.MachineTypeName = regInfo.MachineTypeName; mc.CurrentLotNo = regInfo.CurrentLotNo; mc.CurrentTotalGood = regInfo.CurrentTotalGood; mc.CurrentTotalNG = regInfo.CurrentTotalNG; mc.CurrentStandardRPM = regInfo.CurrentStandardRPM; mc.LastUpdateDate = DateTime.Now; mc.CutTotalGood = regInfo.CutTotalGood; mc.CutTotalNG = regInfo.CutTotalNG; mc.ActivityChangeTime = DateTime.Now; mc.AlarmCount = 0; mc.BMCount = 0; m_MachineList.Add(key, mc); } catch (Exception ex) { RaiseErrorCatchedEvent("RegisterMachine-001", ex, ""); } } int aff = m_DB.SaveEmsMachineRow(mc); ret = new EmsMachineOutputInfo(mc); return(ret); }