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.
 
 
 
 
 
 

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