コード例 #1
0
ファイル: cRunTask.cs プロジェクト: zhouweiaccp/code
        //执行任务
        private void RunTask()
        {
            cPlanRunLog rLog = new cPlanRunLog();

            rLog.OpenLogFile();

            while (m_runningTasks.Count > 0)
            {
                cTaskPlan tp = m_runningTasks.Dequeue();

                switch (tp.RunTaskType)
                {
                case (int)cGlobalParas.RunTaskType.SoukeyTask:
                    RunSoukeyTask(tp.RunTaskName);
                    break;

                case (int)cGlobalParas.RunTaskType.OtherTask:
                    RunOtherTask(tp.RunTaskName, tp.RunTaskPara);
                    break;

                case (int)cGlobalParas.RunTaskType.DataTask:
                    RunDataTask(tp.RunTaskName, tp.RunTaskPara);
                    break;
                }

                //写日志
                rLog.InsertLog(cGlobalParas.LogType.RunPlanTask, tp.PlanID, tp.PlanName, (cGlobalParas.RunTaskType)tp.RunTaskType, tp.RunTaskName, tp.RunTaskPara);
            }

            rLog.CloseLogFile();
            rLog = null;
        }
コード例 #2
0
        //处理触发器的执行事件
        private void TriggerRun()
        {
            //无论失败还是成功都要进行触发器的触发
            if (m_pTaskData.IsTrigger == true && m_pTaskData.TriggerType == ((int)cGlobalParas.TriggerType.PublishedRun).ToString())
            {
                cRunTask rt = new cRunTask();
                rt.RunSoukeyTaskEvent += this.onRunSoukeyTask;

                cTaskPlan p;

                for (int i = 0; i < m_pTaskData.TriggerTask.Count; i++)
                {
                    p = new cTaskPlan();

                    p.RunTaskType = m_pTaskData.TriggerTask[i].RunTaskType;
                    p.RunTaskName = m_pTaskData.TriggerTask[i].RunTaskName;
                    p.RunTaskPara = m_pTaskData.TriggerTask[i].RunTaskPara;

                    rt.AddTask(p);
                }

                rt.RunSoukeyTaskEvent -= this.onRunSoukeyTask;
                rt = null;
            }
        }
コード例 #3
0
ファイル: cCheckPlan.cs プロジェクト: zhouweiaccp/code
        //定期由外部调用
        //检测需要执行的任务,如果需要执行,则把任务
        //压到执行的任务队列中
        public void CheckPlan()
        {
            //重新加载计划期间禁止运行计划检测操作
            if (m_IsReloading == false)
            {
                cTaskPlan tPlan;



                for (int i = 0; i < m_runTasks.Count; i++)
                {
                    //无效的计划不进行判断,计划的状态由执行时进行维护

                    if (m_runTasks[i].PlanState == (int)cGlobalParas.PlanState.Enabled)
                    {
                        if (DateTime.Compare(DateTime.Now, DateTime.Parse(m_runTasks[i].EnabledDateTime)) < 0)
                        {
                            //表示还未到生效时间,不启用此任务的检测
                            continue;
                        }

                        if (m_runTasks[i].PlanRunTime == "" || m_runTasks[i].PlanRunTime == null)
                        {
                            m_runTasks[i].PlanRunTime = m_runTasks[i].NextRunTime;
                        }
                        else
                        {
                            double douTime = TimeSpan.Parse(DateTime.Now.Subtract(DateTime.Parse(m_runTasks[i].PlanRunTime)).ToString()).TotalSeconds;

                            //表示下次运行的时间已经到了,但还未超过5分钟,如果超过5分钟,则默认系统没有执行此任务
                            //是否再次执行由配置参数决定:IsOverRun
                            if (douTime > 0 && douTime < 300)
                            {
                                //将任务压入任务队列

                                for (int j = 0; j < m_runTasks[i].RunTasks.Count; j++)
                                {
                                    //在此需要重新初始化执行任务的数据,主要是要增加计划的ID和计划的名称
                                    tPlan = new cTaskPlan();

                                    tPlan.PlanID      = m_runTasks[i].PlanID.ToString();
                                    tPlan.PlanName    = m_runTasks[i].PlanName;
                                    tPlan.RunTaskType = m_runTasks[i].RunTasks[j].RunTaskType;
                                    tPlan.RunTaskName = m_runTasks[i].RunTasks[j].RunTaskName;
                                    tPlan.RunTaskPara = m_runTasks[i].RunTasks[j].RunTaskPara;

                                    e_AddRunTaskEvent(this, new cAddRunTaskEventArgs(tPlan));
                                }

                                m_runTasks[i].PlanRunTime = m_runTasks[i].NextRunTime;
                            }
                        }
                    }
                }
            }
        }
コード例 #4
0
ファイル: cGatherTask.cs プロジェクト: zhouweiaccp/code
        /// 当某个线程采集完成后,会调用任务完成事件进行检测,如果任务完成则触发任务
        /// 完成事件。但在此判断时需要注意,如果任务采集失败的数量和采集数量相等,则判断
        /// 任务失败。且每次调用此事件时,都需要做一次检测,对每个子线程都检测一遍,看是否
        /// 存在已经完成,但未触发完成事件的自线程。
        private void onTaskCompleted()
        {
            if (m_TaskData.UrlCount == (m_TaskData.GatheredUrlCount + m_TaskData.GatherErrUrlCount) && m_State != cGlobalParas.TaskState.Completed)
            {
                if (m_TaskData.TrueUrlCount == m_TaskData.GatherErrUrlCount)
                {
                    //如果全部采集都发生了错误,则此任务为失败
                    State = cGlobalParas.TaskState.Failed;
                }
                else
                {
                    // 设置为完成状态,触发任务完成事件
                    State = cGlobalParas.TaskState.Completed;
                }

                //无论失败还是成功都要进行触发器的触发
                if (m_TaskData.IsTrigger == true && m_TaskData.TriggerType == ((int)cGlobalParas.TriggerType.GatheredRun).ToString())
                {
                    cRunTask rt = new cRunTask();
                    rt.RunSoukeyTaskEvent += this.onRunSoukeyTask;

                    cTaskPlan p;

                    for (int i = 0; i < m_TaskData.TriggerTask.Count; i++)
                    {
                        p = new cTaskPlan();

                        p.RunTaskType = m_TaskData.TriggerTask[i].RunTaskType;
                        p.RunTaskName = m_TaskData.TriggerTask[i].RunTaskName;
                        p.RunTaskPara = m_TaskData.TriggerTask[i].RunTaskPara;

                        rt.AddTask(p);
                    }

                    rt.RunSoukeyTaskEvent -= this.onRunSoukeyTask;
                    rt = null;
                }
            }
        }
コード例 #5
0
ファイル: cRunTask.cs プロジェクト: zhouweiaccp/code
        public void AddTask(cTaskPlan task)
        {
            m_runningTasks.Enqueue(task);

            RunTask();
        }
コード例 #6
0
 public cAddRunTaskEventArgs(cTaskPlan RTask)
 {
     m_RunTask = RTask;
 }
コード例 #7
0
ファイル: frmTaskPlan.cs プロジェクト: zhouweiaccp/code
        private Int64  SaveTaskPlan()
        {
            cPlan NewPlan = new cPlan();

            Int64 Nid = GetNewID();

            if (Nid == 0)
            {
                throw new cSoukeyException(rm.GetString("Error21"));
            }

            NewPlan.PlanID     = Nid;
            NewPlan.PlanName   = this.txtPlanName.Text;
            NewPlan.PlanRemark = this.txtPlanDemo.Text;

            //系统自动判断当前任务的状态
            if (this.cboxIsDisabled.Checked == true)
            {
                if (this.raNumber.Checked == true)
                {
                    if (this.DisabledRunNum.Value == 1 && DateTime.Compare(DateTime.Now, this.RunOnceTime.Value) > 0)
                    {
                        NewPlan.PlanState = (int)cGlobalParas.PlanState.Disabled;
                    }
                    else
                    {
                        NewPlan.PlanState = (int)cGlobalParas.PlanState.Enabled;
                    }
                }
                else if (this.raDateTime.Checked == true)
                {
                    if (DateTime.Compare(DateTime.Now, this.DisabledDateTime.Value) < 0)
                    {
                        NewPlan.PlanState = (int)cGlobalParas.PlanState.Disabled;
                    }
                    else
                    {
                        NewPlan.PlanState = (int)cGlobalParas.PlanState.Enabled;
                    }
                }
            }
            else
            {
                NewPlan.PlanState = (int)cGlobalParas.PlanState.Enabled;
            }

            if (this.cboxIsRun.Checked == true)
            {
                NewPlan.IsOverRun = true;
            }
            else
            {
                NewPlan.IsOverRun = false;
            }

            if (this.cboxIsDisabled.Checked == true)
            {
                NewPlan.IsDisabled = true;
            }
            else
            {
                NewPlan.IsDisabled = false;
            }

            if (this.raNumber.Checked == true)
            {
                NewPlan.DisabledType = (int)cGlobalParas.PlanDisabledType.RunTime;
            }
            else if (this.raDateTime.Checked == true)
            {
                NewPlan.DisabledType = (int)cGlobalParas.PlanDisabledType.RunDateTime;
            }

            NewPlan.DisabledTime     = int.Parse(this.DisabledRunNum.Value.ToString());
            NewPlan.DisabledDateTime = this.DisabledDateTime.Value;

            cTaskPlan tp;

            for (int i = 0; i < this.listTask.Items.Count; i++)
            {
                tp             = new cTaskPlan();
                tp.RunTaskType = cGlobalParas.ConvertID(this.listTask.Items[i].Text);

                if (cGlobalParas.ConvertID(this.listTask.Items[i].Text) == (int)cGlobalParas.RunTaskType.DataTask)
                {
                    tp.RunTaskName = cGlobalParas.ConvertID(this.listTask.Items[i].SubItems[1].Text.ToString()).ToString();
                }
                else
                {
                    tp.RunTaskName = this.listTask.Items[i].SubItems[1].Text.ToString();
                }

                tp.RunTaskPara = this.listTask.Items[i].SubItems[2].Text.ToString();

                NewPlan.RunTasks.Add(tp);
            }

            if (this.raOneTime.Checked == true)
            {
                NewPlan.RunTaskPlanType = (int)cGlobalParas.RunTaskPlanType.Ones;
            }
            else if (this.raDay.Checked == true)
            {
                if (this.raRunones.Checked == true)
                {
                    NewPlan.RunTaskPlanType = (int)cGlobalParas.RunTaskPlanType.DayOnes;
                }
                else if (this.raRuntwice.Checked == true)
                {
                    NewPlan.RunTaskPlanType = (int)cGlobalParas.RunTaskPlanType.DayTwice;
                }
            }
            else if (this.raWeekly.Checked == true)
            {
                NewPlan.RunTaskPlanType = (int)cGlobalParas.RunTaskPlanType.Weekly;
            }
            else if (this.raCustom.Checked == true)
            {
                NewPlan.RunTaskPlanType = (int)cGlobalParas.RunTaskPlanType.Custom;
            }


            NewPlan.EnabledDateTime = this.EnabledDate.Value.ToLongDateString();
            NewPlan.RunOnesTime     = this.RunOnceTime.Value.ToString();
            NewPlan.RunDayTime      = this.RunDayOnesTime.Value.ToLongTimeString();
            NewPlan.RunAMTime       = this.RunDayTwice1Time.Value.ToLongTimeString();
            NewPlan.RunPMTime       = this.RunDayTwice2Time.Value.ToLongTimeString();
            NewPlan.RunWeeklyTime   = this.RunWeeklyTime.Value.ToLongTimeString();
            NewPlan.FirstRunTime    = this.FirstRunTime.Value.ToLongTimeString();
            NewPlan.RunInterval     = this.udRunInterval.Value.ToString();

            string runWeekly = "";

            if (this.cboxSunday.Checked == true)
            {
                runWeekly = "0";
            }
            if (this.cboxMonday.Checked == true)
            {
                runWeekly += ",1";
            }
            if (this.cboxTuesday.Checked == true)
            {
                runWeekly += ",2";
            }
            if (this.cboxWednesday.Checked == true)
            {
                runWeekly += ",3";
            }
            if (this.cboxThursday.Checked == true)
            {
                runWeekly += ",4";
            }
            if (this.cboxFriday.Checked == true)
            {
                runWeekly += ",5";
            }
            if (this.cboxSturday.Checked == true)
            {
                runWeekly += ",6";
            }

            NewPlan.RunWeekly = runWeekly;

            cPlans p = new cPlans();

            if (this.FormState == cGlobalParas.FormState.New)
            {
                p.InsertPlan(NewPlan);
            }
            else if (this.FormState == cGlobalParas.FormState.Edit)
            {
                p.EditPlan(NewPlan);
            }

            p = null;

            return(Nid);
        }
コード例 #8
0
ファイル: cCheckPlan.cs プロジェクト: zhouweiaccp/code
        //加载计划,加载计划的时候需要对计划的状态进行维护
        private void IniCheckPlan()
        {
            try
            {
                cXmlIO xmlConfig = new cXmlIO(Program.getPrjPath() + "tasks\\plan\\plan.xml");

                DataView d = xmlConfig.GetData("descendant::Plans");

                if (d == null)
                {
                    return;
                }

                cPlan p;

                for (int i = 0; i < d.Count; i++)
                {
                    p = new cPlan();

                    if (int.Parse(d[i].Row["PlanState"].ToString()) == (int)cGlobalParas.PlanState.Enabled)
                    {
                        p.PlanID           = Int64.Parse(d[i].Row["ID"].ToString());
                        p.PlanName         = d[i].Row["PlanName"].ToString();
                        p.PlanState        = int.Parse(d[i].Row["PlanState"].ToString());
                        p.IsOverRun        = d[i].Row["IsOverRun"].ToString() == "True" ? true : false;
                        p.IsDisabled       = d[i].Row["IsDisabled"].ToString() == "True" ? true : false;
                        p.DisabledType     = int.Parse(d[i].Row["DisabledType"].ToString());
                        p.DisabledTime     = int.Parse(d[i].Row["DisabledTime"].ToString());
                        p.DisabledDateTime = DateTime.Parse(d[i].Row["DisabledDateTime"].ToString());
                        p.RunTaskPlanType  = int.Parse(d[i].Row["RunTaskPlanType"].ToString());
                        p.EnabledDateTime  = d[i].Row["EnabledDateTime"].ToString();
                        p.RunOnesTime      = d[i].Row["RunOnesTime"].ToString();
                        p.RunDayTime       = d[i].Row["RunDayTime"].ToString();
                        p.RunAMTime        = d[i].Row["RunAMTime"].ToString();
                        p.RunPMTime        = d[i].Row["RunPMTime"].ToString();
                        p.RunWeeklyTime    = d[i].Row["RunWeeklyTime"].ToString();
                        p.RunWeekly        = d[i].Row["RunWeekly"].ToString();
                        p.RunTimeCount     = d[i].Row["RunTimeCount"].ToString();
                        p.FirstRunTime     = d[i].Row["FirstRunTime"].ToString();
                        p.RunInterval      = d[i].Row["RunInterval"].ToString();

                        cTaskPlan tp;
                        DataView  t = d[i].CreateChildView("Plan_Tasks")[0].CreateChildView("Tasks_Task");

                        for (int j = 0; j < t.Count; j++)
                        {
                            tp             = new cTaskPlan();
                            tp.RunTaskType = int.Parse(t[j].Row["RunTaskType"].ToString());
                            tp.RunTaskName = t[j].Row["RunTaskName"].ToString();
                            tp.RunTaskPara = t[j].Row["RunTaskPara"].ToString();
                            p.RunTasks.Add(tp);
                        }

                        m_runTasks.Add(p);
                    }
                }

                p = null;

                xmlConfig = null;

                //自动维护计划状态
                AutoState();
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
        }