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