using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; using System.Linq; namespace RoadFlow.Data.MSSQL { public class WorkFlowTask : RoadFlow.Data.Interface.IWorkFlowTask { private DBHelper dbHelper = new DBHelper(); /// /// 构造函数 /// public WorkFlowTask() { } /// /// 添加记录 /// /// RoadFlow.Data.Model.WorkFlowTask实体类 /// 操作所影响的行数 public int Add(RoadFlow.Data.Model.WorkFlowTask model) { string sql = @"INSERT INTO WorkFlowTask (ID,PrevID,PrevStepID,FlowID,StepID,StepName,InstanceID,GroupID,Type,Title,SenderID,SenderName,SenderTime,ReceiveID,ReceiveName,ReceiveTime,OpenTime,CompletedTime,CompletedTime1,Comment,IsSign,Status,Note,Sort,SubFlowGroupID) VALUES(@ID,@PrevID,@PrevStepID,@FlowID,@StepID,@StepName,@InstanceID,@GroupID,@Type,@Title,@SenderID,@SenderName,@SenderTime,@ReceiveID,@ReceiveName,@ReceiveTime,@OpenTime,@CompletedTime,@CompletedTime1,@Comment,@IsSign,@Status,@Note,@Sort,@SubFlowGroupID)"; SqlParameter[] parameters = new SqlParameter[]{ new SqlParameter("@ID", SqlDbType.UniqueIdentifier, -1){ Value = model.ID }, new SqlParameter("@PrevID", SqlDbType.UniqueIdentifier, -1){ Value = model.PrevID }, new SqlParameter("@PrevStepID", SqlDbType.UniqueIdentifier, -1){ Value = model.PrevStepID }, new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier, -1){ Value = model.FlowID }, new SqlParameter("@StepID", SqlDbType.UniqueIdentifier, -1){ Value = model.StepID }, new SqlParameter("@StepName", SqlDbType.NVarChar, 1000){ Value = model.StepName }, new SqlParameter("@InstanceID", SqlDbType.VarChar, 50){ Value = model.InstanceID }, new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier, -1){ Value = model.GroupID }, new SqlParameter("@Type", SqlDbType.Int, -1){ Value = model.Type }, new SqlParameter("@Title", SqlDbType.NVarChar, 4000){ Value = model.Title }, new SqlParameter("@SenderID", SqlDbType.UniqueIdentifier, -1){ Value = model.SenderID }, new SqlParameter("@SenderName", SqlDbType.NVarChar, 100){ Value = model.SenderName }, new SqlParameter("@SenderTime", SqlDbType.DateTime, 8){ Value = model.SenderTime }, new SqlParameter("@ReceiveID", SqlDbType.UniqueIdentifier, -1){ Value = model.ReceiveID }, new SqlParameter("@ReceiveName", SqlDbType.NVarChar, 100){ Value = model.ReceiveName }, new SqlParameter("@ReceiveTime", SqlDbType.DateTime, 8){ Value = model.ReceiveTime }, model.OpenTime == null ? new SqlParameter("@OpenTime", SqlDbType.DateTime, 8) { Value = DBNull.Value } : new SqlParameter("@OpenTime", SqlDbType.DateTime, 8) { Value = model.OpenTime }, model.CompletedTime == null ? new SqlParameter("@CompletedTime", SqlDbType.DateTime, 8) { Value = DBNull.Value } : new SqlParameter("@CompletedTime", SqlDbType.DateTime, 8) { Value = model.CompletedTime }, model.CompletedTime1 == null ? new SqlParameter("@CompletedTime1", SqlDbType.DateTime, 8) { Value = DBNull.Value } : new SqlParameter("@CompletedTime1", SqlDbType.DateTime, 8) { Value = model.CompletedTime1 }, model.Comment == null ? new SqlParameter("@Comment", SqlDbType.VarChar, -1) { Value = DBNull.Value } : new SqlParameter("@Comment", SqlDbType.VarChar, -1) { Value = model.Comment }, model.IsSign == null ? new SqlParameter("@IsSign", SqlDbType.Int, -1) { Value = DBNull.Value } : new SqlParameter("@IsSign", SqlDbType.Int, -1) { Value = model.IsSign }, new SqlParameter("@Status", SqlDbType.Int, -1){ Value = model.Status }, model.Note == null ? new SqlParameter("@Note", SqlDbType.NVarChar, -1) { Value = DBNull.Value } : new SqlParameter("@Note", SqlDbType.NVarChar, -1) { Value = model.Note }, new SqlParameter("@Sort", SqlDbType.Int, -1){ Value = model.Sort }, model.SubFlowGroupID == null ? new SqlParameter("@SubFlowGroupID", SqlDbType.UniqueIdentifier, -1) { Value = DBNull.Value } : new SqlParameter("@SubFlowGroupID", SqlDbType.UniqueIdentifier, -1) { Value = model.SubFlowGroupID } }; return dbHelper.Execute(sql, parameters); } /// /// 更新记录 /// /// RoadFlow.Data.Model.WorkFlowTask实体类 public int Update(RoadFlow.Data.Model.WorkFlowTask model) { string sql = @"UPDATE WorkFlowTask SET PrevID=@PrevID,PrevStepID=@PrevStepID,FlowID=@FlowID,StepID=@StepID,StepName=@StepName,InstanceID=@InstanceID,GroupID=@GroupID,Type=@Type,Title=@Title,SenderID=@SenderID,SenderName=@SenderName,SenderTime=@SenderTime,ReceiveID=@ReceiveID,ReceiveName=@ReceiveName,ReceiveTime=@ReceiveTime,OpenTime=@OpenTime,CompletedTime=@CompletedTime,CompletedTime1=@CompletedTime1,Comment=@Comment,IsSign=@IsSign,Status=@Status,Note=@Note,Sort=@Sort,SubFlowGroupID=@SubFlowGroupID WHERE ID=@ID"; SqlParameter[] parameters = new SqlParameter[]{ new SqlParameter("@PrevID", SqlDbType.UniqueIdentifier, -1){ Value = model.PrevID }, new SqlParameter("@PrevStepID", SqlDbType.UniqueIdentifier, -1){ Value = model.PrevStepID }, new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier, -1){ Value = model.FlowID }, new SqlParameter("@StepID", SqlDbType.UniqueIdentifier, -1){ Value = model.StepID }, new SqlParameter("@StepName", SqlDbType.NVarChar, 1000){ Value = model.StepName }, new SqlParameter("@InstanceID", SqlDbType.VarChar, 50){ Value = model.InstanceID }, new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier, -1){ Value = model.GroupID }, new SqlParameter("@Type", SqlDbType.Int, -1){ Value = model.Type }, new SqlParameter("@Title", SqlDbType.NVarChar, 4000){ Value = model.Title }, new SqlParameter("@SenderID", SqlDbType.UniqueIdentifier, -1){ Value = model.SenderID }, new SqlParameter("@SenderName", SqlDbType.NVarChar, 100){ Value = model.SenderName }, new SqlParameter("@SenderTime", SqlDbType.DateTime, 8){ Value = model.SenderTime }, new SqlParameter("@ReceiveID", SqlDbType.UniqueIdentifier, -1){ Value = model.ReceiveID }, new SqlParameter("@ReceiveName", SqlDbType.NVarChar, 100){ Value = model.ReceiveName }, new SqlParameter("@ReceiveTime", SqlDbType.DateTime, 8){ Value = model.ReceiveTime }, model.OpenTime == null ? new SqlParameter("@OpenTime", SqlDbType.DateTime, 8) { Value = DBNull.Value } : new SqlParameter("@OpenTime", SqlDbType.DateTime, 8) { Value = model.OpenTime }, model.CompletedTime == null ? new SqlParameter("@CompletedTime", SqlDbType.DateTime, 8) { Value = DBNull.Value } : new SqlParameter("@CompletedTime", SqlDbType.DateTime, 8) { Value = model.CompletedTime }, model.CompletedTime1 == null ? new SqlParameter("@CompletedTime1", SqlDbType.DateTime, 8) { Value = DBNull.Value } : new SqlParameter("@CompletedTime1", SqlDbType.DateTime, 8) { Value = model.CompletedTime1 }, model.Comment == null ? new SqlParameter("@Comment", SqlDbType.VarChar, -1) { Value = DBNull.Value } : new SqlParameter("@Comment", SqlDbType.VarChar, -1) { Value = model.Comment }, model.IsSign == null ? new SqlParameter("@IsSign", SqlDbType.Int, -1) { Value = DBNull.Value } : new SqlParameter("@IsSign", SqlDbType.Int, -1) { Value = model.IsSign }, new SqlParameter("@Status", SqlDbType.Int, -1){ Value = model.Status }, model.Note == null ? new SqlParameter("@Note", SqlDbType.NVarChar, -1) { Value = DBNull.Value } : new SqlParameter("@Note", SqlDbType.NVarChar, -1) { Value = model.Note }, new SqlParameter("@Sort", SqlDbType.Int, -1){ Value = model.Sort }, model.SubFlowGroupID == null ? new SqlParameter("@SubFlowGroupID", SqlDbType.UniqueIdentifier, -1) { Value = DBNull.Value } : new SqlParameter("@SubFlowGroupID", SqlDbType.UniqueIdentifier, -1) { Value = model.SubFlowGroupID }, new SqlParameter("@ID", SqlDbType.UniqueIdentifier, -1){ Value = model.ID } }; return dbHelper.Execute(sql, parameters); } /// /// 删除记录 /// public int Delete(Guid id) { string sql = "DELETE FROM WorkFlowTask WHERE ID=@ID"; SqlParameter[] parameters = new SqlParameter[]{ new SqlParameter("@ID", SqlDbType.UniqueIdentifier){ Value = id } }; return dbHelper.Execute(sql, parameters); } /// /// 将DataRedar转换为List /// private List DataReaderToList(SqlDataReader dataReader) { List List = new List(); RoadFlow.Data.Model.WorkFlowTask model = null; while (dataReader.Read()) { model = new RoadFlow.Data.Model.WorkFlowTask(); model.ID = dataReader.GetGuid(0); model.PrevID = dataReader.GetGuid(1); model.PrevStepID = dataReader.GetGuid(2); model.FlowID = dataReader.GetGuid(3); model.StepID = dataReader.GetGuid(4); model.StepName = dataReader.GetString(5); model.InstanceID = dataReader.GetString(6); model.GroupID = dataReader.GetGuid(7); model.Type = dataReader.GetInt32(8); model.Title = dataReader.GetString(9); model.SenderID = dataReader.GetGuid(10); model.SenderName = dataReader.GetString(11); model.SenderTime = dataReader.GetDateTime(12); model.ReceiveID = dataReader.GetGuid(13); model.ReceiveName = dataReader.GetString(14); model.ReceiveTime = dataReader.GetDateTime(15); if (!dataReader.IsDBNull(16)) model.OpenTime = dataReader.GetDateTime(16); if (!dataReader.IsDBNull(17)) model.CompletedTime = dataReader.GetDateTime(17); if (!dataReader.IsDBNull(18)) model.CompletedTime1 = dataReader.GetDateTime(18); if (!dataReader.IsDBNull(19)) model.Comment = dataReader.GetString(19); if (!dataReader.IsDBNull(20)) model.IsSign = dataReader.GetInt32(20); model.Status = dataReader.GetInt32(21); if (!dataReader.IsDBNull(22)) model.Note = dataReader.GetString(22); model.Sort = dataReader.GetInt32(23); if (!dataReader.IsDBNull(24)) model.SubFlowGroupID = dataReader.GetGuid(24); List.Add(model); } return List; } /// /// 查询所有记录 /// public List GetAll() { string sql = "SELECT * FROM WorkFlowTask"; SqlDataReader dataReader = dbHelper.GetDataReader(sql); List List = DataReaderToList(dataReader); dataReader.Close(); return List; } /// /// 查询记录数 /// public long GetCount() { string sql = "SELECT COUNT(*) FROM WorkFlowTask"; long count; return long.TryParse(dbHelper.GetFieldValue(sql), out count) ? count : 0; } /// /// 根据主键查询一条记录 /// public RoadFlow.Data.Model.WorkFlowTask Get(Guid id) { string sql = "SELECT * FROM WorkFlowTask WHERE ID=@ID"; SqlParameter[] parameters = new SqlParameter[]{ new SqlParameter("@ID", SqlDbType.UniqueIdentifier){ Value = id } }; SqlDataReader dataReader = dbHelper.GetDataReader(sql, parameters); List List = DataReaderToList(dataReader); dataReader.Close(); return List.Count > 0 ? List[0] : null; } /// /// 删除一组实例 /// public int Delete(Guid flowID, Guid groupID) { string sql = "DELETE FROM WorkFlowTask WHERE GroupID=@GroupID"; List parameters = new List(){ new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID } }; if (!flowID.IsEmptyGuid()) { sql += " AND FlowID=@FlowID"; parameters.Add(new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier) { Value = flowID }); } return dbHelper.Execute(sql, parameters.ToArray()); } /// /// 更新打开时间 /// /// /// /// 是否将状态更新为1 public void UpdateOpenTime(Guid id, DateTime openTime, bool isStatus = false) { string sql = "UPDATE WorkFlowTask SET OpenTime=@OpenTime " + (isStatus ? ", Status=1" : "") + " WHERE ID=@ID AND OpenTime IS NULL"; SqlParameter[] parameters = new SqlParameter[]{ openTime==DateTime.MinValue? new SqlParameter("@OpenTime", SqlDbType.DateTime){ Value = DBNull.Value} : new SqlParameter("@OpenTime", SqlDbType.DateTime){ Value = openTime }, new SqlParameter("@ID", SqlDbType.UniqueIdentifier){ Value = id } }; dbHelper.Execute(sql, parameters); } /// /// 查询待办任务 /// /// /// /// /// /// /// /// /// 0待办 1已完成 /// public List GetTasks(Guid userID, out string pager, string query="", string title="", string flowid="", string sender="", string date1="", string date2="", int type=0) { List parList = new List(); StringBuilder sql = new StringBuilder("SELECT *,ROW_NUMBER() OVER(ORDER BY " + (type == 0 ? "ReceiveTime DESC" : "CompletedTime1 DESC") + ") AS PagerAutoRowNumber FROM WorkFlowTask WHERE ReceiveID=@ReceiveID"); sql.Append(type == 0 ? " AND Status IN(0,1)" : " AND Status IN(2,3)"); parList.Add(new SqlParameter("@ReceiveID", SqlDbType.UniqueIdentifier) { Value = userID }); if (!title.IsNullOrEmpty()) { sql.Append(" AND CHARINDEX(@Title,Title)>0"); parList.Add(new SqlParameter("@Title", SqlDbType.NVarChar, 2000) { Value = title }); } if (flowid.IsGuid()) { sql.Append(" AND FlowID=@FlowID"); parList.Add(new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier) { Value = flowid.ToGuid() }); } else if (!flowid.IsNullOrEmpty() && flowid.IndexOf(',') >= 0) { sql.Append(" AND FlowID IN(" + RoadFlow.Utility.Tools.GetSqlInString(flowid) + ")"); } if (sender.IsGuid()) { sql.Append(" AND SenderID=@SenderID"); parList.Add(new SqlParameter("@SenderID", SqlDbType.UniqueIdentifier) { Value = sender.ToGuid() }); } if (date1.IsDateTime()) { sql.Append(" AND ReceiveTime>=@ReceiveTime"); parList.Add(new SqlParameter("@ReceiveTime", SqlDbType.DateTime) { Value = date1.ToDateTime().Date }); } if (date2.IsDateTime()) { sql.Append(" AND ReceiveTime<=@ReceiveTime1"); parList.Add(new SqlParameter("@ReceiveTime1", SqlDbType.DateTime) { Value = date2.ToDateTime().AddDays(1).Date }); } long count; int size = RoadFlow.Utility.Tools.GetPageSize(); int number = RoadFlow.Utility.Tools.GetPageNumber(); string sql1 = dbHelper.GetPaerSql(sql.ToString(), size, number, out count, parList.ToArray()); pager = RoadFlow.Utility.Tools.GetPagerHtml(count, size, number, query); SqlDataReader dataReader = dbHelper.GetDataReader(sql1, parList.ToArray()); List List = DataReaderToList(dataReader); dataReader.Close(); return List; } /// /// 得到流程实例列表 /// /// /// /// /// /// /// /// /// /// /// 是否完成 0:全部 1:未完成 2:已完成 /// public List GetInstances(Guid[] flowID, Guid[] senderID, Guid[] receiveID, out string pager, string query = "", string title = "", string flowid = "", string date1 = "", string date2 = "", int status = 0) { List parList = new List(); StringBuilder sql = new StringBuilder(@"SELECT a.*,ROW_NUMBER() OVER(ORDER BY a.SenderTime DESC) AS PagerAutoRowNumber FROM WorkFlowTask a WHERE a.ID=(SELECT TOP 1 ID FROM WorkFlowTask WHERE FlowID=a.FlowID AND GroupID=a.GroupID ORDER BY Sort DESC)"); if (status != 0) { if (status == 1) { sql.Append(" AND a.Status IN(0,1,5)"); } else if (status == 2) { sql.Append(" AND a.Status IN(2,3,4)"); } } if (flowID != null && flowID.Length > 0) { sql.Append(string.Format(" AND a.FlowID IN({0})", RoadFlow.Utility.Tools.GetSqlInString(flowID))); } if (senderID != null && senderID.Length > 0) { if (senderID.Length == 1) { sql.Append(" AND a.SenderID=@SenderID"); parList.Add(new SqlParameter("@SenderID", SqlDbType.UniqueIdentifier) { Value = senderID[0] }); } else { sql.Append(string.Format(" AND a.SenderID IN({0})", RoadFlow.Utility.Tools.GetSqlInString(senderID))); } } if (receiveID != null && receiveID.Length > 0) { if (senderID.Length == 1) { sql.Append(" AND a.ReceiveID=@ReceiveID"); parList.Add(new SqlParameter("@ReceiveID", SqlDbType.UniqueIdentifier) { Value = receiveID[0] }); } else { sql.Append(string.Format(" AND a.ReceiveID IN({0})", RoadFlow.Utility.Tools.GetSqlInString(receiveID))); } } if (!title.IsNullOrEmpty()) { sql.Append(" AND CHARINDEX(@Title,a.Title)>0"); parList.Add(new SqlParameter("@Title", SqlDbType.NVarChar, 2000) { Value = title }); } if (flowid.IsGuid()) { sql.Append(" AND a.FlowID=@FlowID"); parList.Add(new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier) { Value = flowid.ToGuid() }); } else if (!flowid.IsNullOrEmpty() && flowid.IndexOf(',') >= 0) { sql.Append(" AND a.FlowID IN(" + RoadFlow.Utility.Tools.GetSqlInString(flowid) + ")"); } if (date1.IsDateTime()) { sql.Append(" AND a.SenderTime>=@SenderTime"); parList.Add(new SqlParameter("@SenderTime", SqlDbType.DateTime) { Value = date1.ToDateTime().Date }); } if (date2.IsDateTime()) { sql.Append(" AND a.SenderTime<=@SenderTime1"); parList.Add(new SqlParameter("@SenderTime1", SqlDbType.DateTime) { Value = date1.ToDateTime().AddDays(1).Date }); } long count; int size = RoadFlow.Utility.Tools.GetPageSize(); int number = RoadFlow.Utility.Tools.GetPageNumber(); string sql1 = dbHelper.GetPaerSql(sql.ToString(), size, number, out count, parList.ToArray()); pager = RoadFlow.Utility.Tools.GetPagerHtml(count, size, number, query); SqlDataReader dataReader = dbHelper.GetDataReader(sql1, parList.ToArray()); List List = DataReaderToList(dataReader); dataReader.Close(); return List; } /// /// 得到一个流程实例的发起者 /// /// /// /// public Guid GetFirstSnderID(Guid flowID, Guid groupID) { string sql = "SELECT SenderID FROM WorkFlowTask WHERE FlowID=@FlowID AND GroupID=@GroupID AND PrevID=@PrevID"; SqlParameter[] parameters = new SqlParameter[]{ new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier){ Value = flowID }, new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID }, new SqlParameter("@PrevID", SqlDbType.UniqueIdentifier){ Value = Guid.Empty } }; string senderID = dbHelper.GetFieldValue(sql, parameters); return senderID.ToGuid(); } /// /// 得到一个流程实例一个步骤的处理者 /// /// /// /// public List GetStepSnderID(Guid flowID, Guid stepID, Guid groupID) { string sql = "SELECT ReceiveID FROM WorkFlowTask WHERE FlowID=@FlowID AND StepID=@StepID AND GroupID=@GroupID"; SqlParameter[] parameters = new SqlParameter[]{ new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier){ Value = flowID }, new SqlParameter("@StepID", SqlDbType.UniqueIdentifier){ Value = stepID }, new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID } }; DataTable dt = dbHelper.GetDataTable(sql, parameters); List senderList = new List(); foreach (DataRow dr in dt.Rows) { Guid senderID; if (Guid.TryParse(dr[0].ToString(), out senderID)) { senderList.Add(senderID); } } return senderList; } /// /// 得到一个流程实例前一步骤的处理者 /// /// /// /// public List GetPrevSnderID(Guid flowID, Guid stepID, Guid groupID) { string sql = "SELECT ReceiveID FROM WorkFlowTask WHERE ID=(SELECT PrevID FROM WorkFlowTask WHERE FlowID=@FlowID AND StepID=@StepID AND GroupID=@GroupID)"; SqlParameter[] parameters = new SqlParameter[]{ new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier){ Value = flowID }, new SqlParameter("@StepID", SqlDbType.UniqueIdentifier){ Value = stepID }, new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID } }; DataTable dt = dbHelper.GetDataTable(sql, parameters); List senderList = new List(); foreach (DataRow dr in dt.Rows) { Guid senderID; if (Guid.TryParse(dr[0].ToString(), out senderID)) { senderList.Add(senderID); } } return senderList; } /// /// 完成一个任务 /// /// /// /// /// public int Completed(Guid taskID, string comment = "", bool isSign = false, int status = 2, string note="") { string sql = "UPDATE WorkFlowTask SET Comment=@Comment,CompletedTime1=@CompletedTime1,IsSign=@IsSign,Status=@Status" + (note.IsNullOrEmpty() ? "" : ",Note=@Note") + " WHERE ID=@ID"; SqlParameter[] parameters = new SqlParameter[]{ comment.IsNullOrEmpty() ? new SqlParameter("@Comment", SqlDbType.VarChar){ Value = DBNull.Value } : new SqlParameter("@Comment", SqlDbType.VarChar){ Value = comment }, new SqlParameter("@CompletedTime1", SqlDbType.DateTime){ Value = RoadFlow.Utility.DateTimeNew.Now }, new SqlParameter("@IsSign", SqlDbType.Int){ Value = isSign?1:0 }, new SqlParameter("@Status", SqlDbType.Int){ Value = status }, note.IsNullOrEmpty()?new SqlParameter("@Note", SqlDbType.NVarChar){ Value = DBNull.Value }:new SqlParameter("@Note", SqlDbType.NVarChar){ Value = note }, new SqlParameter("@ID", SqlDbType.UniqueIdentifier){ Value = taskID } }; return dbHelper.Execute(sql, parameters); } /// /// 更新一个任务后后续任务状态 /// /// /// /// /// public int UpdateNextTaskStatus(Guid taskID, int status) { string sql = "UPDATE WorkFlowTask SET Status=@Status WHERE PrevID=@PrevID"; SqlParameter[] parameters = new SqlParameter[]{ new SqlParameter("@Status", SqlDbType.Int){ Value = status }, new SqlParameter("@PrevID", SqlDbType.UniqueIdentifier){ Value = taskID } }; return dbHelper.Execute(sql, parameters); } /// /// 得到一个流程实例一个步骤的任务 /// /// /// /// public List GetTaskList(Guid flowID, Guid stepID, Guid groupID) { string sql = "SELECT * FROM WorkFlowTask WHERE FlowID=@FlowID AND StepID=@StepID AND GroupID=@GroupID"; SqlParameter[] parameters = new SqlParameter[]{ new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier){ Value = flowID }, new SqlParameter("@StepID", SqlDbType.UniqueIdentifier){ Value = stepID }, new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID } }; SqlDataReader dataReader = dbHelper.GetDataReader(sql, parameters); List List = DataReaderToList(dataReader); dataReader.Close(); return List; } /// /// 得到一个流程实例一个步骤一个人员的任务 /// /// /// /// /// /// public List GetUserTaskList(Guid flowID, Guid stepID, Guid groupID, Guid userID) { string sql = "SELECT * FROM WorkFlowTask WHERE FlowID=@FlowID AND StepID=@StepID AND GroupID=@GroupID AND ReceiveID=@ReceiveID"; SqlParameter[] parameters = new SqlParameter[]{ new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier){ Value = flowID }, new SqlParameter("@StepID", SqlDbType.UniqueIdentifier){ Value = stepID }, new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID }, new SqlParameter("@ReceiveID", SqlDbType.UniqueIdentifier){ Value = userID } }; SqlDataReader dataReader = dbHelper.GetDataReader(sql, parameters); List List = DataReaderToList(dataReader); dataReader.Close(); return List; } /// /// 得到一个实例的任务 /// /// /// /// public List GetTaskList(Guid flowID, Guid groupID) { string sql = string.Empty; SqlParameter[] parameters; if (flowID == null || flowID.IsEmptyGuid()) { sql = "SELECT * FROM WorkFlowTask WHERE GroupID=@GroupID"; parameters = new SqlParameter[]{ new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID } }; } else { sql = "SELECT * FROM WorkFlowTask WHERE FlowID=@FlowID AND GroupID=@GroupID"; parameters = new SqlParameter[]{ new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier){ Value = flowID }, new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID } }; } SqlDataReader dataReader = dbHelper.GetDataReader(sql, parameters); List List = DataReaderToList(dataReader); dataReader.Close(); return List; } /// /// 得到和一个任务同级的任务 /// /// 任务ID /// 是否区分步骤ID,多步骤会签区分的是上一步骤ID /// public List GetTaskList(Guid taskID, bool isStepID = true) { var task = Get(taskID); if (task == null) { return new List() { }; } string sql = string.Format("SELECT * FROM WorkFlowTask WHERE PrevID=@PrevID AND {0}", isStepID ? "StepID=@StepID" : "PrevStepID=@StepID"); SqlParameter[] parameters1 = new SqlParameter[]{ new SqlParameter("@PrevID", SqlDbType.UniqueIdentifier){ Value = task.PrevID }, new SqlParameter("@StepID", SqlDbType.UniqueIdentifier){ Value = isStepID ? task.StepID : task.PrevStepID } }; SqlDataReader dataReader = dbHelper.GetDataReader(sql, parameters1); List List = DataReaderToList(dataReader); dataReader.Close(); return List; } /// /// 得到一个任务的前一任务 /// /// /// /// public List GetPrevTaskList(Guid taskID) { string sql = "SELECT * FROM WorkFlowTask WHERE ID=(SELECT PrevID FROM WorkFlowTask WHERE ID=@ID)"; SqlParameter[] parameters = new SqlParameter[]{ new SqlParameter("@ID", SqlDbType.UniqueIdentifier){ Value = taskID } }; SqlDataReader dataReader = dbHelper.GetDataReader(sql, parameters); List List = DataReaderToList(dataReader); dataReader.Close(); return List; } /// /// 得到一个任务的后续任务 /// /// /// /// public List GetNextTaskList(Guid taskID) { string sql = "SELECT * FROM WorkFlowTask WHERE PrevID=@PrevID"; SqlParameter[] parameters = new SqlParameter[]{ new SqlParameter("@PrevID", SqlDbType.UniqueIdentifier){ Value = taskID } }; SqlDataReader dataReader = dbHelper.GetDataReader(sql, parameters); List List = DataReaderToList(dataReader); dataReader.Close(); return List; } /// /// 查询一个流程是否有任务数据 /// /// /// public bool HasTasks(Guid flowID) { string sql = "SELECT TOP 1 ID FROM WorkFlowTask WHERE FlowID=@FlowID"; SqlParameter[] parameters = new SqlParameter[]{ new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier){ Value = flowID } }; SqlDataReader dataReader = dbHelper.GetDataReader(sql, parameters); bool has = dataReader.HasRows; dataReader.Close(); return has; } /// /// 查询一个用户在一个步骤是否有未完成任务 /// /// /// public bool HasNoCompletedTasks(Guid flowID, Guid stepID, Guid groupID, Guid userID) { string sql = "SELECT TOP 1 ID FROM WorkFlowTask WHERE FlowID=@FlowID AND StepID=@StepID AND GroupID=@GroupID AND ReceiveID=@ReceiveID AND Status IN(-1,0,1)"; SqlParameter[] parameters = new SqlParameter[]{ new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier){ Value = flowID }, new SqlParameter("@StepID", SqlDbType.UniqueIdentifier){ Value = stepID }, new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID }, new SqlParameter("@ReceiveID", SqlDbType.UniqueIdentifier){ Value = userID } }; SqlDataReader dataReader = dbHelper.GetDataReader(sql, parameters); bool has = dataReader.HasRows; dataReader.Close(); return has; } /// /// 激活临时任务 /// /// /// /// /// 要求完成时间 /// public int UpdateTempTasks(Guid flowID, Guid stepID, Guid groupID, DateTime? completedTime, DateTime receiveTime) { string sql = "UPDATE WorkFlowTask SET CompletedTime=@CompletedTime,ReceiveTime=@ReceiveTime,SenderTime=@SenderTime,Status=0 WHERE FlowID=@FlowID AND StepID=@StepID AND GroupID=@GroupID AND Status=-1"; SqlParameter[] parameters = new SqlParameter[]{ !completedTime.HasValue ? new SqlParameter("@CompletedTime", SqlDbType.DateTime) { Value = DBNull.Value } : new SqlParameter("@CompletedTime", SqlDbType.DateTime) { Value = completedTime.Value }, new SqlParameter("@ReceiveTime", SqlDbType.DateTime){ Value = receiveTime }, new SqlParameter("@SenderTime", SqlDbType.DateTime){ Value = receiveTime }, new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier){ Value = flowID }, new SqlParameter("@StepID", SqlDbType.UniqueIdentifier){ Value = stepID }, new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID } }; return dbHelper.Execute(sql, parameters); } /// /// 删除临时任务 /// /// /// /// /// /// public int DeleteTempTasks(Guid flowID, Guid stepID, Guid groupID, Guid prevStepID) { string sql = "DELETE WorkFlowTask WHERE FlowID=@FlowID AND StepID=@StepID AND GroupID=@GroupID AND Status=-1"; List parameters = new List(){ new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier){ Value = flowID }, new SqlParameter("@StepID", SqlDbType.UniqueIdentifier){ Value = stepID }, new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID } }; if (!prevStepID.IsEmptyGuid()) { sql += " AND PrevStepID=@PrevStepID"; parameters.Add(new SqlParameter("@PrevStepID", SqlDbType.UniqueIdentifier) { Value = prevStepID }); } return dbHelper.Execute(sql, parameters.ToArray()); } /// /// 得到一个任务的状态 /// /// /// public int GetTaskStatus(Guid taskID) { string sql = "SELECT Status FROM WorkFlowTask WHERE ID=@ID"; SqlParameter[] parameters = new SqlParameter[]{ new SqlParameter("@ID", SqlDbType.UniqueIdentifier){ Value = taskID } }; string status = dbHelper.GetFieldValue(sql, parameters); int s; return status.IsInt(out s) ? s : -1; } /// /// 根据SubFlowID得到一个任务 /// /// /// public List GetBySubFlowGroupID(Guid subflowGroupID) { string sql = "SELECT * FROM WorkFlowTask WHERE SubFlowGroupID=@SubFlowGroupID"; SqlParameter[] parameters = new SqlParameter[]{ new SqlParameter("@SubFlowGroupID", SqlDbType.UniqueIdentifier){ Value = subflowGroupID } }; SqlDataReader dataReader = dbHelper.GetDataReader(sql, parameters); List List = DataReaderToList(dataReader); dataReader.Close(); return List; } } }