/// <summary>
        /// 更新任务通过盘点计划(已有同样的任务的时候)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="trigger"></param>
        /// <param name="groupName"></param>
        /// <param name="jobDetailName"></param>
        public async Task SchedulerUpdateByPlan(InventoryPlan inventoryPlan)
        {
            if (Scheduler == null)
            {
                CreateScheduler();
            }

            var triggerKey = GetTriggerKeyByPlan(inventoryPlan);

            var trigger = (ICronTrigger)await Scheduler.GetTrigger(triggerKey);

            var currentCron = QuartzUtils.GetQuartzCron(inventoryPlan);

            //处理是否更新任务的定时时间
            if (trigger.CronExpressionString != currentCron)
            {
                var triggerNew = TriggerBuilder.Create()
                                 .WithIdentity(triggerKey.Name, triggerKey.Group)
                                 .ForJob(trigger.JobKey)
                                 .WithCronSchedule(currentCron)
                                 .Build();
                await Scheduler.RescheduleJob(trigger.Key, triggerNew);
            }


            //处理是否更新任务的执行状态
            TriggerState triggerState = await Scheduler.GetTriggerState(triggerKey);

            switch (triggerState)
            {
            case TriggerState.Normal:

                if (!inventoryPlan.Enabled)
                {
                    await Scheduler.PauseTrigger(triggerKey);
                }

                break;

            case TriggerState.Paused:

                if (inventoryPlan.Enabled)
                {
                    await Scheduler.ResumeTrigger(triggerKey);
                }

                break;

            //如果处于其他状态,暂不进行任何处理
            default:
                LogUtils.Error($"{triggerKey.Name}定时任务更新时,原定时任务出现其他状态{triggerState.ToString()}");
                break;
            }
        }
 /// <summary>
 /// 更新或者新建任务通过inventoryPlan
 /// </summary>
 /// <param name="inventoryPlan"></param>
 /// <returns></returns>
 public async Task SchedulerStartOrUpdateByPlan(InventoryPlan inventoryPlan)
 {
     if (IsExistScheduleJob(inventoryPlan))
     {
         await SchedulerUpdateByPlan(inventoryPlan);
     }
     else
     {
         await SchedulerStartByPlan(inventoryPlan);
     }
 }
        /// <summary>
        /// 删除任务通过inventoryPlan
        /// </summary>
        /// <param name="inventoryPlan"></param>
        /// <returns></returns>
        public async Task SchedulerDeleteByPlan(InventoryPlan inventoryPlan)
        {
            if (Scheduler == null)
            {
                CreateScheduler();
            }

            if (IsExistScheduleJob(inventoryPlan))
            {
                await Scheduler.UnscheduleJob(GetTriggerKeyByPlan(inventoryPlan));

                await Scheduler.DeleteJob(GetJobKeyByPlan(inventoryPlan));
            }
        }
        /// <summary>
        /// 开始任务通过盘点计划
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="trigger"></param>
        /// <param name="groupName"></param>
        /// <param name="jobDetailName"></param>
        public async Task SchedulerStartByPlan(InventoryPlan inventoryPlan)
        {
            if (Scheduler == null)
            {
                CreateScheduler();
            }

            var currentTrigger = CustomizeTrigger.GetExecuteInventoryPlanTrigger(inventoryPlan.id, QuartzUtils.GetQuartzCron(inventoryPlan));

            IJobDetail jobDetail = JobBuilder.Create <ExecuteInventoryPlanJoB>().WithIdentity(inventoryPlan.id, GroupName.ExecuteInventoryPlan.ToString()).Build();
            //将任务与触发器添加到调度器中
            await Scheduler.ScheduleJob(jobDetail, currentTrigger);

            //开始执行
            await Scheduler.Start();
        }
        /// <summary>
        /// 加载数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void onInitData(object sender, ElapsedEventArgs e)
        {
            App.Current.Dispatcher.Invoke((Action)(() =>
            {
                LoadingDataEvent(this, true);
                BaseData <InventoryPlan> bdInventoryPlan = InventoryTaskBll.GetInstance().GetInventoryPlanByEquipmnetNameOrId(ApplicationState.GetEquipName());
                LoadingDataEvent(this, false);

                if (bdInventoryPlan.code != 0)
                {
                    inventoryTime.Content = "无法获取盘点计划";
                }
                else
                {
                    InventoryPlan plan = bdInventoryPlan.body.objects[0];

                    if (plan.CheckPeriod == "每日")
                    {
                        inventoryTime.Content = plan.CheckPeriod + " " + plan.InventoryTime;
                    }
                    else if (plan.CheckPeriod == "每周")
                    {
                        inventoryTime.Content = plan.CheckPeriod + plan.InventoryWeekday + " " + plan.InventoryTime;
                    }
                    else if (plan.CheckPeriod == "每月")
                    {
                        inventoryTime.Content = plan.CheckPeriod + plan.InventoryDay + " " + plan.InventoryTime;
                    }
                    else
                    {
                        inventoryTime.Content = "";
                    }
                }
                DataContext = this;

                GetInventoryList();

                tbInputNumbers.Focus();
            }));
        }
        /// <summary>
        /// 根据计划获取cron表达式
        /// </summary>
        /// <param name="inventoryPlan"></param>
        /// <returns></returns>
        public static string GetQuartzCron(InventoryPlan inventoryPlan)
        {
            string ret = null;


            switch (inventoryPlan.CheckPeriod)
            {
            case "每日":
                ret = $"{timeSplitAndCompose(inventoryPlan.InventoryTime)} * * ?";
                break;

            case "每周":
                string weekNumStr = ConvertEnumToString <Week>(inventoryPlan.InventoryWeekday);
                ret = $"{timeSplitAndCompose(inventoryPlan.InventoryTime)} ? * {weekNumStr} *";
                break;

            case "每月":
                switch (inventoryPlan.InventoryDay)
                {
                case "第一天":
                    ret = $"{timeSplitAndCompose(inventoryPlan.InventoryTime)} 1 * ? *";
                    break;

                case "最后一天":
                    ret = $"{timeSplitAndCompose(inventoryPlan.InventoryTime)} L * ? *";
                    break;

                default:
                    break;
                }
                break;

            default:
                break;
            }

            return(ret);
        }
 /// <summary>
 /// 判断任务是否存在
 /// </summary>
 /// <param name="triggerkey"></param>
 /// <returns></returns>
 public bool IsExistScheduleJob(InventoryPlan inventoryPlan)
 {
     return(IsExistScheduleJob(GetTriggerKeyByPlan(inventoryPlan)).Result);
 }
 /// <summary>
 /// 获取JobKey通过
 /// </summary>
 /// <param name="inventoryPlan"></param>
 /// <returns></returns>
 public JobKey GetJobKeyByPlan(InventoryPlan inventoryPlan)
 {
     return(new JobKey(inventoryPlan.id, GroupName.ExecuteInventoryPlan.ToString()));
 }
 /// <summary>
 /// 获取TriggerKey通过
 /// </summary>
 /// <param name="inventoryPlan"></param>
 /// <returns></returns>
 public TriggerKey GetTriggerKeyByPlan(InventoryPlan inventoryPlan)
 {
     return(new TriggerKey(inventoryPlan.id, GroupName.ExecuteInventoryPlan.ToString()));
 }