//xprivate readonly IList<IStaffingStatistic> _staffingStatistics; public ServiceQueueContainer(IEnumerable serviceQueues, ITerm dateRange, Func <double[], int, string, object, IVisibleLinerData> itemContstruction) : base(serviceQueues.Count()) { _entities = serviceQueues; _itemContstruction = itemContstruction; _skillMapping = new Dictionary <Skill, IServiceQueueStatistic>(Count); _list = new List <StatisticRaw>(Count); //_lines = new List<IVisibleLinerData>(); //x_staffingStatistics = new List<IStaffingStatistic>(); // estimation _calculateForecastStaffing = (shrinkage, startWeekDayIndex) => { }; _calculateAssignedServiceLevel = (i, staffing) => { }; //x_sumForecastStaffing = d => { }; //使用非排班期起始, 用的是前後扩展過的日期范围 _dateIndexer = Common.Extensions.DateTimeExt.CreateDateIndexer(dateRange.Start, dateRange.End); foreach (ServiceQueue item in serviceQueues) { var mappedSkill = item.MappedSkill; new ServiceQueueStatistic(item, _dateIndexer).Self(t => { var x = new StatisticRaw(t, _itemContstruction); _calculateForecastStaffing += (shrinkage, startWeekDayIndex) => { t.CalculateForecastStaffing(shrinkage, startWeekDayIndex); x.SetForceastValues(); }; // check service is single mode //x_sumForecastStaffing += result => { Sum(t.ForceastStaffing, ref result); }; _calculateAssignedServiceLevel += (index, staffing) => { if (staffing != null) { t.AssignedStaffing[index] = staffing.Value; // value always zero } t.CalculateAssignedServiceLevel(index); //t.CalculateStaffingRequirement(index); t.CalculateDailyMisc(index / 96); x.SetAssignedValues(index); }; _skillMapping[mappedSkill] = t; this[t.GetHashCode()] = t; _list.Add(x); }); } }
protected override void OnInitialize() { Invoker.SaftyInvoke<DefaultPresenter>(p => { //register ribbon buttons, 并非最佳作法, 导致 CommandBindings.Clear() 然后再重新加入 CommandBindings.AddRange(); p.CommandBindings.Add(new CommandBinding(WPF.ApplicationFramework.ApplicationCommands.ExportSvcLevelData, OnExportSvcLevelDataExecuted, (d, e) => { e.CanExecute = AnalyisComplete; })); p.NotifyOfPropertyChange(() => CommandBindings); p.PropertyChanged += InvokerPropertyChanged; }); _enquiryRange = new DateRange(_schedule.Start.AddDays(Global.HeadDayAmount), _schedule.End.AddDays(Global.TailDayAmount)); _serviceQueueContainer = _staffingCalculatorModel.Preparing(_schedule.Id, _enquiryRange, ConvertTo); // 读取预测数据 _serviceQueuesView = CollectionViewSource.GetDefaultView(_serviceQueueContainer.GetEntities()); WhenReady.SaftyInvoke(d => d(_serviceQueueContainer, SwitchView)); Pop(); _combinedServiceQueues = new StatisticRaw(new CombinedServiceQueueStatistic(_serviceQueueContainer.Values, _serviceQueueContainer.CoverageDays), ConvertTo); _combinedServiceQueues.SetForceastValues(); _combinedServiceQueues.Items3 = CollectionViewSource.GetDefaultView(_combinedServiceQueues.Items).Self(v => { v.Filter = d => d.SaftyGetProperty<bool, IVisibleLinerData>( line => line.Category == _selectedCategory); }); base.OnInitialize(); FullyFetch(); #region 合併SQ做估算的code //new Thread(() => //{ // IEnumerable[] lines = { new List<IStaffingStatistic>() }; // var action = new Action(() => StaffingStatistics = CollectionViewSource.GetDefaultView(lines[0])); // _serviceQueueContainer.Output2(out lines[0], ref action); // UIThread.Invoke(action); //}).Start(); #endregion }