隐藏

c# 仿照计划任务(定时提示、定时运行程序、定时打开url(前台/后台))/每天/每周/每月/一次 多时间段

发布:2022/8/19 10:29:33作者:管理员 来源:本站 浏览次数:1197

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[T_task]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[T_task]
GO


CREATE TABLE [dbo].[T_task] (
    [id] [int] IDENTITY (1, 1) NOT NULL ,
    [userid] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [title] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
    [type] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [zxtype] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [zxtime] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [zxday] [int] NULL ,
    [zxweek] [int] NULL ,
    [zxweekg] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [ismonth] [int] NULL ,
    [zxmonth] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [zxmonthday] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [zxmonthweek] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [zxmonthweekday] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [kday] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [ktime] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [dtime] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [isdtime] [int] NULL ,
    [kcf] [int] NULL ,
    [kcftime] [int] NULL ,
    [ktype] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [msg] [text] COLLATE Chinese_PRC_CI_AS NULL ,
    [propath] [nvarchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
    [url] [nvarchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
    [ishturl] [int] NULL ,
    [remark] [text] COLLATE Chinese_PRC_CI_AS NULL ,
    [dq] [int] NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO


ALTER TABLE [dbo].[T_task] ADD 
    CONSTRAINT [DF_T_task_dq] DEFAULT (0) FOR [dq],
    CONSTRAINT [PK_T_task] PRIMARY KEY  CLUSTERED 
    (
        [id]
    )  ON [PRIMARY] 
GO




type   1:只弹出提示。2:运行指定程序 3:打开url
zxype   1:每天   2:每周  3:每月  4:一次性
zxtime   开始时间 (时,分)
zxday 每多少天执行 zxtype=1 1
zxweek  每多少周执行 zxtype=2  1
zxweekg 具体执行那周内的那天执行  星期1,2,3,4,5,6,7
zxmonth 月份 1,2,3,4,5,6,7,8,9,10,11,12 
zxmonthday 这个月多少号执行 0,1,2,3,4,5,6,7,8,9,10...30/31     
zxmonthweekday   选择每个星期几执行。1/2/3/4/5/6/7
kday   zxtype=4 执行日期
ktime  开始日期
dtime 结束日期
isdtime 是否启动结束日期
msg  要提示的信息
propath  要执行的应用程序ujing
url   要打开的url
ishturl  是否后台打开
remark 
dq  是否已过期


using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Data;
using System.Data.SqlClient;


namespace tosky.Tool
{
    public class task
    {
        public task(){


        }
        public static DataTable dt;
        public static bool isdt=false;


        public static void evaltask(string id)
        {
            SqlDataReader dr = Class.Dbconn.dataReader("select * from T_task where id=" + id);
            if (dr.Read()){
                eval(dr["type"].ToString(), Class.Tool.ConverHtml(dr["msg"].ToString(), 2), Class.Tool.ConverHtml(dr["propath"].ToString(), 2), Class.Tool.ConverHtml(dr["url"].ToString(), 2), (dr["ishturl"].ToString() == "1") ? "1" : "0");
            }
            else { Class.Tool.alert("不存在此ID:"+id+" 的任务",1); }
            dr.Close();
        }


        public static void eval(string type,string msg,string propath,string url,string ishturl)
        {
                Vote v = new Vote();
                switch (type)
                {
                    case "即时提示":
                        v.StayTime = 60000;
                        v.title = "任务提醒 (60秒后关闭)";
                        v.taskvote(msg);
                        v.ScrollShow();
                        break;
                    case "运行程序":
                        try{
                            System.Diagnostics.Process.Start(url);v.Dispose();
                        }catch (Exception ex){
                            v.StayTime=5000;
                            v.title = "运行程序 (5秒后关闭)";
                            v.showvote("打开程序失败,错误:"+ex.Message);
                            v.ScrollShow();
                        }
                        break;
                    case "打开URL":
                        if (ishturl == "1") {
                            v.StayTime = 5000;
                            v.HeightMax = 80;
                            v.title = "后台打开URL (5秒后关闭)";
                            if (Class.Tool.DownHtml(url) != null){
                                msg = "后台打开URL " + url + " 完成!";
                            }else{
                                msg = "后台打开URL:" + url + " 失败!";
                            }
                            v.showvote(msg);
                            v.ScrollShow();
                        }else{
                            Class.Tool.openie(url); v.Dispose();
                        }
                        break;
                }
        }


        public static void taskeval(string id){
            int dq = 0;
            SqlDataReader dr = Class.Dbconn.dataReader("select * from T_task where dq=0 and id=" + id);
            if (dr.Read()){
                string type = dr["type"].ToString(),
                    msg = Class.Tool.ConverHtml(dr["msg"].ToString(), 2),
                    propath = Class.Tool.ConverHtml(dr["propath"].ToString(), 2),
                    url = Class.Tool.ConverHtml(dr["url"].ToString(), 2),
                    ishthtml = (dr["ishturl"].ToString() == "1") ? "1" : "0",
                    zxtime = dr["zxtime"].ToString(),
                    zxtype = dr["zxtype"].ToString(),
                    isdtime=dr["isdtime"].ToString(),
                    ktime = dr["ktime"].ToString(), 
                    dtime = dr["dtime"].ToString() + " " + zxtime,
                    zxweekg = dr["zxweekg"].ToString(),
                    ismonth = dr["ismonth"].ToString(),
                    zxmonth=dr["zxmonth"].ToString(),
                    zxmonthday=dr["zxmonthday"].ToString();


                int zxday = int.Parse(dr["zxday"].ToString()), zxweek = int.Parse(dr["zxweek"].ToString());
                    DateTime dtktime = DateTime.Parse(ktime), dtdtime = DateTime.Parse(dtime);
                    TimeSpan ts = DateTime.Now.Subtract(dtktime);
                    if (isdtime == "1" && (dtdtime < DateTime.Now)){
                        dq = 1;
                    }else{
                        bool sf = false;
                        switch (zxtype)
                        {
                            case "每天":
                                if (ts.Days % zxday == 0){
                                    sf = true;
                                }
                                break;
                            case "每周":
                                int j=int.Parse(Class.Tool.week(DateTime.Now, 1));
                                TimeSpan ts2 = DateTime.Now.AddDays(1-j) - dtktime;
                                int zxw = ts2.Days/7;
                                if (ts2.Days-zxw*7>0){zxw+=1;}
                                if (zxw % zxweek ==0){
                                    string[] w = zxweekg.Split(',');
                                    if (w[j - 1] == "1") { sf = true; }
                                }
                                break;
                            case "每月":
                                string[] m=zxmonth.Split(',');
                                if (m[DateTime.Now.Month - 1] == "1")
                                {
                                    if (ismonth == "2"){
                                        if (Class.Tool.week(DateTime.Now, 2) == Class.Tool.week(DateTime.Now, 2))
                                        {sf = true;}
                                    }else{
                                        if(DateTime.Now.Day == int.Parse(zxmonthday)) { sf = true; }
                                    }
                                }
                                break;
                            case "一次":
                                sf = true; dq = 1;
                                break;
                        }
                        if(sf){eval(type, msg, propath, url, ishthtml);}
                    }
                
            }
            dr.Close();


            if (dq == 1) { Class.Dbconn.ExecuteSql("update T_task set dq=1 where id="+id); }
        }


        public static void foreval(string dts,string user)
        {
            if (!isdt){
                dt = Class.Dbconn.dataTable("select id,zxtime from T_task where dq=0 and userid='" + user + "'");
                isdt = true;
            }
            for (int i = 0; i<dt.Rows.Count; i++){
                if (dts==dt.Rows[i][1].ToString()){
                    Tool.task.taskeval(dt.Rows[i][0].ToString());
                }
            }
        }
    }

}