RoadFlow2.1 临时演示

WorkFlowTask.cs 38KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Data;
  5. using System.Data.SqlClient;
  6. using System.Linq;
  7. namespace RoadFlow.Data.MSSQL
  8. {
  9. public class WorkFlowTask : RoadFlow.Data.Interface.IWorkFlowTask
  10. {
  11. private DBHelper dbHelper = new DBHelper();
  12. /// <summary>
  13. /// 构造函数
  14. /// </summary>
  15. public WorkFlowTask()
  16. {
  17. }
  18. /// <summary>
  19. /// 添加记录
  20. /// </summary>
  21. /// <param name="model">RoadFlow.Data.Model.WorkFlowTask实体类</param>
  22. /// <returns>操作所影响的行数</returns>
  23. public int Add(RoadFlow.Data.Model.WorkFlowTask model)
  24. {
  25. string sql = @"INSERT INTO WorkFlowTask
  26. (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)
  27. 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)";
  28. SqlParameter[] parameters = new SqlParameter[]{
  29. new SqlParameter("@ID", SqlDbType.UniqueIdentifier, -1){ Value = model.ID },
  30. new SqlParameter("@PrevID", SqlDbType.UniqueIdentifier, -1){ Value = model.PrevID },
  31. new SqlParameter("@PrevStepID", SqlDbType.UniqueIdentifier, -1){ Value = model.PrevStepID },
  32. new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier, -1){ Value = model.FlowID },
  33. new SqlParameter("@StepID", SqlDbType.UniqueIdentifier, -1){ Value = model.StepID },
  34. new SqlParameter("@StepName", SqlDbType.NVarChar, 1000){ Value = model.StepName },
  35. new SqlParameter("@InstanceID", SqlDbType.VarChar, 50){ Value = model.InstanceID },
  36. new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier, -1){ Value = model.GroupID },
  37. new SqlParameter("@Type", SqlDbType.Int, -1){ Value = model.Type },
  38. new SqlParameter("@Title", SqlDbType.NVarChar, 4000){ Value = model.Title },
  39. new SqlParameter("@SenderID", SqlDbType.UniqueIdentifier, -1){ Value = model.SenderID },
  40. new SqlParameter("@SenderName", SqlDbType.NVarChar, 100){ Value = model.SenderName },
  41. new SqlParameter("@SenderTime", SqlDbType.DateTime, 8){ Value = model.SenderTime },
  42. new SqlParameter("@ReceiveID", SqlDbType.UniqueIdentifier, -1){ Value = model.ReceiveID },
  43. new SqlParameter("@ReceiveName", SqlDbType.NVarChar, 100){ Value = model.ReceiveName },
  44. new SqlParameter("@ReceiveTime", SqlDbType.DateTime, 8){ Value = model.ReceiveTime },
  45. model.OpenTime == null ? new SqlParameter("@OpenTime", SqlDbType.DateTime, 8) { Value = DBNull.Value } : new SqlParameter("@OpenTime", SqlDbType.DateTime, 8) { Value = model.OpenTime },
  46. model.CompletedTime == null ? new SqlParameter("@CompletedTime", SqlDbType.DateTime, 8) { Value = DBNull.Value } : new SqlParameter("@CompletedTime", SqlDbType.DateTime, 8) { Value = model.CompletedTime },
  47. model.CompletedTime1 == null ? new SqlParameter("@CompletedTime1", SqlDbType.DateTime, 8) { Value = DBNull.Value } : new SqlParameter("@CompletedTime1", SqlDbType.DateTime, 8) { Value = model.CompletedTime1 },
  48. model.Comment == null ? new SqlParameter("@Comment", SqlDbType.VarChar, -1) { Value = DBNull.Value } : new SqlParameter("@Comment", SqlDbType.VarChar, -1) { Value = model.Comment },
  49. model.IsSign == null ? new SqlParameter("@IsSign", SqlDbType.Int, -1) { Value = DBNull.Value } : new SqlParameter("@IsSign", SqlDbType.Int, -1) { Value = model.IsSign },
  50. new SqlParameter("@Status", SqlDbType.Int, -1){ Value = model.Status },
  51. model.Note == null ? new SqlParameter("@Note", SqlDbType.NVarChar, -1) { Value = DBNull.Value } : new SqlParameter("@Note", SqlDbType.NVarChar, -1) { Value = model.Note },
  52. new SqlParameter("@Sort", SqlDbType.Int, -1){ Value = model.Sort },
  53. model.SubFlowGroupID == null ? new SqlParameter("@SubFlowGroupID", SqlDbType.UniqueIdentifier, -1) { Value = DBNull.Value } : new SqlParameter("@SubFlowGroupID", SqlDbType.UniqueIdentifier, -1) { Value = model.SubFlowGroupID }
  54. };
  55. return dbHelper.Execute(sql, parameters);
  56. }
  57. /// <summary>
  58. /// 更新记录
  59. /// </summary>
  60. /// <param name="model">RoadFlow.Data.Model.WorkFlowTask实体类</param>
  61. public int Update(RoadFlow.Data.Model.WorkFlowTask model)
  62. {
  63. string sql = @"UPDATE WorkFlowTask SET
  64. 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
  65. WHERE ID=@ID";
  66. SqlParameter[] parameters = new SqlParameter[]{
  67. new SqlParameter("@PrevID", SqlDbType.UniqueIdentifier, -1){ Value = model.PrevID },
  68. new SqlParameter("@PrevStepID", SqlDbType.UniqueIdentifier, -1){ Value = model.PrevStepID },
  69. new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier, -1){ Value = model.FlowID },
  70. new SqlParameter("@StepID", SqlDbType.UniqueIdentifier, -1){ Value = model.StepID },
  71. new SqlParameter("@StepName", SqlDbType.NVarChar, 1000){ Value = model.StepName },
  72. new SqlParameter("@InstanceID", SqlDbType.VarChar, 50){ Value = model.InstanceID },
  73. new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier, -1){ Value = model.GroupID },
  74. new SqlParameter("@Type", SqlDbType.Int, -1){ Value = model.Type },
  75. new SqlParameter("@Title", SqlDbType.NVarChar, 4000){ Value = model.Title },
  76. new SqlParameter("@SenderID", SqlDbType.UniqueIdentifier, -1){ Value = model.SenderID },
  77. new SqlParameter("@SenderName", SqlDbType.NVarChar, 100){ Value = model.SenderName },
  78. new SqlParameter("@SenderTime", SqlDbType.DateTime, 8){ Value = model.SenderTime },
  79. new SqlParameter("@ReceiveID", SqlDbType.UniqueIdentifier, -1){ Value = model.ReceiveID },
  80. new SqlParameter("@ReceiveName", SqlDbType.NVarChar, 100){ Value = model.ReceiveName },
  81. new SqlParameter("@ReceiveTime", SqlDbType.DateTime, 8){ Value = model.ReceiveTime },
  82. model.OpenTime == null ? new SqlParameter("@OpenTime", SqlDbType.DateTime, 8) { Value = DBNull.Value } : new SqlParameter("@OpenTime", SqlDbType.DateTime, 8) { Value = model.OpenTime },
  83. model.CompletedTime == null ? new SqlParameter("@CompletedTime", SqlDbType.DateTime, 8) { Value = DBNull.Value } : new SqlParameter("@CompletedTime", SqlDbType.DateTime, 8) { Value = model.CompletedTime },
  84. model.CompletedTime1 == null ? new SqlParameter("@CompletedTime1", SqlDbType.DateTime, 8) { Value = DBNull.Value } : new SqlParameter("@CompletedTime1", SqlDbType.DateTime, 8) { Value = model.CompletedTime1 },
  85. model.Comment == null ? new SqlParameter("@Comment", SqlDbType.VarChar, -1) { Value = DBNull.Value } : new SqlParameter("@Comment", SqlDbType.VarChar, -1) { Value = model.Comment },
  86. model.IsSign == null ? new SqlParameter("@IsSign", SqlDbType.Int, -1) { Value = DBNull.Value } : new SqlParameter("@IsSign", SqlDbType.Int, -1) { Value = model.IsSign },
  87. new SqlParameter("@Status", SqlDbType.Int, -1){ Value = model.Status },
  88. model.Note == null ? new SqlParameter("@Note", SqlDbType.NVarChar, -1) { Value = DBNull.Value } : new SqlParameter("@Note", SqlDbType.NVarChar, -1) { Value = model.Note },
  89. new SqlParameter("@Sort", SqlDbType.Int, -1){ Value = model.Sort },
  90. model.SubFlowGroupID == null ? new SqlParameter("@SubFlowGroupID", SqlDbType.UniqueIdentifier, -1) { Value = DBNull.Value } : new SqlParameter("@SubFlowGroupID", SqlDbType.UniqueIdentifier, -1) { Value = model.SubFlowGroupID },
  91. new SqlParameter("@ID", SqlDbType.UniqueIdentifier, -1){ Value = model.ID }
  92. };
  93. return dbHelper.Execute(sql, parameters);
  94. }
  95. /// <summary>
  96. /// 删除记录
  97. /// </summary>
  98. public int Delete(Guid id)
  99. {
  100. string sql = "DELETE FROM WorkFlowTask WHERE ID=@ID";
  101. SqlParameter[] parameters = new SqlParameter[]{
  102. new SqlParameter("@ID", SqlDbType.UniqueIdentifier){ Value = id }
  103. };
  104. return dbHelper.Execute(sql, parameters);
  105. }
  106. /// <summary>
  107. /// 将DataRedar转换为List
  108. /// </summary>
  109. private List<RoadFlow.Data.Model.WorkFlowTask> DataReaderToList(SqlDataReader dataReader)
  110. {
  111. List<RoadFlow.Data.Model.WorkFlowTask> List = new List<RoadFlow.Data.Model.WorkFlowTask>();
  112. RoadFlow.Data.Model.WorkFlowTask model = null;
  113. while (dataReader.Read())
  114. {
  115. model = new RoadFlow.Data.Model.WorkFlowTask();
  116. model.ID = dataReader.GetGuid(0);
  117. model.PrevID = dataReader.GetGuid(1);
  118. model.PrevStepID = dataReader.GetGuid(2);
  119. model.FlowID = dataReader.GetGuid(3);
  120. model.StepID = dataReader.GetGuid(4);
  121. model.StepName = dataReader.GetString(5);
  122. model.InstanceID = dataReader.GetString(6);
  123. model.GroupID = dataReader.GetGuid(7);
  124. model.Type = dataReader.GetInt32(8);
  125. model.Title = dataReader.GetString(9);
  126. model.SenderID = dataReader.GetGuid(10);
  127. model.SenderName = dataReader.GetString(11);
  128. model.SenderTime = dataReader.GetDateTime(12);
  129. model.ReceiveID = dataReader.GetGuid(13);
  130. model.ReceiveName = dataReader.GetString(14);
  131. model.ReceiveTime = dataReader.GetDateTime(15);
  132. if (!dataReader.IsDBNull(16))
  133. model.OpenTime = dataReader.GetDateTime(16);
  134. if (!dataReader.IsDBNull(17))
  135. model.CompletedTime = dataReader.GetDateTime(17);
  136. if (!dataReader.IsDBNull(18))
  137. model.CompletedTime1 = dataReader.GetDateTime(18);
  138. if (!dataReader.IsDBNull(19))
  139. model.Comment = dataReader.GetString(19);
  140. if (!dataReader.IsDBNull(20))
  141. model.IsSign = dataReader.GetInt32(20);
  142. model.Status = dataReader.GetInt32(21);
  143. if (!dataReader.IsDBNull(22))
  144. model.Note = dataReader.GetString(22);
  145. model.Sort = dataReader.GetInt32(23);
  146. if (!dataReader.IsDBNull(24))
  147. model.SubFlowGroupID = dataReader.GetGuid(24);
  148. List.Add(model);
  149. }
  150. return List;
  151. }
  152. /// <summary>
  153. /// 查询所有记录
  154. /// </summary>
  155. public List<RoadFlow.Data.Model.WorkFlowTask> GetAll()
  156. {
  157. string sql = "SELECT * FROM WorkFlowTask";
  158. SqlDataReader dataReader = dbHelper.GetDataReader(sql);
  159. List<RoadFlow.Data.Model.WorkFlowTask> List = DataReaderToList(dataReader);
  160. dataReader.Close();
  161. return List;
  162. }
  163. /// <summary>
  164. /// 查询记录数
  165. /// </summary>
  166. public long GetCount()
  167. {
  168. string sql = "SELECT COUNT(*) FROM WorkFlowTask";
  169. long count;
  170. return long.TryParse(dbHelper.GetFieldValue(sql), out count) ? count : 0;
  171. }
  172. /// <summary>
  173. /// 根据主键查询一条记录
  174. /// </summary>
  175. public RoadFlow.Data.Model.WorkFlowTask Get(Guid id)
  176. {
  177. string sql = "SELECT * FROM WorkFlowTask WHERE ID=@ID";
  178. SqlParameter[] parameters = new SqlParameter[]{
  179. new SqlParameter("@ID", SqlDbType.UniqueIdentifier){ Value = id }
  180. };
  181. SqlDataReader dataReader = dbHelper.GetDataReader(sql, parameters);
  182. List<RoadFlow.Data.Model.WorkFlowTask> List = DataReaderToList(dataReader);
  183. dataReader.Close();
  184. return List.Count > 0 ? List[0] : null;
  185. }
  186. /// <summary>
  187. /// 删除一组实例
  188. /// </summary>
  189. public int Delete(Guid flowID, Guid groupID)
  190. {
  191. string sql = "DELETE FROM WorkFlowTask WHERE GroupID=@GroupID";
  192. List<SqlParameter> parameters = new List<SqlParameter>(){
  193. new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID }
  194. };
  195. if (!flowID.IsEmptyGuid())
  196. {
  197. sql += " AND FlowID=@FlowID";
  198. parameters.Add(new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier) { Value = flowID });
  199. }
  200. return dbHelper.Execute(sql, parameters.ToArray());
  201. }
  202. /// <summary>
  203. /// 更新打开时间
  204. /// </summary>
  205. /// <param name="id"></param>
  206. /// <param name="openTime"></param>
  207. /// <param name="isStatus">是否将状态更新为1</param>
  208. public void UpdateOpenTime(Guid id, DateTime openTime, bool isStatus = false)
  209. {
  210. string sql = "UPDATE WorkFlowTask SET OpenTime=@OpenTime " + (isStatus ? ", Status=1" : "") + " WHERE ID=@ID AND OpenTime IS NULL";
  211. SqlParameter[] parameters = new SqlParameter[]{
  212. openTime==DateTime.MinValue? new SqlParameter("@OpenTime", SqlDbType.DateTime){ Value = DBNull.Value} :
  213. new SqlParameter("@OpenTime", SqlDbType.DateTime){ Value = openTime },
  214. new SqlParameter("@ID", SqlDbType.UniqueIdentifier){ Value = id }
  215. };
  216. dbHelper.Execute(sql, parameters);
  217. }
  218. /// <summary>
  219. /// 查询待办任务
  220. /// </summary>
  221. /// <param name="userID"></param>
  222. /// <param name="pager"></param>
  223. /// <param name="query"></param>
  224. /// <param name="title"></param>
  225. /// <param name="flowid"></param>
  226. /// <param name="date1"></param>
  227. /// <param name="date2"></param>
  228. /// <param name="type">0待办 1已完成</param>
  229. /// <returns></returns>
  230. public List<RoadFlow.Data.Model.WorkFlowTask> GetTasks(Guid userID, out string pager, string query="", string title="", string flowid="", string sender="", string date1="", string date2="", int type=0)
  231. {
  232. List<SqlParameter> parList = new List<SqlParameter>();
  233. StringBuilder sql = new StringBuilder("SELECT *,ROW_NUMBER() OVER(ORDER BY " + (type == 0 ? "ReceiveTime DESC" : "CompletedTime1 DESC") + ") AS PagerAutoRowNumber FROM WorkFlowTask WHERE ReceiveID=@ReceiveID");
  234. sql.Append(type == 0 ? " AND Status IN(0,1)" : " AND Status IN(2,3)");
  235. parList.Add(new SqlParameter("@ReceiveID", SqlDbType.UniqueIdentifier) { Value = userID });
  236. if (!title.IsNullOrEmpty())
  237. {
  238. sql.Append(" AND CHARINDEX(@Title,Title)>0");
  239. parList.Add(new SqlParameter("@Title", SqlDbType.NVarChar, 2000) { Value = title });
  240. }
  241. if (flowid.IsGuid())
  242. {
  243. sql.Append(" AND FlowID=@FlowID");
  244. parList.Add(new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier) { Value = flowid.ToGuid() });
  245. }
  246. else if (!flowid.IsNullOrEmpty() && flowid.IndexOf(',') >= 0)
  247. {
  248. sql.Append(" AND FlowID IN(" + RoadFlow.Utility.Tools.GetSqlInString(flowid) + ")");
  249. }
  250. if (sender.IsGuid())
  251. {
  252. sql.Append(" AND SenderID=@SenderID");
  253. parList.Add(new SqlParameter("@SenderID", SqlDbType.UniqueIdentifier) { Value = sender.ToGuid() });
  254. }
  255. if (date1.IsDateTime())
  256. {
  257. sql.Append(" AND ReceiveTime>=@ReceiveTime");
  258. parList.Add(new SqlParameter("@ReceiveTime", SqlDbType.DateTime) { Value = date1.ToDateTime().Date });
  259. }
  260. if (date2.IsDateTime())
  261. {
  262. sql.Append(" AND ReceiveTime<=@ReceiveTime1");
  263. parList.Add(new SqlParameter("@ReceiveTime1", SqlDbType.DateTime) { Value = date2.ToDateTime().AddDays(1).Date });
  264. }
  265. long count;
  266. int size = RoadFlow.Utility.Tools.GetPageSize();
  267. int number = RoadFlow.Utility.Tools.GetPageNumber();
  268. string sql1 = dbHelper.GetPaerSql(sql.ToString(), size, number, out count, parList.ToArray());
  269. pager = RoadFlow.Utility.Tools.GetPagerHtml(count, size, number, query);
  270. SqlDataReader dataReader = dbHelper.GetDataReader(sql1, parList.ToArray());
  271. List<RoadFlow.Data.Model.WorkFlowTask> List = DataReaderToList(dataReader);
  272. dataReader.Close();
  273. return List;
  274. }
  275. /// <summary>
  276. /// 得到流程实例列表
  277. /// </summary>
  278. /// <param name="flowID"></param>
  279. /// <param name="senderID"></param>
  280. /// <param name="receiveID"></param>
  281. /// <param name="pager"></param>
  282. /// <param name="query"></param>
  283. /// <param name="title"></param>
  284. /// <param name="flowid"></param>
  285. /// <param name="date1"></param>
  286. /// <param name="date2"></param>
  287. /// <param name="status">是否完成 0:全部 1:未完成 2:已完成</param>
  288. /// <returns></returns>
  289. public List<RoadFlow.Data.Model.WorkFlowTask> GetInstances(Guid[] flowID, Guid[] senderID, Guid[] receiveID, out string pager, string query = "", string title = "", string flowid = "", string date1 = "", string date2 = "", int status = 0)
  290. {
  291. List<SqlParameter> parList = new List<SqlParameter>();
  292. StringBuilder sql = new StringBuilder(@"SELECT a.*,ROW_NUMBER() OVER(ORDER BY a.SenderTime DESC) AS PagerAutoRowNumber FROM WorkFlowTask a
  293. WHERE a.ID=(SELECT TOP 1 ID FROM WorkFlowTask WHERE FlowID=a.FlowID AND GroupID=a.GroupID ORDER BY Sort DESC)");
  294. if (status != 0)
  295. {
  296. if (status == 1)
  297. {
  298. sql.Append(" AND a.Status IN(0,1,5)");
  299. }
  300. else if (status == 2)
  301. {
  302. sql.Append(" AND a.Status IN(2,3,4)");
  303. }
  304. }
  305. if (flowID != null && flowID.Length > 0)
  306. {
  307. sql.Append(string.Format(" AND a.FlowID IN({0})", RoadFlow.Utility.Tools.GetSqlInString(flowID)));
  308. }
  309. if (senderID != null && senderID.Length > 0)
  310. {
  311. if (senderID.Length == 1)
  312. {
  313. sql.Append(" AND a.SenderID=@SenderID");
  314. parList.Add(new SqlParameter("@SenderID", SqlDbType.UniqueIdentifier) { Value = senderID[0] });
  315. }
  316. else
  317. {
  318. sql.Append(string.Format(" AND a.SenderID IN({0})", RoadFlow.Utility.Tools.GetSqlInString(senderID)));
  319. }
  320. }
  321. if (receiveID != null && receiveID.Length > 0)
  322. {
  323. if (senderID.Length == 1)
  324. {
  325. sql.Append(" AND a.ReceiveID=@ReceiveID");
  326. parList.Add(new SqlParameter("@ReceiveID", SqlDbType.UniqueIdentifier) { Value = receiveID[0] });
  327. }
  328. else
  329. {
  330. sql.Append(string.Format(" AND a.ReceiveID IN({0})", RoadFlow.Utility.Tools.GetSqlInString(receiveID)));
  331. }
  332. }
  333. if (!title.IsNullOrEmpty())
  334. {
  335. sql.Append(" AND CHARINDEX(@Title,a.Title)>0");
  336. parList.Add(new SqlParameter("@Title", SqlDbType.NVarChar, 2000) { Value = title });
  337. }
  338. if (flowid.IsGuid())
  339. {
  340. sql.Append(" AND a.FlowID=@FlowID");
  341. parList.Add(new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier) { Value = flowid.ToGuid() });
  342. }
  343. else if (!flowid.IsNullOrEmpty() && flowid.IndexOf(',') >= 0)
  344. {
  345. sql.Append(" AND a.FlowID IN(" + RoadFlow.Utility.Tools.GetSqlInString(flowid) + ")");
  346. }
  347. if (date1.IsDateTime())
  348. {
  349. sql.Append(" AND a.SenderTime>=@SenderTime");
  350. parList.Add(new SqlParameter("@SenderTime", SqlDbType.DateTime) { Value = date1.ToDateTime().Date });
  351. }
  352. if (date2.IsDateTime())
  353. {
  354. sql.Append(" AND a.SenderTime<=@SenderTime1");
  355. parList.Add(new SqlParameter("@SenderTime1", SqlDbType.DateTime) { Value = date1.ToDateTime().AddDays(1).Date });
  356. }
  357. long count;
  358. int size = RoadFlow.Utility.Tools.GetPageSize();
  359. int number = RoadFlow.Utility.Tools.GetPageNumber();
  360. string sql1 = dbHelper.GetPaerSql(sql.ToString(), size, number, out count, parList.ToArray());
  361. pager = RoadFlow.Utility.Tools.GetPagerHtml(count, size, number, query);
  362. SqlDataReader dataReader = dbHelper.GetDataReader(sql1, parList.ToArray());
  363. List<RoadFlow.Data.Model.WorkFlowTask> List = DataReaderToList(dataReader);
  364. dataReader.Close();
  365. return List;
  366. }
  367. /// <summary>
  368. /// 得到一个流程实例的发起者
  369. /// </summary>
  370. /// <param name="flowID"></param>
  371. /// <param name="groupID"></param>
  372. /// <returns></returns>
  373. public Guid GetFirstSnderID(Guid flowID, Guid groupID)
  374. {
  375. string sql = "SELECT SenderID FROM WorkFlowTask WHERE FlowID=@FlowID AND GroupID=@GroupID AND PrevID=@PrevID";
  376. SqlParameter[] parameters = new SqlParameter[]{
  377. new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier){ Value = flowID },
  378. new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID },
  379. new SqlParameter("@PrevID", SqlDbType.UniqueIdentifier){ Value = Guid.Empty }
  380. };
  381. string senderID = dbHelper.GetFieldValue(sql, parameters);
  382. return senderID.ToGuid();
  383. }
  384. /// <summary>
  385. /// 得到一个流程实例一个步骤的处理者
  386. /// </summary>
  387. /// <param name="flowID"></param>
  388. /// <param name="groupID"></param>
  389. /// <returns></returns>
  390. public List<Guid> GetStepSnderID(Guid flowID, Guid stepID, Guid groupID)
  391. {
  392. string sql = "SELECT ReceiveID FROM WorkFlowTask WHERE FlowID=@FlowID AND StepID=@StepID AND GroupID=@GroupID";
  393. SqlParameter[] parameters = new SqlParameter[]{
  394. new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier){ Value = flowID },
  395. new SqlParameter("@StepID", SqlDbType.UniqueIdentifier){ Value = stepID },
  396. new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID }
  397. };
  398. DataTable dt = dbHelper.GetDataTable(sql, parameters);
  399. List<Guid> senderList = new List<Guid>();
  400. foreach (DataRow dr in dt.Rows)
  401. {
  402. Guid senderID;
  403. if (Guid.TryParse(dr[0].ToString(), out senderID))
  404. {
  405. senderList.Add(senderID);
  406. }
  407. }
  408. return senderList;
  409. }
  410. /// <summary>
  411. /// 得到一个流程实例前一步骤的处理者
  412. /// </summary>
  413. /// <param name="flowID"></param>
  414. /// <param name="groupID"></param>
  415. /// <returns></returns>
  416. public List<Guid> GetPrevSnderID(Guid flowID, Guid stepID, Guid groupID)
  417. {
  418. string sql = "SELECT ReceiveID FROM WorkFlowTask WHERE ID=(SELECT PrevID FROM WorkFlowTask WHERE FlowID=@FlowID AND StepID=@StepID AND GroupID=@GroupID)";
  419. SqlParameter[] parameters = new SqlParameter[]{
  420. new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier){ Value = flowID },
  421. new SqlParameter("@StepID", SqlDbType.UniqueIdentifier){ Value = stepID },
  422. new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID }
  423. };
  424. DataTable dt = dbHelper.GetDataTable(sql, parameters);
  425. List<Guid> senderList = new List<Guid>();
  426. foreach (DataRow dr in dt.Rows)
  427. {
  428. Guid senderID;
  429. if (Guid.TryParse(dr[0].ToString(), out senderID))
  430. {
  431. senderList.Add(senderID);
  432. }
  433. }
  434. return senderList;
  435. }
  436. /// <summary>
  437. /// 完成一个任务
  438. /// </summary>
  439. /// <param name="taskID"></param>
  440. /// <param name="comment"></param>
  441. /// <param name="isSign"></param>
  442. /// <returns></returns>
  443. public int Completed(Guid taskID, string comment = "", bool isSign = false, int status = 2, string note="")
  444. {
  445. string sql = "UPDATE WorkFlowTask SET Comment=@Comment,CompletedTime1=@CompletedTime1,IsSign=@IsSign,Status=@Status" + (note.IsNullOrEmpty() ? "" : ",Note=@Note") + " WHERE ID=@ID";
  446. SqlParameter[] parameters = new SqlParameter[]{
  447. comment.IsNullOrEmpty() ? new SqlParameter("@Comment", SqlDbType.VarChar){ Value = DBNull.Value } : new SqlParameter("@Comment", SqlDbType.VarChar){ Value = comment },
  448. new SqlParameter("@CompletedTime1", SqlDbType.DateTime){ Value = RoadFlow.Utility.DateTimeNew.Now },
  449. new SqlParameter("@IsSign", SqlDbType.Int){ Value = isSign?1:0 },
  450. new SqlParameter("@Status", SqlDbType.Int){ Value = status },
  451. note.IsNullOrEmpty()?new SqlParameter("@Note", SqlDbType.NVarChar){ Value = DBNull.Value }:new SqlParameter("@Note", SqlDbType.NVarChar){ Value = note },
  452. new SqlParameter("@ID", SqlDbType.UniqueIdentifier){ Value = taskID }
  453. };
  454. return dbHelper.Execute(sql, parameters);
  455. }
  456. /// <summary>
  457. /// 更新一个任务后后续任务状态
  458. /// </summary>
  459. /// <param name="taskID"></param>
  460. /// <param name="comment"></param>
  461. /// <param name="isSign"></param>
  462. /// <returns></returns>
  463. public int UpdateNextTaskStatus(Guid taskID, int status)
  464. {
  465. string sql = "UPDATE WorkFlowTask SET Status=@Status WHERE PrevID=@PrevID";
  466. SqlParameter[] parameters = new SqlParameter[]{
  467. new SqlParameter("@Status", SqlDbType.Int){ Value = status },
  468. new SqlParameter("@PrevID", SqlDbType.UniqueIdentifier){ Value = taskID }
  469. };
  470. return dbHelper.Execute(sql, parameters);
  471. }
  472. /// <summary>
  473. /// 得到一个流程实例一个步骤的任务
  474. /// </summary>
  475. /// <param name="flowID"></param>
  476. /// <param name="groupID"></param>
  477. /// <returns></returns>
  478. public List<Model.WorkFlowTask> GetTaskList(Guid flowID, Guid stepID, Guid groupID)
  479. {
  480. string sql = "SELECT * FROM WorkFlowTask WHERE FlowID=@FlowID AND StepID=@StepID AND GroupID=@GroupID";
  481. SqlParameter[] parameters = new SqlParameter[]{
  482. new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier){ Value = flowID },
  483. new SqlParameter("@StepID", SqlDbType.UniqueIdentifier){ Value = stepID },
  484. new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID }
  485. };
  486. SqlDataReader dataReader = dbHelper.GetDataReader(sql, parameters);
  487. List<RoadFlow.Data.Model.WorkFlowTask> List = DataReaderToList(dataReader);
  488. dataReader.Close();
  489. return List;
  490. }
  491. /// <summary>
  492. /// 得到一个流程实例一个步骤一个人员的任务
  493. /// </summary>
  494. /// <param name="flowID"></param>
  495. /// <param name="stepID"></param>
  496. /// <param name="groupID"></param>
  497. /// <param name="userID"></param>
  498. /// <returns></returns>
  499. public List<Model.WorkFlowTask> GetUserTaskList(Guid flowID, Guid stepID, Guid groupID, Guid userID)
  500. {
  501. string sql = "SELECT * FROM WorkFlowTask WHERE FlowID=@FlowID AND StepID=@StepID AND GroupID=@GroupID AND ReceiveID=@ReceiveID";
  502. SqlParameter[] parameters = new SqlParameter[]{
  503. new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier){ Value = flowID },
  504. new SqlParameter("@StepID", SqlDbType.UniqueIdentifier){ Value = stepID },
  505. new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID },
  506. new SqlParameter("@ReceiveID", SqlDbType.UniqueIdentifier){ Value = userID }
  507. };
  508. SqlDataReader dataReader = dbHelper.GetDataReader(sql, parameters);
  509. List<RoadFlow.Data.Model.WorkFlowTask> List = DataReaderToList(dataReader);
  510. dataReader.Close();
  511. return List;
  512. }
  513. /// <summary>
  514. /// 得到一个实例的任务
  515. /// </summary>
  516. /// <param name="flowID"></param>
  517. /// <param name="groupID"></param>
  518. /// <returns></returns>
  519. public List<RoadFlow.Data.Model.WorkFlowTask> GetTaskList(Guid flowID, Guid groupID)
  520. {
  521. string sql = string.Empty;
  522. SqlParameter[] parameters;
  523. if (flowID == null || flowID.IsEmptyGuid())
  524. {
  525. sql = "SELECT * FROM WorkFlowTask WHERE GroupID=@GroupID";
  526. parameters = new SqlParameter[]{
  527. new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID }
  528. };
  529. }
  530. else
  531. {
  532. sql = "SELECT * FROM WorkFlowTask WHERE FlowID=@FlowID AND GroupID=@GroupID";
  533. parameters = new SqlParameter[]{
  534. new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier){ Value = flowID },
  535. new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID }
  536. };
  537. }
  538. SqlDataReader dataReader = dbHelper.GetDataReader(sql, parameters);
  539. List<RoadFlow.Data.Model.WorkFlowTask> List = DataReaderToList(dataReader);
  540. dataReader.Close();
  541. return List;
  542. }
  543. /// <summary>
  544. /// 得到和一个任务同级的任务
  545. /// </summary>
  546. /// <param name="taskID">任务ID</param>
  547. /// <param name="isStepID">是否区分步骤ID,多步骤会签区分的是上一步骤ID</param>
  548. /// <returns></returns>
  549. public List<RoadFlow.Data.Model.WorkFlowTask> GetTaskList(Guid taskID, bool isStepID = true)
  550. {
  551. var task = Get(taskID);
  552. if (task == null)
  553. {
  554. return new List<Model.WorkFlowTask>() { };
  555. }
  556. string sql = string.Format("SELECT * FROM WorkFlowTask WHERE PrevID=@PrevID AND {0}", isStepID ? "StepID=@StepID" : "PrevStepID=@StepID");
  557. SqlParameter[] parameters1 = new SqlParameter[]{
  558. new SqlParameter("@PrevID", SqlDbType.UniqueIdentifier){ Value = task.PrevID },
  559. new SqlParameter("@StepID", SqlDbType.UniqueIdentifier){ Value = isStepID ? task.StepID : task.PrevStepID }
  560. };
  561. SqlDataReader dataReader = dbHelper.GetDataReader(sql, parameters1);
  562. List<RoadFlow.Data.Model.WorkFlowTask> List = DataReaderToList(dataReader);
  563. dataReader.Close();
  564. return List;
  565. }
  566. /// <summary>
  567. /// 得到一个任务的前一任务
  568. /// </summary>
  569. /// <param name="flowID"></param>
  570. /// <param name="groupID"></param>
  571. /// <returns></returns>
  572. public List<Model.WorkFlowTask> GetPrevTaskList(Guid taskID)
  573. {
  574. string sql = "SELECT * FROM WorkFlowTask WHERE ID=(SELECT PrevID FROM WorkFlowTask WHERE ID=@ID)";
  575. SqlParameter[] parameters = new SqlParameter[]{
  576. new SqlParameter("@ID", SqlDbType.UniqueIdentifier){ Value = taskID }
  577. };
  578. SqlDataReader dataReader = dbHelper.GetDataReader(sql, parameters);
  579. List<RoadFlow.Data.Model.WorkFlowTask> List = DataReaderToList(dataReader);
  580. dataReader.Close();
  581. return List;
  582. }
  583. /// <summary>
  584. /// 得到一个任务的后续任务
  585. /// </summary>
  586. /// <param name="flowID"></param>
  587. /// <param name="groupID"></param>
  588. /// <returns></returns>
  589. public List<Model.WorkFlowTask> GetNextTaskList(Guid taskID)
  590. {
  591. string sql = "SELECT * FROM WorkFlowTask WHERE PrevID=@PrevID";
  592. SqlParameter[] parameters = new SqlParameter[]{
  593. new SqlParameter("@PrevID", SqlDbType.UniqueIdentifier){ Value = taskID }
  594. };
  595. SqlDataReader dataReader = dbHelper.GetDataReader(sql, parameters);
  596. List<RoadFlow.Data.Model.WorkFlowTask> List = DataReaderToList(dataReader);
  597. dataReader.Close();
  598. return List;
  599. }
  600. /// <summary>
  601. /// 查询一个流程是否有任务数据
  602. /// </summary>
  603. /// <param name="flowID"></param>
  604. /// <returns></returns>
  605. public bool HasTasks(Guid flowID)
  606. {
  607. string sql = "SELECT TOP 1 ID FROM WorkFlowTask WHERE FlowID=@FlowID";
  608. SqlParameter[] parameters = new SqlParameter[]{
  609. new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier){ Value = flowID }
  610. };
  611. SqlDataReader dataReader = dbHelper.GetDataReader(sql, parameters);
  612. bool has = dataReader.HasRows;
  613. dataReader.Close();
  614. return has;
  615. }
  616. /// <summary>
  617. /// 查询一个用户在一个步骤是否有未完成任务
  618. /// </summary>
  619. /// <param name="flowID"></param>
  620. /// <returns></returns>
  621. public bool HasNoCompletedTasks(Guid flowID, Guid stepID, Guid groupID, Guid userID)
  622. {
  623. 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)";
  624. SqlParameter[] parameters = new SqlParameter[]{
  625. new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier){ Value = flowID },
  626. new SqlParameter("@StepID", SqlDbType.UniqueIdentifier){ Value = stepID },
  627. new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID },
  628. new SqlParameter("@ReceiveID", SqlDbType.UniqueIdentifier){ Value = userID }
  629. };
  630. SqlDataReader dataReader = dbHelper.GetDataReader(sql, parameters);
  631. bool has = dataReader.HasRows;
  632. dataReader.Close();
  633. return has;
  634. }
  635. /// <summary>
  636. /// 激活临时任务
  637. /// </summary>
  638. /// <param name="flowID"></param>
  639. /// <param name="stepID"></param>
  640. /// <param name="groupID"></param>
  641. /// <param name="completedTime">要求完成时间</param>
  642. /// <returns></returns>
  643. public int UpdateTempTasks(Guid flowID, Guid stepID, Guid groupID, DateTime? completedTime, DateTime receiveTime)
  644. {
  645. 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";
  646. SqlParameter[] parameters = new SqlParameter[]{
  647. !completedTime.HasValue ? new SqlParameter("@CompletedTime", SqlDbType.DateTime) { Value = DBNull.Value } :
  648. new SqlParameter("@CompletedTime", SqlDbType.DateTime) { Value = completedTime.Value },
  649. new SqlParameter("@ReceiveTime", SqlDbType.DateTime){ Value = receiveTime },
  650. new SqlParameter("@SenderTime", SqlDbType.DateTime){ Value = receiveTime },
  651. new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier){ Value = flowID },
  652. new SqlParameter("@StepID", SqlDbType.UniqueIdentifier){ Value = stepID },
  653. new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID }
  654. };
  655. return dbHelper.Execute(sql, parameters);
  656. }
  657. /// <summary>
  658. /// 删除临时任务
  659. /// </summary>
  660. /// <param name="flowID"></param>
  661. /// <param name="stepID"></param>
  662. /// <param name="groupID"></param>
  663. /// <param name="prevStepID"></param>
  664. /// <returns></returns>
  665. public int DeleteTempTasks(Guid flowID, Guid stepID, Guid groupID, Guid prevStepID)
  666. {
  667. string sql = "DELETE WorkFlowTask WHERE FlowID=@FlowID AND StepID=@StepID AND GroupID=@GroupID AND Status=-1";
  668. List<SqlParameter> parameters = new List<SqlParameter>(){
  669. new SqlParameter("@FlowID", SqlDbType.UniqueIdentifier){ Value = flowID },
  670. new SqlParameter("@StepID", SqlDbType.UniqueIdentifier){ Value = stepID },
  671. new SqlParameter("@GroupID", SqlDbType.UniqueIdentifier){ Value = groupID }
  672. };
  673. if (!prevStepID.IsEmptyGuid())
  674. {
  675. sql += " AND PrevStepID=@PrevStepID";
  676. parameters.Add(new SqlParameter("@PrevStepID", SqlDbType.UniqueIdentifier) { Value = prevStepID });
  677. }
  678. return dbHelper.Execute(sql, parameters.ToArray());
  679. }
  680. /// <summary>
  681. /// 得到一个任务的状态
  682. /// </summary>
  683. /// <param name="taskID"></param>
  684. /// <returns></returns>
  685. public int GetTaskStatus(Guid taskID)
  686. {
  687. string sql = "SELECT Status FROM WorkFlowTask WHERE ID=@ID";
  688. SqlParameter[] parameters = new SqlParameter[]{
  689. new SqlParameter("@ID", SqlDbType.UniqueIdentifier){ Value = taskID }
  690. };
  691. string status = dbHelper.GetFieldValue(sql, parameters);
  692. int s;
  693. return status.IsInt(out s) ? s : -1;
  694. }
  695. /// <summary>
  696. /// 根据SubFlowID得到一个任务
  697. /// </summary>
  698. /// <param name="subflowGroupID"></param>
  699. /// <returns></returns>
  700. public List<Model.WorkFlowTask> GetBySubFlowGroupID(Guid subflowGroupID)
  701. {
  702. string sql = "SELECT * FROM WorkFlowTask WHERE SubFlowGroupID=@SubFlowGroupID";
  703. SqlParameter[] parameters = new SqlParameter[]{
  704. new SqlParameter("@SubFlowGroupID", SqlDbType.UniqueIdentifier){ Value = subflowGroupID }
  705. };
  706. SqlDataReader dataReader = dbHelper.GetDataReader(sql, parameters);
  707. List<RoadFlow.Data.Model.WorkFlowTask> List = DataReaderToList(dataReader);
  708. dataReader.Close();
  709. return List;
  710. }
  711. }
  712. }