Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 
 

2322 wiersze
94 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. using Dapper;
  11. using Learun.Application.Organization;
  12. using System.Collections.Concurrent;
  13. using System.Threading.Tasks;
  14. using System.Threading;
  15. namespace Learun.Application.WorkFlow
  16. {
  17. /// <summary>
  18. /// 版 本 Learun-ADMS V7.0.3 力软敏捷开发框架
  19. /// Copyright (c) 2013-2018 上海力软信息技术有限公司
  20. /// 创建人:力软-框架开发组
  21. /// 日 期:2018.12.07
  22. /// 描 述:流程进程
  23. /// </summary>
  24. public class NWFProcessSericve : RepositoryFactory
  25. {
  26. #region 获取数据
  27. /// <summary>
  28. /// 获取流程进程实体
  29. /// </summary>
  30. /// <param name="keyValue">主键</param>
  31. /// <returns></returns>
  32. public NWFProcessEntity GetEntity(string keyValue)
  33. {
  34. try
  35. {
  36. return this.BaseRepository().FindEntity<NWFProcessEntity>(keyValue);
  37. }
  38. catch (Exception ex)
  39. {
  40. if (ex is ExceptionEx)
  41. {
  42. throw;
  43. }
  44. else
  45. {
  46. throw ExceptionEx.ThrowServiceException(ex);
  47. }
  48. }
  49. }
  50. /// <summary>
  51. /// 获取流程进程实例
  52. /// </summary>
  53. /// <param name="processId">父流程进程主键</param>
  54. /// <param name="nodeId">节点主键</param>
  55. /// <returns></returns>
  56. public NWFProcessEntity GetEntityByProcessId(string processId, string nodeId)
  57. {
  58. try
  59. {
  60. return this.BaseRepository().FindEntity<NWFProcessEntity>(t => t.F_ParentProcessId == processId && t.F_ParentNodeId == nodeId);
  61. }
  62. catch (Exception ex)
  63. {
  64. if (ex is ExceptionEx)
  65. {
  66. throw;
  67. }
  68. else
  69. {
  70. throw ExceptionEx.ThrowServiceException(ex);
  71. }
  72. }
  73. }
  74. /// <summary>
  75. /// 获取子流程列表
  76. /// </summary>
  77. /// <param name="parentProcessId">父流程进程主键</param>
  78. /// <returns></returns>
  79. public IEnumerable<NWFProcessEntity> GetChildProcessList(string parentProcessId)
  80. {
  81. try
  82. {
  83. return this.BaseRepository().FindList<NWFProcessEntity>(t => t.F_ParentProcessId == parentProcessId);
  84. }
  85. catch (Exception ex)
  86. {
  87. if (ex is ExceptionEx)
  88. {
  89. throw;
  90. }
  91. else
  92. {
  93. throw ExceptionEx.ThrowServiceException(ex);
  94. }
  95. }
  96. }
  97. /// <summary>
  98. /// 获取流程信息列表
  99. /// </summary>
  100. /// <param name="pagination">分页参数</param>
  101. /// <param name="queryJson">查询条件</param>
  102. /// <returns></returns>
  103. public IEnumerable<NWFProcessEntity> GetPageList(Pagination pagination, string queryJson)
  104. {
  105. try
  106. {
  107. var expression = LinqExtensions.True<NWFProcessEntity>();
  108. var queryParam = queryJson.ToJObject();
  109. // 分类
  110. if (!queryParam["categoryId"].IsEmpty()) // 1:未完成 2:已完成
  111. {
  112. if (queryParam["categoryId"].ToString() == "1")
  113. {
  114. expression = expression.And(t => t.F_IsFinished == 0);
  115. }
  116. else
  117. {
  118. expression = expression.And(t => t.F_IsFinished == 1);
  119. }
  120. }
  121. //流程类别
  122. if (!queryParam["F_Category"].IsEmpty()) // 1:未完成 2:已完成
  123. {
  124. var Categofy = queryParam["F_Category"].ToString();
  125. var codeList = this.BaseRepository().FindList<NWFSchemeInfoEntity>(a => a.F_Category == Categofy).Select(a => a.F_Code);
  126. if (codeList.Count() > 0)
  127. {
  128. expression = expression.And(a => codeList.Contains(a.F_SchemeCode));
  129. }
  130. }
  131. // 操作时间
  132. if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty())
  133. {
  134. DateTime startTime = queryParam["StartTime"].ToDate();
  135. DateTime endTime = queryParam["EndTime"].ToDate();
  136. expression = expression.And(t => t.F_CreateDate >= startTime && t.F_CreateDate <= endTime);
  137. }
  138. // 关键字
  139. if (!queryParam["keyword"].IsEmpty())
  140. {
  141. string keyword = queryParam["keyword"].ToString();
  142. expression = expression.And(t => t.F_Title.Contains(keyword) || t.F_SchemeName.Contains(keyword) || t.F_CreateUserName.Contains(keyword));
  143. }
  144. // 状态
  145. if (!queryParam["F_EnabledMark"].IsEmpty()) // 1:未完成 2:已完成
  146. {
  147. if (queryParam["F_EnabledMark"].ToString() == "1")
  148. {
  149. //运行中
  150. expression = expression.And(t => t.F_EnabledMark == 1);
  151. }
  152. else if (queryParam["F_EnabledMark"].ToString() == "2")
  153. {
  154. //作废
  155. expression = expression.And(t => t.F_EnabledMark != 1);
  156. }
  157. else if (queryParam["F_EnabledMark"].ToString() == "3")
  158. {
  159. //结束 已完成
  160. expression = expression.And(t => t.F_IsFinished == 1);
  161. }
  162. }
  163. expression = expression.And(t => t.F_EnabledMark != 2);
  164. ////20221125增加作废不显示liang
  165. //expression = expression.And(t => t.F_EnabledMark != 3);
  166. expression = expression.And(t => t.F_IsChild == 0);
  167. var result = this.BaseRepository().FindList<NWFProcessEntity>(expression, pagination);
  168. if (result.Count()>0 )
  169. {
  170. foreach (var item in result)
  171. {
  172. if (!string.IsNullOrEmpty(item.F_CreateUserName))
  173. {
  174. item.F_DepartmentId = this.BaseRepository().FindEntity<UserEntity>(x => x.F_UserId == item.F_CreateUserId)?.F_DepartmentId;
  175. }
  176. }
  177. }
  178. return result;
  179. }
  180. catch (Exception ex)
  181. {
  182. if (ex is ExceptionEx)
  183. {
  184. throw;
  185. }
  186. else
  187. {
  188. throw ExceptionEx.ThrowServiceException(ex);
  189. }
  190. }
  191. }
  192. /// <summary>
  193. /// 获取流程信息列表
  194. /// </summary>
  195. /// <param name="pagination">分页参数</param>
  196. /// <param name="queryJson">查询条件</param>
  197. /// <returns></returns>
  198. public IEnumerable<LC_gcsqEntity> GetUseCar(Pagination pagination, string queryJson)
  199. {
  200. try
  201. {
  202. var queryParam = queryJson.ToJObject();
  203. var dbName = this.BaseRepository().getDbConnection().Database;
  204. var dbMISName = this.BaseRepository("CollegeMIS").getDbConnection().Database;
  205. var dp = new DynamicParameters(new { });
  206. var strSql = new StringBuilder();
  207. strSql.Append(" select zb.*,lnp.* from " + dbMISName + ".[dbo].LC_gcsq zb ");
  208. strSql.Append(" left join " + dbName + ".[dbo].LR_NWF_PROCESS lnp on lnp.F_id=zb.LC_ID ");
  209. strSql.Append(" where 1=1 and lnp.F_SchemeCode = 'LC_gcsq' ");
  210. strSql.Append(" and lnp.F_EnabledMark != '3' and lnp.F_EnabledMark != '2' and lnp.F_IsChild='0' ");
  211. if (queryParam["categoryId"].ToString() == "1")
  212. {
  213. strSql.Append(" and lnp.F_IsFinished= '0' ");
  214. }
  215. else
  216. {
  217. strSql.Append(" and lnp.F_IsFinished= '1' ");
  218. }
  219. if (!queryParam["LC_ycbm"].IsEmpty())
  220. {
  221. strSql.Append(" and zb.LC_ycbm like '%" + queryParam["LC_ycbm"].ToString() + "%' ");
  222. }
  223. if (!queryParam["LC_ycr"].IsEmpty())
  224. {
  225. strSql.Append(" and zb.LC_ycr like '%" + queryParam["LC_ycr"].ToString() + "%' ");
  226. }
  227. if (!queryParam["LC_ycsj"].IsEmpty())
  228. {
  229. strSql.Append(" and zb.LC_ycsj like '%" + queryParam["LC_ycsj"].ToString() + "%' ");
  230. }
  231. if (!queryParam["LC_sjxm"].IsEmpty())
  232. {
  233. strSql.Append(" and zb.LC_sjxm like '%" + queryParam["LC_sjxm"].ToString() + "%' ");
  234. }
  235. if (!queryParam["LC_cph"].IsEmpty())
  236. {
  237. strSql.Append(" and zb.LC_cph like '%" + queryParam["LC_cph"].ToString() + "%' ");
  238. }
  239. return this.BaseRepository("CollegeMIS").FindList<LC_gcsqEntity>(strSql.ToString(), dp);
  240. }
  241. catch (Exception ex)
  242. {
  243. if (ex is ExceptionEx)
  244. {
  245. throw;
  246. }
  247. else
  248. {
  249. throw ExceptionEx.ThrowServiceException(ex);
  250. }
  251. }
  252. }
  253. /// <summary>
  254. /// 获取流程信息列表
  255. /// </summary>
  256. /// <param name="pagination">分页参数</param>
  257. /// <param name="queryJson">查询条件</param>
  258. /// <returns></returns>
  259. public IEnumerable<cs_qjEntity> GetLeaveStatistics(Pagination pagination, string queryJson)
  260. {
  261. try
  262. {
  263. var queryParam = queryJson.ToJObject();
  264. var dbName = this.BaseRepository().getDbConnection().Database;
  265. var dbMISName = this.BaseRepository("CollegeMIS").getDbConnection().Database;
  266. var dp = new DynamicParameters(new { });
  267. var strSql = new StringBuilder();
  268. strSql.Append(" select zb.*,lnp.* from " + dbMISName + ".[dbo].cs_qj zb ");
  269. strSql.Append(" left join " + dbName + ".[dbo].LR_NWF_PROCESS lnp on zb.LC_ID =lnp.F_id ");
  270. strSql.Append(" where 1=1 and lnp.F_SchemeCode = 'LC_leave'");
  271. strSql.Append(" and lnp.F_EnabledMark != '3' and lnp.F_EnabledMark != '2' and lnp.F_IsChild='0' ");
  272. if (queryParam["categoryId"].ToString() == "1")
  273. {
  274. strSql.Append(" and lnp.F_IsFinished= '0' ");
  275. }
  276. else
  277. {
  278. strSql.Append(" and lnp.F_IsFinished= '1' ");
  279. }
  280. if (!queryParam["qj_name"].IsEmpty())
  281. {
  282. strSql.Append(" and zb.qj_name = '" + queryParam["qj_name"].ToString() + "' ");
  283. }
  284. if (!queryParam["qj_bm"].IsEmpty())
  285. {
  286. strSql.Append(" and zb.qj_bm like '%" + queryParam["qj_bm"].ToString() + "%' ");
  287. }
  288. if (!queryParam["qj_lx"].IsEmpty())
  289. {
  290. strSql.Append(" and zb.qj_lx = '" + queryParam["qj_lx"].ToString() + "' ");
  291. }
  292. if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty())
  293. {
  294. DateTime startTime = queryParam["StartTime"].ToDate();
  295. DateTime endTime = queryParam["EndTime"].ToDate();
  296. strSql.Append(" and ( zb.qj_txsj>= '" + startTime + "' and zb.qj_txsj <= '" + endTime + "' )");
  297. }
  298. return this.BaseRepository("CollegeMIS").FindList<cs_qjEntity>(strSql.ToString(), dp, pagination);
  299. }
  300. catch (Exception ex)
  301. {
  302. if (ex is ExceptionEx)
  303. {
  304. throw;
  305. }
  306. else
  307. {
  308. throw ExceptionEx.ThrowServiceException(ex);
  309. }
  310. }
  311. }
  312. /// <summary>
  313. /// 获取流程信息列表
  314. /// </summary>
  315. /// <param name="pagination">分页参数</param>
  316. /// <param name="queryJson">查询条件</param>
  317. /// <returns></returns>
  318. public IEnumerable<LC_docx2Entity> GetTransceiver(Pagination pagination, string queryJson)
  319. {
  320. try
  321. {
  322. var queryParam = queryJson.ToJObject();
  323. var dbName = this.BaseRepository().getDbConnection().Database;
  324. var dbMISName = this.BaseRepository("CollegeMIS").getDbConnection().Database;
  325. var dp = new DynamicParameters(new { });
  326. var strSql = new StringBuilder();
  327. strSql.Append(" select LC_ID, LC_party, LC_accept, LC_amount, LC_num, LC_numdoc, LC_name, LC_important, LC_secret, LC_docx, LC_other, LC_docx2, LC_docx3, LC_docx4, LC_docx5,lnp.* from " + dbMISName + ".[dbo].LC_docx2 zb ");
  328. strSql.Append(" left join " + dbName + ".[dbo].LR_NWF_PROCESS lnp on zb.LC_ID =lnp.F_id ");
  329. strSql.Append(" where 1=1 and lnp.F_SchemeCode = 'LC_docx' ");
  330. strSql.Append(" and lnp.F_EnabledMark != '3' and lnp.F_EnabledMark != '2' and lnp.F_IsChild='0' ");
  331. if (queryParam["categoryId"].ToString() == "1")
  332. {
  333. strSql.Append(" and lnp.F_IsFinished= '0' ");
  334. }
  335. else
  336. {
  337. strSql.Append(" and lnp.F_IsFinished= '1' ");
  338. }
  339. if (!queryParam["LC_party"].IsEmpty())
  340. {
  341. strSql.Append(" and zb.LC_party like '%" + queryParam["LC_party"].ToString() + "%' ");
  342. }
  343. if (!queryParam["LC_name"].IsEmpty())
  344. {
  345. strSql.Append(" and zb.LC_name like '%" + queryParam["LC_name"].ToString() + "%' ");
  346. }
  347. if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty())
  348. {
  349. DateTime startTime = queryParam["StartTime"].ToDate();
  350. DateTime endTime = queryParam["EndTime"].ToDate();
  351. strSql.Append(" and CONVERT(varchar, zb.lc_accept) >= CONVERT(varchar, '" + startTime + "') and CONVERT(varchar, zb.LC_accept) <= CONVERT(varchar, '" + endTime + "')");
  352. }
  353. return this.BaseRepository("CollegeMIS").FindList<LC_docx2Entity>(strSql.ToString(), dp, pagination);
  354. }
  355. catch (Exception ex)
  356. {
  357. if (ex is ExceptionEx)
  358. {
  359. throw;
  360. }
  361. else
  362. {
  363. throw ExceptionEx.ThrowServiceException(ex);
  364. }
  365. }
  366. }
  367. /// <summary>
  368. /// 根据processid 获取taskid
  369. /// </summary>
  370. /// <param name="processId">流程id</param>
  371. /// <returns></returns>
  372. public string GetFirstTaskByProcessId(string processId)
  373. {
  374. try
  375. {
  376. return this.BaseRepository().FindList<NWFTaskEntity>(a => a.F_ProcessId == processId).OrderBy(a => a.F_ModifyDate).FirstOrDefault()?.F_Id;
  377. }
  378. catch (Exception ex)
  379. {
  380. if (ex is ExceptionEx)
  381. {
  382. throw;
  383. }
  384. else
  385. {
  386. throw ExceptionEx.ThrowServiceException(ex);
  387. }
  388. }
  389. }
  390. /// <summary>
  391. /// 获取流程信息列表
  392. /// </summary>
  393. /// <param name="pagination">分页参数</param>
  394. /// <param name="queryJson">查询条件</param>
  395. /// <returns></returns>
  396. public IEnumerable<NWFProcessEntity> GetAllList()
  397. {
  398. try
  399. {
  400. return this.BaseRepository().FindList<NWFProcessEntity>();
  401. }
  402. catch (Exception ex)
  403. {
  404. if (ex is ExceptionEx)
  405. {
  406. throw;
  407. }
  408. else
  409. {
  410. throw ExceptionEx.ThrowServiceException(ex);
  411. }
  412. }
  413. }
  414. public LC_hetongEntity GetHTInfo(string keyValue)
  415. {
  416. try
  417. {
  418. return this.BaseRepository("CollegeMIS").FindEntity<LC_hetongEntity>(a => a.LC_ID == keyValue);
  419. }
  420. catch (Exception ex)
  421. {
  422. if (ex is ExceptionEx)
  423. {
  424. throw;
  425. }
  426. else
  427. {
  428. throw ExceptionEx.ThrowServiceException(ex);
  429. }
  430. }
  431. }
  432. /// <summary>
  433. /// 获取我的流程信息列表
  434. /// </summary>
  435. /// <param name="userId">用户主键</param>
  436. /// <param name="pagination">分页参数</param>
  437. /// <param name="queryJson">查询条件</param>
  438. /// <param name="schemeCode">流程模板编码</param>
  439. /// <returns></returns>
  440. public IEnumerable<NWFProcessEntity> GetMyPageList(string userId, Pagination pagination, string queryJson, string schemeCode)
  441. {
  442. try
  443. {
  444. var expression = LinqExtensions.True<NWFProcessEntity>();
  445. var queryParam = queryJson.ToJObject();
  446. expression = expression.And(t => t.F_CreateUserId == userId);
  447. // 操作时间
  448. if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty())
  449. {
  450. DateTime startTime = queryParam["StartTime"].ToDate();
  451. DateTime endTime = queryParam["EndTime"].ToDate();
  452. expression = expression.And(t => t.F_CreateDate >= startTime && t.F_CreateDate <= endTime);
  453. }
  454. // 关键字
  455. if (!queryParam["keyword"].IsEmpty())
  456. {
  457. string keyword = queryParam["keyword"].ToString();
  458. expression = expression.And(t => t.F_Title.Contains(keyword) || t.F_SchemeName.Contains(keyword));
  459. }
  460. if (!string.IsNullOrEmpty(schemeCode))
  461. {
  462. expression = expression.And(t => t.F_SchemeCode.Equals(schemeCode));
  463. }
  464. expression = expression.And(t => t.F_IsChild == 0);
  465. var aa = this.BaseRepository().FindList<NWFProcessEntity>(expression, pagination);
  466. foreach (var item in aa)
  467. {
  468. item.F_TaskId = this.BaseRepository().FindEntity<NWFTaskEntity>(x => x.F_ProcessId == item.F_Id)?.F_Id;
  469. item.F_TaskType = this.BaseRepository().FindEntity<NWFTaskEntity>(x => x.F_ProcessId == item.F_Id)?.F_Type;
  470. item.F_TaskName = this.BaseRepository().FindEntity<NWFTaskEntity>(x => x.F_ProcessId == item.F_Id)?.F_NodeName;
  471. if (!string.IsNullOrEmpty(item.F_CreateUserName))
  472. {
  473. item.F_DepartmentId = this.BaseRepository().FindEntity<UserEntity>(x => x.F_UserId == item.F_CreateUserId)?.F_DepartmentId;
  474. }
  475. //合同流程审批专用 如果第一步校长审批同意的话 可以打印授权委托书
  476. if (item.F_SchemeCode == "LC_Contract_")
  477. {
  478. var entity = this.BaseRepository().FindEntity<NWFTaskLogEntity>(a =>
  479. a.F_ProcessId == item.F_Id && a.F_TaskUserId == "29add015-3638-415d-9f91-5024bd746fb5" &&
  480. a.F_OperationCode == "agree");
  481. if (null != entity)
  482. {
  483. item.LeaderIsAgree = true;
  484. }
  485. }
  486. }
  487. return aa;
  488. }
  489. catch (Exception ex)
  490. {
  491. if (ex is ExceptionEx)
  492. {
  493. throw;
  494. }
  495. else
  496. {
  497. throw ExceptionEx.ThrowServiceException(ex);
  498. }
  499. }
  500. }
  501. /// <summary>
  502. /// 获取我的流程信息列表
  503. /// </summary>
  504. /// <param name="userId">用户主键</param>
  505. /// <param name="pagination">分页参数</param>
  506. /// <param name="schemeCode">流程模板编码</param>
  507. /// <returns></returns>
  508. public IEnumerable<NWFProcessEntity> GetMyPageList(string userId, string queryJson, string schemeCode)
  509. {
  510. try
  511. {
  512. var expression = LinqExtensions.True<NWFProcessEntity>();
  513. var queryParam = queryJson.ToJObject();
  514. expression = expression.And(t => t.F_CreateUserId == userId);
  515. // 操作时间
  516. if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty())
  517. {
  518. DateTime startTime = queryParam["StartTime"].ToDate();
  519. DateTime endTime = queryParam["EndTime"].ToDate();
  520. expression = expression.And(t => t.F_CreateDate >= startTime && t.F_CreateDate <= endTime);
  521. }
  522. // 关键字
  523. if (!queryParam["keyword"].IsEmpty())
  524. {
  525. string keyword = queryParam["keyword"].ToString();
  526. expression = expression.And(t => t.F_Title.Contains(keyword) || t.F_SchemeName.Contains(keyword));
  527. }
  528. if (!string.IsNullOrEmpty(schemeCode))
  529. {
  530. expression = expression.And(t => t.F_SchemeCode.Equals(schemeCode));
  531. }
  532. expression = expression.And(t => t.F_IsChild == 0);
  533. return this.BaseRepository().FindList<NWFProcessEntity>(expression);
  534. }
  535. catch (Exception ex)
  536. {
  537. if (ex is ExceptionEx)
  538. {
  539. throw;
  540. }
  541. else
  542. {
  543. throw ExceptionEx.ThrowServiceException(ex);
  544. }
  545. }
  546. }
  547. /// <summary>
  548. /// 获取我的代办任务列表
  549. /// </summary>
  550. /// <param name="userInfo">用户信息</param>
  551. /// <param name="pagination">翻页信息</param>
  552. /// <param name="queryJson">查询条件</param>
  553. /// <param name="schemeCode">流程模板编码</param>
  554. /// <param name="isBatchAudit">true获取批量审核任务</param>
  555. /// <returns></returns>
  556. public IEnumerable<NWFProcessEntity> GetMyTaskPageList(UserInfo userInfo, Pagination pagination, string queryJson, string schemeCode, bool isBatchAudit = false)
  557. {
  558. try
  559. {
  560. string userId = userInfo.userId;
  561. var strSql = new StringBuilder();
  562. strSql.Append(@"SELECT
  563. t.F_Id AS F_TaskId,
  564. t.F_Type AS F_TaskType,
  565. t.F_NodeName AS F_TaskName,
  566. t.F_IsUrge,
  567. t.F_ModifyDate as F_CreateDate,
  568. p.F_Id,
  569. p.F_SchemeId,
  570. p.F_SchemeCode,
  571. p.F_SchemeName,
  572. p.F_Title,
  573. p.F_Level,
  574. p.F_EnabledMark,
  575. p.F_IsAgain,
  576. p.F_IsFinished,
  577. p.F_IsChild,
  578. p.F_ParentTaskId,
  579. p.F_ParentProcessId,
  580. p.F_CreateUserId,
  581. p.F_CreateUserName,
  582. p.F_IsStart,
  583. d.F_DepartmentId,d.F_FullName
  584. FROM
  585. (
  586. SELECT
  587. F_TaskId
  588. FROM
  589. LR_NWF_TaskRelation r1
  590. LEFT JOIN LR_NWF_Task t1 ON r1.F_TaskId = t1.F_Id
  591. WHERE r1.F_Mark = 0 AND r1.F_Result = 0 AND (r1.F_UserId = @userId
  592. ");
  593. // 添加委托信息
  594. List<UserInfo> delegateList = GetDelegateProcess(userId);
  595. foreach (var item in delegateList)
  596. {
  597. string processId = "'" + item.wfProcessId.Replace(",", "','") + "'";
  598. string userI2 = "'" + item.userId + "'";
  599. strSql.Append(" OR (r1.F_UserId =" + userI2 + " AND t1.F_ProcessId in (" + processId + ") AND t1.F_Type != 2 )");
  600. }
  601. strSql.Append(@") GROUP BY
  602. F_TaskId
  603. ) r
  604. LEFT JOIN LR_NWF_Task t ON t.F_Id = r.F_TaskId
  605. LEFT JOIN LR_NWF_Process p ON p.F_Id = t.F_ProcessId
  606. LEFT JOIN(
  607. SELECT t.F_DepartmentId,t.F_FullName,u.F_RealName,u.F_UserId
  608. 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
  609. WHERE
  610. t.F_IsFinished = 0 AND (p.F_IsFinished = 0 OR t.F_Type = 2 OR t.F_Type = 4 OR t.F_Type = 6)");
  611. var queryParam = queryJson.ToJObject();
  612. DateTime startTime = DateTime.Now, endTime = DateTime.Now;
  613. if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty())
  614. {
  615. startTime = queryParam["StartTime"].ToDate();
  616. endTime = queryParam["EndTime"].ToDate();
  617. strSql.Append(" AND ( t.F_ModifyDate >= @startTime AND t.F_ModifyDate <= @endTime ) ");
  618. }
  619. string keyword = "";
  620. if (!queryParam["keyword"].IsEmpty())
  621. {
  622. keyword = "%" + queryParam["keyword"].ToString() + "%";
  623. 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 ) ");
  624. }
  625. if (!string.IsNullOrEmpty(schemeCode))
  626. {
  627. strSql.Append(" AND p.F_SchemeCode = @schemeCode ");
  628. }
  629. if (isBatchAudit)
  630. {
  631. strSql.Append(" AND t.F_IsBatchAudit = 1 ");
  632. }
  633. var data = this.BaseRepository().FindList<NWFProcessEntity>(strSql.ToString(), new { userId, startTime, endTime, keyword, schemeCode }, pagination);
  634. //if (data.Count() > 0)
  635. //{
  636. // foreach (var item in data)
  637. // {
  638. // if (!string.IsNullOrEmpty(item.F_CreateUserName))
  639. // {
  640. // item.F_DepartmentId = this.BaseRepository().FindEntity<UserEntity>(x => x.F_UserId == item.F_CreateUserId)?.F_DepartmentId;
  641. // }
  642. // }
  643. //}
  644. return data;
  645. }
  646. catch (Exception ex)
  647. {
  648. if (ex is ExceptionEx)
  649. {
  650. throw;
  651. }
  652. else
  653. {
  654. throw ExceptionEx.ThrowServiceException(ex);
  655. }
  656. }
  657. }
  658. /// <summary>
  659. /// 获取我的代办任务列表
  660. /// </summary>
  661. /// <param name="userInfo">用户信息</param>
  662. /// <param name="queryJson">查询条件</param>
  663. /// <param name="schemeCode">流程模板编码</param>
  664. /// <param name="isBatchAudit">true获取批量审核任务</param>
  665. /// <returns></returns>
  666. public IEnumerable<NWFProcessEntity> GetMyTaskPageList(UserInfo userInfo, string queryJson, string schemeCode, bool isBatchAudit = false)
  667. {
  668. try
  669. {
  670. string userId = userInfo.userId;
  671. var strSql = new StringBuilder();
  672. strSql.Append(@"SELECT
  673. t.F_Id AS F_TaskId,
  674. t.F_Type AS F_TaskType,
  675. t.F_NodeName AS F_TaskName,
  676. t.F_IsUrge,
  677. t.F_ModifyDate as F_CreateDate,
  678. p.F_Id,
  679. p.F_SchemeId,
  680. p.F_SchemeCode,
  681. p.F_SchemeName,
  682. p.F_Title,
  683. p.F_Level,
  684. p.F_EnabledMark,
  685. p.F_IsAgain,
  686. p.F_IsFinished,
  687. p.F_IsChild,
  688. p.F_ParentTaskId,
  689. p.F_ParentProcessId,
  690. p.F_CreateUserId,
  691. p.F_CreateUserName,
  692. p.F_IsStart
  693. FROM
  694. (
  695. SELECT
  696. F_TaskId
  697. FROM
  698. LR_NWF_TaskRelation r1
  699. LEFT JOIN LR_NWF_Task t1 ON r1.F_TaskId = t1.F_Id
  700. WHERE r1.F_Mark = 0 AND r1.F_Result = 0 AND (r1.F_UserId = @userId
  701. ");
  702. // 添加委托信息
  703. List<UserInfo> delegateList = GetDelegateProcess(userId);
  704. foreach (var item in delegateList)
  705. {
  706. string processId = "'" + item.wfProcessId.Replace(",", "','") + "'";
  707. string userI2 = "'" + item.userId + "'";
  708. strSql.Append(" OR (r1.F_UserId =" + userI2 + " AND t1.F_ProcessId in (" + processId + ") AND t1.F_Type != 2 )");
  709. }
  710. strSql.Append(@") GROUP BY
  711. F_TaskId
  712. ) r
  713. LEFT JOIN LR_NWF_Task t ON t.F_Id = r.F_TaskId
  714. LEFT JOIN LR_NWF_Process p ON p.F_Id = t.F_ProcessId
  715. WHERE
  716. t.F_IsFinished = 0 AND (p.F_IsFinished = 0 OR t.F_Type = 2 OR t.F_Type = 4 OR t.F_Type = 6)");
  717. var queryParam = queryJson.ToJObject();
  718. DateTime startTime = DateTime.Now, endTime = DateTime.Now;
  719. if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty())
  720. {
  721. startTime = queryParam["StartTime"].ToDate();
  722. endTime = queryParam["EndTime"].ToDate();
  723. strSql.Append(" AND ( t.F_ModifyDate >= @startTime AND t.F_ModifyDate <= @endTime ) ");
  724. }
  725. string keyword = "";
  726. if (!queryParam["keyword"].IsEmpty())
  727. {
  728. keyword = "%" + queryParam["keyword"].ToString() + "%";
  729. strSql.Append(" AND ( p.F_Title like @keyword OR p.F_SchemeName like @keyword ) ");
  730. }
  731. if (!string.IsNullOrEmpty(schemeCode))
  732. {
  733. strSql.Append(" AND p.F_SchemeCode = @schemeCode ");
  734. }
  735. if (isBatchAudit)
  736. {
  737. strSql.Append(" AND t.F_IsBatchAudit = 1 ");
  738. }
  739. return this.BaseRepository().FindList<NWFProcessEntity>(strSql.ToString(), new { userId, startTime, endTime, keyword, schemeCode });
  740. }
  741. catch (Exception ex)
  742. {
  743. if (ex is ExceptionEx)
  744. {
  745. throw;
  746. }
  747. else
  748. {
  749. throw ExceptionEx.ThrowServiceException(ex);
  750. }
  751. }
  752. }
  753. /// <summary>
  754. /// 获取我的已办任务列表
  755. /// </summary>
  756. /// <param name="userId">用户主键</param>
  757. /// <param name="pagination">翻页信息</param>
  758. /// <param name="queryJson">查询条件</param>
  759. /// <param name="schemeCode">流程模板编码</param>
  760. /// <returns></returns>
  761. public IEnumerable<NWFProcessEntity> GetMyFinishTaskPageList(UserInfo userInfo, Pagination pagination, string queryJson, string schemeCode)
  762. {
  763. try
  764. {
  765. var strSql = new StringBuilder();
  766. strSql.Append(@"SELECT
  767. t.F_Id AS F_TaskId,
  768. t.F_Type AS F_TaskType,
  769. t.F_NodeName AS F_TaskName,
  770. r.F_Time as F_CreateDate,
  771. p.F_Id,
  772. p.F_SchemeId,
  773. p.F_SchemeCode,
  774. p.F_SchemeName,
  775. p.F_Title,
  776. p.F_Level,
  777. p.F_EnabledMark,
  778. p.F_IsAgain,
  779. p.F_IsFinished,
  780. p.F_IsChild,
  781. p.F_ParentTaskId,
  782. p.F_ParentProcessId,
  783. p.F_CreateUserId,
  784. p.F_CreateUserName,
  785. p.F_IsStart,
  786. t.F_NodeId,
  787. d.F_DepartmentId,d.F_FullName
  788. FROM
  789. LR_NWF_Task t
  790. LEFT JOIN LR_NWF_TaskRelation r on r.F_TaskId = t.F_Id
  791. LEFT JOIN LR_NWF_Process p ON t.F_ProcessId = p.F_Id
  792. LEFT JOIN(
  793. SELECT t.F_DepartmentId,t.F_FullName,u.F_RealName,u.F_UserId
  794. FROM LR_Base_Department t
  795. left join LR_BASE_USER u on t.F_DepartmentId = u.F_DepartmentId
  796. ) d ON d.F_UserId=t.F_CreateUserId
  797. WHERE
  798. (r.F_Result = 1 OR r.F_Result = 2 OR r.F_Result = 4) AND r.F_UserId = @userId
  799. ");
  800. var queryParam = queryJson.ToJObject();
  801. DateTime startTime = DateTime.Now, endTime = DateTime.Now;
  802. if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty())
  803. {
  804. startTime = queryParam["StartTime"].ToDate();
  805. endTime = queryParam["EndTime"].ToDate();
  806. strSql.Append(" AND ( r.F_Time >= @startTime AND r.F_Time <= @endTime ) ");
  807. }
  808. string keyword = "";
  809. if (!queryParam["keyword"].IsEmpty())
  810. {
  811. keyword = "%" + queryParam["keyword"].ToString() + "%";
  812. 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) ");
  813. }
  814. if (!string.IsNullOrEmpty(schemeCode))
  815. {
  816. strSql.Append(" AND p.F_SchemeCode = @schemeCode ");
  817. }
  818. var data = this.BaseRepository().FindList<NWFProcessEntity>(strSql.ToString(), new { userInfo.userId, startTime, endTime, keyword, schemeCode }, pagination);
  819. foreach (var item in data)
  820. {
  821. var nextNode = this.BaseRepository().FindEntity<NWFTaskLogEntity>(a =>
  822. a.F_ProcessId == item.F_Id && a.F_PrevNodeId == item.F_NodeId);
  823. if (null != nextNode)
  824. {
  825. item.NextNodeIsAudited = true;
  826. }
  827. //if (!string.IsNullOrEmpty(item.F_CreateUserName))
  828. //{
  829. // item.F_DepartmentId = this.BaseRepository().FindEntity<UserEntity>(x => x.F_UserId == item.F_CreateUserId)?.F_DepartmentId;
  830. //}
  831. }
  832. return data;
  833. }
  834. catch (Exception ex)
  835. {
  836. if (ex is ExceptionEx)
  837. {
  838. throw;
  839. }
  840. else
  841. {
  842. throw ExceptionEx.ThrowServiceException(ex);
  843. }
  844. }
  845. }
  846. /// <summary>
  847. /// 获取我的已办任务列表
  848. /// </summary>
  849. /// <param name="userId">用户主键</param>
  850. /// <param name="queryJson">查询条件</param>
  851. /// <param name="schemeCode">流程模板编码</param>
  852. /// <returns></returns>
  853. public IEnumerable<NWFProcessEntity> GetMyFinishTaskPageList(UserInfo userInfo, string queryJson, string schemeCode)
  854. {
  855. try
  856. {
  857. var strSql = new StringBuilder();
  858. strSql.Append(@"SELECT
  859. t.F_Id AS F_TaskId,
  860. t.F_Type AS F_TaskType,
  861. t.F_NodeName AS F_TaskName,
  862. r.F_Time as F_CreateDate,
  863. p.F_Id,
  864. p.F_SchemeId,
  865. p.F_SchemeCode,
  866. p.F_SchemeName,
  867. p.F_Title,
  868. p.F_Level,
  869. p.F_EnabledMark,
  870. p.F_IsAgain,
  871. p.F_IsFinished,
  872. p.F_IsChild,
  873. p.F_ParentTaskId,
  874. p.F_ParentProcessId,
  875. p.F_CreateUserId,
  876. p.F_CreateUserName,
  877. p.F_IsStart
  878. FROM
  879. LR_NWF_Task t
  880. LEFT JOIN LR_NWF_TaskRelation r on r.F_TaskId = t.F_Id
  881. LEFT JOIN LR_NWF_Process p ON t.F_ProcessId = p.F_Id
  882. WHERE
  883. (r.F_Result = 1 OR r.F_Result = 2 OR r.F_Result = 4) AND r.F_UserId = @userId
  884. ");
  885. var queryParam = queryJson.ToJObject();
  886. DateTime startTime = DateTime.Now, endTime = DateTime.Now;
  887. if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty())
  888. {
  889. startTime = queryParam["StartTime"].ToDate();
  890. endTime = queryParam["EndTime"].ToDate();
  891. strSql.Append(" AND ( r.F_Time >= @startTime AND r.F_Time <= @endTime ) ");
  892. }
  893. string keyword = "";
  894. if (!queryParam["keyword"].IsEmpty())
  895. {
  896. keyword = "%" + queryParam["keyword"].ToString() + "%";
  897. strSql.Append(" AND ( p.F_ProcessName like @keyword OR p.F_SchemeName like @keyword ) ");
  898. }
  899. if (!string.IsNullOrEmpty(schemeCode))
  900. {
  901. strSql.Append(" AND p.F_SchemeCode = @schemeCode ");
  902. }
  903. return this.BaseRepository().FindList<NWFProcessEntity>(strSql.ToString(), new { userInfo.userId, startTime, endTime, keyword, schemeCode });
  904. }
  905. catch (Exception ex)
  906. {
  907. if (ex is ExceptionEx)
  908. {
  909. throw;
  910. }
  911. else
  912. {
  913. throw ExceptionEx.ThrowServiceException(ex);
  914. }
  915. }
  916. }
  917. /// <summary>
  918. /// 获取委托人关联的流程进程列表
  919. /// </summary>
  920. /// <param name="userId">当前用户主键</param>
  921. /// <returns></returns>
  922. public List<UserInfo> GetDelegateProcess(string userId)
  923. {
  924. try
  925. {
  926. List<UserInfo> delegateUserlist = new List<UserInfo>();
  927. DateTime datatime = DateTime.Now;
  928. IEnumerable<NWFDelegateRuleEntity> wfDelegateRuleList = this.BaseRepository().FindList<NWFDelegateRuleEntity>(t => t.F_ToUserId == userId && t.F_BeginDate <= datatime && t.F_EndDate >= datatime);
  929. foreach (var item in wfDelegateRuleList)
  930. {
  931. UserInfo userinfo = new UserInfo();
  932. userinfo.userId = item.F_CreateUserId;
  933. var strSql = new StringBuilder();
  934. strSql.Append(@"SELECT
  935. p.F_Id
  936. FROM
  937. LR_NWF_DelegateRelation d
  938. LEFT JOIN LR_NWF_SchemeInfo s ON s.F_Id = d.F_SchemeInfoId
  939. LEFT JOIN LR_NWF_Process p ON p.F_SchemeCode = s.F_Code
  940. WHERE
  941. p.F_Id IS NOT NULL
  942. AND p.F_IsFinished = 0
  943. AND d.F_DelegateRuleId = @DelegateRuleId ");
  944. DataTable dt = this.BaseRepository().FindTable(strSql.ToString(), new { DelegateRuleId = item.F_Id });
  945. userinfo.wfProcessId = "";
  946. foreach (DataRow dr in dt.Rows)
  947. {
  948. if (!string.IsNullOrEmpty(dr[0].ToString()))
  949. {
  950. if (!string.IsNullOrEmpty(userinfo.wfProcessId))
  951. {
  952. userinfo.wfProcessId += ",";
  953. }
  954. userinfo.wfProcessId += dr[0].ToString();
  955. }
  956. }
  957. if (!string.IsNullOrEmpty(userinfo.wfProcessId))
  958. {
  959. delegateUserlist.Add(userinfo);
  960. }
  961. }
  962. return delegateUserlist;
  963. }
  964. catch (Exception ex)
  965. {
  966. if (ex is ExceptionEx)
  967. {
  968. throw;
  969. }
  970. else
  971. {
  972. throw ExceptionEx.ThrowServiceException(ex);
  973. }
  974. }
  975. }
  976. #region 流程表单数据统计
  977. /// <summary>
  978. /// 用印申请流程表单统计
  979. /// </summary>
  980. /// <param name="pagination">分页参数</param>
  981. /// <param name="queryJson">查询条件</param>
  982. /// <returns></returns>
  983. public IEnumerable<LC_yyspdEntity> GetPageListOfyyspd(Pagination pagination, string queryJson)
  984. {
  985. try
  986. {
  987. var misdbname = BaseRepository("CollegeMIS").getDbConnection().Database;
  988. var basedbname = BaseRepository().getDbConnection().Database;
  989. var strSql = new StringBuilder();
  990. strSql.Append("select y.*,t.F_Id,t.F_SchemeId,t.F_SchemeCode,t.F_SchemeName,t.F_Title,t.F_Level,t.F_EnabledMark,t.F_IsFinished,t.F_CreateDate,t.F_CreateUserId,t.F_CreateUserName as F_CreateUserNameInProcess from LR_NWF_Process t left join LR_NWF_SchemeInfo s on t.F_SchemeCode=s.F_Code ");
  991. strSql.Append($" left join {misdbname}.dbo.LC_yyspd y on y.LC_ID=t.F_Id ");
  992. strSql.Append(" where 1=1 and t.F_EnabledMark !=2 and t.F_EnabledMark != 3 and t.F_IsChild = 0 ");
  993. strSql.Append(" and s.F_Code='LC_yyspd' ");
  994. var queryParam = queryJson.ToJObject();
  995. // 虚拟参数
  996. var dp = new DynamicParameters(new { });
  997. // 分类
  998. if (!queryParam["categoryId"].IsEmpty()) // 1:未完成 2:已完成
  999. {
  1000. if (queryParam["categoryId"].ToString() == "1")
  1001. {
  1002. strSql.Append(" and t.F_IsFinished = 0 ");
  1003. }
  1004. else
  1005. {
  1006. strSql.Append(" and t.F_IsFinished = 1 ");
  1007. }
  1008. }
  1009. //用印名称
  1010. if (!queryParam["LC_yzmc"].IsEmpty())
  1011. {
  1012. dp.Add("LC_yzmc", "%" + queryParam["LC_yzmc"].ToString() + "%", DbType.String);
  1013. strSql.Append(" AND y.LC_yzmc like @LC_yzmc ");
  1014. }
  1015. //用印事项
  1016. if (!queryParam["LC_yysx"].IsEmpty())
  1017. {
  1018. dp.Add("LC_yysx", "%" + queryParam["LC_yysx"].ToString() + "%", DbType.String);
  1019. strSql.Append(" AND y.LC_yysx like @LC_yysx ");
  1020. }
  1021. //用印时间
  1022. if (!queryParam["LC_yysj"].IsEmpty())
  1023. {
  1024. dp.Add("LC_yysj", "%" + queryParam["LC_yysj"].ToString() + "%", DbType.String);
  1025. strSql.Append(" AND y.LC_yysj like @LC_yysj ");
  1026. }
  1027. //关键字:用印名称、用印事项、用印时间
  1028. if (!queryParam["keyword"].IsEmpty())
  1029. {
  1030. dp.Add("keyword", "%" + queryParam["keyword"].ToString() + "%", DbType.String);
  1031. strSql.Append(" AND (y.LC_yzmc like @keyword or y.LC_yysx like @keyword or y.LC_yysj like @keyword) ");
  1032. }
  1033. // 用印时间
  1034. if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty())
  1035. {
  1036. dp.Add("StartTime", queryParam["StartTime"].ToString(), DbType.String);
  1037. dp.Add("EndTime", queryParam["EndTime"].ToString(), DbType.String);
  1038. strSql.Append(" and (y.LC_yysj >= @StartTime and y.LC_yysj <= @EndTime)");
  1039. }
  1040. var result = this.BaseRepository().FindList<LC_yyspdEntity>(strSql.ToString(), dp);
  1041. return result;
  1042. }
  1043. catch (Exception ex)
  1044. {
  1045. if (ex is ExceptionEx)
  1046. {
  1047. throw;
  1048. }
  1049. else
  1050. {
  1051. throw ExceptionEx.ThrowServiceException(ex);
  1052. }
  1053. }
  1054. }
  1055. /// <summary>
  1056. /// 会议室申请流程表单统计
  1057. /// </summary>
  1058. /// <param name="pagination">分页参数</param>
  1059. /// <param name="queryJson">查询条件</param>
  1060. /// <returns></returns>
  1061. public IEnumerable<LC_meetingEntity> GetPageListOfmeeting(Pagination pagination, string queryJson)
  1062. {
  1063. try
  1064. {
  1065. var misdbname = BaseRepository("CollegeMIS").getDbConnection().Database;
  1066. var basedbname = BaseRepository().getDbConnection().Database;
  1067. var strSql = new StringBuilder();
  1068. strSql.Append("select y.*,t.F_Id,t.F_SchemeId,t.F_SchemeCode,t.F_SchemeName,t.F_Title,t.F_Level,t.F_EnabledMark,t.F_IsFinished,t.F_CreateDate,t.F_CreateUserId,t.F_CreateUserName as F_CreateUserNameInProcess from LR_NWF_Process t left join LR_NWF_SchemeInfo s on t.F_SchemeCode=s.F_Code ");
  1069. strSql.Append($" left join {misdbname}.dbo.LC_meeting y on y.LC_ID=t.F_Id ");
  1070. strSql.Append(" where 1=1 and t.F_EnabledMark !=2 and t.F_EnabledMark != 3 and t.F_IsChild = 0 ");
  1071. strSql.Append(" and s.F_Code='LC_meeting' ");
  1072. var queryParam = queryJson.ToJObject();
  1073. // 虚拟参数
  1074. var dp = new DynamicParameters(new { });
  1075. // 分类
  1076. if (!queryParam["categoryId"].IsEmpty()) // 1:未完成 2:已完成
  1077. {
  1078. if (queryParam["categoryId"].ToString() == "1")
  1079. {
  1080. strSql.Append(" and t.F_IsFinished = 0 ");
  1081. }
  1082. else
  1083. {
  1084. strSql.Append(" and t.F_IsFinished = 1 ");
  1085. }
  1086. }
  1087. //申请人
  1088. if (!queryParam["F_CreateUserName"].IsEmpty())
  1089. {
  1090. dp.Add("F_CreateUserName", "%" + queryParam["F_CreateUserName"].ToString() + "%", DbType.String);
  1091. strSql.Append(" AND y.F_CreateUserName like @F_CreateUserName ");
  1092. }
  1093. //会议主题
  1094. if (!queryParam["LC_Title"].IsEmpty())
  1095. {
  1096. dp.Add("LC_Title", "%" + queryParam["LC_Title"].ToString() + "%", DbType.String);
  1097. strSql.Append(" AND y.LC_Title like @LC_Title ");
  1098. }
  1099. //会议内容
  1100. if (!queryParam["LC_Content"].IsEmpty())
  1101. {
  1102. dp.Add("LC_Content", "%" + queryParam["LC_Content"].ToString() + "%", DbType.String);
  1103. strSql.Append(" AND y.LC_Content like @LC_Content ");
  1104. }
  1105. //会议室
  1106. if (!queryParam["LC_Meetroom"].IsEmpty())
  1107. {
  1108. dp.Add("LC_Meetroom", "%" + queryParam["LC_Meetroom"].ToString() + "%", DbType.String);
  1109. strSql.Append(" AND y.LC_Meetroom like @LC_Meetroom ");
  1110. }
  1111. //会议时间
  1112. if (!queryParam["LC_MeetTime"].IsEmpty())
  1113. {
  1114. dp.Add("LC_MeetTime", "%" + queryParam["LC_MeetTime"].ToString() + "%", DbType.String);
  1115. strSql.Append(" AND y.LC_MeetTime like @LC_MeetTime ");
  1116. }
  1117. //关键字:申请人、会议主题、会议内容、会议室、会议时间
  1118. if (!queryParam["keyword"].IsEmpty())
  1119. {
  1120. dp.Add("keyword", "%" + queryParam["keyword"].ToString() + "%", DbType.String);
  1121. strSql.Append(" AND (y.F_CreateUserName like @keyword or y.LC_Title like @keyword or y.LC_Content like @keyword or y.LC_Meetroom like @keyword or y.LC_MeetTime like @keyword) ");
  1122. }
  1123. // 会议时间
  1124. if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty())
  1125. {
  1126. dp.Add("StartTime", queryParam["StartTime"].ToString(), DbType.Date);
  1127. dp.Add("EndTime", queryParam["EndTime"].ToString(), DbType.Date);
  1128. strSql.Append(" and (y.LC_MeetTime >= @StartTime and y.LC_MeetTime <= @EndTime)");
  1129. }
  1130. var result = this.BaseRepository().FindList<LC_meetingEntity>(strSql.ToString(), dp);
  1131. return result;
  1132. }
  1133. catch (Exception ex)
  1134. {
  1135. if (ex is ExceptionEx)
  1136. {
  1137. throw;
  1138. }
  1139. else
  1140. {
  1141. throw ExceptionEx.ThrowServiceException(ex);
  1142. }
  1143. }
  1144. }
  1145. /// <summary>
  1146. /// 党委会党委专题会申请流程表单统计
  1147. /// </summary>
  1148. /// <param name="pagination">分页参数</param>
  1149. /// <param name="queryJson">查询条件</param>
  1150. /// <returns></returns>
  1151. public IEnumerable<LC_dwhsqEntity> GetPageListOfdwhsq(Pagination pagination, string queryJson)
  1152. {
  1153. try
  1154. {
  1155. var misdbname = BaseRepository("CollegeMIS").getDbConnection().Database;
  1156. var basedbname = BaseRepository().getDbConnection().Database;
  1157. var strSql = new StringBuilder();
  1158. strSql.Append("select y.*,t.F_Id,t.F_SchemeId,t.F_SchemeCode,t.F_SchemeName,t.F_Title,t.F_Level,t.F_EnabledMark,t.F_IsFinished,t.F_CreateDate,t.F_CreateUserId,t.F_CreateUserName as F_CreateUserNameInProcess from LR_NWF_Process t left join LR_NWF_SchemeInfo s on t.F_SchemeCode=s.F_Code ");
  1159. strSql.Append($" left join {misdbname}.dbo.LC_dwhsq y on y.LC_ID=t.F_Id ");
  1160. strSql.Append(" where 1=1 and t.F_EnabledMark !=2 and t.F_EnabledMark != 3 and t.F_IsChild = 0 ");
  1161. strSql.Append(" and s.F_Code='LC_dwhsq' ");
  1162. var queryParam = queryJson.ToJObject();
  1163. // 虚拟参数
  1164. var dp = new DynamicParameters(new { });
  1165. // 分类
  1166. if (!queryParam["categoryId"].IsEmpty()) // 1:未完成 2:已完成
  1167. {
  1168. if (queryParam["categoryId"].ToString() == "1")
  1169. {
  1170. strSql.Append(" and t.F_IsFinished = 0 ");
  1171. }
  1172. else
  1173. {
  1174. strSql.Append(" and t.F_IsFinished = 1 ");
  1175. }
  1176. }
  1177. //申请人
  1178. if (!queryParam["F_CreateUserName"].IsEmpty())
  1179. {
  1180. dp.Add("F_CreateUserName", "%" + queryParam["F_CreateUserName"].ToString() + "%", DbType.String);
  1181. strSql.Append(" AND y.F_CreateUserName like @F_CreateUserName ");
  1182. }
  1183. //会议主题
  1184. if (!queryParam["LC_hyzt"].IsEmpty())
  1185. {
  1186. dp.Add("LC_hyzt", "%" + queryParam["LC_hyzt"].ToString() + "%", DbType.String);
  1187. strSql.Append(" AND y.LC_hyzt like @LC_hyzt ");
  1188. }
  1189. //会议内容
  1190. if (!queryParam["LC_hynr"].IsEmpty())
  1191. {
  1192. dp.Add("LC_hynr", "%" + queryParam["LC_hynr"].ToString() + "%", DbType.String);
  1193. strSql.Append(" AND y.LC_hynr like @LC_hynr ");
  1194. }
  1195. //会议时间
  1196. if (!queryParam["LC_hysj"].IsEmpty())
  1197. {
  1198. dp.Add("LC_hysj", "%" + queryParam["LC_hysj"].ToString() + "%", DbType.String);
  1199. strSql.Append(" AND y.LC_hysj like @LC_hysj ");
  1200. }
  1201. //关键字:申请人、会议主题、会议内容、会议时间
  1202. if (!queryParam["keyword"].IsEmpty())
  1203. {
  1204. dp.Add("keyword", "%" + queryParam["keyword"].ToString() + "%", DbType.String);
  1205. strSql.Append(" AND (y.F_CreateUserName like @keyword or y.LC_hyzt like @keyword or y.LC_hysj like @keyword or y.LC_hynr like @keyword ) ");
  1206. }
  1207. // 会议时间
  1208. if (!queryParam["StartTime"].IsEmpty() && !queryParam["EndTime"].IsEmpty())
  1209. {
  1210. dp.Add("StartTime", queryParam["StartTime"].ToString(), DbType.Date);
  1211. dp.Add("EndTime", queryParam["EndTime"].ToString(), DbType.Date);
  1212. strSql.Append(" and (y.LC_hysj >= @StartTime and y.LC_hysj <= @EndTime)");
  1213. }
  1214. var result = this.BaseRepository().FindList<LC_dwhsqEntity>(strSql.ToString(), dp);
  1215. return result;
  1216. }
  1217. catch (Exception ex)
  1218. {
  1219. if (ex is ExceptionEx)
  1220. {
  1221. throw;
  1222. }
  1223. else
  1224. {
  1225. throw ExceptionEx.ThrowServiceException(ex);
  1226. }
  1227. }
  1228. }
  1229. #endregion
  1230. #region 获取sql语句
  1231. /// <summary>
  1232. /// 获取我的流程信息列表SQL语句
  1233. /// </summary>
  1234. /// <returns></returns>
  1235. public string GetMySql()
  1236. {
  1237. try
  1238. {
  1239. var strSql = new StringBuilder();
  1240. strSql.Append(@"SELECT
  1241. p.F_CreateDate,
  1242. p.F_Id,
  1243. p.F_SchemeId,
  1244. p.F_SchemeCode,
  1245. p.F_SchemeName,
  1246. p.F_Title,
  1247. p.F_Level,
  1248. p.F_EnabledMark,
  1249. p.F_IsAgain,
  1250. p.F_IsFinished,
  1251. p.F_IsChild,
  1252. p.F_ParentTaskId,
  1253. p.F_ParentProcessId,
  1254. p.F_CreateUserId,
  1255. p.F_CreateUserName,
  1256. p.F_IsStart
  1257. FROM
  1258. LR_NWF_Process p
  1259. WHERE
  1260. p.F_CreateUserId = @userId AND p.F_IsChild = 0
  1261. ");
  1262. return strSql.ToString();
  1263. }
  1264. catch (Exception ex)
  1265. {
  1266. if (ex is ExceptionEx)
  1267. {
  1268. throw;
  1269. }
  1270. else
  1271. {
  1272. throw ExceptionEx.ThrowServiceException(ex);
  1273. }
  1274. }
  1275. }
  1276. /// <summary>
  1277. /// 获取我的代办任务列表SQL语句
  1278. /// </summary>
  1279. /// <param name="userInfo">用户信息</param>
  1280. /// <param name="isBatchAudit">true获取批量审核任务</param>
  1281. /// <returns></returns>
  1282. public string GetMyTaskSql(UserInfo userInfo, bool isBatchAudit = false)
  1283. {
  1284. try
  1285. {
  1286. var strSql = new StringBuilder();
  1287. strSql.Append(@"SELECT
  1288. t.F_Id AS F_TaskId,
  1289. t.F_Type AS F_TaskType,
  1290. t.F_NodeName AS F_TaskName,
  1291. t.F_IsUrge,
  1292. t.F_ModifyDate as F_CreateDate,
  1293. p.F_Id,
  1294. p.F_SchemeId,
  1295. p.F_SchemeCode,
  1296. p.F_SchemeName,
  1297. p.F_Title,
  1298. p.F_Level,
  1299. p.F_EnabledMark,
  1300. p.F_IsAgain,
  1301. p.F_IsFinished,
  1302. p.F_IsChild,
  1303. p.F_ParentTaskId,
  1304. p.F_ParentProcessId,
  1305. p.F_CreateUserId,
  1306. p.F_CreateUserName,
  1307. p.F_IsStart
  1308. FROM
  1309. (
  1310. SELECT
  1311. F_TaskId
  1312. FROM
  1313. LR_NWF_TaskRelation r1
  1314. LEFT JOIN LR_NWF_Task t1 ON r1.F_TaskId = t1.F_Id
  1315. WHERE r1.F_Mark = 0 AND r1.F_Result = 0 AND (r1.F_UserId = @userId
  1316. ");
  1317. // 添加委托信息
  1318. List<UserInfo> delegateList = GetDelegateProcess(userInfo.userId);
  1319. foreach (var item in delegateList)
  1320. {
  1321. string processId = "'" + item.wfProcessId.Replace(",", "','") + "'";
  1322. string userI2 = "'" + item.userId + "'";
  1323. strSql.Append(" OR (r1.F_UserId =" + userI2 + " AND t1.F_ProcessId in (" + processId + ") AND t1.F_Type != 2 )");
  1324. }
  1325. strSql.Append(@") GROUP BY
  1326. F_TaskId
  1327. ) r
  1328. LEFT JOIN LR_NWF_Task t ON t.F_Id = r.F_TaskId
  1329. LEFT JOIN LR_NWF_Process p ON p.F_Id = t.F_ProcessId
  1330. WHERE
  1331. t.F_IsFinished = 0 AND (p.F_IsFinished = 0 OR t.F_Type = 2)");
  1332. if (isBatchAudit)
  1333. {
  1334. strSql.Append(" AND t.F_IsBatchAudit = 1 ");
  1335. }
  1336. return strSql.ToString();
  1337. }
  1338. catch (Exception ex)
  1339. {
  1340. if (ex is ExceptionEx)
  1341. {
  1342. throw;
  1343. }
  1344. else
  1345. {
  1346. throw ExceptionEx.ThrowServiceException(ex);
  1347. }
  1348. }
  1349. }
  1350. /// <summary>
  1351. /// 获取我的已办任务列表SQL语句
  1352. /// </summary>
  1353. /// <returns></returns>
  1354. public string GetMyFinishTaskSql()
  1355. {
  1356. try
  1357. {
  1358. var strSql = new StringBuilder();
  1359. strSql.Append(@"SELECT
  1360. t.F_Id AS F_TaskId,
  1361. t.F_Type AS F_TaskType,
  1362. t.F_NodeName AS F_TaskName,
  1363. r.F_Time as F_CreateDate,
  1364. p.F_Id,
  1365. p.F_SchemeId,
  1366. p.F_SchemeCode,
  1367. p.F_SchemeName,
  1368. p.F_Title,
  1369. p.F_Level,
  1370. p.F_EnabledMark,
  1371. p.F_IsAgain,
  1372. p.F_IsFinished,
  1373. p.F_IsChild,
  1374. p.F_ParentTaskId,
  1375. p.F_ParentProcessId,
  1376. p.F_CreateUserId,
  1377. p.F_CreateUserName,
  1378. p.F_IsStart
  1379. FROM
  1380. LR_NWF_Task t
  1381. LEFT JOIN LR_NWF_TaskRelation r on r.F_TaskId = t.F_Id
  1382. LEFT JOIN LR_NWF_Process p ON t.F_ProcessId = p.F_Id
  1383. WHERE
  1384. (r.F_Result = 1 OR r.F_Result = 2 OR r.F_Result = 4) AND r.F_UserId = @userId
  1385. ");
  1386. return strSql.ToString();
  1387. }
  1388. catch (Exception ex)
  1389. {
  1390. if (ex is ExceptionEx)
  1391. {
  1392. throw;
  1393. }
  1394. else
  1395. {
  1396. throw ExceptionEx.ThrowServiceException(ex);
  1397. }
  1398. }
  1399. }
  1400. #endregion
  1401. #endregion
  1402. #region 保存信息
  1403. /// <summary>
  1404. /// 保存流程进程数据
  1405. /// </summary>
  1406. /// <param name="nWFProcessEntity">流程进程</param>
  1407. /// <param name="taskList">流程任务列表</param>
  1408. /// <param name="taskMsgList">流程消息列表</param>
  1409. /// <param name="taskLogEntity">任务日志</param>
  1410. public void Save(NWFProcessEntity nWFProcessEntity, List<NWFTaskEntity> taskList, List<NWFTaskMsgEntity> taskMsgList, NWFTaskLogEntity taskLogEntity)
  1411. {
  1412. NWFProcessEntity nWFProcessEntityTmp = this.BaseRepository().FindEntity<NWFProcessEntity>(nWFProcessEntity.F_Id);
  1413. var db = this.BaseRepository().BeginTrans();
  1414. try
  1415. {
  1416. if (nWFProcessEntityTmp == null)
  1417. {
  1418. db.Insert(nWFProcessEntity);
  1419. }
  1420. else
  1421. {
  1422. db.Update(nWFProcessEntity);
  1423. }
  1424. foreach (var task in taskList)
  1425. {
  1426. task.F_ModifyDate = DateTime.Now;
  1427. db.Insert(task);
  1428. int num = 1;
  1429. if (task.nWFUserInfoList != null)
  1430. {
  1431. foreach (var taskUser in task.nWFUserInfoList)
  1432. {
  1433. NWFTaskRelationEntity nWFTaskRelationEntity = new NWFTaskRelationEntity();
  1434. nWFTaskRelationEntity.Create();
  1435. nWFTaskRelationEntity.F_TaskId = task.F_Id;
  1436. nWFTaskRelationEntity.F_UserId = taskUser.Id;
  1437. nWFTaskRelationEntity.F_Mark = taskUser.Mark;
  1438. nWFTaskRelationEntity.F_Result = 0;
  1439. nWFTaskRelationEntity.F_Sort = num;
  1440. db.Insert(nWFTaskRelationEntity);
  1441. num++;
  1442. }
  1443. }
  1444. }
  1445. foreach (var taskMsg in taskMsgList)
  1446. {
  1447. db.Insert(taskMsg);
  1448. }
  1449. db.Insert(taskLogEntity);
  1450. db.Commit();
  1451. }
  1452. catch (Exception ex)
  1453. {
  1454. db.Rollback();
  1455. if (ex is ExceptionEx)
  1456. {
  1457. throw;
  1458. }
  1459. else
  1460. {
  1461. throw ExceptionEx.ThrowServiceException(ex);
  1462. }
  1463. }
  1464. }
  1465. /// <summary>
  1466. /// 保存流程进程信息
  1467. /// </summary>
  1468. /// <param name="taskLogEntity">任务日志</param>
  1469. /// <param name="taskRelationEntity">任务执行人状态更新</param>
  1470. /// <param name="taskEntityUpdate">任务状态更新</param>
  1471. /// <param name="processEntity">流程进程状态更新</param>
  1472. /// <param name="confluenceList">会签信息</param>
  1473. /// <param name="closeTaskList">会签需要关闭的任务</param>
  1474. /// <param name="taskList">新的任务列表</param>
  1475. /// <param name="taskMsgList">新的任务消息列表</param>
  1476. 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)
  1477. {
  1478. var db = this.BaseRepository().BeginTrans();
  1479. try
  1480. {
  1481. db.Insert(taskLogEntity);
  1482. if (taskRelationEntity != null)
  1483. db.Update(taskRelationEntity);
  1484. db.Update(taskEntityUpdate);
  1485. if (processEntity != null)
  1486. {
  1487. db.Update(processEntity);
  1488. }
  1489. if (pProcessEntity != null)
  1490. {
  1491. db.Update(pProcessEntity);
  1492. }
  1493. if (confluenceList != null)
  1494. {
  1495. foreach (var item in confluenceList)
  1496. {
  1497. if (item.isClear)
  1498. {
  1499. string processId = item.F_ProcessId;
  1500. string nodeId = item.F_NodeId;
  1501. db.Delete<NWFConfluenceEntity>(t => t.F_ProcessId == processId && t.F_NodeId == nodeId);
  1502. // 增加一条会签审核记录
  1503. NWFTaskLogEntity nWFTaskLogEntity = new NWFTaskLogEntity()
  1504. {
  1505. F_ProcessId = processId,
  1506. F_OperationCode = "confluence",
  1507. F_OperationName = "会签" + (item.confluenceRes == 1 ? "通过" : "不通过"),
  1508. F_NodeId = item.F_NodeId,
  1509. F_TaskType = 7
  1510. };
  1511. nWFTaskLogEntity.Create();
  1512. db.Insert(nWFTaskLogEntity);
  1513. }
  1514. else
  1515. {
  1516. db.Insert(item);
  1517. }
  1518. }
  1519. }
  1520. if (closeTaskList != null)
  1521. {
  1522. foreach (var item in closeTaskList)
  1523. {
  1524. db.Update(item);
  1525. }
  1526. }
  1527. foreach (var task in taskList)
  1528. {
  1529. task.F_ModifyDate = DateTime.Now;
  1530. db.Insert(task);
  1531. int num = 1;
  1532. if (task.nWFUserInfoList != null)
  1533. {
  1534. foreach (var taskUser in task.nWFUserInfoList)
  1535. {
  1536. NWFTaskRelationEntity nWFTaskRelationEntity = new NWFTaskRelationEntity();
  1537. nWFTaskRelationEntity.Create();
  1538. nWFTaskRelationEntity.F_TaskId = task.F_Id;
  1539. nWFTaskRelationEntity.F_UserId = taskUser.Id;
  1540. nWFTaskRelationEntity.F_Mark = taskUser.Mark;
  1541. nWFTaskRelationEntity.F_Result = 0;
  1542. nWFTaskRelationEntity.F_Sort = num;
  1543. db.Insert(nWFTaskRelationEntity);
  1544. num++;
  1545. }
  1546. }
  1547. }
  1548. foreach (var taskMsg in taskMsgList)
  1549. {
  1550. db.Insert(taskMsg);
  1551. }
  1552. db.Commit();
  1553. }
  1554. catch (Exception ex)
  1555. {
  1556. db.Rollback();
  1557. if (ex is ExceptionEx)
  1558. {
  1559. throw;
  1560. }
  1561. else
  1562. {
  1563. throw ExceptionEx.ThrowServiceException(ex);
  1564. }
  1565. }
  1566. }
  1567. /// <summary>
  1568. /// 保存流程进程数据
  1569. /// </summary>
  1570. /// <param name="nWFProcessEntity">流程进程</param>
  1571. public void Save(NWFProcessEntity nWFProcessEntity)
  1572. {
  1573. try
  1574. {
  1575. this.BaseRepository().Insert(nWFProcessEntity);
  1576. }
  1577. catch (Exception ex)
  1578. {
  1579. if (ex is ExceptionEx)
  1580. {
  1581. throw;
  1582. }
  1583. else
  1584. {
  1585. throw ExceptionEx.ThrowServiceException(ex);
  1586. }
  1587. }
  1588. }
  1589. /// <summary>
  1590. /// 保存流程进程数据
  1591. /// </summary>
  1592. /// <param name="nWFTaskLogEntity">任务日志数据</param>
  1593. /// <param name="taskUserUpdateList">任务执行人需要更新状态数据</param>
  1594. /// <param name="nWFTaskMsgEntity">任务消息</param>
  1595. public void Save(NWFTaskLogEntity nWFTaskLogEntity, List<NWFTaskRelationEntity> taskUserUpdateList, NWFTaskMsgEntity nWFTaskMsgEntity)
  1596. {
  1597. var db = this.BaseRepository().BeginTrans();
  1598. try
  1599. {
  1600. db.Insert(nWFTaskLogEntity);
  1601. foreach (var item in taskUserUpdateList)
  1602. {
  1603. db.Update(item);
  1604. }
  1605. db.Insert(nWFTaskMsgEntity);
  1606. db.Commit();
  1607. }
  1608. catch (Exception ex)
  1609. {
  1610. db.Rollback();
  1611. if (ex is ExceptionEx)
  1612. {
  1613. throw;
  1614. }
  1615. else
  1616. {
  1617. throw ExceptionEx.ThrowServiceException(ex);
  1618. }
  1619. }
  1620. }
  1621. /// <summary>
  1622. /// 保存流程进程数据
  1623. /// </summary>
  1624. /// <param name="nWFTaskLogEntity">任务日志数据</param>
  1625. /// <param name="nWFTaskRelationEntity">任务执行人需要更新状态数据</param>
  1626. /// <param name="taskEntity">任务</param>
  1627. public void Save(NWFTaskLogEntity nWFTaskLogEntity, NWFTaskRelationEntity nWFTaskRelationEntity, NWFTaskEntity taskEntity)
  1628. {
  1629. var db = this.BaseRepository().BeginTrans();
  1630. try
  1631. {
  1632. db.Insert(nWFTaskLogEntity);
  1633. db.Update(nWFTaskRelationEntity);
  1634. if (taskEntity != null)
  1635. {
  1636. taskEntity.F_ModifyDate = DateTime.Now;
  1637. db.Update(taskEntity);
  1638. }
  1639. db.Commit();
  1640. }
  1641. catch (Exception ex)
  1642. {
  1643. db.Rollback();
  1644. if (ex is ExceptionEx)
  1645. {
  1646. throw;
  1647. }
  1648. else
  1649. {
  1650. throw ExceptionEx.ThrowServiceException(ex);
  1651. }
  1652. }
  1653. }
  1654. /// <summary>
  1655. /// 保存流程进程数据
  1656. /// </summary>
  1657. /// <param name="nWFTaskLogEntity">任务日志数据</param>
  1658. /// <param name="taskList">需要更新的任务列表</param>
  1659. /// <param name="taskMsgList">任务消息列表</param>
  1660. public void Save(NWFTaskLogEntity nWFTaskLogEntity, List<NWFTaskEntity> taskList, List<NWFTaskMsgEntity> taskMsgList)
  1661. {
  1662. var db = this.BaseRepository().BeginTrans();
  1663. try
  1664. {
  1665. db.Insert(nWFTaskLogEntity);
  1666. foreach (var item in taskList)
  1667. {
  1668. item.F_ModifyDate = DateTime.Now;
  1669. db.Update(item);
  1670. }
  1671. foreach (var item in taskMsgList)
  1672. {
  1673. db.Insert(item);
  1674. }
  1675. db.Commit();
  1676. }
  1677. catch (Exception ex)
  1678. {
  1679. db.Rollback();
  1680. if (ex is ExceptionEx)
  1681. {
  1682. throw;
  1683. }
  1684. else
  1685. {
  1686. throw ExceptionEx.ThrowServiceException(ex);
  1687. }
  1688. }
  1689. }
  1690. /// <summary>
  1691. /// 保存流程进程数据
  1692. /// </summary>
  1693. /// <param name="nWFTaskLogEntity">任务日志数据</param>
  1694. /// <param name="taskList">需要更新的任务列表</param>
  1695. /// <param name="taskMsgList">任务消息列表</param>
  1696. public void Save(NWFTaskLogEntity nWFTaskLogEntity, NWFTaskEntity task, List<NWFTaskMsgEntity> taskMsgList)
  1697. {
  1698. var db = this.BaseRepository().BeginTrans();
  1699. try
  1700. {
  1701. db.Insert(nWFTaskLogEntity);
  1702. task.F_ModifyDate = DateTime.Now;
  1703. db.Update(task);
  1704. foreach (var item in taskMsgList)
  1705. {
  1706. db.Insert(item);
  1707. }
  1708. db.Commit();
  1709. }
  1710. catch (Exception ex)
  1711. {
  1712. db.Rollback();
  1713. if (ex is ExceptionEx)
  1714. {
  1715. throw;
  1716. }
  1717. else
  1718. {
  1719. throw ExceptionEx.ThrowServiceException(ex);
  1720. }
  1721. }
  1722. }
  1723. /// <summary>
  1724. /// 保存流程进程信息
  1725. /// </summary>
  1726. /// <param name="taskLogEntity">任务日志</param>
  1727. /// <param name="taskRelationEntity">任务执行人状态更新</param>
  1728. /// <param name="taskEntityUpdate">任务状态更新</param>
  1729. /// <param name="processEntity">流程进程状态更新</param>
  1730. /// <param name="taskList">新的任务列表</param>
  1731. /// <param name="taskMsgList">新的任务消息列表</param>
  1732. 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)
  1733. {
  1734. NWFProcessEntity nWFProcessEntityTmp = this.BaseRepository().FindEntity<NWFProcessEntity>(nWFProcessEntity.F_Id);
  1735. IEnumerable<NWFTaskEntity> uTaskList = this.BaseRepository().FindList<NWFTaskEntity>(t => t.F_ProcessId == nWFProcessEntity.F_Id && t.F_NodeId == taskLogEntity.F_NodeId && t.F_IsFinished == 0);
  1736. var db = this.BaseRepository().BeginTrans();
  1737. try
  1738. {
  1739. if (nWFProcessEntityTmp == null)
  1740. {
  1741. db.Insert(nWFProcessEntity);
  1742. }
  1743. else
  1744. {
  1745. db.Update(nWFProcessEntity);
  1746. }
  1747. foreach (var task in taskList)
  1748. {
  1749. task.F_ModifyDate = DateTime.Now;
  1750. db.Insert(task);
  1751. int num = 1;
  1752. if (task.nWFUserInfoList != null)
  1753. {
  1754. foreach (var taskUser in task.nWFUserInfoList)
  1755. {
  1756. NWFTaskRelationEntity nWFTaskRelationEntity = new NWFTaskRelationEntity();
  1757. nWFTaskRelationEntity.Create();
  1758. nWFTaskRelationEntity.F_TaskId = task.F_Id;
  1759. nWFTaskRelationEntity.F_UserId = taskUser.Id;
  1760. nWFTaskRelationEntity.F_Mark = taskUser.Mark;
  1761. nWFTaskRelationEntity.F_Result = 0;
  1762. nWFTaskRelationEntity.F_Sort = num;
  1763. db.Insert(nWFTaskRelationEntity);
  1764. num++;
  1765. }
  1766. }
  1767. }
  1768. foreach (var taskMsg in taskMsgList)
  1769. {
  1770. db.Insert(taskMsg);
  1771. }
  1772. db.Insert(taskLogEntity);
  1773. foreach (var item in uTaskList)
  1774. {
  1775. item.F_IsFinished = 1;
  1776. db.Update(item);
  1777. }
  1778. // 父流程
  1779. db.Insert(pTaskLogEntity);
  1780. db.Update(pTaskRelationEntity);
  1781. db.Update(pTaskEntityUpdate);
  1782. if (pProcessEntity != null)
  1783. {
  1784. db.Update(pProcessEntity);
  1785. }
  1786. foreach (var task in pTaskList)
  1787. {
  1788. task.F_ModifyDate = DateTime.Now;
  1789. db.Insert(task);
  1790. int num = 1;
  1791. if (task.nWFUserInfoList != null)
  1792. {
  1793. foreach (var taskUser in task.nWFUserInfoList)
  1794. {
  1795. NWFTaskRelationEntity nWFTaskRelationEntity = new NWFTaskRelationEntity();
  1796. nWFTaskRelationEntity.Create();
  1797. nWFTaskRelationEntity.F_TaskId = task.F_Id;
  1798. nWFTaskRelationEntity.F_UserId = taskUser.Id;
  1799. nWFTaskRelationEntity.F_Mark = taskUser.Mark;
  1800. nWFTaskRelationEntity.F_Result = 0;
  1801. nWFTaskRelationEntity.F_Sort = num;
  1802. db.Insert(nWFTaskRelationEntity);
  1803. num++;
  1804. }
  1805. }
  1806. }
  1807. foreach (var taskMsg in pTaskMsgList)
  1808. {
  1809. db.Insert(taskMsg);
  1810. }
  1811. db.Commit();
  1812. }
  1813. catch (Exception ex)
  1814. {
  1815. db.Rollback();
  1816. if (ex is ExceptionEx)
  1817. {
  1818. throw;
  1819. }
  1820. else
  1821. {
  1822. throw ExceptionEx.ThrowServiceException(ex);
  1823. }
  1824. }
  1825. }
  1826. /// <summary>
  1827. /// (流程撤销)
  1828. /// </summary>
  1829. /// <param name="processId">流程进程实例</param>
  1830. /// <param name="taskList">流程任务列表</param>
  1831. /// <param name="EnabledMark">2草稿3作废</param>
  1832. public void Save(string processId, IEnumerable<NWFTaskEntity> taskList, int EnabledMark, NWFTaskLogEntity nWFTaskLogEntity = null)
  1833. {
  1834. var db = this.BaseRepository().BeginTrans();
  1835. try
  1836. {
  1837. NWFProcessEntity nWFProcessEntity = new NWFProcessEntity();
  1838. nWFProcessEntity.F_Id = processId;
  1839. nWFProcessEntity.F_EnabledMark = EnabledMark;
  1840. db.Update(nWFProcessEntity);
  1841. if (EnabledMark == 2)
  1842. {
  1843. db.Delete<NWFTaskLogEntity>(t => t.F_ProcessId == processId);
  1844. }
  1845. foreach (var task in taskList)
  1846. {
  1847. db.Delete(task);
  1848. string taskId = task.F_Id;
  1849. db.Delete<NWFTaskMsgEntity>(t => t.F_TaskId == taskId);
  1850. db.Delete<NWFTaskRelationEntity>(t => t.F_TaskId == taskId);
  1851. }
  1852. if (nWFTaskLogEntity != null)
  1853. {
  1854. db.Insert(nWFTaskLogEntity);
  1855. }
  1856. db.Commit();
  1857. }
  1858. catch (Exception ex)
  1859. {
  1860. db.Rollback();
  1861. if (ex is ExceptionEx)
  1862. {
  1863. throw;
  1864. }
  1865. else
  1866. {
  1867. throw ExceptionEx.ThrowServiceException(ex);
  1868. }
  1869. }
  1870. }
  1871. /// <summary>
  1872. /// 删除流程进程实体
  1873. /// </summary>
  1874. /// <param name="processId">流程进程主键</param>
  1875. public void DeleteEntity(string processId)
  1876. {
  1877. try
  1878. {
  1879. this.BaseRepository().Delete<NWFProcessEntity>(t => t.F_Id == processId);
  1880. }
  1881. catch (Exception ex)
  1882. {
  1883. if (ex is ExceptionEx)
  1884. {
  1885. throw;
  1886. }
  1887. else
  1888. {
  1889. throw ExceptionEx.ThrowServiceException(ex);
  1890. }
  1891. }
  1892. }
  1893. /// <summary>
  1894. ///
  1895. /// </summary>
  1896. /// <param name="processId"></param>
  1897. /// <param name="EnabledMark"></param>
  1898. public void UpdateEnabledMark(string processId, string EnabledMark)
  1899. {
  1900. try
  1901. {
  1902. var entity = this.BaseRepository().FindEntity<NWFProcessEntity>(t => t.F_Id == processId);
  1903. entity.F_EnabledMark = Convert.ToInt32(EnabledMark);
  1904. this.BaseRepository().Update(entity);
  1905. }
  1906. catch (Exception ex)
  1907. {
  1908. if (ex is ExceptionEx)
  1909. {
  1910. throw;
  1911. }
  1912. else
  1913. {
  1914. throw ExceptionEx.ThrowServiceException(ex);
  1915. }
  1916. }
  1917. }
  1918. /// <summary>
  1919. /// 删除流程进程所有信息(流程撤销)
  1920. /// </summary>
  1921. /// <param name="processId">流程进程实例</param>
  1922. /// <param name="taskList">流程任务列表</param>
  1923. public void Delete(string processId, IEnumerable<NWFTaskEntity> taskList)
  1924. {
  1925. var db = this.BaseRepository().BeginTrans();
  1926. try
  1927. {
  1928. db.Delete<NWFProcessEntity>(t => t.F_Id == processId);
  1929. db.Delete<NWFTaskLogEntity>(t => t.F_ProcessId == processId);
  1930. foreach (var task in taskList)
  1931. {
  1932. db.Delete(task);
  1933. string taskId = task.F_Id;
  1934. db.Delete<NWFTaskMsgEntity>(t => t.F_TaskId == taskId);
  1935. db.Delete<NWFTaskRelationEntity>(t => t.F_TaskId == taskId);
  1936. }
  1937. db.Commit();
  1938. }
  1939. catch (Exception ex)
  1940. {
  1941. db.Rollback();
  1942. if (ex is ExceptionEx)
  1943. {
  1944. throw;
  1945. }
  1946. else
  1947. {
  1948. throw ExceptionEx.ThrowServiceException(ex);
  1949. }
  1950. }
  1951. }
  1952. /// <summary>
  1953. /// 撤销审核
  1954. /// </summary>
  1955. /// <param name="taskList">需要撤回的任务节点</param>
  1956. /// <param name="taskUser">当前处理人</param>
  1957. /// <param name="taskEntity">当前任务</param>
  1958. /// <param name="taskLogEntity">日志信息</param>
  1959. /// <param name="taskUserNew">当前任务节点的处理人(串行多人审核)</param>
  1960. public void RevokeAudit(List<string> taskList, NWFTaskRelationEntity taskUser, NWFTaskEntity taskEntity, NWFTaskLogEntity taskLogEntity, NWFTaskRelationEntity taskUserNew = null)
  1961. {
  1962. var db = this.BaseRepository().BeginTrans();
  1963. try
  1964. {
  1965. if (taskList != null)
  1966. {
  1967. foreach (var taskId in taskList)
  1968. {
  1969. db.Delete<NWFTaskEntity>(t => t.F_Id == taskId);
  1970. db.Delete<NWFTaskRelationEntity>(t => t.F_TaskId == taskId);
  1971. db.Delete<NWFTaskMsgEntity>(t => t.F_TaskId == taskId);
  1972. }
  1973. }
  1974. if (taskEntity != null)
  1975. {
  1976. db.Update(taskEntity);
  1977. }
  1978. taskUser.F_Mark = 0;
  1979. taskUser.F_Result = 0;
  1980. db.Update(taskUser);
  1981. db.Insert(taskLogEntity);
  1982. if (taskUserNew != null)
  1983. {
  1984. taskUserNew.F_Mark = 1;
  1985. taskUserNew.F_Result = 0;
  1986. db.Update(taskUserNew);
  1987. }
  1988. // 更新下流程实例(处理重新发起状态)
  1989. NWFProcessEntity nWFProcessEntity = new NWFProcessEntity();
  1990. nWFProcessEntity.F_Id = taskLogEntity.F_ProcessId;
  1991. nWFProcessEntity.F_IsAgain = 0;
  1992. db.Update(nWFProcessEntity);
  1993. db.Commit();
  1994. }
  1995. catch (Exception ex)
  1996. {
  1997. db.Rollback();
  1998. if (ex is ExceptionEx)
  1999. {
  2000. throw;
  2001. }
  2002. else
  2003. {
  2004. throw ExceptionEx.ThrowServiceException(ex);
  2005. }
  2006. }
  2007. }
  2008. /// <summary>
  2009. /// 保存任务
  2010. /// </summary>
  2011. /// <param name="taskList">任务列表</param>
  2012. public void SaveTask(List<NWFTaskEntity> taskList)
  2013. {
  2014. var db = this.BaseRepository().BeginTrans();
  2015. try
  2016. {
  2017. foreach (var task in taskList)
  2018. {
  2019. task.F_ModifyDate = DateTime.Now;
  2020. db.Insert(task);
  2021. int num = 1;
  2022. if (task.nWFUserInfoList != null)
  2023. {
  2024. foreach (var taskUser in task.nWFUserInfoList)
  2025. {
  2026. NWFTaskRelationEntity nWFTaskRelationEntity = new NWFTaskRelationEntity();
  2027. nWFTaskRelationEntity.Create();
  2028. nWFTaskRelationEntity.F_TaskId = task.F_Id;
  2029. nWFTaskRelationEntity.F_UserId = taskUser.Id;
  2030. nWFTaskRelationEntity.F_Mark = taskUser.Mark;
  2031. nWFTaskRelationEntity.F_Result = 0;
  2032. nWFTaskRelationEntity.F_Sort = num;
  2033. db.Insert(nWFTaskRelationEntity);
  2034. num++;
  2035. }
  2036. }
  2037. }
  2038. db.Commit();
  2039. }
  2040. catch (Exception)
  2041. {
  2042. db.Rollback();
  2043. throw;
  2044. }
  2045. }
  2046. /// <summary>
  2047. /// 流程监控统计耗时最长信息
  2048. /// </summary>
  2049. public void StatisticsData()
  2050. {
  2051. var db = this.BaseRepository();
  2052. try
  2053. {
  2054. db.BeginTrans();
  2055. var processList = db.FindList<NWFProcessEntity>(t => t.F_EnabledMark != 2 && t.F_IsChild == 0).ToList();
  2056. //删除今天统计的数据,每天只记录一份数据
  2057. db.ExecuteBySql("delete from LR_NWF_ProcessStatistics where DateDiff(dd,F_CreateDate,getdate())=0");
  2058. var NTRList = db.FindList<NWFTaskRelationEntity>($"SELECT * FROM LR_NWF_TaskRelation").ToList();
  2059. var userList = db.FindList<UserEntity>(x => x.F_DeleteMark == 0).ToList();
  2060. var deptList = db.FindList<DepartmentEntity>().ToList();
  2061. //Action<IRepository, NWFProcessEntity, List<NWFTaskRelationEntity>, List<UserEntity>, List<DepartmentEntity>> action = new Action<IRepository, NWFProcessEntity, List<NWFTaskRelationEntity>, List<UserEntity>, List<DepartmentEntity>>(AddProcessStatistics);
  2062. //RunTask<NWFProcessEntity>(processList, action);
  2063. ConcurrentQueue<NWFProcessEntity> queue = new ConcurrentQueue<NWFProcessEntity>(processList);
  2064. int threadCount = 10; //开启10个线程
  2065. for (int i = 0; i < threadCount; i++)
  2066. {
  2067. string fileName = $"task{i}.txt";
  2068. //开启新线程
  2069. Task.Factory.StartNew(() =>
  2070. {
  2071. var sb = new StringBuilder();
  2072. int j = 0;
  2073. //数据循环出队
  2074. while (queue.TryDequeue(out NWFProcessEntity model))
  2075. {
  2076. //处理数据
  2077. if (model != null)
  2078. AddProcessStatistics(db, model, NTRList, userList, deptList);
  2079. if (j % 100 == 0 || (queue.Count.Equals(0) && j < 100))
  2080. {
  2081. Thread.Sleep(100);
  2082. }
  2083. j++;
  2084. }
  2085. });
  2086. }
  2087. db.Commit();
  2088. }
  2089. catch (Exception ex)
  2090. {
  2091. db.Rollback();
  2092. if (ex is ExceptionEx)
  2093. {
  2094. throw;
  2095. }
  2096. else
  2097. {
  2098. throw ExceptionEx.ThrowServiceException(ex);
  2099. }
  2100. }
  2101. }
  2102. /// <summary>
  2103. /// 流程监控统计表添加数据
  2104. /// </summary>
  2105. /// <param name="db"></param>
  2106. /// <param name="model"></param>
  2107. /// <param name="NTRList"></param>
  2108. /// <param name="userList"></param>
  2109. /// <param name="deptList"></param>
  2110. private void AddProcessStatistics(IRepository db, NWFProcessEntity model, List<NWFTaskRelationEntity> NTRList, List<UserEntity> userList, List<DepartmentEntity> deptList)
  2111. {
  2112. var userNames = "";
  2113. var tasklist = db.FindList<NWFTaskEntity>(t => t.F_ProcessId == model.F_Id && t.F_IsFinished == 0).FirstOrDefault();
  2114. if (tasklist != null && !string.IsNullOrEmpty(tasklist.F_Id))
  2115. {
  2116. List<string> usernamelist = new List<string>();
  2117. List<string> nextlist = NTRList.Where(x => x.F_TaskId == tasklist.F_Id).Select(m => m.F_UserId).ToList();
  2118. foreach (var uid in nextlist)
  2119. {
  2120. var userentity = userList.Find(x => x.F_UserId == uid);
  2121. string deptname = deptList.Find(x => x.F_DepartmentId == userentity?.F_DepartmentId)?.F_FullName;
  2122. usernamelist.Add("[" + deptname + "]" + userentity?.F_RealName);
  2123. }
  2124. userNames = string.Join(",", usernamelist);
  2125. }
  2126. var addSql = $@"INSERT INTO [dbo].[LR_NWF_ProcessStatistics]
  2127. ([Id]
  2128. ,[F_ProcessId]
  2129. ,[F_SchemeId]
  2130. ,[F_SchemeCode]
  2131. ,[F_SchemeName]
  2132. ,[F_Title]
  2133. ,[F_Level]
  2134. ,[F_EnabledMark]
  2135. ,[F_IsAgain]
  2136. ,[F_IsFinished]
  2137. ,[F_IsChild]
  2138. ,[F_IsAsyn]
  2139. ,[F_ParentNodeId]
  2140. ,[F_ParentTaskId]
  2141. ,[F_ParentProcessId]
  2142. ,[F_IsStart]
  2143. ,[F_CurrentHandler]
  2144. ,[F_LongestTimeProcessor]
  2145. ,[F_LongestTime]
  2146. ,[F_CreateDate]
  2147. ,[F_CreateUserId])
  2148. VALUES
  2149. (newid()
  2150. ,'{model.F_Id}'
  2151. ,'{model.F_SchemeId}'
  2152. ,'{model.F_SchemeCode}'
  2153. ,'{model.F_SchemeName}'
  2154. ,'{model.F_Title}'
  2155. ,'{model.F_Level}'
  2156. ,'{model.F_EnabledMark}'
  2157. ,'{model.F_IsAgain}'
  2158. ,'{model.F_IsFinished}'
  2159. ,'{model.F_IsChild}'
  2160. ,'{model.F_IsAsyn}'
  2161. ,'{model.F_ParentNodeId}'
  2162. ,'{model.F_ParentTaskId}'
  2163. ,'{model.F_ParentProcessId}'
  2164. ,'{model.F_IsStart}'
  2165. ,'{userNames}'
  2166. ,''--最长耗时处理人
  2167. ,null--最长耗时处理时间
  2168. ,GETDATE()
  2169. ,'{LoginUserInfo.Get().userId}')";
  2170. db.ExecuteBySql(addSql);
  2171. }
  2172. /// <summary>
  2173. /// 多线程处理数据(无返回值)
  2174. /// </summary>
  2175. /// <typeparam name="T">数据类型</typeparam>
  2176. /// <param name="list">待处理数据</param>
  2177. /// <param name="action">数据处理方法(有参数无返回值)</param>
  2178. /// <param name="count">处理线程数量</param>
  2179. /// <param name="waitFlag">是否等待执行结束</param>
  2180. public static void RunTask<T>(List<T> list, Action<T, T, T, T, T> action, IRepository db, int threadCount = 5, bool waitFlag = true)
  2181. {
  2182. ConcurrentQueue<T> queue = new ConcurrentQueue<T>(list);
  2183. Task[] tasks = new Task[threadCount];
  2184. for (int i = 0; i < threadCount; i++)
  2185. {
  2186. tasks[i] = Task.Factory.StartNew(() =>
  2187. {
  2188. while (queue.TryDequeue(out T t))
  2189. {
  2190. //action(db,t);
  2191. }
  2192. });
  2193. }
  2194. if (waitFlag)
  2195. {
  2196. Task.WaitAll(tasks);
  2197. }
  2198. }
  2199. #endregion
  2200. }
  2201. }