using Quartz;
using Quartz.Impl;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Utils;

namespace PMS.NetCore.Service
{
    public class QuartzTask
    {
        /// <summary>
        /// 运行定时任务
        /// </summary>
        /// <returns></returns>
        public async Task RunAsync()
        {
            NlogHelper.quartzLogger.Info("开始 RunAsync");
           
            StdSchedulerFactory factory = new StdSchedulerFactory();
            //通过工场类获得调度器
            var _scheduler = await factory.GetScheduler();
             
                //开启调度器
                await _scheduler.Start();

            #region 昆山项目使用定时任务
            if (AppSettingsHelper.Configuration["company"]?.ToString() == "kunshan")
            {


                #region 执行发短信作业    注释掉，暂不执行
                ////创建触发器(也叫时间策略)
                //var trigger = TriggerBuilder.Create()
                //                  .StartNow()
                //                   //.WithSimpleSchedule(x => x.WithIntervalInMinutes(2).RepeatForever())//每10秒执行一次

                //                   //.WithSimpleSchedule(x => x.WithIntervalInMinutes(5).RepeatForever()) //每5分钟执行一次
                //                   .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(8, 0))   //每天8:00执行
                //                  .Build();
                ////创建作业实例
                ////Jobs即我们需要执行的作业
                //var jobDetailkunshan = JobBuilder.Create<KunshanPayCostSmsJob>()
                //                .WithIdentity("Myjobkunshan", "group")//我们给这个作业取了个“Myjob”的名字，并取了个组名为“group”
                //                .Build();
                ////将触发器和作业任务绑定到调度器中
                //await _scheduler.ScheduleJob(jobDetailkunshan, trigger);
                #endregion
            }
            #endregion

            #region  中浩德系统使用定时任务
            if (AppSettingsHelper.Configuration["company"]?.ToString() == "zhonghaode")
            {
                #region 执行进度报告发邮件作业
                ////创建触发器(也叫时间策略)
                var trigger = TriggerBuilder.Create()
                                  .StartNow()
                                   //.WithSimpleSchedule(x => x.WithIntervalInMinutes(5).RepeatForever())//每10秒执行一次

                                   //.WithSimpleSchedule(x => x.WithIntervalInMinutes(5).RepeatForever()) //每5分钟执行一次
                                   .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(8, 0))   //每天8:00执行
                                  .Build();
                //创建作业实例
                //Jobs即我们需要执行的作业
                var jobDetail = JobBuilder.Create<SendEmailJob>()
                                .WithIdentity("Myjob", "group")//我们给这个作业取了个“Myjob”的名字，并取了个组名为“group”
                                .Build();
                //将触发器和作业任务绑定到调度器中
                await _scheduler.ScheduleJob(jobDetail, trigger);
                #endregion

                #region 执行给王帅发邮件作业
                //创建触发器(也叫时间策略)
                var triggerWang = TriggerBuilder.Create()
                                  .StartNow()
                                   //.WithSimpleSchedule(x => x.WithIntervalInMinutes(5).RepeatForever())//每10秒执行一次

                                   .WithSimpleSchedule(x => x.WithIntervalInMinutes(5).RepeatForever()) //每5分钟执行一次
                                                                                                        //.WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(8, 0))   //每天8:00执行
                                  .Build();
                //创建作业实例
                //Jobs即我们需要执行的作业
                var jobDetailWang = JobBuilder.Create<SendEmailToChairmanJob>()
                                .WithIdentity("MyjobWang", "group")//我们给这个作业取了个“Myjob”的名字，并取了个组名为“group”
                                .Build();
                //将触发器和作业任务绑定到调度器中
                await _scheduler.ScheduleJob(jobDetailWang, triggerWang);
                #endregion
            }
            #endregion


            #region 物业缴费订单定时处理任务
            ////创建触发器(也叫时间策略)
            var triggerBywy = TriggerBuilder.Create()
                              .StartNow()
                               .WithSimpleSchedule(x => x.WithIntervalInSeconds(3).RepeatForever())//每3秒执行一次
                             
                              .Build();
            //创建作业实例
            //Jobs即我们需要执行的作业
            var jobDetailBywy = JobBuilder.Create<WyOrderJob>()
                            .WithIdentity("Myjobwy", "group")//我们给这个作业取了个“Myjobwy”的名字，并取了个组名为“group”
                            .Build();
            //将触发器和作业任务绑定到调度器中
            await _scheduler.ScheduleJob(jobDetailBywy, triggerBywy);
            #endregion

        }
    }
    }
