예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
 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;
 }
예제 #4
0
        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);
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
        }
예제 #7
0
        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);
        }
예제 #8
0
        //ใช้ในการสอบถามข้อมูล 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);
        }