/// <summary> /// 获取设备数据 例:班制shift为0, 首班时间为8:00:00,统计延时30分钟时, 5月28日的数据为5月28日(含)至5月29日8:30:00(不含) /// <param name="shift">班制 0 全天 1 2 ... </param> /// </summary> /// <returns></returns> public static IEnumerable <MonitoringKanBanDevice> GetKanBanDevices(DateTime time, Workshop workshop, int shift, StatisticProcessTimeEnum timeType, int range, List <int> deviceIds) { var res = new List <MonitoringKanBanDevice>(); try { var workshopId = workshop.Id; //DateTime startTime, DateTime endTime var deviceList = (deviceIds != null && deviceIds.Any()) ? DeviceHelper.GetMenus(workshopId, deviceIds.Distinct()).ToDictionary(x => x.Id, x => x.Code) : new Dictionary <int, string>(); deviceIds = deviceList.Select(x => x.Key).ToList(); if (!deviceIds.Any()) { return(res); } var shiftTime = DateTimeExtend.GetDayWorkDay(workshop.Shifts, workshop.StatisticTimeList, time); IEnumerable <MonitoringKanBanDevice> data = null; var startTime = default(DateTime); var endTime = default(DateTime); switch (timeType) { case StatisticProcessTimeEnum.小时: break; case StatisticProcessTimeEnum.日: endTime = shiftTime.Item2.Date; startTime = shiftTime.Item1.AddDays(1 - range).Date; break; case StatisticProcessTimeEnum.周: var week = DateTimeExtend.GetWorkWeek(0, time, workshop.StatisticTimeList); endTime = week.Item2.Date; startTime = week.Item1.AddWeeks(-range).Date; break; case StatisticProcessTimeEnum.月: var month = DateTimeExtend.GetWorkMonth(0, time, workshop.StatisticTimeList); endTime = month.Item2.Date; startTime = month.Item1.AddMonths(-range).Date; break; case StatisticProcessTimeEnum.年: var year = DateTimeExtend.GetWorkYear(0, time, workshop.StatisticTimeList); endTime = year.Item2.Date; startTime = year.Item1.AddYears(-range).Date; break; } if (startTime == default(DateTime) || endTime == default(DateTime)) { return(res); } data = GetKanBanDevices(startTime, endTime, 0, deviceIds); foreach (var(id, name) in deviceList) { var dData = data.Where(x => x.DeviceId == id); if (shift == 0) { AddMonitoringKanBanDevice(endTime, ref res, dData, -1, 0, null, id, name); } else { var tData = dData.Where(x => x.ExtraData.Parts.Any(y => y.Shift == shift)).Select(x => x.ExtraData.Parts.FirstOrDefault(y => y.Shift == shift)); AddMonitoringKanBanDevice(endTime, ref res, tData, -1, 0, null, id, name); } } } catch (Exception e) { Log.Error(e); } return(res); }
public static IEnumerable <ProductionPlan> GetDetails(DateTime time, Workshop workshop, StatisticProcessTimeEnum timeType, int range, string step) { var res = new List <ProductionPlan>(); try { var shiftTime = DateTimeExtend.GetDayWorkDay(workshop.Shifts, workshop.StatisticTimeList, time); IEnumerable <ProductionPlan> data = null; var startTime = default(DateTime); var endTime = default(DateTime); switch (timeType) { case StatisticProcessTimeEnum.小时: break; case StatisticProcessTimeEnum.日: endTime = shiftTime.Item1.Date; startTime = shiftTime.Item1.AddDays(1 - range).Date; break; case StatisticProcessTimeEnum.周: var week = DateTimeExtend.GetWorkWeek(0, time, workshop.StatisticTimeList); endTime = week.Item2.Date; startTime = week.Item1.AddWeeks(-range).Date; break; case StatisticProcessTimeEnum.月: var month = DateTimeExtend.GetWorkMonth(0, time, workshop.StatisticTimeList); endTime = month.Item2.Date; startTime = month.Item1.AddMonths(-range).Date; break; case StatisticProcessTimeEnum.年: var year = DateTimeExtend.GetWorkYear(0, time, workshop.StatisticTimeList); endTime = year.Item2.Date; startTime = year.Item1.AddYears(-range).Date; break; } if (startTime == default(DateTime) || endTime == default(DateTime)) { return(res); } data = GetDetails(startTime, endTime, step); var productionList = data.Select(x => x.Production).Distinct(); switch (timeType) { case StatisticProcessTimeEnum.小时: break; case StatisticProcessTimeEnum.日: #region 日 for (var i = range - 1; i >= 0; i--) { var t = endTime.AddDays(-i); var sfTimes = new Tuple <DateTime, DateTime>(t, t.AddDays(1)); foreach (var production in productionList) { var tData = data.Where(x => x.Date.InSameRange(sfTimes) && x.Production == production); AddProduction(sfTimes.Item1, ref res, tData, production); } } #endregion break; case StatisticProcessTimeEnum.周: #region 周 for (var i = range; i > 0; i--) { var t = endTime.AddWeeks(-i); var week = DateTimeExtend.GetWeek(0, t); foreach (var production in productionList) { var tData = data.Where(x => { if (x.Date.InSameRange(week) && x.Production == production) { var sfTimes = new Tuple <DateTime, DateTime>(t, t.AddWeeks(1)); return(x.Date.InSameRange(sfTimes)); } return(false); }); AddProduction(week.Item1, ref res, tData, production); } } #endregion break; case StatisticProcessTimeEnum.月: #region 月 for (var i = range; i > 0; i--) { var t = endTime.AddMonths(-i); var month = DateTimeExtend.GetMonth(0, t); foreach (var production in productionList) { var tData = data.Where(x => { if (x.Date.InSameRange(month) && x.Production == production) { var sfTimes = new Tuple <DateTime, DateTime>(t, t.AddMonths(1)); return(x.Date.InSameRange(sfTimes)); } return(false); }); AddProduction(month.Item1, ref res, tData, production); } } #endregion break; case StatisticProcessTimeEnum.年: #region 年 for (var i = range; i > 0; i--) { var t = endTime.AddYears(-i); var year = DateTimeExtend.GetYear(0, t); foreach (var production in productionList) { var tData = data.Where(x => { if (x.Date.InSameRange(year) && x.Production == production) { var sfTimes = new Tuple <DateTime, DateTime>(t, t.AddYears(1)); return(x.Date.InSameRange(sfTimes)); } return(false); }); AddProduction(year.Item1, ref res, tData, production); } } #endregion break; } } catch (Exception e) { Log.Error(e); } return(res); }
/// <summary> /// 获取设备数据 例:班制shift为0, 首班时间为8:00:00,统计延时30分钟时, 5月28日的数据为5月28日(含)至5月29日8:30:00(不含) /// <param name="shift">班制 0 全天 1 2 ... </param> /// </summary> /// <returns></returns> public static IEnumerable <MonitoringKanBanDevice> GetKanBanDevices(Workshop workshop, DateTime time, KanBanShiftsEnum shift, IEnumerable <int> deviceIds) { var res = new List <MonitoringKanBanDevice>(); try { var workshopId = workshop.Id; var deviceList = (deviceIds != null && deviceIds.Any()) ? DeviceHelper.GetMenus(workshopId, deviceIds.Distinct()).ToDictionary(x => x.Id, x => x.Code) : new Dictionary <int, string>(); deviceIds = deviceList.Select(x => x.Key).ToList(); if (!deviceIds.Any()) { return(res); } var currentWorkTimes = DateTimeExtend.GetCurrentWorkTimeRanges(workshop.Shifts, workshop.StatisticTimeList, time); var shiftTimes = DateTimeExtend.GetDayWorkTimeRanges(workshop.Shifts, workshop.StatisticTimeList, time); var workTime = DateTimeExtend.GetDayWorkDay(workshop.Shifts, workshop.StatisticTimeList, time); DateTime startTime = default(DateTime), endTime = default(DateTime); var sft = 0; switch (shift) { case KanBanShiftsEnum.当前班次: startTime = currentWorkTimes.ElementAt(1).Item1; endTime = currentWorkTimes.ElementAt(1).Item2.AddSeconds(-1); sft = shiftTimes.IndexOf(currentWorkTimes.ElementAt(1)); break; case KanBanShiftsEnum.个班: startTime = currentWorkTimes.ElementAt(0).Item1; endTime = currentWorkTimes.ElementAt(0).Item2.AddSeconds(-1); sft = shiftTimes.IndexOf(currentWorkTimes.ElementAt(1)); if (sft == -1) { time = time.AddDays(-1); currentWorkTimes = DateTimeExtend.GetCurrentWorkTimeRanges(workshop.Shifts, workshop.StatisticTimeList, time); shiftTimes = DateTimeExtend.GetDayWorkTimeRanges(workshop.Shifts, workshop.StatisticTimeList, time); sft = shiftTimes.IndexOf(currentWorkTimes.ElementAt(1)); } break; case KanBanShiftsEnum.今日: startTime = workTime.Item1; endTime = workTime.Item2.AddSeconds(-1); break; case KanBanShiftsEnum.昨日: startTime = workTime.Item1.AddDays(-1); endTime = workTime.Item2.AddDays(-1).AddSeconds(-1); break; } if (startTime == default(DateTime) || endTime == default(DateTime)) { return(res); } var data = GetKanBanDevices(startTime.Date, endTime.Date, 0, deviceIds); foreach (var(id, name) in deviceList) { var dData = data.Where(x => x.DeviceId == id); if (shift == 0) { AddMonitoringKanBanDevice(endTime, ref res, dData, -1, 0, null, id, name); } else { var tData = dData.Where(x => x.ExtraData.Parts.Any(y => y.Shift == sft)).Select(x => x.ExtraData.Parts.FirstOrDefault(y => y.Shift == sft)); AddMonitoringKanBanDevice(endTime, ref res, tData, -1, 0, null, id, name); } } } catch (Exception e) { Log.Error(e); } return(res); }