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.
 
 
 
 
 
 

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