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.
 
 
 
 
 
 

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