Ejemplo n.º 1
0
        public static IEnumerable <RtaaSlicedTerm> SliceIntoPieces(this IEnumerable <Term> terms)
        {
            var orderTerms  = terms.OrderBy(o => o.Level).ThenBy(o => o.Start).ToList();
            var termsCutter = new TermsCutter <Term, RtaaSlicedTerm>
                                  (orderTerms, o => true, (s, e, t) =>
            {
                //if (t == null)
                //    return default(SlicedTerm);
                return(new RtaaSlicedTerm
                {
                    Start = s,
                    End = e,
                    OnService = t == null ? false : t.OnService,
                    Text = t == null ? string.Empty : t.Text,
                    Level = t == null ? -1 : t.Level
                });
            });

            return(termsCutter.ToList((begin, current) =>
            {
                bool currentOnService = current != null ? current.OnService : false;
                bool beginOnService = begin != null ? begin.OnService : false;
                if (beginOnService != currentOnService)
                {
                    return true;
                }

                //如果onService 的不同种类要分开加下面的
                //if (next != current)
                //    return true;

                return false;
            }));
        }
Ejemplo n.º 2
0
        protected IEnumerable <RtaaSlicedTerm> SliceIntoPieces(IEnumerable <Term> terms, Func <Term, bool> termsFilter)
        {
            var termsCutter = new TermsCutter <Term, RtaaSlicedTerm>
                                  (terms, termsFilter, (s, e, t) =>
            {
                bool ignore = false;
                if (t != null)
                {
                    var assignment = t.GetLowestTerm();
                    if (assignment != null)
                    {
                        ignore = assignment.IgnoreAdherence();
                    }
                }
                var slicedTerm = new RtaaSlicedTerm
                {
                    Ignore    = ignore,
                    Start     = s,
                    End       = e,
                    OnService = t == null ? false : t.OnService,
                    Text      = t == null ? "Gap" : t.Level > 0 ? t.Level > 2 ? "Absent" : "SubEvent" : "Assignment"
                };

                return(slicedTerm);
            });

            return(termsCutter.ToList(((begin, current) =>
            {
                bool currentOnService = current != null ? current.OnService : false;
                bool beginOnService = begin != null ? begin.OnService : false;

                bool beginIgnore = false;
                if (begin != null)
                {
                    var assignment = begin.GetLowestTerm();
                    if (assignment != null)
                    {
                        beginIgnore = assignment.IgnoreAdherence();
                    }
                }

                bool currentIgnore = false;
                if (current != null)
                {
                    var assignment = current.GetLowestTerm();
                    if (assignment != null)
                    {
                        currentIgnore = assignment.IgnoreAdherence();
                    }
                }


                if (beginOnService != currentOnService || beginIgnore != currentIgnore)
                {
                    return true;
                }
                return false;
            })));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 切割指定班表,返回占席区域
        /// </summary>
        public static IList <T> SliceOccupied <T>(this IEnumerable <Term> terms, Func <DateRange, Term, T> construct, Func <Term, bool> isNeedSeat)
        {
            var orderTerms  = terms.OrderBy(o => o.Level).ThenBy(o => o.Start).ToList();
            var termsCutter = new TermsCutter <Term, T>
                                  (orderTerms, o => true, (s, e, t) =>
            {
                return(construct(new DateRange(s, e), t));
            });

            return(termsCutter.ToList((begin, current) =>
            {
                //发生于首个term刚好为subevent
                if (begin == null && current != null && current.Level > 0)
                {
                    return true;
                }
                return begin.OccupationComparison(current, isNeedSeat);
            }));
        }
Ejemplo n.º 4
0
        protected IEnumerable <RtaaSlicedTerm> SliceIntoPiecesByType(IEnumerable <Term> terms, Func <Term, bool> termsFilter)
        {
            var termsCutter = new TermsCutter <Term, RtaaSlicedTerm>
                                  (terms, termsFilter, (s, e, t) =>
            {
                var slicedTerm = new RtaaSlicedTerm
                {
                    Start     = s,
                    End       = e,
                    OnService = t == null ? false : t.OnService,
                    Text      = t == null ? "Gap" : t.Level > 0 ? t.Level > 2 ? "Absent" : "SubEvent" : "Assignment"
                };

                return(slicedTerm);
            });

            return(termsCutter.ToList(((begin, current) =>
            {
                return !Equals(begin, current);
            })));
        }
Ejemplo n.º 5
0
        public static IList <T> GetSeatArrangement <T>(this IEnumerable <Term> terms, Func <DateRange, Term, bool, T> construct)
        {
            var orderTerms  = terms.OrderBy(o => o.Level).ThenBy(o => o.Start).ToList();
            var termsCutter = new TermsCutter <Term, T>
                                  (orderTerms, o =>
            {
                return(true);
                // //if (o.Is<AbsentEvent>()) return false;
                // var loweatTerm = o.GetLowestTerm();
                // if (loweatTerm == null) return false;
                //return  !loweatTerm.IsNeedSeat;
            },
                                  (s, e, t) =>
            {
                return(construct(new DateRange(s, e), t, t == null ? false : t.IsNeedSeat));
            });

            return(termsCutter.ToList((begin, current) =>
            {
                return begin.OccupationComparison(current, t => t.IsNeedSeat);
            }));
        }
Ejemplo n.º 6
0
        protected IEnumerable<RtaaSlicedTerm> SliceIntoPieces(IEnumerable<Term> terms, Func<Term, bool> termsFilter)
        {
            var termsCutter = new TermsCutter<Term, RtaaSlicedTerm>
                (terms, termsFilter, (s, e, t) =>
                {
                    bool ignore = false;
                    if (t != null)
                    {
                        var assignment = t.GetLowestTerm();
                        if (assignment != null)
                            ignore = assignment.IgnoreAdherence();

                    }
                    var slicedTerm = new RtaaSlicedTerm
                    {
                        Ignore = ignore,
                        Start = s,
                        End = e,
                        OnService = t == null ? false : t.OnService,
                        Text = t == null ? "Gap" : t.Level > 0 ? t.Level > 2 ? "Absent" : "SubEvent" : "Assignment"
                    };

                    return slicedTerm;
                });

            return termsCutter.ToList(((begin, current) =>
            {
                bool currentOnService = current != null ? current.OnService : false;
                bool beginOnService = begin != null ? begin.OnService : false;

                bool beginIgnore = false;
                if (begin != null)
                {
                    var assignment = begin.GetLowestTerm();
                    if (assignment != null)
                        beginIgnore = assignment.IgnoreAdherence();

                }

                bool currentIgnore = false;
                if (current != null)
                {
                    var assignment = current.GetLowestTerm();
                    if (assignment != null)
                        currentIgnore = assignment.IgnoreAdherence();

                }


                if (beginOnService != currentOnService || beginIgnore != currentIgnore)
                    return true;
                return false;
            }));

        }
Ejemplo n.º 7
0
        protected IEnumerable<RtaaSlicedTerm> SliceIntoPiecesByType(IEnumerable<Term> terms, Func<Term, bool> termsFilter)
        {
            var termsCutter = new TermsCutter<Term, RtaaSlicedTerm>
                (terms, termsFilter, (s, e, t) =>
                {
                    var slicedTerm = new RtaaSlicedTerm
                    {
                        Start = s,
                        End = e,
                        OnService = t == null ? false : t.OnService,
                        Text = t == null ? "Gap" : t.Level > 0 ? t.Level > 2 ? "Absent" : "SubEvent" : "Assignment"
                    };

                    return slicedTerm;
                });

            return termsCutter.ToList(((begin, current) =>
            {
                return !Equals(begin, current);

            }));

        }