1. 程式人生 > >ASP.NET MVC 5實現基於Quartz.net 的任務排程管理平臺(一)

ASP.NET MVC 5實現基於Quartz.net 的任務排程管理平臺(一)

任務管理平臺

系統簡介

Quartz.net是一個開源的任務排程工具,相當於資料庫中的 Job、Windows 的計劃任務、Unix/Linux 下的 Cron,但 Quartz 可以把排程控制的更精細,對任務排程的領域問題進行了高度的抽象,實現作業的靈活排程。

任務管理平臺通過window服務來整合Quartz.net 實現作業的排程,只需要修改配置檔案和新增相應Job即可完成作業新增,使用簡單方便。

專案結構

系統目前包含八個專案組成:

  • TaskManager.HouTai_New (任務後臺管理系統,任務)
  • TaskManager.Tasks (所有作業任務的集合,目前只有一個TestJob)
  • TaskManager.ServiceBus (整合Quartz.net window服務,通過window服務來承載排程TaskManager.Tasks 的各個任務Job)
  • TaskManager.TaskUtility (操作任務的公共類庫)
  • TaskManager.Utility (整個平臺的公共類庫)
  • TaskManager.Models
  • TaskManager.BLL
  • TaskManager.DAL

系統配置

系統中所有的作業資訊,都儲存在資料庫或是配置檔案中。window 宿主服務啟動時,會自動讀取相應的配置的job任務,完成任務的初始化和排程。

其他

1. TaskManager 支援資料庫配置和配置檔案配置兩種方式。如果不需要後臺管理端,也可以直接使用 window 服務 + 配置檔案的模式。

2. web管理後臺的初始登入賬戶:admin test123

Model層實體類相關:

這裡寫圖片描述

PageOf.cs

using System.Collections.Generic;
using System.Runtime.Serialization;

namespace TaskManager.Models
{

    public class PageOf<T>
    {
        /// <summary>
/// 資訊物件列表 /// </summary> public IList<T> Items { get; set; } /// <summary> /// 總數 /// </summary> public int Total { get; set; } /// <summary> /// 頁碼 /// </summary> public int PageIndex { get; set; } /// <summary> /// 頁大小 /// </summary> public int PageSize { get; set; } /// <summary> /// 記錄總數 /// </summary> public int RowCount { get; set; } } }

TaskModel.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TaskManager.Models
{
    /// <summary>
    /// 任務實體
    /// </summary>
    public class TaskModel
    {
        /// <summary>
        /// 任務ID
        /// </summary>
        public Guid TaskID { get; set; }

        /// <summary>
        /// 任務名稱
        /// </summary>
        public string TaskName { get; set; }

        /// <summary>
        /// 任務執行引數
        /// </summary>
        public string TaskParam { get; set; }

        /// <summary>
        /// 執行頻率設定
        /// </summary>
        public string CronExpressionString { get; set; }

        /// <summary>
        /// 任務運頻率中文說明
        /// </summary>
        public string CronRemark { get; set; }

        /// <summary>
        /// 任務所在DLL對應的程式集名稱
        /// </summary>
        public string AssemblyName { get; set; }

        /// <summary>
        /// 任務所在類
        /// </summary>
        public string ClassName { get; set; }

        public TaskStatus Status { get; set; }

        /// <summary>
        /// 任務建立時間
        /// </summary>
        public DateTime? CreatedTime { get; set; }

        /// <summary>
        /// 任務修改時間
        /// </summary>
        public DateTime? ModifyTime { get; set; }

        /// <summary>
        /// 任務最近執行時間
        /// </summary>
        public DateTime? RecentRunTime { get; set; }

        /// <summary>
        /// 任務下次執行時間
        /// </summary>
        public DateTime? NextFireTime { get; set; }

        /// <summary>
        /// 任務備註
        /// </summary>
        public string Remark { get; set; }

        /// <summary>
        /// 是否刪除
        /// </summary>
        public int IsDelete { get; set; }
    } 
}

TaskStatus.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TaskManager.Models
{

    /// <summary>
    /// 任務狀態列舉
    /// </summary>
    public enum TaskStatus
    {
        /// <summary>
        /// 執行狀態
        /// </summary>
        RUN = 1,

        /// <summary>
        /// 停止狀態
        /// </summary>
        STOP = 0
    }

    /// <summary>
    /// 任務配置的方式
    /// </summary>
    public enum TaskStore
    {
        DB = 1,
        XML = 2
    }
}

UserModel.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TaskManager.Models
{
    public class UserModel
    {
        public int UserId { get; set; }

        public string UserName { get; set; }

        public string PassWord { get; set; }

        public string TrueName { get; set; }

        public string UserEmail { get; set; }

        public string PhoneNum { get; set; }

        public int IsAdmin { get; set; }

        public int Status { get; set; }

        public DateTime? CreateTime { get; set; }

        public DateTime? LastLoginTime { get; set; }
    }
}