Exemple #1
0
        /// <summary>
        /// 查询班组一天数据
        /// </summary>
        /// <returns>长度为2  第一:上班时间段 8:00-15:00 第二:班次 白班 夜班</returns>
        public string[] GetWorkOrderTotal(DateTime Time, string deparMentId)
        {
            try
            {
                var      db    = new RepositoryFactory().BaseRepository();
                string[] Str   = new string[2];
                var      Month = Time.Month;
                var      Year  = Time.Year;
                var      Day   = Time.Day;
                var      data  = string.Empty;
                //获取区间数据
                var nowData = new WorkTimeSortEntity();
                while (true)
                {
                    nowData = db.IQueryable <WorkTimeSortEntity>().FirstOrDefault(x => x.month == Month && x.year == Year && x.departmentid == deparMentId);
                    if (nowData == null)
                    {
                        Str[0] = "无";
                        Str[1] = "无";
                        return(Str);
                    }
                    else
                    {
                        var TimeData = nowData.timedata;
                        data = TimeData.Split(',')[Day - 1];
                        if (data == "无" || data == "休息")
                        {
                            Str[0] = "无";
                            Str[1] = "无";
                            return(Str);
                        }

                        else
                        {
                            var getDatack      = data.Split('(');
                            var dateTimeSpanck = data.Split('(')[0];
                            var startSpanck    = dateTimeSpanck.Split('-')[0];
                            var endSpanck      = dateTimeSpanck.Split('-')[1];
                            var nowDate        = Time.ToString("yyyy-MM-dd");
                            var endTimeck      = Convert.ToDateTime(nowDate + " " + endSpanck);
                            var startTimeck    = Convert.ToDateTime(nowDate + " " + startSpanck);
                            if (endTimeck <= startTimeck)
                            {
                                break;
                            }
                            var nowTimeck = DateTime.Now;
                            if (nowTimeck > endTimeck)
                            {
                                Time  = Time.AddDays(1);
                                Month = Time.Month;
                                Year  = Time.Year;
                                Day   = Time.Day;
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                }
                var getData      = data.Split('(');
                var nowTime      = getData[1];
                var dateTimeSpan = data.Split('(')[0];
                var startSpan    = dateTimeSpan.Split('-')[0];
                var endSpan      = dateTimeSpan.Split('-')[1];
                Str[0] = nowTime.Replace(")", "");
                var startTime = string.Empty;
                var endTime   = string.Empty;
                var startHour = Convert.ToInt32(startSpan.Split(':')[0]);
                var endHour   = Convert.ToInt32(endSpan.Split(':')[0]);
                if (startHour <= endHour)
                {
                    var nowDate = Time.ToString("yyyy-MM-dd");
                    startTime = Convert.ToDateTime(nowDate + " " + startSpan).ToString("yyyy/MM/dd HH:mm");
                    endTime   = Convert.ToDateTime(nowDate + " " + endSpan).ToString("yyyy/MM/dd HH:mm");
                }
                else
                {
                    var nowDate  = Time.ToString("yyyy-MM-dd");
                    var nextDate = Time.AddDays(1).ToString("yyyy-MM-dd");
                    startTime = Convert.ToDateTime(nowDate + " " + startSpan).ToString("yyyy/MM/dd HH:mm");
                    endTime   = Convert.ToDateTime(nextDate + " " + endSpan).ToString("yyyy/MM/dd HH:mm");
                }
                Str[1] = startTime + "-" + endTime;
                return(Str);
            }
            catch (Exception)
            {
                throw;
            }
        }
Exemple #2
0
        /// <summary>
        /// 计算排班
        /// </summary>
        /// <returns></returns>
        private List <WorkTimeSortEntity> GetTimeOrder(List <WorkOrderEntity> data, List <WorkGroupSetEntity> group, DateTime usetime, bool next)
        {
            //生成下一年数据  时间固定为下一年的一月一号 next=ture

            //计算得出所有数据
            List <WorkTimeSortEntity> allList = new List <WorkTimeSortEntity>();

            foreach (var item in group)
            {
                //获取部门所有生成的数据
                var sortList = service.GetWorkTimeSort(item.departmentid);

                var dept = deptbll.GetEntity(item.departmentid);
                if (dept == null)
                {
                    continue;
                }
                int year  = usetime.Year;
                int month = usetime.Month;
                int day   = usetime.Day;
                #region
                //连接月的循环
                var monthorder = -1;
                //生成下年数据
                if (next)
                {
                    var lastYear     = year - 1;
                    var getMonthSort = sortList.FirstOrDefault(x => x.year == lastYear && x.month == 12);
                    if (getMonthSort == null)
                    {
                        continue;
                    }
                    monthorder = getMonthSort.setsort;
                }
                //循环月
                for (int i = 1; i <= 12; i++)
                {
                    //月实体
                    var setMonth = new WorkTimeSortEntity();
                    if (i >= month)
                    {
                        //获取当前时间数据
                        var nowTime = sortList.FirstOrDefault(x => x.year == year && x.month == i);
                        //不为空加入删除
                        if (nowTime != null)
                        {
                            nowTime.datatype = "del";
                            allList.Add(nowTime);
                        }
                        setMonth.fullname       = item.fullname;
                        setMonth.departmentid   = item.departmentid;
                        setMonth.worktimesortid = Guid.NewGuid().ToString();
                        setMonth.month          = i;
                        setMonth.deptcode       = dept.EnCode;
                        setMonth.year           = year;
                        setMonth.datatype       = "add";
                        //获取月的天数
                        var           daySum     = Time.GetDaysOfMonth(year, i);
                        StringBuilder timespan   = new StringBuilder();
                        StringBuilder timespanId = new StringBuilder();
                        //规则循环
                        var start = -1;
                        for (int j = 1; j <= daySum; j++)
                        {
                            var week = Time.GetWeekNameOfDay(new DateTime(year, i, j));
                            if (j >= day || i > month)
                            {
                                //开始循环规则
                                if (monthorder > -1)
                                {
                                    if (monthorder == data.Count - 1)
                                    {
                                        start = 0;
                                    }
                                    else
                                    {
                                        start = monthorder + 1;
                                    }

                                    monthorder = -1;
                                }
                                else
                                if (start == -1)
                                {
                                    start = item.groupsort;
                                }
                                //判断是否常白班
                                var ck = data.Where(x => x.isweek).Count();
                                //根据序列获取规则数据
                                var set = new WorkOrderEntity();
                                if (ck == data.Count)
                                {
                                    start = 0;
                                    set   = data.FirstOrDefault(x => x.WorkOrderId == item.workorderid);
                                }
                                else
                                {
                                    set = data.FirstOrDefault(x => x.OrderSort == start);
                                }
                                var spanId = set.settingid;
                                var span   = set.WorkName == "休息" ? "休息" : set.StartTime.ToString("HH:mm") + "-" + set.EndTime.ToString("HH:mm") + "(" + set.WorkName + ")";
                                if (set.isweek && (week.Contains("六") || week.Contains("日")))
                                {
                                    span   = "休息";
                                    spanId = "0";
                                }
                                //月结束时
                                if (j == daySum)
                                {
                                    timespanId.Append(spanId);
                                    timespan.Append(span);
                                    setMonth.timedata   = timespan.ToString();
                                    setMonth.timedataid = timespanId.ToString();
                                    setMonth.setsort    = start;//结尾时处于循环的那个点
                                    monthorder          = start;
                                }
                                else
                                {
                                    timespanId.Append(spanId + ",");
                                    timespan.Append(span + ",");
                                }
                                //序列增加  到尾部 为0
                                start++;
                                if (start == data.Count)
                                {
                                    start = 0;
                                }
                            }
                            else
                            {
                                //不为空加入当前数据
                                if (nowTime != null)
                                {
                                    var str   = nowTime.timedata.Split(',');
                                    var strId = nowTime.timedataid.Split(',');
                                    timespan.Append(str[j - 1] + ",");
                                    timespanId.Append(strId[j - 1] + ",");
                                }
                                else
                                {
                                    timespan.Append("无,");
                                    timespanId.Append("0,");
                                }
                            }
                        }
                        //加入list
                        allList.Add(setMonth);
                    }
                    //每年12月完成后下一年
                    if (i == 12)
                    {
                        year  = year + 1;
                        month = 1;
                        day   = 1;
                        //无下年数据
                        var ckyear = sortList.Where(x => x.year == year);
                        if (ckyear.Count() == 0)
                        {
                            continue;
                        }
                        else
                        {
                            i = 1;
                        }
                    }
                }
                #endregion
            }
            return(allList);
        }