Exemplo n.º 1
0
        /// <summary>
        /// 重置某一定时服务
        /// </summary>
        /// <param name="taskId"></param>
        public void ResetDbTask(string taskId)
        {
            if (DbTimers.ContainsKey(taskId))
            {
                DbTimers[taskId].Dispose();
                DbTimers.Remove(taskId);
            }
            TaskStatus[taskId] = false;

            if (timedTaskProvider != null)
            {
                var task = timedTaskProvider.GetTaskById(taskId);
                if (task != null && task.IsEnabled)
                {
                    if (string.IsNullOrEmpty(task.Identifier))
                    {
                        return;
                    }
                    var clazzName    = task.Identifier.Substring(0, task.Identifier.LastIndexOf('.'));
                    var functionName = task.Identifier.Substring(task.Identifier.LastIndexOf('.') + 1);
                    var clazz        = JobTypeCollection.SingleOrDefault(x => x.FullName == clazzName);
                    if (clazz == null)
                    {
                        return;
                    }
                    var method = clazz.GetMethod(functionName);
                    if (method == null)
                    {
                        return;
                    }

                    //需要延时的时间
                    int delta = 0;
                    if (task.BeginTime == default(DateTime))
                    {
                        task.BeginTime = DateTime.Now;
                    }
                    else
                    {
                        delta = Convert.ToInt32((task.BeginTime - DateTime.Now).TotalMilliseconds);
                    }
                    if (delta < 0)
                    {
                        delta = delta % task.Interval;
                        if (delta < 0)
                        {
                            delta += task.Interval;
                        }
                    }
                    Task.Factory.StartNew(() =>
                    {
                        var timer = new Timer(t =>
                        {
                            Execute(task, clazz, method);
                        }, null, delta, task.AutoReset ? task.Interval : 0);
                        DbTimers.Add(task.Id, timer);
                    });
                }
            }
        }
Exemplo n.º 2
0
        public override async Task InitializeAsync(object navigationData)
        {
            var pop = await _dialogService.OpenLoadingPopup();

            InitDataFilter = await _iDDLService.GetInitDataFilter();

            JobTypeCollection       = InitDataFilter.JobTypeDLL.Cast <object>().ToObservableCollection();
            CategoryCollection      = InitDataFilter.ClassificationDLL.Cast <object>().ToObservableCollection();
            LocationCollection      = InitDataFilter.LocationDDL.Cast <object>().ToObservableCollection();
            PositionCollection      = InitDataFilter.PositionDLL.Cast <object>().ToObservableCollection();
            SkillCollection         = InitDataFilter.SkillsDLL.Cast <object>().ToObservableCollection();
            QualificationCollection = InitDataFilter.QualificationDLL.Cast <object>().ToObservableCollection();
            LicenceCollection       = InitDataFilter.TicketsDLL.Cast <object>().ToObservableCollection();

            dynamic objSearchDifinition = await _candidateExploreService.GetSavedSearchDefinition();

            if (objSearchDifinition["parameter"] != null)
            {
                string[] jobTypeIds = objSearchDifinition["parameter"]["JobTypeIds"].ToString().Split(',');
                JobTypeSelected = new ObservableCollection <object>(JobTypeCollection.Where(x => Array.IndexOf(jobTypeIds, (x as LookupItem).Id) >= 0));

                string[] categoryIds = objSearchDifinition["parameter"]["CategoryIds"].ToString().Split(',');
                CategorySelected = new ObservableCollection <object>(CategoryCollection.Where(x => Array.IndexOf(categoryIds, (x as LookupItem).Id) >= 0));

                string[] locationIds = objSearchDifinition["parameter"]["LocationIds"].ToString().Split(',');
                LocationSelected = new ObservableCollection <object>(LocationCollection.Where(x => Array.IndexOf(locationIds, (x as LookupItem).Id) >= 0));

                string[] positionIds = objSearchDifinition["parameter"]["PositionIds"].ToString().Split(',');
                PositionSelected = new ObservableCollection <object>(PositionCollection.Where(x => Array.IndexOf(positionIds, (x as LookupItem).Id) >= 0));

                string[] skillIds = objSearchDifinition["parameter"]["SkillsIds"].ToString().Split(',');
                SkillSelected = new ObservableCollection <object>(SkillCollection.Where(x => Array.IndexOf(skillIds, (x as LookupItem).Id) >= 0));

                string[] qualificationIds = objSearchDifinition["parameter"]["QualificationsIds"].ToString().Split(',');
                QualificationSelected = new ObservableCollection <object>(QualificationCollection.Where(x => Array.IndexOf(qualificationIds, (x as LookupItem).Id) >= 0));

                string[] licenceIds = objSearchDifinition["parameter"]["TicketLicensesIds"].ToString().Split(',');
                LicenceSelected = new ObservableCollection <object>(LicenceCollection.Where(x => Array.IndexOf(licenceIds, (x as LookupItem).Id) >= 0));
            }
            else
            {
                JobTypeSelected       = new ObservableCollection <object>();
                CategorySelected      = new ObservableCollection <object>();
                LocationSelected      = new ObservableCollection <object>();
                PositionSelected      = new ObservableCollection <object>();
                SkillSelected         = new ObservableCollection <object>();
                QualificationSelected = new ObservableCollection <object>();
                LicenceSelected       = new ObservableCollection <object>();
            }

            await _dialogService.CloseLoadingPopup(pop);
        }
Exemplo n.º 3
0
        public TimedTaskService(IAssemblyLocator locator, IServiceProvider services)
        {
            this.locator  = locator;
            this.services = services;
            ILoggerFactory loggerFactory = new LoggerFactory()
                                           .AddConsole()
                                           .AddDebug();

            this.logger = loggerFactory.CreateLogger <TimedTaskService>();
            //this.logger = services.GetService<ILogger>();
            this.timedTaskProvider    = services.GetService <ITimedTaskProvider>();
            this.timedTaskLogProvider = services.GetService <ITimedTaskProvider>();
            var asm = locator.GetAssemblies();

            foreach (var x in asm)
            {
                //查找带有TimedTaskAttribute的类
                var types = x.DefinedTypes.Where(y => y.GetCustomAttribute(typeof(TimedTaskAttribute), true) != null);
                foreach (var type in types)
                {
                    JobTypeCollection.Add(type);
                }
            }

            //取得所有方法
            foreach (var clazz in JobTypeCollection)
            {
                var clazzTimedTaskAttr = clazz.GetCustomAttribute <TimedTaskAttribute>();
                var clazzName          = string.IsNullOrEmpty(clazzTimedTaskAttr.Name) ? clazz.Name : clazzTimedTaskAttr.Name;
                foreach (var method in
                         clazz.DeclaredMethods.Where(x => x.GetCustomAttributes <InvokeAttribute>(true).Any()))
                {
                    //取得所有Invoke配置
                    var invokes = method.GetCustomAttributes <InvokeAttribute>(true);
                    foreach (var invoke in invokes.Where(i => i.IsEnabled &&
                                                         (i.ExpireTime >= DateTime.Now || i.ExpireTime == default(DateTime))))
                    {
                        //需要延时的时间
                        long delta = 0;
                        if (invoke.BeginTime == default(DateTime))
                        {
                            invoke.BeginTime = DateTime.Now;
                        }
                        else
                        {
                            delta = Convert.ToInt64((invoke.BeginTime - DateTime.Now).TotalMilliseconds);
                        }
                        if (delta < 0)
                        {
                            delta = delta % invoke.Interval;
                            if (delta < 0)
                            {
                                delta += invoke.Interval;
                            }
                        }
                        Task.Factory.StartNew(() =>
                        {
                            var invokeName   = string.IsNullOrEmpty(invoke.Name) ? method.Name : invoke.Name;
                            var task         = new TimedTask();
                            task.Id          = CryptHelper.EncryptMD5(clazzName + "." + invokeName);
                            task.Name        = clazzName + "." + invokeName;
                            task.Identifier  = clazz.FullName + "." + method.Name;
                            task.BeginTime   = invoke.BeginTime;
                            task.ExpireTime  = invoke.ExpireTime;
                            task.Interval    = invoke.Interval;
                            task.AutoReset   = invoke.AutoReset;
                            task.IsEnabled   = invoke.IsEnabled;
                            var deltaSpan    = new TimeSpan(delta * 10000);
                            var IntervalSpan = new TimeSpan((invoke.AutoReset ? invoke.Interval : 0) * 10000);
                            var timer        = new Timer(t =>
                            {
                                Execute(task, clazz, method);
                            }, null, deltaSpan, IntervalSpan);
                            StaticTimers.Add(task.Id, timer);
                        });
                    }
                }
            }

            ExecuteDbTask();
        }
Exemplo n.º 4
0
        private void ExecuteDbTask()
        {
            //清除所有DB事务
            if (DbTimers.Count > 0)
            {
                foreach (var dbTimer in DbTimers)
                {
                    dbTimer.Value.Dispose();
                    TaskStatus[dbTimer.Key] = false;
                }
                DbTimers.Clear();
            }
            //取得数据库配置的事务
            if (timedTaskProvider != null)
            {
                var tasks = timedTaskProvider.GetTasks();
                foreach (var task in tasks)
                {
                    if (string.IsNullOrEmpty(task.Identifier))
                    {
                        continue;
                    }
                    var clazzName    = task.Identifier.Substring(0, task.Identifier.LastIndexOf('.'));
                    var functionName = task.Identifier.Substring(task.Identifier.LastIndexOf('.') + 1);
                    var clazz        = JobTypeCollection.SingleOrDefault(x => x.FullName == clazzName);
                    var method       = clazz?.GetMethod(functionName);
                    if (method == null)
                    {
                        continue;
                    }

                    //需要延时的时间
                    long delta = 0;
                    if (task.BeginTime == default(DateTime))
                    {
                        task.BeginTime = DateTime.Now;
                    }
                    else
                    {
                        delta = Convert.ToInt64((task.BeginTime - DateTime.Now).TotalMilliseconds);
                    }
                    if (delta < 0)
                    {
                        delta = delta % task.Interval;
                        if (delta < 0)
                        {
                            delta += task.Interval;
                        }
                    }
                    Task.Factory.StartNew(() =>
                    {
                        var deltaSpan    = new TimeSpan(delta * 10000);
                        var IntervalSpan = new TimeSpan((task.AutoReset ? task.Interval : 0) * 10000);
                        var timer        = new Timer(t =>
                        {
                            Execute(task, clazz, method);
                        }, null, deltaSpan, IntervalSpan);
                        DbTimers.Add(task.Id, timer);
                    });
                }
            }
        }