日期:2014-05-16  浏览次数:20558 次

关于定时触发任务,遇到难题了,求思路,200分送上~
客户要求可以自己去制定一些任务,这些任务在制定的时候会包括触发周期(一次,每天,每周,每月),任务的具体内容是存在A表中的。

每次到了需要触发任务的时间,就从A表读取需要的字段(比如:任务ID),插入到B表中,接受任务的人就可以看到自己的任务了

听起来和WindowsTask很相像。

难题在这里:触发周期会不一样,该怎么计算触发时间?
-------------------------------------------------------当前表单设计可以获取到的内容------------------------------------------------------------
一次型任务会要求用户输入日期,时间(整点,24小时制);
每天型任务要求用户输入的只有时间;

这两个都容易,比较需求时间和当前时间就行,一个where条件就过滤出来了

每周型任务需要用户输入的是周几,时间;
每月型任务需要输入的是每月的几号(纯数字),时间(这个貌似就要去判断月份并且限制输入范围了)
------------------------------------------------------------------------------------------------------------------------------------------------------------
根据获取到的内容,可以计算下一个触发事件么?

当前思路,写一个页面用来往B表插入数据,然后就用WindowsTask去触发IE并访问这个页面的地址。
但是每个任务的周期不一样,就得写好多页面。对于这个需求不可行。

或者利用sqlserver的作业,设置每天去执行。然后判断哪些记录到了触发时间,可是这个触发时间和下一个触发时间又不好计算。

如果有好的思路或者办法,请不吝赐教

------解决方案--------------------


琪琪,我的数据库的书写触发器的正在这里,我帮你先找找哈
------解决方案--------------------
琪琪,你要解决时间周期的话,可以试试数据库里的代理作业
------解决方案--------------------
引用:
Quote: 引用:
用户定义的时间?不能记录之后存入A表么?
存入数据表当然可以,存入是是个周期性时间,不是具体的一个时间点,这个点触发了,还得去计算下一个点~

我感觉难点在于这个“周期性”,是用户指定当前的点,然后下个点根据几天来算?比如说:用户输入2014-3-12有任务,然后下个点就是8天后?或者说10天后?需求是不是这样的
------解决方案--------------------
三个字段控制,一个任务发起时间,一个循环方式,一个已执行次数
判断 任务发起时间+循环方式(例如每两天执行一次,就是2)*已执行次数<当前系统时间    则发起任务
按周循环的也类似,就是已执行次数中要加入本周已执行过的日期的或值,执行完本周最后一次后再把已执行次数加1
按月的道理一样,中间会用到一些关于时间的算法
------解决方案--------------------
如果给任务表加上两个字段: 触发周期, 上次触发时间.

计划任务依然是每天运行并且读取所有任务, 如果发现有任务的 触发周期 <= 当前时间 - 上次触发时间 时, 进行任务分配工作.

这个方案是否可行?

------解决方案--------------------
又想了一下, 把上次触发时间改成下次运行时间更好.

对于1次性任务, 触发周期写成0就可以.

然后写一个后台扫描程序定时查看表A, 当有数据行的下次运行时间到达并且非一次性任务

更新表A下次运行时间=下次运行时间+触发周期, 同时向表B插入数据


------解决方案--------------------
引用:
客户要求可以自己去制定一些任务,这些任务在制定的时候会包括触发周期(一次,每天,每周,每月),任务的具体内容是存在A表中的。

每次到了需要触发任务的时间,就从A表读取需要的字段(比如:任务ID),插入到B表中,接受任务的人就可以看到自己的任务了

听起来和WindowsTask很相像。

难题在这里:触发周期会不一样,该怎么计算触发时间?
-------------------------------------------------------当前表单设计可以获取到的内容------------------------------------------------------------
一次型任务会要求用户输入日期,时间(整点,24小时制);
每天型任务要求用户输入的只有时间;

这两个都容易,比较需求时间和当前时间就行,一个where条件就过滤出来了

每周型任务需要用户输入的是周几,时间;
每月型任务需要输入的是每月的几号(纯数字),时间(这个貌似就要去判断月份并且限制输入范围了)
------------------------------------------------------------------------------------------------------------------------------------------------------------
根据获取到的内容,可以计算下一个触发事件么?

当前思路,写一个页面用来往B表插入数据,然后就用WindowsTask去触发IE并访问这个页面的地址。
但是每个任务的周期不一样,就得写好多页面。对于这个需求不可行。

或者利用sqlserver的作业,设置每天去执行。然后判断哪些记录到了触发时间,可是这个触发时间和下一个触发时间又不好计算。

如果有好的思路或者办法,请不吝赐教