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.
 
 
 
 
 
 

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