Beispiel #1
0
        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(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);
        }