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.
 
 
 
 
 
 

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