zoukankan      html  css  js  c++  java
  • Asp.Net MVC 3 + ExtJs 4.01做一个Quartz.Net管理平台

    Asp.Net MVC 3 + ExtJs 4.01做一个Quartz.Net管理平台

    效果图:

     

    1.定义TriggerInfo,这里为了方便起见只列出了TriggerInfo的定义

    using System;
     2     using System.Runtime.Serialization;
     3 
     4     [DataContract]
     5     public class TriggerInfo
     6     {
     7         [DataMember]
     8         public string CalendarName { get; set; }
     9 
    10         [DataMember]
    11         public string Description { get; set; }
    12 
    13         [DataMember]
    14         public DateTime? EndTimeUtc { get; set; }
    15 
    16         [DataMember]
    17         public DateTime? FinalFireTimeUtc { get; set; }
    18 
    19         [DataMember]
    20         public string FireInstanceId { set; get; }
    21 
    22         [DataMember]
    23         public string FullJobName { get; set; }
    24 
    25         [DataMember]
    26         public string FullName { get; set; }
    27 
    28         [DataMember]
    29         public string Group { get; set; }
    30 
    31         [DataMember]
    32         public bool HasAdditionalProperties { get; set; }
    33 
    34         [DataMember]
    35         public bool HasMillisecondPrecision { get; set; }
    36 
    37         [DataMember]
    38         public string JobGroup { get; set; }
    39 
    40         [DataMember]
    41         public string JobName { get; set; }
    42 
    43         [DataMember]
    44         public string Key { get; set; }
    45 
    46         [DataMember]
    47         public bool MayFireAgain { get; set; }
    48 
    49         [DataMember]
    50         public int MisfireInstruction { get; set; }
    51 
    52         [DataMember]
    53         public string Name { get; set; }
    54 
    55         [DataMember]
    56         public DateTime? NextFireTimeUtc { get; set; }
    57 
    58         [DataMember]
    59         public DateTime? PreviousFireTimeUtc { get; set; }
    60 
    61         [DataMember]
    62         public int Priority { get; set; }
    63 
    64         [DataMember]
    65         public DateTime StartTimeUtc { get; set; }
    66 
    67         [DataMember]
    68         public string[] TriggerListenerNames { get; set; }
    69 
    70         [DataMember]
    71         public TriggerType TriggerType { get; set; }
    72 
    73         [DataMember]
    74         public TriggerStateInfo TriggerState { get; set; }
    75 
    76         [DataMember]
    77         public bool Volatile { get; set; }
    78 
    79         [DataMember]
    80         public int RepeatCount { get; set; }
    81 
    82         [DataMember]
    83         public TimeSpan RepeatInterval { get; set; }
    84 
    85         [DataMember]
    86         public int TimesTriggered { get; set; }
    87 
    88         [DataMember]
    89         public int RepeatIndefinitely { get; set; }
    90 
    91         [DataMember]
    92         public string CronExpressionString { get; set; }
    93 
    94         [DataMember]
    95         public TimeZoneInfo TimeZone { get; set; }
    96     }
    

    2.定义服务契约IScheduleService

    using System;
      2     using System.ServiceModel;
      3 
      4     using DataContract;
      5 
      6     [ServiceContract]
      7     public interface IScheduleService
      8     {
      9         [OperationContract]
     10         void AddJob(JobInfo jobInfo, bool replace);
     11 
     12         [OperationContract]
     13         bool DeleteJob(string jobName, string groupName);
     14 
     15         [OperationContract]
     16         string[] GetJobGroupNames();
     17 
     18         [OperationContract]
     19         JobInfo GetJobDetail(string jobName, string groupName);
     20 
     21         [OperationContract]
     22         string[] GetJobNames(string groupName);
     23 
     24         [OperationContract]
     25         TriggerInfo GetTrigger(string triggerName, string groupName);
     26 
     27         [OperationContract]
     28         string[] GetTriggerGroupNames();
     29 
     30         [OperationContract]
     31         string[] GetTriggerNames(string groupName);
     32 
     33         [OperationContract]
     34         TriggerStateInfo GetTriggerState(string triggerName, string triggerGroup);
     35 
     36         [OperationContract]
     37         bool IsJobGroupPaused(string groupName);
     38 
     39         [OperationContract]
     40         bool IsTriggerGroupPaused(string groupName);
     41 
     42         [OperationContract]
     43         void PauseAll();
     44 
     45         [OperationContract]
     46         void PauseJob(string jobName, string groupName);
     47 
     48         [OperationContract]
     49         void PauseJobGroup(string groupName);
     50 
     51         [OperationContract]
     52         void PauseTrigger(string triggerName, string triggerGroup);
     53 
     54         [OperationContract]
     55         void PauseTriggerGroup(string triggerGroup);
     56 
     57         [OperationContract]
     58         DateTime? RescheduleJob(string triggerName, string triggerGroup, TriggerInfo newTrigger);
     59 
     60         [OperationContract]
     61         void ResumeAll();
     62 
     63         [OperationContract]
     64         void ResumeJob(string jobName, string groupName);
     65 
     66         [OperationContract]
     67         void ResumeJobGroup(string groupName);
     68 
     69         [OperationContract]
     70         void ResumeTrigger(string triggerName, string groupName);
     71 
     72         [OperationContract]
     73         void ResumeTriggerGroup(string groupName);
     74 
     75         [OperationContract]
     76         DateTime ScheduleJob(TriggerInfo trigger);
     77 
     78         [OperationContract]
     79         DateTime ScheduleJobByTrigger(JobInfo jobInfo, TriggerInfo trigger);
     80 
     81         [OperationContract]
     82         void Shutdown(bool waitForJobsToComplete);
     83 
     84         [OperationContract]
     85         void Standby();
     86 
     87         [OperationContract]
     88         void Start();
     89 
     90         [OperationContract]
     91         void StartDelayed(TimeSpan delay);
     92 
     93         [OperationContract]
     94         void TriggerJob(string jobName, string groupName);
     95 
     96         [OperationContract]
     97         void TriggerJobWithVolatileTrigger(string jobName, string groupName);
     98 
     99         [OperationContract]
    100         void UnscheduleJob(string triggerName, string groupName);
    101     }
    

    3.实现服务契约IScheduleService的ScheduleService ,由于服务提交代码,只能描述一下了,这个类就是把Quartz.Net的Schedule封装了一下。

    4.定义SchduleController,来输出Job和Trigger的信息

    using System.Collections.Generic;
     2     using System.Web.Mvc;
     3 
     4     using Vancl.Schedule.DataContract;
     5     using Vancl.Schedule.ServiceContract;
     6     using Vancl.Schedule.ServiceImpl;
     7 
     8     public class ScheduleController : Controller
     9     {
    10         private readonly IScheduleService scheduleService = ScheduleService.Instance;
    11 
    12         /// <summary>
    13         /// 获取所有任务
    14         /// </summary>
    15         /// <returns></returns>
    16         public ActionResult GetJobs()
    17         {
    18             IList<JobInfo> jobInfoes = new List<JobInfo>();
    19 
    20             string[] groupNames = scheduleService.GetJobGroupNames();
    21 
    22             if (groupNames != null)
    23             {
    24                 foreach (string groupName in groupNames)
    25                 {
    26                     string[] jobNames = scheduleService.GetJobNames(groupName);
    27 
    28                     if (jobNames != null)
    29                     {
    30                         foreach (string jobName in jobNames)
    31                         {
    32                             jobInfoes.Add(scheduleService.GetJobDetail(jobName, groupName));
    33                         }
    34                     }
    35                 }
    36             }
    37 
    38             return new JsonResult() { Data = jobInfoes, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
    39         }
    40 
    41         /// <summary>
    42         /// 获取所有触发器
    43         /// </summary>
    44         /// <returns></returns>
    45         public ActionResult GetTriggers()
    46         {
    47             IList<TriggerInfo> triggerInfoes = new List<TriggerInfo>();
    48 
    49             string[] groupNames = scheduleService.GetTriggerGroupNames();
    50 
    51             if (groupNames != null)
    52             {
    53                 foreach (string groupName in groupNames)
    54                 {
    55                     string[] triggerNames = scheduleService.GetTriggerNames(groupName);
    56 
    57                     if (triggerNames != null)
    58                     {
    59                         foreach (string triggerName in triggerNames)
    60                         {
    61                             TriggerInfo triggerInfo = scheduleService.GetTrigger(triggerName, groupName);
    62                             triggerInfo.TriggerState = scheduleService.GetTriggerState(triggerName, groupName);
    63                             triggerInfoes.Add(triggerInfo);
    64                         }
    65                     }
    66                 }
    67             }
    68 
    69             return new JsonResult() { Data = triggerInfoes, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
    70         }
    71     }
    

    5.定义TriggerInfo,扩展于Ext.data.Model

    Ext.define("Vancl.Cxcp.TriggerInfo", {
    2     extend: 'Ext.data.Model',
    3     fields: ['Name', 'Group', 'JobName', 'JobGroup', 'TriggerType', 'StartTimeUtc', 'PreviousFireTimeUtc', 'NextFireTimeUtc', 'MisfireInstruction', 'TriggerState']
    4 });
    

    6.出于方便,我直接利用了Ext的desktop,下面是用于显示所有Trigger信息的Grid

    1 Ext.define('MyDesktop.GridWindow', {
      2     extend: 'Ext.ux.desktop.Module',
      3 
      4     requires: [
      5         'Ext.data.*',
      6         'Ext.util.Format',
      7         'Ext.grid.Panel',
      8         'Ext.grid.RowNumberer'
      9     ],
     10 
     11     id: 'grid-win',
     12 
     13     init: function () {
     14         this.launcher = {
     15             text: 'Grid Window',
     16             iconCls: 'icon-grid',
     17             handler: this.createWindow,
     18             scope: this
     19         };
     20     },
     21 
     22     createWindow: function () {
     23         var desktop = this.app.getDesktop();
     24         var win = desktop.getWindow('grid-win');
     25         var store = new Ext.data.Store({
     26             model: 'Vancl.Cxcp.TriggerInfo',
     27             proxy: {
     28                 type: 'ajax',
     29                 url: 'schedule/gettriggers',
     30                 reader: {
     31                     type: 'json',
     32                     root: ''
     33                 }
     34             }
     35         });
     36         if (!win) {
     37             win = desktop.createWindow({
     38                 id: 'grid-win',
     39                 title: '触发器信息',
     40                  740,
     41                 height: 480,
     42                 iconCls: 'icon-grid',
     43                 animCollapse: false,
     44                 constrainHeader: true,
     45                 layout: 'fit',
     46                 items: [
     47                     {
     48                         border: false,
     49                         xtype: 'grid',
     50                         store: store,
     51                         columns: [{
     52                             text: 'Name',
     53                             dataIndex: 'Name'
     54                         }, {
     55                             text: 'Group',
     56                             dataIndex: 'Group'
     57                         }, {
     58                             text: 'JobName',
     59                             dataIndex: 'JobName'
     60                         }, {
     61                             text: 'JobGroup',
     62                             dataIndex: 'JobGroup'
     63                         }, {
     64                             text: 'TriggerType',
     65                             dataIndex: 'TriggerType'
     66                         }, {
     67                             text: 'StartTimeUtc',
     68                             dataIndex: 'StartTimeUtc'
     69                         }, {
     70                             text: 'PreviousFireTimeUtc',
     71                             dataIndex: 'PreviousFireTimeUtc'
     72                         }, {
     73                             text: 'NextFireTimeUtc',
     74                             dataIndex: 'NextFireTimeUtc'
     75                         }, {
     76                             text: 'MisfireInstruction',
     77                             dataIndex: 'MisfireInstruction'
     78                         }, {
     79                             text: 'TriggerState',
     80                             dataIndex: 'TriggerState'
     81                         }]
     82                     }
     83                 ],
     84                 tbar: [{
     85                     text: 'Add',
     86                     tooltip: 'Add a new trigger',
     87                     iconCls: 'add'
     88                 }, '-', {
     89                     text: 'Remove Trigger',
     90                     tooltip: 'Remove the selected trigger',
     91                     iconCls: 'remove'
     92                 }]
     93             });
     94         }
     95         win.show();
     96         store.load();
     97 
     98         return win;
     99     }
    100 });

    http://www.cnblogs.com/TerryLiang/archive/2011/05/05/2037170.html

  • 相关阅读:
    Ajax跨域解决实例
    关于tween.js测试介绍
    signal() 和 sigaction()
    信号概述
    监控文件事件
    栈和栈帧
    进程结构和内存布局
    关于文件I/o的原子操作
    查询Linux系统中glibc的版本
    IOPS和Throughput
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2059302.html
Copyright © 2011-2022 走看看