using System; using System.Data; using BP.DA; using BP.En; namespace BP.WF.DTS { /// /// 更新WF_GenerWorkerFlow.TodoSta状态. /// public class DTS_GenerWorkFlowTodoSta : Method { /// /// 更新WF_GenerWorkerFlow.TodoSta状态. /// public DTS_GenerWorkFlowTodoSta() { this.Title = "更新WF_GenerWorkerFlow.TodoSta状态."; this.Help = "该方法每天的8点自动执行"; this.GroupName = "流程自动执行定时任务"; } /// /// 设置执行变量 /// /// public override void Init() { //this.Warning = "您确定要执行吗?"; //HisAttrs.AddTBString("P1", null, "原密码", true, false, 0, 10, 10); //HisAttrs.AddTBString("P2", null, "新密码", true, false, 0, 10, 10); //HisAttrs.AddTBString("P3", null, "确认", true, false, 0, 10, 10); } /// /// 当前的操纵员是否可以执行这个方法 /// public override bool IsCanDo { get { if (BP.Web.WebUser.IsAdmin == true) return true; return false; } } /// /// 执行 /// /// 返回执行结果 public override object Do() { //系统期望的是,每一个人仅发一条信息. “您有xx个预警工作,yy个预期工作,请及时处理。” DataTable dtEmps = new DataTable(); dtEmps.Columns.Add("EmpNo", typeof(string)); dtEmps.Columns.Add("WarningNum", typeof(int)); dtEmps.Columns.Add("OverTimeNum", typeof(int)); string timeDT = DateTime.Now.ToString("yyyy-MM-dd"); string sql = ""; //查询出预警的工作. //sql = " SELECT DISTINCT FK_Emp,COUNT(FK_Emp) as Num , 0 as DBType FROM WF_GenerWorkerlist A WHERE a.DTOfWarning =< '" + timeDT + "' AND a.SDT <= '" + timeDT + "' AND A.IsPass=0 "; //sql += " UNION "; //sql += "SELECT DISTINCT FK_Emp,COUNT(FK_Emp) as Num , 1 as DBType FROM WF_GenerWorkerlist A WHERE a.SDT >'" + timeDT + "' AND A.IsPass=0 "; sql = "SELECT * FROM WF_GenerWorkerlist A WHERE a.DTOfWarning >'" + timeDT + "' AND a.SDT <'" + timeDT + "' AND A.IsPass=0 ORDER BY FK_Node,FK_Emp "; DataTable dt = DBAccess.RunSQLReturnTable(sql); #region 向预警人员发消息. // 向预警的人员发消息. Node nd = new Node(); BP.WF.Port.WFEmp emp = new BP.WF.Port.WFEmp(); foreach (DataRow dr in dt.Rows) { Int64 workid = Int64.Parse(dr["WorkID"].ToString()); int fk_node = int.Parse(dr["FK_Node"].ToString()); string fk_emp = dr["FK_Emp"].ToString(); if (nd.NodeID != fk_node) { nd.NodeID = fk_node; nd.Retrieve(); } if (nd.HisCHWay != CHWay.ByTime) continue; //非按照时效考核. if (nd.WAlertRole == CHAlertRole.None) continue; //如果仅仅提醒一次. // if (nd.WAlertRole == CHAlertRole.OneDayOneTime && isPM == true) if (nd.WAlertRole == CHAlertRole.OneDayOneTime && 1==1) { } else { continue; } if (emp.No != fk_emp) { emp.No = fk_emp; emp.Retrieve(); } } #endregion 向预警人员发消息. if (dt.Rows.Count >= 1) { //更新预警状态. sql = "UPDATE WF_GenerWorkFlow SET TodoSta=1 "; sql += " WHERE WorkID IN (SELECT WorkID FROM WF_GenerWorkerlist A WHERE a.DTOfWarning >'" + timeDT + "' AND a.SDT <'" + timeDT + "' AND A.IsPass=0 ) "; sql += " AND WF_GenerWorkFlow.WFState!=3 "; sql += " AND WF_GenerWorkFlow.TodoSta=0 "; int i = DBAccess.RunSQL(sql); } //更新逾期期状态. sql = "UPDATE WF_GenerWorkFlow SET TodoSta=2 "; sql += " WHERE WorkID IN (SELECT WorkID FROM WF_GenerWorkerlist A WHERE a.DTOfWarning >'" + timeDT + "' AND a.SDT <'" + timeDT + "' AND A.IsPass=0 ) "; sql += " AND WF_GenerWorkFlow.WFState!=3 "; sql += " AND WF_GenerWorkFlow.TodoSta=1 "; DBAccess.RunSQL(sql); return "时间戳修改成功"; } } }