You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1590 lines
62 KiB

  1. using Learun.DataBase.Repository;
  2. using Learun.Util;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Linq;
  7. using System.Text;
  8. using Learun.Application.TwoDevelopment.LR_LGManager;
  9. namespace Learun.Application.WorkFlow
  10. {
  11. /// <summary>
  12. /// 版 本 Learun-ADMS V7.0.3 力软敏捷开发框架
  13. /// Copyright (c) 2013-2018 上海力软信息技术有限公司
  14. /// 创建人:力软-框架开发组
  15. /// 日 期:2018.12.07
  16. /// 描 述:流程进程
  17. /// </summary>
  18. public class NWFProcessSericve : RepositoryFactory
  19. {
  20. #region 获取数据
  21. /// <summary>
  22. /// 获取流程进程实体
  23. /// </summary>
  24. /// <param name="keyValue">主键</param>
  25. /// <returns></returns>
  26. public NWFProcessEntity GetEntity(string keyValue)
  27. {
  28. try
  29. {
  30. return this.BaseRepository().FindEntity<NWFProcessEntity>(keyValue);
  31. }
  32. catch (Exception ex)
  33. {
  34. if (ex is ExceptionEx)
  35. {
  36. throw;
  37. }
  38. else
  39. {
  40. throw ExceptionEx.ThrowServiceException(ex);
  41. }
  42. }
  43. }
  44. /// <summary>
  45. /// 获取流程进程实例
  46. /// </summary>
  47. /// <param name="processId">父流程进程主键</param>
  48. /// <param name="nodeId">节点主键</param>
  49. /// <returns></returns>
  50. public NWFProcessEntity GetEntityByProcessId(string processId, string nodeId)
  51. {
  52. try
  53. {
  54. return this.BaseRepository().FindEntity<NWFProcessEntity>(t => t.F_ParentProcessId == processId && t.F_ParentNodeId == nodeId);
  55. }
  56. catch (Exception ex)
  57. {
  58. if (ex is ExceptionEx)
  59. {
  60. throw;
  61. }
  62. else
  63. {
  64. throw ExceptionEx.ThrowServiceException(ex);
  65. }
  66. }
  67. }
  68. /// <summary>
  69. /// 获取子流程列表
  70. /// </summary>
  71. /// <param name="parentProcessId">父流程进程主键</param>
  72. /// <returns></returns>
  73. public IEnumerable<NWFProcessEntity> GetChildProcessList(string parentProcessId)
  74. {
  75. try
  76. {
  77. return this.BaseRepository().FindList<NWFProcessEntity>(t => t.F_ParentProcessId == parentProcessId);
  78. }
  79. catch (Exception ex)
  80. {
  81. if (ex is ExceptionEx)
  82. {
  83. throw;
  84. }
  85. else
  86. {
  87. throw ExceptionEx.ThrowServiceException(ex);
  88. }
  89. }
  90. }
  91. /// <summary>
  92. /// 获取流程信息列表
  93. /// </summary>
  94. /// <param name="pagination">分页参数</param>
  95. /// <param name="queryJson">查询条件</param>
  96. /// <returns></returns>
  97. public IEnumerable<NWFProcessEntity> GetPageList(Pagination pagination, string queryJson)
  98. {
  99. try
  100. {
  101. var expression = LinqExtensions.True<NWFProcessEntity>();
  102. var queryParam = queryJson.ToJObject();
  103. // 分类
  104. if (!queryParam["categoryId"].IsEmpty()) // 1:未完成 2:已完成
  105. {
  106. if (queryParam["categoryId"].ToString() == "1")
  107. {
  108. expression = expression.And(t => t.F_IsFinished == 0);
  109. }
  110. else
  111. {
  112. expression = expression.And(t => t.F_IsFinished == 1);
  113. }
  114. }
  115. //流程类别
  116. if (!queryParam["F_Category"].IsEmpty()) // 1:未完成 2:已完成
  117. {
  118. var Categofy = queryParam["F_Category"].ToString();
  119. var codeList = this.BaseRepository().FindList<NWFSchemeInfoEntity>(a => a.F_Category == Categofy).Select(a => a.F_Code);
  120. if (codeList.Count() > 0)
  121. {
  122. expression = expression.And(a => codeList.Contains(a.F_SchemeCode));
  123. }
  124. }
  125. // 操作时间
  126. if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty())
  127. {
  128. DateTime startTime = queryParam["StartTime"].ToDate();
  129. DateTime endTime = queryParam["EndTime"].ToDate();
  130. expression = expression.And(t => t.F_CreateDate >= startTime && t.F_CreateDate <= endTime);
  131. }
  132. // 关键字
  133. if (!queryParam["keyword"].IsEmpty())
  134. {
  135. string keyword = queryParam["keyword"].ToString();
  136. expression = expression.And(t => t.F_Title.Contains(keyword) || t.F_SchemeName.Contains(keyword) || t.F_CreateUserName.Contains(keyword));
  137. }
  138. expression = expression.And(t => t.F_EnabledMark != 2);
  139. expression = expression.And(t => t.F_IsChild == 0);
  140. var result = this.BaseRepository().FindList<NWFProcessEntity>(expression, pagination);
  141. return result;
  142. }
  143. catch (Exception ex)
  144. {
  145. if (ex is ExceptionEx)
  146. {
  147. throw;
  148. }
  149. else
  150. {
  151. throw ExceptionEx.ThrowServiceException(ex);
  152. }
  153. }
  154. }
  155. /// <summary>
  156. /// 获取流程信息列表
  157. /// </summary>
  158. /// <param name="pagination">分页参数</param>
  159. /// <param name="queryJson">查询条件</param>
  160. /// <returns></returns>
  161. public IEnumerable<NWFProcessEntity> GetAllList()
  162. {
  163. try
  164. {
  165. return this.BaseRepository().FindList<NWFProcessEntity>();
  166. }
  167. catch (Exception ex)
  168. {
  169. if (ex is ExceptionEx)
  170. {
  171. throw;
  172. }
  173. else
  174. {
  175. throw ExceptionEx.ThrowServiceException(ex);
  176. }
  177. }
  178. }
  179. public LC_hetongEntity GetHTInfo(string keyValue)
  180. {
  181. try
  182. {
  183. return this.BaseRepository("CollegeMIS").FindEntity<LC_hetongEntity>(a => a.LC_ID == keyValue);
  184. }
  185. catch (Exception ex)
  186. {
  187. if (ex is ExceptionEx)
  188. {
  189. throw;
  190. }
  191. else
  192. {
  193. throw ExceptionEx.ThrowServiceException(ex);
  194. }
  195. }
  196. }
  197. /// <summary>
  198. /// 获取我的流程信息列表
  199. /// </summary>
  200. /// <param name="userId">用户主键</param>
  201. /// <param name="pagination">分页参数</param>
  202. /// <param name="queryJson">查询条件</param>
  203. /// <param name="schemeCode">流程模板编码</param>
  204. /// <returns></returns>
  205. public IEnumerable<NWFProcessEntity> GetMyPageList(string userId, Pagination pagination, string queryJson, string schemeCode)
  206. {
  207. try
  208. {
  209. var expression = LinqExtensions.True<NWFProcessEntity>();
  210. var queryParam = queryJson.ToJObject();
  211. expression = expression.And(t => t.F_CreateUserId == userId);
  212. // 操作时间
  213. if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty())
  214. {
  215. DateTime startTime = queryParam["StartTime"].ToDate();
  216. DateTime endTime = queryParam["EndTime"].ToDate();
  217. expression = expression.And(t => t.F_CreateDate >= startTime && t.F_CreateDate <= endTime);
  218. }
  219. // 关键字
  220. if (!queryParam["keyword"].IsEmpty())
  221. {
  222. string keyword = queryParam["keyword"].ToString();
  223. expression = expression.And(t => t.F_Title.Contains(keyword) || t.F_SchemeName.Contains(keyword));
  224. }
  225. if (!string.IsNullOrEmpty(schemeCode))
  226. {
  227. expression = expression.And(t => t.F_SchemeCode.Equals(schemeCode));
  228. }
  229. expression = expression.And(t => t.F_IsChild == 0);
  230. var aa = this.BaseRepository().FindList<NWFProcessEntity>(expression, pagination);
  231. foreach (var item in aa)
  232. {
  233. item.F_TaskId = this.BaseRepository().FindEntity<NWFTaskEntity>(x => x.F_ProcessId == item.F_Id)?.F_Id;
  234. item.F_TaskType = this.BaseRepository().FindEntity<NWFTaskEntity>(x => x.F_ProcessId == item.F_Id)?.F_Type;
  235. item.F_TaskName = this.BaseRepository().FindEntity<NWFTaskEntity>(x => x.F_ProcessId == item.F_Id)?.F_NodeName;
  236. //合同流程审批专用 如果第一步校长审批同意的话 可以打印授权委托书
  237. if (item.F_SchemeCode == "LC_Contract_")
  238. {
  239. var entity = this.BaseRepository().FindEntity<NWFTaskLogEntity>(a =>
  240. a.F_ProcessId == item.F_Id && a.F_TaskUserId == "29add015-3638-415d-9f91-5024bd746fb5" &&
  241. a.F_OperationCode == "agree");
  242. if (null != entity)
  243. {
  244. item.LeaderIsAgree = true;
  245. }
  246. }
  247. }
  248. return aa;
  249. }
  250. catch (Exception ex)
  251. {
  252. if (ex is ExceptionEx)
  253. {
  254. throw;
  255. }
  256. else
  257. {
  258. throw ExceptionEx.ThrowServiceException(ex);
  259. }
  260. }
  261. }
  262. /// <summary>
  263. /// 获取我的流程信息列表
  264. /// </summary>
  265. /// <param name="userId">用户主键</param>
  266. /// <param name="pagination">分页参数</param>
  267. /// <param name="schemeCode">流程模板编码</param>
  268. /// <returns></returns>
  269. public IEnumerable<NWFProcessEntity> GetMyPageList(string userId, string queryJson, string schemeCode)
  270. {
  271. try
  272. {
  273. var expression = LinqExtensions.True<NWFProcessEntity>();
  274. var queryParam = queryJson.ToJObject();
  275. expression = expression.And(t => t.F_CreateUserId == userId);
  276. // 操作时间
  277. if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty())
  278. {
  279. DateTime startTime = queryParam["StartTime"].ToDate();
  280. DateTime endTime = queryParam["EndTime"].ToDate();
  281. expression = expression.And(t => t.F_CreateDate >= startTime && t.F_CreateDate <= endTime);
  282. }
  283. // 关键字
  284. if (!queryParam["keyword"].IsEmpty())
  285. {
  286. string keyword = queryParam["keyword"].ToString();
  287. expression = expression.And(t => t.F_Title.Contains(keyword) || t.F_SchemeName.Contains(keyword));
  288. }
  289. if (!string.IsNullOrEmpty(schemeCode))
  290. {
  291. expression = expression.And(t => t.F_SchemeCode.Equals(schemeCode));
  292. }
  293. expression = expression.And(t => t.F_IsChild == 0);
  294. return this.BaseRepository().FindList<NWFProcessEntity>(expression);
  295. }
  296. catch (Exception ex)
  297. {
  298. if (ex is ExceptionEx)
  299. {
  300. throw;
  301. }
  302. else
  303. {
  304. throw ExceptionEx.ThrowServiceException(ex);
  305. }
  306. }
  307. }
  308. /// <summary>
  309. /// 获取我的代办任务列表
  310. /// </summary>
  311. /// <param name="userInfo">用户信息</param>
  312. /// <param name="pagination">翻页信息</param>
  313. /// <param name="queryJson">查询条件</param>
  314. /// <param name="schemeCode">流程模板编码</param>
  315. /// <param name="isBatchAudit">true获取批量审核任务</param>
  316. /// <returns></returns>
  317. public IEnumerable<NWFProcessEntity> GetMyTaskPageList(UserInfo userInfo, Pagination pagination, string queryJson, string schemeCode, bool isBatchAudit = false)
  318. {
  319. try
  320. {
  321. string userId = userInfo.userId;
  322. var strSql = new StringBuilder();
  323. strSql.Append(@"SELECT
  324. t.F_Id AS F_TaskId,
  325. t.F_Type AS F_TaskType,
  326. t.F_NodeName AS F_TaskName,
  327. t.F_IsUrge,
  328. t.F_ModifyDate as F_CreateDate,
  329. p.F_Id,
  330. p.F_SchemeId,
  331. p.F_SchemeCode,
  332. p.F_SchemeName,
  333. p.F_Title,
  334. p.F_Level,
  335. p.F_EnabledMark,
  336. p.F_IsAgain,
  337. p.F_IsFinished,
  338. p.F_IsChild,
  339. p.F_ParentTaskId,
  340. p.F_ParentProcessId,
  341. p.F_CreateUserId,
  342. p.F_CreateUserName,
  343. p.F_IsStart
  344. FROM
  345. (
  346. SELECT
  347. F_TaskId
  348. FROM
  349. LR_NWF_TaskRelation r1
  350. LEFT JOIN LR_NWF_Task t1 ON r1.F_TaskId = t1.F_Id
  351. WHERE r1.F_Mark = 0 AND r1.F_Result = 0 AND (r1.F_UserId = @userId
  352. ");
  353. // 添加委托信息
  354. List<UserInfo> delegateList = GetDelegateProcess(userId);
  355. foreach (var item in delegateList)
  356. {
  357. string processId = "'" + item.wfProcessId.Replace(",", "','") + "'";
  358. string userI2 = "'" + item.userId + "'";
  359. strSql.Append(" OR (r1.F_UserId =" + userI2 + " AND t1.F_ProcessId in (" + processId + ") AND t1.F_Type != 2 )");
  360. }
  361. strSql.Append(@") GROUP BY
  362. F_TaskId
  363. ) r
  364. LEFT JOIN LR_NWF_Task t ON t.F_Id = r.F_TaskId
  365. LEFT JOIN LR_NWF_Process p ON p.F_Id = t.F_ProcessId
  366. WHERE
  367. t.F_IsFinished = 0 AND (p.F_IsFinished = 0 OR t.F_Type = 2 OR t.F_Type = 4 OR t.F_Type = 6)");
  368. var queryParam = queryJson.ToJObject();
  369. DateTime startTime = DateTime.Now, endTime = DateTime.Now;
  370. if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty())
  371. {
  372. startTime = queryParam["StartTime"].ToDate();
  373. endTime = queryParam["EndTime"].ToDate();
  374. strSql.Append(" AND ( t.F_ModifyDate >= @startTime AND t.F_ModifyDate <= @endTime ) ");
  375. }
  376. string keyword = "";
  377. if (!queryParam["keyword"].IsEmpty())
  378. {
  379. keyword = "%" + queryParam["keyword"].ToString() + "%";
  380. strSql.Append(" AND ( p.F_Title like @keyword OR p.F_SchemeName like @keyword ) ");
  381. }
  382. if (!string.IsNullOrEmpty(schemeCode))
  383. {
  384. strSql.Append(" AND p.F_SchemeCode = @schemeCode ");
  385. }
  386. if (isBatchAudit)
  387. {
  388. strSql.Append(" AND t.F_IsBatchAudit = 1 ");
  389. }
  390. return this.BaseRepository().FindList<NWFProcessEntity>(strSql.ToString(), new { userId, startTime, endTime, keyword, schemeCode }, pagination);
  391. }
  392. catch (Exception ex)
  393. {
  394. if (ex is ExceptionEx)
  395. {
  396. throw;
  397. }
  398. else
  399. {
  400. throw ExceptionEx.ThrowServiceException(ex);
  401. }
  402. }
  403. }
  404. /// <summary>
  405. /// 获取我的代办任务列表
  406. /// </summary>
  407. /// <param name="userInfo">用户信息</param>
  408. /// <param name="queryJson">查询条件</param>
  409. /// <param name="schemeCode">流程模板编码</param>
  410. /// <param name="isBatchAudit">true获取批量审核任务</param>
  411. /// <returns></returns>
  412. public IEnumerable<NWFProcessEntity> GetMyTaskPageList(UserInfo userInfo, string queryJson, string schemeCode, bool isBatchAudit = false)
  413. {
  414. try
  415. {
  416. string userId = userInfo.userId;
  417. var strSql = new StringBuilder();
  418. strSql.Append(@"SELECT
  419. t.F_Id AS F_TaskId,
  420. t.F_Type AS F_TaskType,
  421. t.F_NodeName AS F_TaskName,
  422. t.F_IsUrge,
  423. t.F_ModifyDate as F_CreateDate,
  424. p.F_Id,
  425. p.F_SchemeId,
  426. p.F_SchemeCode,
  427. p.F_SchemeName,
  428. p.F_Title,
  429. p.F_Level,
  430. p.F_EnabledMark,
  431. p.F_IsAgain,
  432. p.F_IsFinished,
  433. p.F_IsChild,
  434. p.F_ParentTaskId,
  435. p.F_ParentProcessId,
  436. p.F_CreateUserId,
  437. p.F_CreateUserName,
  438. p.F_IsStart
  439. FROM
  440. (
  441. SELECT
  442. F_TaskId
  443. FROM
  444. LR_NWF_TaskRelation r1
  445. LEFT JOIN LR_NWF_Task t1 ON r1.F_TaskId = t1.F_Id
  446. WHERE r1.F_Mark = 0 AND r1.F_Result = 0 AND (r1.F_UserId = @userId
  447. ");
  448. // 添加委托信息
  449. List<UserInfo> delegateList = GetDelegateProcess(userId);
  450. foreach (var item in delegateList)
  451. {
  452. string processId = "'" + item.wfProcessId.Replace(",", "','") + "'";
  453. string userI2 = "'" + item.userId + "'";
  454. strSql.Append(" OR (r1.F_UserId =" + userI2 + " AND t1.F_ProcessId in (" + processId + ") AND t1.F_Type != 2 )");
  455. }
  456. strSql.Append(@") GROUP BY
  457. F_TaskId
  458. ) r
  459. LEFT JOIN LR_NWF_Task t ON t.F_Id = r.F_TaskId
  460. LEFT JOIN LR_NWF_Process p ON p.F_Id = t.F_ProcessId
  461. WHERE
  462. t.F_IsFinished = 0 AND (p.F_IsFinished = 0 OR t.F_Type = 2 OR t.F_Type = 4 OR t.F_Type = 6)");
  463. var queryParam = queryJson.ToJObject();
  464. DateTime startTime = DateTime.Now, endTime = DateTime.Now;
  465. if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty())
  466. {
  467. startTime = queryParam["StartTime"].ToDate();
  468. endTime = queryParam["EndTime"].ToDate();
  469. strSql.Append(" AND ( t.F_ModifyDate >= @startTime AND t.F_ModifyDate <= @endTime ) ");
  470. }
  471. string keyword = "";
  472. if (!queryParam["keyword"].IsEmpty())
  473. {
  474. keyword = "%" + queryParam["keyword"].ToString() + "%";
  475. strSql.Append(" AND ( p.F_Title like @keyword OR p.F_SchemeName like @keyword ) ");
  476. }
  477. if (!string.IsNullOrEmpty(schemeCode))
  478. {
  479. strSql.Append(" AND p.F_SchemeCode = @schemeCode ");
  480. }
  481. if (isBatchAudit)
  482. {
  483. strSql.Append(" AND t.F_IsBatchAudit = 1 ");
  484. }
  485. return this.BaseRepository().FindList<NWFProcessEntity>(strSql.ToString(), new { userId, startTime, endTime, keyword, schemeCode });
  486. }
  487. catch (Exception ex)
  488. {
  489. if (ex is ExceptionEx)
  490. {
  491. throw;
  492. }
  493. else
  494. {
  495. throw ExceptionEx.ThrowServiceException(ex);
  496. }
  497. }
  498. }
  499. /// <summary>
  500. /// 获取我的已办任务列表
  501. /// </summary>
  502. /// <param name="userId">用户主键</param>
  503. /// <param name="pagination">翻页信息</param>
  504. /// <param name="queryJson">查询条件</param>
  505. /// <param name="schemeCode">流程模板编码</param>
  506. /// <returns></returns>
  507. public IEnumerable<NWFProcessEntity> GetMyFinishTaskPageList(UserInfo userInfo, Pagination pagination, string queryJson, string schemeCode)
  508. {
  509. try
  510. {
  511. var strSql = new StringBuilder();
  512. strSql.Append(@"SELECT
  513. t.F_Id AS F_TaskId,
  514. t.F_Type AS F_TaskType,
  515. t.F_NodeName AS F_TaskName,
  516. r.F_Time as F_CreateDate,
  517. p.F_Id,
  518. p.F_SchemeId,
  519. p.F_SchemeCode,
  520. p.F_SchemeName,
  521. p.F_Title,
  522. p.F_Level,
  523. p.F_EnabledMark,
  524. p.F_IsAgain,
  525. p.F_IsFinished,
  526. p.F_IsChild,
  527. p.F_ParentTaskId,
  528. p.F_ParentProcessId,
  529. p.F_CreateUserId,
  530. p.F_CreateUserName,
  531. p.F_IsStart,
  532. t.F_NodeId
  533. FROM
  534. LR_NWF_Task t
  535. LEFT JOIN LR_NWF_TaskRelation r on r.F_TaskId = t.F_Id
  536. LEFT JOIN LR_NWF_Process p ON t.F_ProcessId = p.F_Id
  537. WHERE
  538. (r.F_Result = 1 OR r.F_Result = 2 OR r.F_Result = 4) AND r.F_UserId = @userId
  539. ");
  540. var queryParam = queryJson.ToJObject();
  541. DateTime startTime = DateTime.Now, endTime = DateTime.Now;
  542. if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty())
  543. {
  544. startTime = queryParam["StartTime"].ToDate();
  545. endTime = queryParam["EndTime"].ToDate();
  546. strSql.Append(" AND ( r.F_Time >= @startTime AND r.F_Time <= @endTime ) ");
  547. }
  548. string keyword = "";
  549. if (!queryParam["keyword"].IsEmpty())
  550. {
  551. keyword = "%" + queryParam["keyword"].ToString() + "%";
  552. strSql.Append(" AND ( p.F_ProcessName like @keyword OR p.F_SchemeName like @keyword ) ");
  553. }
  554. if (!string.IsNullOrEmpty(schemeCode))
  555. {
  556. strSql.Append(" AND p.F_SchemeCode = @schemeCode ");
  557. }
  558. var data = this.BaseRepository().FindList<NWFProcessEntity>(strSql.ToString(), new { userInfo.userId, startTime, endTime, keyword, schemeCode }, pagination);
  559. foreach (var item in data)
  560. {
  561. var nextNode = this.BaseRepository().FindEntity<NWFTaskLogEntity>(a =>
  562. a.F_ProcessId == item.F_Id && a.F_PrevNodeId == item.F_NodeId);
  563. if (null != nextNode)
  564. {
  565. item.NextNodeIsAudited = true;
  566. }
  567. }
  568. return data;
  569. }
  570. catch (Exception ex)
  571. {
  572. if (ex is ExceptionEx)
  573. {
  574. throw;
  575. }
  576. else
  577. {
  578. throw ExceptionEx.ThrowServiceException(ex);
  579. }
  580. }
  581. }
  582. /// <summary>
  583. /// 获取我的已办任务列表
  584. /// </summary>
  585. /// <param name="userId">用户主键</param>
  586. /// <param name="queryJson">查询条件</param>
  587. /// <param name="schemeCode">流程模板编码</param>
  588. /// <returns></returns>
  589. public IEnumerable<NWFProcessEntity> GetMyFinishTaskPageList(UserInfo userInfo, string queryJson, string schemeCode)
  590. {
  591. try
  592. {
  593. var strSql = new StringBuilder();
  594. strSql.Append(@"SELECT
  595. t.F_Id AS F_TaskId,
  596. t.F_Type AS F_TaskType,
  597. t.F_NodeName AS F_TaskName,
  598. r.F_Time as F_CreateDate,
  599. p.F_Id,
  600. p.F_SchemeId,
  601. p.F_SchemeCode,
  602. p.F_SchemeName,
  603. p.F_Title,
  604. p.F_Level,
  605. p.F_EnabledMark,
  606. p.F_IsAgain,
  607. p.F_IsFinished,
  608. p.F_IsChild,
  609. p.F_ParentTaskId,
  610. p.F_ParentProcessId,
  611. p.F_CreateUserId,
  612. p.F_CreateUserName,
  613. p.F_IsStart
  614. FROM
  615. LR_NWF_Task t
  616. LEFT JOIN LR_NWF_TaskRelation r on r.F_TaskId = t.F_Id
  617. LEFT JOIN LR_NWF_Process p ON t.F_ProcessId = p.F_Id
  618. WHERE
  619. (r.F_Result = 1 OR r.F_Result = 2 OR r.F_Result = 4) AND r.F_UserId = @userId
  620. ");
  621. var queryParam = queryJson.ToJObject();
  622. DateTime startTime = DateTime.Now, endTime = DateTime.Now;
  623. if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty())
  624. {
  625. startTime = queryParam["StartTime"].ToDate();
  626. endTime = queryParam["EndTime"].ToDate();
  627. strSql.Append(" AND ( r.F_Time >= @startTime AND r.F_Time <= @endTime ) ");
  628. }
  629. string keyword = "";
  630. if (!queryParam["keyword"].IsEmpty())
  631. {
  632. keyword = "%" + queryParam["keyword"].ToString() + "%";
  633. strSql.Append(" AND ( p.F_ProcessName like @keyword OR p.F_SchemeName like @keyword ) ");
  634. }
  635. if (!string.IsNullOrEmpty(schemeCode))
  636. {
  637. strSql.Append(" AND p.F_SchemeCode = @schemeCode ");
  638. }
  639. return this.BaseRepository().FindList<NWFProcessEntity>(strSql.ToString(), new { userInfo.userId, startTime, endTime, keyword, schemeCode });
  640. }
  641. catch (Exception ex)
  642. {
  643. if (ex is ExceptionEx)
  644. {
  645. throw;
  646. }
  647. else
  648. {
  649. throw ExceptionEx.ThrowServiceException(ex);
  650. }
  651. }
  652. }
  653. /// <summary>
  654. /// 获取委托人关联的流程进程列表
  655. /// </summary>
  656. /// <param name="userId">当前用户主键</param>
  657. /// <returns></returns>
  658. public List<UserInfo> GetDelegateProcess(string userId)
  659. {
  660. try
  661. {
  662. List<UserInfo> delegateUserlist = new List<UserInfo>();
  663. DateTime datatime = DateTime.Now;
  664. IEnumerable<NWFDelegateRuleEntity> wfDelegateRuleList = this.BaseRepository().FindList<NWFDelegateRuleEntity>(t => t.F_ToUserId == userId && t.F_BeginDate <= datatime && t.F_EndDate >= datatime);
  665. foreach (var item in wfDelegateRuleList)
  666. {
  667. UserInfo userinfo = new UserInfo();
  668. userinfo.userId = item.F_CreateUserId;
  669. var strSql = new StringBuilder();
  670. strSql.Append(@"SELECT
  671. p.F_Id
  672. FROM
  673. LR_NWF_DelegateRelation d
  674. LEFT JOIN LR_NWF_SchemeInfo s ON s.F_Id = d.F_SchemeInfoId
  675. LEFT JOIN LR_NWF_Process p ON p.F_SchemeCode = s.F_Code
  676. WHERE
  677. p.F_Id IS NOT NULL
  678. AND p.F_IsFinished = 0
  679. AND d.F_DelegateRuleId = @DelegateRuleId ");
  680. DataTable dt = this.BaseRepository().FindTable(strSql.ToString(), new { DelegateRuleId = item.F_Id });
  681. userinfo.wfProcessId = "";
  682. foreach (DataRow dr in dt.Rows)
  683. {
  684. if (!string.IsNullOrEmpty(dr[0].ToString()))
  685. {
  686. if (!string.IsNullOrEmpty(userinfo.wfProcessId))
  687. {
  688. userinfo.wfProcessId += ",";
  689. }
  690. userinfo.wfProcessId += dr[0].ToString();
  691. }
  692. }
  693. if (!string.IsNullOrEmpty(userinfo.wfProcessId))
  694. {
  695. delegateUserlist.Add(userinfo);
  696. }
  697. }
  698. return delegateUserlist;
  699. }
  700. catch (Exception ex)
  701. {
  702. if (ex is ExceptionEx)
  703. {
  704. throw;
  705. }
  706. else
  707. {
  708. throw ExceptionEx.ThrowServiceException(ex);
  709. }
  710. }
  711. }
  712. #region 获取sql语句
  713. /// <summary>
  714. /// 获取我的流程信息列表SQL语句
  715. /// </summary>
  716. /// <returns></returns>
  717. public string GetMySql()
  718. {
  719. try
  720. {
  721. var strSql = new StringBuilder();
  722. strSql.Append(@"SELECT
  723. p.F_CreateDate,
  724. p.F_Id,
  725. p.F_SchemeId,
  726. p.F_SchemeCode,
  727. p.F_SchemeName,
  728. p.F_Title,
  729. p.F_Level,
  730. p.F_EnabledMark,
  731. p.F_IsAgain,
  732. p.F_IsFinished,
  733. p.F_IsChild,
  734. p.F_ParentTaskId,
  735. p.F_ParentProcessId,
  736. p.F_CreateUserId,
  737. p.F_CreateUserName,
  738. p.F_IsStart
  739. FROM
  740. LR_NWF_Process p
  741. WHERE
  742. p.F_CreateUserId = @userId AND p.F_IsChild = 0
  743. ");
  744. return strSql.ToString();
  745. }
  746. catch (Exception ex)
  747. {
  748. if (ex is ExceptionEx)
  749. {
  750. throw;
  751. }
  752. else
  753. {
  754. throw ExceptionEx.ThrowServiceException(ex);
  755. }
  756. }
  757. }
  758. /// <summary>
  759. /// 获取我的代办任务列表SQL语句
  760. /// </summary>
  761. /// <param name="userInfo">用户信息</param>
  762. /// <param name="isBatchAudit">true获取批量审核任务</param>
  763. /// <returns></returns>
  764. public string GetMyTaskSql(UserInfo userInfo, bool isBatchAudit = false)
  765. {
  766. try
  767. {
  768. var strSql = new StringBuilder();
  769. strSql.Append(@"SELECT
  770. t.F_Id AS F_TaskId,
  771. t.F_Type AS F_TaskType,
  772. t.F_NodeName AS F_TaskName,
  773. t.F_IsUrge,
  774. t.F_ModifyDate as F_CreateDate,
  775. p.F_Id,
  776. p.F_SchemeId,
  777. p.F_SchemeCode,
  778. p.F_SchemeName,
  779. p.F_Title,
  780. p.F_Level,
  781. p.F_EnabledMark,
  782. p.F_IsAgain,
  783. p.F_IsFinished,
  784. p.F_IsChild,
  785. p.F_ParentTaskId,
  786. p.F_ParentProcessId,
  787. p.F_CreateUserId,
  788. p.F_CreateUserName,
  789. p.F_IsStart
  790. FROM
  791. (
  792. SELECT
  793. F_TaskId
  794. FROM
  795. LR_NWF_TaskRelation r1
  796. LEFT JOIN LR_NWF_Task t1 ON r1.F_TaskId = t1.F_Id
  797. WHERE r1.F_Mark = 0 AND r1.F_Result = 0 AND (r1.F_UserId = @userId
  798. ");
  799. // 添加委托信息
  800. List<UserInfo> delegateList = GetDelegateProcess(userInfo.userId);
  801. foreach (var item in delegateList)
  802. {
  803. string processId = "'" + item.wfProcessId.Replace(",", "','") + "'";
  804. string userI2 = "'" + item.userId + "'";
  805. strSql.Append(" OR (r1.F_UserId =" + userI2 + " AND t1.F_ProcessId in (" + processId + ") AND t1.F_Type != 2 )");
  806. }
  807. strSql.Append(@") GROUP BY
  808. F_TaskId
  809. ) r
  810. LEFT JOIN LR_NWF_Task t ON t.F_Id = r.F_TaskId
  811. LEFT JOIN LR_NWF_Process p ON p.F_Id = t.F_ProcessId
  812. WHERE
  813. t.F_IsFinished = 0 AND (p.F_IsFinished = 0 OR t.F_Type = 2)");
  814. if (isBatchAudit)
  815. {
  816. strSql.Append(" AND t.F_IsBatchAudit = 1 ");
  817. }
  818. return strSql.ToString();
  819. }
  820. catch (Exception ex)
  821. {
  822. if (ex is ExceptionEx)
  823. {
  824. throw;
  825. }
  826. else
  827. {
  828. throw ExceptionEx.ThrowServiceException(ex);
  829. }
  830. }
  831. }
  832. /// <summary>
  833. /// 获取我的已办任务列表SQL语句
  834. /// </summary>
  835. /// <returns></returns>
  836. public string GetMyFinishTaskSql()
  837. {
  838. try
  839. {
  840. var strSql = new StringBuilder();
  841. strSql.Append(@"SELECT
  842. t.F_Id AS F_TaskId,
  843. t.F_Type AS F_TaskType,
  844. t.F_NodeName AS F_TaskName,
  845. r.F_Time as F_CreateDate,
  846. p.F_Id,
  847. p.F_SchemeId,
  848. p.F_SchemeCode,
  849. p.F_SchemeName,
  850. p.F_Title,
  851. p.F_Level,
  852. p.F_EnabledMark,
  853. p.F_IsAgain,
  854. p.F_IsFinished,
  855. p.F_IsChild,
  856. p.F_ParentTaskId,
  857. p.F_ParentProcessId,
  858. p.F_CreateUserId,
  859. p.F_CreateUserName,
  860. p.F_IsStart
  861. FROM
  862. LR_NWF_Task t
  863. LEFT JOIN LR_NWF_TaskRelation r on r.F_TaskId = t.F_Id
  864. LEFT JOIN LR_NWF_Process p ON t.F_ProcessId = p.F_Id
  865. WHERE
  866. (r.F_Result = 1 OR r.F_Result = 2 OR r.F_Result = 4) AND r.F_UserId = @userId
  867. ");
  868. return strSql.ToString();
  869. }
  870. catch (Exception ex)
  871. {
  872. if (ex is ExceptionEx)
  873. {
  874. throw;
  875. }
  876. else
  877. {
  878. throw ExceptionEx.ThrowServiceException(ex);
  879. }
  880. }
  881. }
  882. #endregion
  883. #endregion
  884. #region 保存信息
  885. /// <summary>
  886. /// 保存流程进程数据
  887. /// </summary>
  888. /// <param name="nWFProcessEntity">流程进程</param>
  889. /// <param name="taskList">流程任务列表</param>
  890. /// <param name="taskMsgList">流程消息列表</param>
  891. /// <param name="taskLogEntity">任务日志</param>
  892. public void Save(NWFProcessEntity nWFProcessEntity, List<NWFTaskEntity> taskList, List<NWFTaskMsgEntity> taskMsgList, NWFTaskLogEntity taskLogEntity)
  893. {
  894. NWFProcessEntity nWFProcessEntityTmp = this.BaseRepository().FindEntity<NWFProcessEntity>(nWFProcessEntity.F_Id);
  895. var db = this.BaseRepository().BeginTrans();
  896. try
  897. {
  898. if (nWFProcessEntityTmp == null)
  899. {
  900. db.Insert(nWFProcessEntity);
  901. }
  902. else
  903. {
  904. db.Update(nWFProcessEntity);
  905. }
  906. foreach (var task in taskList)
  907. {
  908. task.F_ModifyDate = DateTime.Now;
  909. db.Insert(task);
  910. int num = 1;
  911. if (task.nWFUserInfoList != null)
  912. {
  913. foreach (var taskUser in task.nWFUserInfoList)
  914. {
  915. NWFTaskRelationEntity nWFTaskRelationEntity = new NWFTaskRelationEntity();
  916. nWFTaskRelationEntity.Create();
  917. nWFTaskRelationEntity.F_TaskId = task.F_Id;
  918. nWFTaskRelationEntity.F_UserId = taskUser.Id;
  919. nWFTaskRelationEntity.F_Mark = taskUser.Mark;
  920. nWFTaskRelationEntity.F_Result = 0;
  921. nWFTaskRelationEntity.F_Sort = num;
  922. db.Insert(nWFTaskRelationEntity);
  923. num++;
  924. }
  925. }
  926. }
  927. foreach (var taskMsg in taskMsgList)
  928. {
  929. db.Insert(taskMsg);
  930. }
  931. db.Insert(taskLogEntity);
  932. db.Commit();
  933. }
  934. catch (Exception ex)
  935. {
  936. db.Rollback();
  937. if (ex is ExceptionEx)
  938. {
  939. throw;
  940. }
  941. else
  942. {
  943. throw ExceptionEx.ThrowServiceException(ex);
  944. }
  945. }
  946. }
  947. /// <summary>
  948. /// 保存流程进程信息
  949. /// </summary>
  950. /// <param name="taskLogEntity">任务日志</param>
  951. /// <param name="taskRelationEntity">任务执行人状态更新</param>
  952. /// <param name="taskEntityUpdate">任务状态更新</param>
  953. /// <param name="processEntity">流程进程状态更新</param>
  954. /// <param name="confluenceList">会签信息</param>
  955. /// <param name="closeTaskList">会签需要关闭的任务</param>
  956. /// <param name="taskList">新的任务列表</param>
  957. /// <param name="taskMsgList">新的任务消息列表</param>
  958. public void Save(NWFTaskLogEntity taskLogEntity, NWFTaskRelationEntity taskRelationEntity, NWFTaskEntity taskEntityUpdate, NWFProcessEntity processEntity, List<NWFConfluenceEntity> confluenceList, List<NWFTaskEntity> closeTaskList, List<NWFTaskEntity> taskList, List<NWFTaskMsgEntity> taskMsgList, NWFProcessEntity pProcessEntity = null)
  959. {
  960. var db = this.BaseRepository().BeginTrans();
  961. try
  962. {
  963. db.Insert(taskLogEntity);
  964. if (taskRelationEntity != null)
  965. db.Update(taskRelationEntity);
  966. db.Update(taskEntityUpdate);
  967. if (processEntity != null)
  968. {
  969. db.Update(processEntity);
  970. }
  971. if (pProcessEntity != null)
  972. {
  973. db.Update(pProcessEntity);
  974. }
  975. if (confluenceList != null)
  976. {
  977. foreach (var item in confluenceList)
  978. {
  979. if (item.isClear)
  980. {
  981. string processId = item.F_ProcessId;
  982. string nodeId = item.F_NodeId;
  983. db.Delete<NWFConfluenceEntity>(t => t.F_ProcessId == processId && t.F_NodeId == nodeId);
  984. // 增加一条会签审核记录
  985. NWFTaskLogEntity nWFTaskLogEntity = new NWFTaskLogEntity()
  986. {
  987. F_ProcessId = processId,
  988. F_OperationCode = "confluence",
  989. F_OperationName = "会签" + (item.confluenceRes == 1 ? "通过" : "不通过"),
  990. F_NodeId = item.F_NodeId,
  991. F_TaskType = 7
  992. };
  993. nWFTaskLogEntity.Create();
  994. db.Insert(nWFTaskLogEntity);
  995. }
  996. else
  997. {
  998. db.Insert(item);
  999. }
  1000. }
  1001. }
  1002. if (closeTaskList != null)
  1003. {
  1004. foreach (var item in closeTaskList)
  1005. {
  1006. db.Update(item);
  1007. }
  1008. }
  1009. foreach (var task in taskList)
  1010. {
  1011. task.F_ModifyDate = DateTime.Now;
  1012. db.Insert(task);
  1013. int num = 1;
  1014. if (task.nWFUserInfoList != null)
  1015. {
  1016. foreach (var taskUser in task.nWFUserInfoList)
  1017. {
  1018. NWFTaskRelationEntity nWFTaskRelationEntity = new NWFTaskRelationEntity();
  1019. nWFTaskRelationEntity.Create();
  1020. nWFTaskRelationEntity.F_TaskId = task.F_Id;
  1021. nWFTaskRelationEntity.F_UserId = taskUser.Id;
  1022. nWFTaskRelationEntity.F_Mark = taskUser.Mark;
  1023. nWFTaskRelationEntity.F_Result = 0;
  1024. nWFTaskRelationEntity.F_Sort = num;
  1025. db.Insert(nWFTaskRelationEntity);
  1026. num++;
  1027. }
  1028. }
  1029. }
  1030. foreach (var taskMsg in taskMsgList)
  1031. {
  1032. db.Insert(taskMsg);
  1033. }
  1034. db.Commit();
  1035. }
  1036. catch (Exception ex)
  1037. {
  1038. db.Rollback();
  1039. if (ex is ExceptionEx)
  1040. {
  1041. throw;
  1042. }
  1043. else
  1044. {
  1045. throw ExceptionEx.ThrowServiceException(ex);
  1046. }
  1047. }
  1048. }
  1049. /// <summary>
  1050. /// 保存流程进程数据
  1051. /// </summary>
  1052. /// <param name="nWFProcessEntity">流程进程</param>
  1053. public void Save(NWFProcessEntity nWFProcessEntity)
  1054. {
  1055. try
  1056. {
  1057. this.BaseRepository().Insert(nWFProcessEntity);
  1058. }
  1059. catch (Exception ex)
  1060. {
  1061. if (ex is ExceptionEx)
  1062. {
  1063. throw;
  1064. }
  1065. else
  1066. {
  1067. throw ExceptionEx.ThrowServiceException(ex);
  1068. }
  1069. }
  1070. }
  1071. /// <summary>
  1072. /// 保存流程进程数据
  1073. /// </summary>
  1074. /// <param name="nWFTaskLogEntity">任务日志数据</param>
  1075. /// <param name="taskUserUpdateList">任务执行人需要更新状态数据</param>
  1076. /// <param name="nWFTaskMsgEntity">任务消息</param>
  1077. public void Save(NWFTaskLogEntity nWFTaskLogEntity, List<NWFTaskRelationEntity> taskUserUpdateList, NWFTaskMsgEntity nWFTaskMsgEntity)
  1078. {
  1079. var db = this.BaseRepository().BeginTrans();
  1080. try
  1081. {
  1082. db.Insert(nWFTaskLogEntity);
  1083. foreach (var item in taskUserUpdateList)
  1084. {
  1085. db.Update(item);
  1086. }
  1087. db.Insert(nWFTaskMsgEntity);
  1088. db.Commit();
  1089. }
  1090. catch (Exception ex)
  1091. {
  1092. db.Rollback();
  1093. if (ex is ExceptionEx)
  1094. {
  1095. throw;
  1096. }
  1097. else
  1098. {
  1099. throw ExceptionEx.ThrowServiceException(ex);
  1100. }
  1101. }
  1102. }
  1103. /// <summary>
  1104. /// 保存流程进程数据
  1105. /// </summary>
  1106. /// <param name="nWFTaskLogEntity">任务日志数据</param>
  1107. /// <param name="nWFTaskRelationEntity">任务执行人需要更新状态数据</param>
  1108. /// <param name="taskEntity">任务</param>
  1109. public void Save(NWFTaskLogEntity nWFTaskLogEntity, NWFTaskRelationEntity nWFTaskRelationEntity, NWFTaskEntity taskEntity)
  1110. {
  1111. var db = this.BaseRepository().BeginTrans();
  1112. try
  1113. {
  1114. db.Insert(nWFTaskLogEntity);
  1115. db.Update(nWFTaskRelationEntity);
  1116. if (taskEntity != null)
  1117. {
  1118. taskEntity.F_ModifyDate = DateTime.Now;
  1119. db.Update(taskEntity);
  1120. }
  1121. db.Commit();
  1122. }
  1123. catch (Exception ex)
  1124. {
  1125. db.Rollback();
  1126. if (ex is ExceptionEx)
  1127. {
  1128. throw;
  1129. }
  1130. else
  1131. {
  1132. throw ExceptionEx.ThrowServiceException(ex);
  1133. }
  1134. }
  1135. }
  1136. /// <summary>
  1137. /// 保存流程进程数据
  1138. /// </summary>
  1139. /// <param name="nWFTaskLogEntity">任务日志数据</param>
  1140. /// <param name="taskList">需要更新的任务列表</param>
  1141. /// <param name="taskMsgList">任务消息列表</param>
  1142. public void Save(NWFTaskLogEntity nWFTaskLogEntity, List<NWFTaskEntity> taskList, List<NWFTaskMsgEntity> taskMsgList)
  1143. {
  1144. var db = this.BaseRepository().BeginTrans();
  1145. try
  1146. {
  1147. db.Insert(nWFTaskLogEntity);
  1148. foreach (var item in taskList)
  1149. {
  1150. item.F_ModifyDate = DateTime.Now;
  1151. db.Update(item);
  1152. }
  1153. foreach (var item in taskMsgList)
  1154. {
  1155. db.Insert(item);
  1156. }
  1157. db.Commit();
  1158. }
  1159. catch (Exception ex)
  1160. {
  1161. db.Rollback();
  1162. if (ex is ExceptionEx)
  1163. {
  1164. throw;
  1165. }
  1166. else
  1167. {
  1168. throw ExceptionEx.ThrowServiceException(ex);
  1169. }
  1170. }
  1171. }
  1172. /// <summary>
  1173. /// 保存流程进程数据
  1174. /// </summary>
  1175. /// <param name="nWFTaskLogEntity">任务日志数据</param>
  1176. /// <param name="taskList">需要更新的任务列表</param>
  1177. /// <param name="taskMsgList">任务消息列表</param>
  1178. public void Save(NWFTaskLogEntity nWFTaskLogEntity, NWFTaskEntity task, List<NWFTaskMsgEntity> taskMsgList)
  1179. {
  1180. var db = this.BaseRepository().BeginTrans();
  1181. try
  1182. {
  1183. db.Insert(nWFTaskLogEntity);
  1184. task.F_ModifyDate = DateTime.Now;
  1185. db.Update(task);
  1186. foreach (var item in taskMsgList)
  1187. {
  1188. db.Insert(item);
  1189. }
  1190. db.Commit();
  1191. }
  1192. catch (Exception ex)
  1193. {
  1194. db.Rollback();
  1195. if (ex is ExceptionEx)
  1196. {
  1197. throw;
  1198. }
  1199. else
  1200. {
  1201. throw ExceptionEx.ThrowServiceException(ex);
  1202. }
  1203. }
  1204. }
  1205. /// <summary>
  1206. /// 保存流程进程信息
  1207. /// </summary>
  1208. /// <param name="taskLogEntity">任务日志</param>
  1209. /// <param name="taskRelationEntity">任务执行人状态更新</param>
  1210. /// <param name="taskEntityUpdate">任务状态更新</param>
  1211. /// <param name="processEntity">流程进程状态更新</param>
  1212. /// <param name="taskList">新的任务列表</param>
  1213. /// <param name="taskMsgList">新的任务消息列表</param>
  1214. public void Save(NWFTaskLogEntity pTaskLogEntity, NWFTaskRelationEntity pTaskRelationEntity, NWFTaskEntity pTaskEntityUpdate, NWFProcessEntity pProcessEntity, List<NWFTaskEntity> pTaskList, List<NWFTaskMsgEntity> pTaskMsgList, NWFProcessEntity nWFProcessEntity, List<NWFTaskEntity> taskList, List<NWFTaskMsgEntity> taskMsgList, NWFTaskLogEntity taskLogEntity)
  1215. {
  1216. NWFProcessEntity nWFProcessEntityTmp = this.BaseRepository().FindEntity<NWFProcessEntity>(nWFProcessEntity.F_Id);
  1217. IEnumerable<NWFTaskEntity> uTaskList = this.BaseRepository().FindList<NWFTaskEntity>(t => t.F_ProcessId == nWFProcessEntity.F_Id && t.F_NodeId == taskLogEntity.F_NodeId && t.F_IsFinished == 0);
  1218. var db = this.BaseRepository().BeginTrans();
  1219. try
  1220. {
  1221. if (nWFProcessEntityTmp == null)
  1222. {
  1223. db.Insert(nWFProcessEntity);
  1224. }
  1225. else
  1226. {
  1227. db.Update(nWFProcessEntity);
  1228. }
  1229. foreach (var task in taskList)
  1230. {
  1231. task.F_ModifyDate = DateTime.Now;
  1232. db.Insert(task);
  1233. int num = 1;
  1234. if (task.nWFUserInfoList != null)
  1235. {
  1236. foreach (var taskUser in task.nWFUserInfoList)
  1237. {
  1238. NWFTaskRelationEntity nWFTaskRelationEntity = new NWFTaskRelationEntity();
  1239. nWFTaskRelationEntity.Create();
  1240. nWFTaskRelationEntity.F_TaskId = task.F_Id;
  1241. nWFTaskRelationEntity.F_UserId = taskUser.Id;
  1242. nWFTaskRelationEntity.F_Mark = taskUser.Mark;
  1243. nWFTaskRelationEntity.F_Result = 0;
  1244. nWFTaskRelationEntity.F_Sort = num;
  1245. db.Insert(nWFTaskRelationEntity);
  1246. num++;
  1247. }
  1248. }
  1249. }
  1250. foreach (var taskMsg in taskMsgList)
  1251. {
  1252. db.Insert(taskMsg);
  1253. }
  1254. db.Insert(taskLogEntity);
  1255. foreach (var item in uTaskList)
  1256. {
  1257. item.F_IsFinished = 1;
  1258. db.Update(item);
  1259. }
  1260. // 父流程
  1261. db.Insert(pTaskLogEntity);
  1262. db.Update(pTaskRelationEntity);
  1263. db.Update(pTaskEntityUpdate);
  1264. if (pProcessEntity != null)
  1265. {
  1266. db.Update(pProcessEntity);
  1267. }
  1268. foreach (var task in pTaskList)
  1269. {
  1270. task.F_ModifyDate = DateTime.Now;
  1271. db.Insert(task);
  1272. int num = 1;
  1273. if (task.nWFUserInfoList != null)
  1274. {
  1275. foreach (var taskUser in task.nWFUserInfoList)
  1276. {
  1277. NWFTaskRelationEntity nWFTaskRelationEntity = new NWFTaskRelationEntity();
  1278. nWFTaskRelationEntity.Create();
  1279. nWFTaskRelationEntity.F_TaskId = task.F_Id;
  1280. nWFTaskRelationEntity.F_UserId = taskUser.Id;
  1281. nWFTaskRelationEntity.F_Mark = taskUser.Mark;
  1282. nWFTaskRelationEntity.F_Result = 0;
  1283. nWFTaskRelationEntity.F_Sort = num;
  1284. db.Insert(nWFTaskRelationEntity);
  1285. num++;
  1286. }
  1287. }
  1288. }
  1289. foreach (var taskMsg in pTaskMsgList)
  1290. {
  1291. db.Insert(taskMsg);
  1292. }
  1293. db.Commit();
  1294. }
  1295. catch (Exception ex)
  1296. {
  1297. db.Rollback();
  1298. if (ex is ExceptionEx)
  1299. {
  1300. throw;
  1301. }
  1302. else
  1303. {
  1304. throw ExceptionEx.ThrowServiceException(ex);
  1305. }
  1306. }
  1307. }
  1308. /// <summary>
  1309. /// (流程撤销)
  1310. /// </summary>
  1311. /// <param name="processId">流程进程实例</param>
  1312. /// <param name="taskList">流程任务列表</param>
  1313. /// <param name="EnabledMark">2草稿3作废</param>
  1314. public void Save(string processId, IEnumerable<NWFTaskEntity> taskList, int EnabledMark, NWFTaskLogEntity nWFTaskLogEntity = null)
  1315. {
  1316. var db = this.BaseRepository().BeginTrans();
  1317. try
  1318. {
  1319. NWFProcessEntity nWFProcessEntity = new NWFProcessEntity();
  1320. nWFProcessEntity.F_Id = processId;
  1321. nWFProcessEntity.F_EnabledMark = EnabledMark;
  1322. db.Update(nWFProcessEntity);
  1323. if (EnabledMark == 2)
  1324. {
  1325. db.Delete<NWFTaskLogEntity>(t => t.F_ProcessId == processId);
  1326. }
  1327. foreach (var task in taskList)
  1328. {
  1329. db.Delete(task);
  1330. string taskId = task.F_Id;
  1331. db.Delete<NWFTaskMsgEntity>(t => t.F_TaskId == taskId);
  1332. db.Delete<NWFTaskRelationEntity>(t => t.F_TaskId == taskId);
  1333. }
  1334. if (nWFTaskLogEntity != null)
  1335. {
  1336. db.Insert(nWFTaskLogEntity);
  1337. }
  1338. db.Commit();
  1339. }
  1340. catch (Exception ex)
  1341. {
  1342. db.Rollback();
  1343. if (ex is ExceptionEx)
  1344. {
  1345. throw;
  1346. }
  1347. else
  1348. {
  1349. throw ExceptionEx.ThrowServiceException(ex);
  1350. }
  1351. }
  1352. }
  1353. /// <summary>
  1354. /// 删除流程进程实体
  1355. /// </summary>
  1356. /// <param name="processId">流程进程主键</param>
  1357. public void DeleteEntity(string processId)
  1358. {
  1359. try
  1360. {
  1361. this.BaseRepository().Delete<NWFProcessEntity>(t => t.F_Id == processId);
  1362. }
  1363. catch (Exception ex)
  1364. {
  1365. if (ex is ExceptionEx)
  1366. {
  1367. throw;
  1368. }
  1369. else
  1370. {
  1371. throw ExceptionEx.ThrowServiceException(ex);
  1372. }
  1373. }
  1374. }
  1375. /// <summary>
  1376. /// 删除流程进程所有信息(流程撤销)
  1377. /// </summary>
  1378. /// <param name="processId">流程进程实例</param>
  1379. /// <param name="taskList">流程任务列表</param>
  1380. public void Delete(string processId, IEnumerable<NWFTaskEntity> taskList)
  1381. {
  1382. var db = this.BaseRepository().BeginTrans();
  1383. try
  1384. {
  1385. db.Delete<NWFProcessEntity>(t => t.F_Id == processId);
  1386. db.Delete<NWFTaskLogEntity>(t => t.F_ProcessId == processId);
  1387. foreach (var task in taskList)
  1388. {
  1389. db.Delete(task);
  1390. string taskId = task.F_Id;
  1391. db.Delete<NWFTaskMsgEntity>(t => t.F_TaskId == taskId);
  1392. db.Delete<NWFTaskRelationEntity>(t => t.F_TaskId == taskId);
  1393. }
  1394. db.Commit();
  1395. }
  1396. catch (Exception ex)
  1397. {
  1398. db.Rollback();
  1399. if (ex is ExceptionEx)
  1400. {
  1401. throw;
  1402. }
  1403. else
  1404. {
  1405. throw ExceptionEx.ThrowServiceException(ex);
  1406. }
  1407. }
  1408. }
  1409. /// <summary>
  1410. /// 撤销审核
  1411. /// </summary>
  1412. /// <param name="taskList">需要撤回的任务节点</param>
  1413. /// <param name="taskUser">当前处理人</param>
  1414. /// <param name="taskEntity">当前任务</param>
  1415. /// <param name="taskLogEntity">日志信息</param>
  1416. /// <param name="taskUserNew">当前任务节点的处理人(串行多人审核)</param>
  1417. public void RevokeAudit(List<string> taskList, NWFTaskRelationEntity taskUser, NWFTaskEntity taskEntity, NWFTaskLogEntity taskLogEntity, NWFTaskRelationEntity taskUserNew = null)
  1418. {
  1419. var db = this.BaseRepository().BeginTrans();
  1420. try
  1421. {
  1422. if (taskList != null)
  1423. {
  1424. foreach (var taskId in taskList)
  1425. {
  1426. db.Delete<NWFTaskEntity>(t => t.F_Id == taskId);
  1427. db.Delete<NWFTaskRelationEntity>(t => t.F_TaskId == taskId);
  1428. db.Delete<NWFTaskMsgEntity>(t => t.F_TaskId == taskId);
  1429. }
  1430. }
  1431. if (taskEntity != null)
  1432. {
  1433. db.Update(taskEntity);
  1434. }
  1435. taskUser.F_Mark = 0;
  1436. taskUser.F_Result = 0;
  1437. db.Update(taskUser);
  1438. db.Insert(taskLogEntity);
  1439. if (taskUserNew != null)
  1440. {
  1441. taskUserNew.F_Mark = 1;
  1442. taskUserNew.F_Result = 0;
  1443. db.Update(taskUserNew);
  1444. }
  1445. // 更新下流程实例(处理重新发起状态)
  1446. NWFProcessEntity nWFProcessEntity = new NWFProcessEntity();
  1447. nWFProcessEntity.F_Id = taskLogEntity.F_ProcessId;
  1448. nWFProcessEntity.F_IsAgain = 0;
  1449. db.Update(nWFProcessEntity);
  1450. db.Commit();
  1451. }
  1452. catch (Exception ex)
  1453. {
  1454. db.Rollback();
  1455. if (ex is ExceptionEx)
  1456. {
  1457. throw;
  1458. }
  1459. else
  1460. {
  1461. throw ExceptionEx.ThrowServiceException(ex);
  1462. }
  1463. }
  1464. }
  1465. /// <summary>
  1466. /// 保存任务
  1467. /// </summary>
  1468. /// <param name="taskList">任务列表</param>
  1469. public void SaveTask(List<NWFTaskEntity> taskList)
  1470. {
  1471. var db = this.BaseRepository().BeginTrans();
  1472. try
  1473. {
  1474. foreach (var task in taskList)
  1475. {
  1476. task.F_ModifyDate = DateTime.Now;
  1477. db.Insert(task);
  1478. int num = 1;
  1479. if (task.nWFUserInfoList != null)
  1480. {
  1481. foreach (var taskUser in task.nWFUserInfoList)
  1482. {
  1483. NWFTaskRelationEntity nWFTaskRelationEntity = new NWFTaskRelationEntity();
  1484. nWFTaskRelationEntity.Create();
  1485. nWFTaskRelationEntity.F_TaskId = task.F_Id;
  1486. nWFTaskRelationEntity.F_UserId = taskUser.Id;
  1487. nWFTaskRelationEntity.F_Mark = taskUser.Mark;
  1488. nWFTaskRelationEntity.F_Result = 0;
  1489. nWFTaskRelationEntity.F_Sort = num;
  1490. db.Insert(nWFTaskRelationEntity);
  1491. num++;
  1492. }
  1493. }
  1494. }
  1495. db.Commit();
  1496. }
  1497. catch (Exception)
  1498. {
  1499. db.Rollback();
  1500. throw;
  1501. }
  1502. }
  1503. #endregion
  1504. }
  1505. }