Пример #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);
        }