/// <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; } }
/// <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); }