Пример #1
0
        /// <summary>
        /// 通过时间变更小时数
        /// </summary>
        /// <param name="WorkID">主键</param>
        /// <returns></returns>
        public static double GetIDLHour(string WorkID)
        {
            double IDLHour = 1;

            KPI_WorkEntity entity = KPI_WorkDal.GetEntity(WorkID);

            int    nBaseShifts = entity.WorkBaseShifts;
            string strSequence = entity.WorkSequence;

            //strSequence = strSequence.Remove(strSequence.LastIndexOf('-'));
            string[] AllPeriods = strSequence.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);

            //当天班的顺序
            //string[] strCurrentPeriod = new string[nBaseShifts];
            for (int i = 0; i < nBaseShifts; i++)
            {
                string strC = AllPeriods[nBaseShifts + i];

                KPI_PeriodEntity pd = KPI_PeriodDal.GetEntity(strC);

                int nIDL = int.Parse(pd.PeriodIsIDL);
                if (nIDL == 1)
                {
                    IDLHour = Convert.ToDouble(pd.PeriodEndHour);
                    break;
                }
            }

            return(IDLHour);
        }
Пример #2
0
        /// <summary>
        /// 通过时间获得当前值、当前班、开始时间、结束时间
        /// </summary>
        /// <param name="WorkID">主键</param>
        /// <returns></returns>
        public static bool GetShiftAndPeriod(string WorkID, string QueryTime,
                                             ref string ShiftName, ref string PeriodName,
                                             ref string StartTime, ref string EndTime)
        {
            ShiftName  = "";
            PeriodName = "";
            StartTime  = "";
            EndTime    = "";

            KPI_WorkEntity entity = KPI_WorkDal.GetEntity(WorkID);

            DateTime dtQueryTime = DateTime.Parse(QueryTime);

            string strStartTime = entity.WorkStartTime;
            int    nBaseShifts  = entity.WorkBaseShifts;
            int    nBaseDays    = entity.WorkBaseDays;
            string strSequence  = entity.WorkSequence;
            string strShift     = entity.WorkShift;

            //判断是否查询时间超出范围
            if (DateTime.Parse(strStartTime) > dtQueryTime)
            {
                return(false);
            }

            //int[] timearray = new int[6] { dtQueryTime.Year, dtQueryTime.Month, dtQueryTime.Day, dtQueryTime.Hour, 0, 0 };
            DateTime dtStartTime = dtQueryTime;
            DateTime dtEndTime   = dtQueryTime;


            //获得值班顺序
            //strSequence = strSequence.Remove(strSequence.LastIndexOf('-'));
            string[] AllPeriods = strSequence.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);

            //strShift = strShift.Remove(strShift.LastIndexOf('-'));
            string[] AllShifts = strShift.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);

            TimeSpan tspan = DateTime.Parse(QueryTime) - DateTime.Parse(strStartTime);

            //当天班的序号
            int nDay = tspan.Days % nBaseDays;

            //当天班的顺序
            string[] strCurrentPeriod = new string[nBaseShifts];
            for (int i = 0; i < nBaseShifts; i++)
            {
                strCurrentPeriod[i] = AllPeriods[nDay * nBaseShifts + i];
            }

            decimal CurrentHour = Convert.ToDecimal(dtQueryTime.Hour + dtQueryTime.Minute / 60.0m);
            //DateTime dt
            bool bPeriod  = false;
            bool bLastDay = false;

            int id = 0;

            for (id = 0; id < nBaseShifts; id++)
            {
                bPeriod  = false;
                bLastDay = false;

                string           strP = strCurrentPeriod[id];
                KPI_PeriodEntity pe   = KPI_PeriodDal.GetEntity(strP);

                int nIDL = int.Parse(pe.PeriodIsIDL);

                if (pe.PeriodStartHour == -1)
                {
                    continue;
                }

                if (nIDL == 0 && (CurrentHour >= pe.PeriodStartHour && CurrentHour < pe.PeriodEndHour))
                {
                    bPeriod = true;

                    //班名称,开始时间,结束时间
                    PeriodName = pe.PeriodName;

                    //班开始结束时间的小时、分钟转换,考虑有半点交班的情况。
                    int sh = (int)Math.Floor(pe.PeriodStartHour);
                    int sm = (int)((pe.PeriodStartHour - sh) * 60);
                    int eh = (int)Math.Floor(pe.PeriodEndHour);
                    int em = (int)((pe.PeriodEndHour - eh) * 60);

                    dtStartTime = new DateTime(dtQueryTime.Year, dtQueryTime.Month, dtQueryTime.Day, sh, sm, 0);
                    dtEndTime   = new DateTime(dtQueryTime.Year, dtQueryTime.Month, dtQueryTime.Day, eh, em, 0);
                }

                if (nIDL == 1 && (CurrentHour >= pe.PeriodStartHour && CurrentHour < 24))
                {
                    bPeriod = true;

                    //班名称,开始时间,结束时间
                    PeriodName = pe.PeriodName;


                    //班开始结束时间的小时、分钟转换,考虑有半点交班的情况。
                    int sh = (int)Math.Floor(pe.PeriodStartHour);
                    int sm = (int)((pe.PeriodStartHour - sh) * 60);
                    int eh = (int)Math.Floor(pe.PeriodEndHour);
                    int em = (int)((pe.PeriodEndHour - eh) * 60);

                    dtStartTime = new DateTime(dtQueryTime.Year, dtQueryTime.Month, dtQueryTime.Day, sh, sm, 0);
                    DateTime dtNextTime = dtQueryTime.AddDays(1);
                    dtEndTime = new DateTime(dtNextTime.Year, dtNextTime.Month, dtNextTime.Day, eh, em, 0);
                }

                if (nIDL == 1 && (CurrentHour >= 0 && CurrentHour < pe.PeriodEndHour))
                {
                    bPeriod  = true;
                    bLastDay = true;

                    //班名称,开始时间,结束时间
                    PeriodName = pe.PeriodName;


                    //班开始结束时间的小时、分钟转换,考虑有半点交班的情况。
                    int sh = (int)Math.Floor(pe.PeriodStartHour);
                    int sm = (int)((pe.PeriodStartHour - sh) * 60);
                    int eh = (int)Math.Floor(pe.PeriodEndHour);
                    int em = (int)((pe.PeriodEndHour - eh) * 60);

                    DateTime dtLastTime = dtQueryTime.AddDays(-1);
                    dtStartTime = new DateTime(dtLastTime.Year, dtLastTime.Month, dtLastTime.Day, sh, sm, 0);
                    dtEndTime   = new DateTime(dtQueryTime.Year, dtQueryTime.Month, dtQueryTime.Day, eh, em, 0);
                }

                //已经获得开始时间和结束时间。
                if (bPeriod)
                {
                    break;
                }
            }

            if (bPeriod)
            {
                if (bLastDay)
                {
                    //前一天的序号
                    int nLastDay = (nDay + (nBaseDays - 1)) % nBaseDays;
                    //前一天班的顺序
                    string[] strLastPeriod = new string[nBaseShifts];
                    for (int i = 0; i < nBaseShifts; i++)
                    {
                        strLastPeriod[i] = AllPeriods[nLastDay * nBaseShifts + i];
                    }

                    for (int i = 0; i < nBaseShifts; i++)
                    {
                        if (strCurrentPeriod[id] == strLastPeriod[i])
                        {
                            ShiftName = KPI_ShiftDal.GetShiftName(AllShifts[i]);

                            break;
                        }
                    }
                }
                else
                {
                    ShiftName = KPI_ShiftDal.GetShiftName(AllShifts[id]);
                }

                StartTime = dtStartTime.ToString("yyy-MM-dd HH:mm:ss");
                EndTime   = dtEndTime.ToString("yyy-MM-dd HH:mm:ss");
            }
            else
            {
                return(false);
            }


            return(true);
        }