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.
 
 
 
 
 
 

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