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.
 
 
 
 
 
 

963 lines
32 KiB

  1. using Learun.Application.WorkFlow;
  2. using Learun.Util;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Web.Mvc;
  6. using Learun.Application.Organization;
  7. using Learun.Application.Base.AuthorizeModule;
  8. using System;
  9. namespace Learun.Application.Web.Areas.LR_NewWorkFlow.Controllers
  10. {
  11. /// <summary>
  12. /// 版 本 Learun-ADMS V7.0.3 力软敏捷开发框架
  13. /// Copyright (c) 2013-2018 上海力软信息技术有限公司
  14. /// 创建人:力软-框架开发组
  15. /// 日 期:2018.12.09
  16. /// 描 述:流程进程
  17. /// </summary>
  18. public class NWFProcessController : MvcControllerBase
  19. {
  20. private NWFProcessIBLL nWFProcessIBLL = new NWFProcessBLL();
  21. private NWFSchemeIBLL nWFSchemeIBLL = new NWFSchemeBLL();
  22. private NWFTaskIBLL nWFTaskIBLL = new NWFTaskBLL();
  23. private UserIBLL userIbll = new UserBLL();
  24. private UserRelationIBLL userRelationIBLL = new UserRelationBLL();
  25. #region 视图功能
  26. /// <summary>
  27. /// 视图功能
  28. /// </summary>
  29. /// <returns></returns>
  30. [HttpGet]
  31. public ActionResult Index()
  32. {
  33. return View();
  34. }
  35. /// <summary>
  36. /// 发起流程
  37. /// </summary>
  38. /// <returns></returns>
  39. [HttpGet]
  40. public ActionResult ReleaseForm()
  41. {
  42. return View();
  43. }
  44. /// <summary>
  45. /// 流程容器
  46. /// </summary>
  47. /// <returns></returns>
  48. [HttpGet]
  49. public ActionResult NWFContainerForm()
  50. {
  51. return View();
  52. }
  53. /// <summary>
  54. /// 查看节点审核信息
  55. /// </summary>
  56. /// <returns></returns>
  57. [HttpGet]
  58. public ActionResult LookNodeForm()
  59. {
  60. return View();
  61. }
  62. /// <summary>
  63. /// 创建流程
  64. /// </summary>
  65. /// <returns></returns>
  66. [HttpGet]
  67. public ActionResult CreateForm()
  68. {
  69. return View();
  70. }
  71. /// <summary>
  72. /// 审核流程
  73. /// </summary>
  74. /// <returns></returns>
  75. [HttpGet]
  76. public ActionResult AuditFlowForm()
  77. {
  78. return View();
  79. }
  80. /// <summary>
  81. /// 加签审核流程
  82. /// </summary>
  83. /// <returns></returns>
  84. [HttpGet]
  85. public ActionResult SignAuditFlowForm()
  86. {
  87. return View();
  88. }
  89. /// <summary>
  90. /// 加签审核
  91. /// </summary>
  92. /// <returns></returns>
  93. [HttpGet]
  94. public ActionResult SignFlowForm()
  95. {
  96. return View();
  97. }
  98. /// <summary>
  99. /// 合同打印
  100. /// </summary>
  101. /// <returns></returns>
  102. [HttpGet]
  103. public ActionResult htPrint(string keyValue)
  104. {
  105. //获取校长的签名盖章
  106. var listTaskLog = nWFTaskIBLL.GetLogList(keyValue);
  107. var nwfTaskLogEntity = listTaskLog.FirstOrDefault(a => a.F_TaskUserName == "关亮");
  108. if (nwfTaskLogEntity != null)
  109. {
  110. ViewBag.StampImg = nwfTaskLogEntity.F_StampImg;
  111. ViewBag.SignImg = nwfTaskLogEntity.F_SignImg;
  112. }
  113. var data = nWFProcessIBLL.GetHTInfo(keyValue);
  114. var userInfo = new UserEntity();
  115. if (data != null)
  116. {
  117. userInfo = userIbll.GetEntityByUserId(data.F_CreateUserName);
  118. }
  119. var beginTime = data?.LC_htkssj.ToDate();
  120. var endTime = data?.LC_htjssj.ToDate();
  121. var operationTime = data?.OperationTime.ToDate();
  122. ViewBag.UserName = userInfo?.F_RealName;
  123. ViewBag.IDCard = userInfo?.F_IdentityCardNo;
  124. ViewBag.BeginYear = beginTime?.Year;
  125. ViewBag.BeginMonth = beginTime?.Month;
  126. ViewBag.BeginDay = beginTime?.Day;
  127. ViewBag.EndYear = endTime?.Year;
  128. ViewBag.EndMonth = endTime?.Month;
  129. ViewBag.EndDay = endTime?.Day;
  130. ViewBag.OperationYear = operationTime?.Year;
  131. ViewBag.OperationMonth = operationTime?.Month;
  132. ViewBag.OperationDay = operationTime?.Day;
  133. return View();
  134. }
  135. /// <summary>
  136. /// 流程进度查看(父子流程)
  137. /// </summary>
  138. /// <returns></returns>
  139. [HttpGet]
  140. public ActionResult LookFlowForm()
  141. {
  142. return View();
  143. }
  144. /// <summary>
  145. /// 监控页面
  146. /// </summary>
  147. /// <returns></returns>
  148. [HttpGet]
  149. public ActionResult MonitorIndex()
  150. {
  151. return View();
  152. }
  153. /// <summary>
  154. /// 合同归档
  155. /// </summary>
  156. /// <returns></returns>
  157. [HttpGet]
  158. public ActionResult ContractFiling()
  159. {
  160. return View();
  161. }
  162. [HttpGet]
  163. public ActionResult ContractFilingMonitor()
  164. {
  165. return View();
  166. }
  167. /// <summary>
  168. /// 人事归档
  169. /// </summary>
  170. /// <returns></returns>
  171. [HttpGet]
  172. public ActionResult PersonalFiling()
  173. {
  174. return View();
  175. }
  176. /// <summary>
  177. /// 监控详情页面
  178. /// </summary>
  179. /// <returns></returns>
  180. [HttpGet]
  181. public ActionResult MonitorDetailsIndex()
  182. {
  183. return View();
  184. }
  185. /// <summary>
  186. /// 查看各个节点表单
  187. /// </summary>
  188. /// <returns></returns>
  189. [HttpGet]
  190. public ActionResult MonitorForm()
  191. {
  192. return View();
  193. }
  194. /// <summary>
  195. /// 指定审核人
  196. /// </summary>
  197. /// <returns></returns>
  198. [HttpGet]
  199. public ActionResult AppointForm()
  200. {
  201. return View();
  202. }
  203. /// <summary>
  204. /// 添加审核节点
  205. /// </summary>
  206. /// <returns></returns>
  207. [HttpGet]
  208. public ActionResult AddTaskForm()
  209. {
  210. return View();
  211. }
  212. /// <summary>
  213. /// 批量审核页面
  214. /// </summary>
  215. /// <returns></returns>
  216. [HttpGet]
  217. public ActionResult BatchAuditIndex()
  218. {
  219. return View();
  220. }
  221. /// <summary>
  222. /// 选择下一节点审核人员
  223. /// </summary>
  224. /// <returns></returns>
  225. [HttpGet]
  226. public ActionResult SelectUserForm()
  227. {
  228. return View();
  229. }
  230. /// <summary>
  231. /// 签名弹层
  232. /// </summary>
  233. /// <returns></returns>
  234. public ActionResult SignForm()
  235. {
  236. return View();
  237. }
  238. /// <summary>
  239. /// 流程时间统计
  240. /// </summary>
  241. /// <returns></returns>
  242. [HttpGet]
  243. public ActionResult StatisticTimeIndex()
  244. {
  245. return View();
  246. }
  247. /// <summary>
  248. /// 流程时间统计-饼图
  249. /// </summary>
  250. /// <returns></returns>
  251. [HttpGet]
  252. public ActionResult StatisticTimeForm()
  253. {
  254. return View();
  255. }
  256. /// <summary>
  257. /// 流程次数统计
  258. /// </summary>
  259. /// <returns></returns>
  260. [HttpGet]
  261. public ActionResult StatisticCountIndex()
  262. {
  263. return View();
  264. }
  265. #endregion
  266. #region 统计页面
  267. [HttpGet]
  268. public ActionResult MonitorIndexRenShi()
  269. {
  270. return View();
  271. }
  272. [HttpGet]
  273. public ActionResult MonitorIndexZiChan()
  274. {
  275. return View();
  276. }
  277. [HttpGet]
  278. public ActionResult MonitorIndexGongWen()
  279. {
  280. return View();
  281. }
  282. [HttpGet]
  283. public ActionResult MonitorIndexXingZhen()
  284. {
  285. return View();
  286. }
  287. #endregion
  288. #region 获取数据
  289. /// <summary>
  290. /// 获取我的流程信息列表
  291. /// </summary>
  292. /// <param name="pagination">分页参数</param>
  293. /// <param name="queryJson">查询条件</param>
  294. /// <returns></returns>
  295. [HttpGet]
  296. [AjaxOnly]
  297. public ActionResult GetPorcessList(string pagination, string queryJson)
  298. {
  299. Pagination paginationobj = pagination.ToObject<Pagination>();
  300. var list = nWFProcessIBLL.GetPageList(paginationobj, queryJson);
  301. var jsonData = new
  302. {
  303. rows = list,
  304. total = paginationobj.total,
  305. page = paginationobj.page,
  306. records = paginationobj.records,
  307. };
  308. return Success(jsonData);
  309. }
  310. /// <summary>
  311. /// 获取我的流程信息列表
  312. /// </summary>
  313. /// <param name="pagination">分页参数</param>
  314. /// <param name="queryJson">查询条件</param>
  315. /// <returns></returns>
  316. [HttpGet]
  317. [AjaxOnly]
  318. public ActionResult GetTaskPageList(string pagination, string queryJson, string categoryId)
  319. {
  320. Pagination paginationobj = pagination.ToObject<Pagination>();
  321. IEnumerable<NWFProcessEntity> list = new List<NWFProcessEntity>();
  322. UserInfo userInfo = LoginUserInfo.Get();
  323. switch (categoryId)
  324. {
  325. case "1":
  326. list = nWFProcessIBLL.GetMyPageList(userInfo.userId, paginationobj, queryJson);
  327. break;
  328. case "2":
  329. list = nWFProcessIBLL.GetMyTaskPageList(userInfo, paginationobj, queryJson);
  330. break;
  331. case "3":
  332. list = nWFProcessIBLL.GetMyFinishTaskPageList(userInfo, paginationobj, queryJson);
  333. break;
  334. }
  335. var jsonData = new
  336. {
  337. rows = list,
  338. total = paginationobj.total,
  339. page = paginationobj.page,
  340. records = paginationobj.records,
  341. };
  342. return Success(jsonData);
  343. }
  344. /// <summary>
  345. /// 获取批量审核任务清单
  346. /// </summary>
  347. /// <param name="pagination">分页参数</param>
  348. /// <param name="queryJson">查询条件</param>
  349. /// <returns></returns>
  350. [HttpGet]
  351. [AjaxOnly]
  352. public ActionResult GetBatchTaskPageList(string pagination, string queryJson)
  353. {
  354. Pagination paginationobj = pagination.ToObject<Pagination>();
  355. UserInfo userInfo = LoginUserInfo.Get();
  356. var data = nWFProcessIBLL.GetMyTaskPageList(userInfo, paginationobj, queryJson, true);
  357. var jsonData = new
  358. {
  359. rows = data,
  360. total = paginationobj.total,
  361. page = paginationobj.page,
  362. records = paginationobj.records,
  363. };
  364. return Success(jsonData);
  365. }
  366. /// <summary>
  367. /// 获取我的流程信息列表
  368. /// </summary>
  369. /// <param name="pagination">分页参数</param>
  370. /// <param name="queryJson">查询条件</param>
  371. /// <returns></returns>
  372. [HttpGet]
  373. [AjaxOnly]
  374. public ActionResult GetTask(string taskId)
  375. {
  376. var data = nWFTaskIBLL.GetEntity(taskId);
  377. return Success(data);
  378. }
  379. #endregion
  380. #region 保存更新删除
  381. /// <summary>
  382. /// 删除流程进程实体
  383. /// </summary>
  384. /// <param name="processId">流程进程主键</param>
  385. [HttpPost]
  386. [AjaxOnly]
  387. public ActionResult DeleteEntity(string processId)
  388. {
  389. nWFProcessIBLL.DeleteEntity(processId);
  390. return Success("删除成功");
  391. }
  392. #endregion
  393. #region 流程API
  394. /// <summary>
  395. /// 获取流程模板
  396. /// </summary>
  397. /// <param name="code">流程编码</param>
  398. /// <returns></returns>
  399. [HttpGet]
  400. [AjaxOnly]
  401. public ActionResult GetSchemeByCode(string code)
  402. {
  403. var schemeInfo = nWFSchemeIBLL.GetInfoEntityByCode(code);
  404. if (schemeInfo != null)
  405. {
  406. var data = nWFSchemeIBLL.GetSchemeEntity(schemeInfo.F_SchemeId);
  407. return Success(data);
  408. }
  409. return Fail("找不到该流程模板");
  410. }
  411. /// <summary>
  412. /// 根据流程进程主键获取流程模板
  413. /// </summary>
  414. /// <param name="processId">流程进程主键</param>
  415. /// <returns></returns>
  416. [HttpGet]
  417. [AjaxOnly]
  418. public ActionResult GetSchemeByProcessId(string processId)
  419. {
  420. var processEntity = nWFProcessIBLL.GetEntity(processId);
  421. if (processEntity != null)
  422. {
  423. if (string.IsNullOrEmpty(processEntity.F_SchemeId))
  424. {
  425. var schemeInfo = nWFSchemeIBLL.GetInfoEntityByCode(processEntity.F_SchemeCode);
  426. if (schemeInfo != null)
  427. {
  428. var data = nWFSchemeIBLL.GetSchemeEntity(schemeInfo.F_SchemeId);
  429. return Success(data);
  430. }
  431. }
  432. else
  433. {
  434. var data = nWFSchemeIBLL.GetSchemeEntity(processEntity.F_SchemeId);
  435. return Success(data);
  436. }
  437. }
  438. return Fail("找不到该流程模板");
  439. }
  440. /// <summary>
  441. /// 获取流程下一节点审核
  442. /// </summary>
  443. /// <param name="code">流程编码</param>
  444. /// <param name="processId">流程进程主键</param>
  445. /// <param name="taskId">任务主键</param>
  446. /// <param name="nodeId">节点ID</param>
  447. /// <param name="operationCode">操作编码</param>
  448. /// <returns></returns>
  449. [HttpGet]
  450. [AjaxOnly]
  451. public ActionResult GetNextAuditors(string code, string processId, string taskId, string nodeId, string operationCode)
  452. {
  453. UserInfo userInfo = LoginUserInfo.Get();
  454. var data = nWFProcessIBLL.GetNextAuditors(code, processId, taskId, nodeId, operationCode, userInfo);
  455. return Success(data);
  456. }
  457. /// <summary>
  458. /// 获取流程进程信息
  459. /// </summary>
  460. /// <param name="processId">进程主键</param>
  461. /// <param name="taskId">任务主键</param>
  462. /// <returns></returns>
  463. [HttpGet]
  464. [AjaxOnly]
  465. public ActionResult GetProcessDetails(string processId, string taskId)
  466. {
  467. UserInfo userInfo = LoginUserInfo.Get();
  468. var data = nWFProcessIBLL.GetProcessDetails(processId, taskId, userInfo);
  469. if (!string.IsNullOrEmpty(data.childProcessId))
  470. {
  471. processId = data.childProcessId;
  472. }
  473. var taskNode = nWFProcessIBLL.GetTaskUserList(processId);
  474. var jsonData = new
  475. {
  476. info = data,
  477. task = taskNode
  478. };
  479. return Success(jsonData);
  480. }
  481. /// <summary>
  482. /// 获取子流程详细信息
  483. /// </summary>
  484. /// <param name="processId">父流程进程主键</param>
  485. /// <param name="taskId">父流程子流程发起主键</param>
  486. /// <param name="schemeCode">子流程流程模板编码</param>
  487. /// <param name="nodeId">父流程发起子流程节点Id</param>
  488. /// <returns></returns>
  489. [HttpGet]
  490. [AjaxOnly]
  491. public ActionResult GetChildProcessDetails(string processId, string taskId, string schemeCode, string nodeId)
  492. {
  493. UserInfo userInfo = LoginUserInfo.Get();
  494. var data = nWFProcessIBLL.GetChildProcessDetails(processId, taskId, schemeCode, nodeId, userInfo);
  495. var taskNode = nWFProcessIBLL.GetTaskUserList(data.childProcessId);
  496. var jsonData = new
  497. {
  498. info = data,
  499. task = taskNode
  500. };
  501. return Success(jsonData);
  502. }
  503. /// <summary>
  504. /// 保存草稿
  505. /// </summary>
  506. /// <param name="processId">流程进程主键</param>
  507. /// <param name="schemeCode">流程模板编码</param>
  508. /// <returns></returns>
  509. [HttpPost]
  510. [AjaxOnly]
  511. public ActionResult SaveDraft(string processId, string schemeCode, string createUserId)
  512. {
  513. UserInfo userInfo = LoginUserInfo.Get();
  514. if (!string.IsNullOrEmpty(createUserId) && userInfo.userId != createUserId)
  515. {
  516. var userEntity = userIbll.GetEntityByUserId(createUserId);
  517. userInfo.userId = userEntity.F_UserId;
  518. userInfo.enCode = userEntity.F_EnCode;
  519. userInfo.realName = userEntity.F_RealName;
  520. userInfo.nickName = userEntity.F_NickName;
  521. userInfo.headIcon = userEntity.F_HeadIcon;
  522. userInfo.gender = userEntity.F_Gender;
  523. userInfo.mobile = userEntity.F_Mobile;
  524. userInfo.telephone = userEntity.F_Telephone;
  525. userInfo.email = userEntity.F_Email;
  526. userInfo.oICQ = userEntity.F_OICQ;
  527. userInfo.weChat = userEntity.F_WeChat;
  528. userInfo.companyId = userEntity.F_CompanyId;
  529. userInfo.departmentId = userEntity.F_DepartmentId;
  530. userInfo.openId = userEntity.F_OpenId;
  531. userInfo.isSystem = userEntity.F_SecurityLevel == 1 ? true : false;
  532. }
  533. nWFProcessIBLL.SaveDraft(processId, schemeCode, userInfo);
  534. return Success("流程草稿保存成功");
  535. }
  536. /// <summary>
  537. /// 删除草稿
  538. /// </summary>
  539. /// <param name="processId">流程进程主键</param>
  540. /// <returns></returns>
  541. [HttpPost]
  542. [AjaxOnly]
  543. public ActionResult DeleteDraft(string processId)
  544. {
  545. UserInfo userInfo = LoginUserInfo.Get();
  546. nWFProcessIBLL.DeleteDraft(processId, userInfo);
  547. return Success("流程草稿删除成功");
  548. }
  549. /// <summary>
  550. /// 创建流程
  551. /// </summary>
  552. /// <param name="schemeCode">流程模板编码</param>
  553. /// <param name="processId">流程进程主键</param>
  554. /// <param name="title">流程进程自定义标题</param>
  555. /// <param name="level">流程进程等级</param>
  556. /// <param name="auditors">下一节点审核人</param>
  557. /// <param name="createUserId">流程创建人</param>
  558. /// <returns></returns>
  559. [HttpPost]
  560. [AjaxOnly]
  561. public ActionResult CreateFlow(string schemeCode, string processId, string title, int level, string auditors, string createUserId)
  562. {
  563. UserInfo userInfo = LoginUserInfo.Get();
  564. if (!string.IsNullOrEmpty(createUserId) && userInfo.userId != createUserId)
  565. {
  566. if (title == null)
  567. {
  568. title = "";
  569. }
  570. title += "【" + userInfo.realName + "代发】";
  571. var userEntity = userIbll.GetEntityByUserId(createUserId);
  572. userInfo.userId = userEntity.F_UserId;
  573. userInfo.enCode = userEntity.F_EnCode;
  574. userInfo.realName = userEntity.F_RealName;
  575. userInfo.nickName = userEntity.F_NickName;
  576. userInfo.headIcon = userEntity.F_HeadIcon;
  577. userInfo.gender = userEntity.F_Gender;
  578. userInfo.mobile = userEntity.F_Mobile;
  579. userInfo.telephone = userEntity.F_Telephone;
  580. userInfo.email = userEntity.F_Email;
  581. userInfo.oICQ = userEntity.F_OICQ;
  582. userInfo.weChat = userEntity.F_WeChat;
  583. userInfo.companyId = userEntity.F_CompanyId;
  584. userInfo.departmentId = userEntity.F_DepartmentId;
  585. userInfo.openId = userEntity.F_OpenId;
  586. userInfo.isSystem = userEntity.F_SecurityLevel == 1 ? true : false;
  587. userInfo.roleIds = userRelationIBLL.GetObjectIds(userEntity.F_UserId, 1);
  588. userInfo.postIds = userRelationIBLL.GetObjectIds(userEntity.F_UserId, 2);
  589. }
  590. try
  591. {
  592. nWFProcessIBLL.CreateFlow(schemeCode, processId, title, level, auditors, userInfo);
  593. return Success("流程创建成功");
  594. }
  595. catch (System.Exception ex)
  596. {
  597. nWFProcessIBLL.SaveDraft(processId, schemeCode, userInfo);
  598. return Fail(ex.Message);
  599. }
  600. }
  601. /// <summary>
  602. /// 创建流程(子流程)
  603. /// </summary>
  604. /// <param name="schemeCode">流程模板编码</param>
  605. /// <param name="processId">流程进程主键</param>
  606. /// <param name="parentProcessId">父流程进程主键</param>
  607. /// <param name="parentTaskId">父流程任务主键</param>
  608. /// <returns></returns>
  609. [HttpPost]
  610. [AjaxOnly]
  611. public ActionResult CreateChildFlow(string schemeCode, string processId, string parentProcessId, string parentTaskId)
  612. {
  613. UserInfo userInfo = LoginUserInfo.Get();
  614. nWFProcessIBLL.CreateChildFlow(schemeCode, processId, parentProcessId, parentTaskId, userInfo);
  615. return Success("流程创建成功");
  616. }
  617. /// <summary>
  618. /// 重新创建流程
  619. /// </summary>
  620. /// <param name="processId">流程进程主键</param>
  621. /// <returns></returns>
  622. [HttpPost]
  623. [AjaxOnly]
  624. public ActionResult AgainCreateFlow(string processId)
  625. {
  626. try
  627. {
  628. UserInfo userInfo = LoginUserInfo.Get();
  629. nWFProcessIBLL.AgainCreateFlow(processId, userInfo);
  630. return Success("流程重新创建成功");
  631. }
  632. catch (System.Exception ex)
  633. {
  634. return Fail(ex.Message);
  635. }
  636. }
  637. /// <summary>
  638. /// 审批流程
  639. /// </summary>
  640. /// <param name="operationCode">流程审批操作码agree 同意 disagree 不同意 lrtimeout 超时 back 退回至上一个审核节点</param>
  641. /// <param name="operationName">流程审批操名称</param>
  642. /// <param name="processId">流程进程主键</param>
  643. /// <param name="taskId">流程任务主键</param>
  644. /// <param name="des">审批意见</param>
  645. /// <param name="auditors">下一节点指定审核人</param>
  646. /// <returns></returns>
  647. [HttpPost]
  648. [AjaxOnly]
  649. public ActionResult AuditFlow(string operationCode, string operationName, string processId, string taskId, string des, string auditors, string stamp, string signUrl)
  650. {
  651. UserInfo userInfo = LoginUserInfo.Get();
  652. try
  653. {
  654. //if (operationCode == "back")//退回至上一个审核节点【暂定】
  655. //{
  656. // nWFProcessIBLL.AuditFlow2(operationCode, operationName, processId, taskId, des, auditors, stamp, signUrl, userInfo);
  657. //}
  658. //else
  659. //{
  660. // nWFProcessIBLL.AuditFlow(operationCode, operationName, processId, taskId, des, auditors, stamp, signUrl, userInfo);
  661. //}
  662. nWFProcessIBLL.AuditFlow(operationCode, operationName, processId, taskId, des, auditors, stamp, signUrl, userInfo);
  663. return Success("流程审批成功");
  664. }
  665. catch (System.Exception ex)
  666. {
  667. return Fail(ex.Message);
  668. }
  669. }
  670. /// <summary>
  671. /// 审批流程
  672. /// </summary>
  673. /// <param name="operationCode">流程审批操作码agree 同意 disagree 不同意</param>
  674. /// <param name="taskIds">任务串</param>
  675. /// <returns></returns>
  676. [HttpPost]
  677. [AjaxOnly]
  678. public ActionResult AuditFlows(string operationCode, string taskIds)
  679. {
  680. UserInfo userInfo = LoginUserInfo.Get();
  681. nWFProcessIBLL.AuditFlows(operationCode, taskIds, userInfo);
  682. return Success("流程批量审批成功");
  683. }
  684. /// <summary>
  685. /// 流程加签
  686. /// </summary>
  687. /// <param name="processId">流程进程主键</param>
  688. /// <param name="taskId">流程任务主键</param>
  689. /// <param name="userId">加签人员</param>
  690. /// <param name="des">加签说明</param>
  691. /// <returns></returns>
  692. [HttpPost]
  693. [AjaxOnly]
  694. public ActionResult SignFlow(string processId, string taskId, string userId, string des)
  695. {
  696. UserInfo userInfo = LoginUserInfo.Get();
  697. nWFProcessIBLL.SignFlow(processId, taskId, userId, des, userInfo);
  698. return Success("流程加签成功");
  699. }
  700. /// <summary>
  701. /// 流程加签审核
  702. /// </summary>
  703. /// <param name="operationCode">审核操作码</param>
  704. /// <param name="processId">流程进程主键</param>
  705. /// <param name="taskId">流程任务主键</param>
  706. /// <param name="des">加签说明</param>
  707. /// <returns></returns>
  708. [HttpPost]
  709. [AjaxOnly]
  710. public ActionResult SignAuditFlow(string operationCode, string processId, string taskId, string des)
  711. {
  712. UserInfo userInfo = LoginUserInfo.Get();
  713. nWFProcessIBLL.SignAuditFlow(operationCode, processId, taskId, des, userInfo);
  714. return Success("加签审批成功");
  715. }
  716. /// <summary>
  717. /// 确认阅读
  718. /// </summary>
  719. /// <param name="processId">流程进程主键</param>
  720. /// <param name="taskId">流程任务主键</param>
  721. /// <returns></returns>
  722. [HttpPost]
  723. [AjaxOnly]
  724. public ActionResult ReferFlow(string processId, string taskId)
  725. {
  726. UserInfo userInfo = LoginUserInfo.Get();
  727. nWFProcessIBLL.ReferFlow(processId, taskId, userInfo);
  728. return Success("保存成功");
  729. }
  730. /// <summary>
  731. /// 催办流程
  732. /// </summary>
  733. /// <param name="processId">流程进程主键</param>
  734. /// <param name="userInfo">当前操作人信息</param>
  735. /// <returns></returns>
  736. [HttpPost]
  737. [AjaxOnly]
  738. public ActionResult UrgeFlow(string processId)
  739. {
  740. UserInfo userInfo = LoginUserInfo.Get();
  741. nWFProcessIBLL.UrgeFlow(processId, userInfo);
  742. return Success("催办成功");
  743. }
  744. /// <summary>
  745. /// 撤销流程(只有在该流程未被处理的情况下)
  746. /// </summary>
  747. /// <param name="processId">流程进程主键</param>
  748. /// <returns></returns>
  749. [HttpPost]
  750. [AjaxOnly]
  751. public ActionResult RevokeFlow(string processId)
  752. {
  753. UserInfo userInfo = LoginUserInfo.Get();
  754. nWFProcessIBLL.RevokeFlow(processId, userInfo);
  755. return Success("撤销成功");
  756. }
  757. /// <summary>
  758. /// 获取流程当前任务需要处理的人
  759. /// </summary>
  760. /// <param name="processId">流程进程主键</param>
  761. /// <returns></returns>
  762. [HttpGet]
  763. [AjaxOnly]
  764. public ActionResult GetTaskUserList(string processId)
  765. {
  766. var data = nWFProcessIBLL.GetTaskUserList(processId);
  767. return Success(data);
  768. }
  769. /// <summary>
  770. /// 指派流程审核人
  771. /// </summary>
  772. /// <param name="strList">任务列表</param>
  773. [HttpPost]
  774. [ValidateAntiForgeryToken]
  775. [AjaxOnly]
  776. public ActionResult AppointUser(string strList)
  777. {
  778. IEnumerable<NWFTaskEntity> list = strList.ToObject<IEnumerable<NWFTaskEntity>>();
  779. UserInfo userInfo = LoginUserInfo.Get();
  780. nWFProcessIBLL.AppointUser(list, userInfo);
  781. return Success("指派成功");
  782. }
  783. /// <summary>
  784. /// 作废流程
  785. /// </summary>
  786. /// <param name="processId">流程进程主键</param>
  787. /// <returns></returns>
  788. [HttpPost]
  789. [AjaxOnly]
  790. public ActionResult DeleteFlow(string processId)
  791. {
  792. UserInfo userInfo = LoginUserInfo.Get();
  793. nWFProcessIBLL.DeleteFlow(processId, userInfo);
  794. return Success("作废成功");
  795. }
  796. /// <summary>
  797. /// 撤销审核
  798. /// </summary>
  799. /// <param name="processId">流程进程主键</param>
  800. /// <param name="taskId">任务主键</param>
  801. /// <returns></returns>
  802. [HttpPost]
  803. [AjaxOnly]
  804. public ActionResult RevokeAudit(string processId, string taskId)
  805. {
  806. UserInfo userInfo = LoginUserInfo.Get();
  807. var res = nWFProcessIBLL.RevokeAudit(processId, taskId, userInfo);
  808. if (res)
  809. {
  810. return Success("撤销成功");
  811. }
  812. else
  813. {
  814. return Fail("撤销失败,当前不允许撤销!");
  815. }
  816. }
  817. /// <summary>
  818. /// 添加任务
  819. /// </summary>
  820. /// <param name="processId"></param>
  821. /// <param name="bNodeId"></param>
  822. /// <param name="eNodeId"></param>
  823. /// <returns></returns>
  824. [HttpPost]
  825. [AjaxOnly]
  826. public ActionResult AddTask(string processId, string bNodeId, string eNodeId)
  827. {
  828. UserInfo userInfo = LoginUserInfo.Get();
  829. nWFProcessIBLL.AddTask(processId, bNodeId, eNodeId, userInfo);
  830. return Success("添加成功");
  831. }
  832. #endregion
  833. #region 流程效率分析
  834. /// <summary>
  835. /// 获取审批时间统计数据
  836. /// </summary>
  837. /// <param name="queryJson"></param>
  838. /// <returns></returns>
  839. public ActionResult GetStatisticTimeData(string processId)
  840. {
  841. var taskdata = nWFTaskIBLL.GetALLTaskList(processId).OrderByDescending(x => x.F_CreateDate);
  842. var legendData = new List<string>();
  843. var seriesData = new List<WfSchemeReportModelOfPie2>();
  844. foreach (var item in taskdata)
  845. {
  846. legendData.Add(item.F_ModifyUserName);
  847. seriesData.Add(new WfSchemeReportModelOfPie2()
  848. {
  849. name = item.F_ModifyUserName,
  850. value = (item.F_ModifyDate - item.F_CreateDate).HasValue ? (item.F_ModifyDate - item.F_CreateDate).Value.TotalMinutes.ToDecimal(2).ToString() : "0"
  851. });
  852. }
  853. var jsonData = new
  854. {
  855. legendData = legendData,
  856. seriesData = seriesData
  857. };
  858. return Success(jsonData);
  859. }
  860. /// <summary>
  861. /// 获取审批次数统计数据
  862. /// </summary>
  863. /// <param name="queryJson"></param>
  864. /// <returns></returns>
  865. public ActionResult GetStatisticCountData(string queryJson)
  866. {
  867. var taskdata = nWFTaskIBLL.GetFinishTaskList();
  868. if (!string.IsNullOrEmpty(queryJson))
  869. {
  870. var queryParam = queryJson.ToJObject();
  871. if (!queryParam["year"].IsEmpty())
  872. {
  873. var year = queryParam["year"].ToInt();
  874. taskdata = taskdata.Where(x => x.F_ModifyDate.HasValue && x.F_ModifyDate.Value.Year == year);
  875. }
  876. }
  877. var taskgroup = taskdata.GroupBy(x => new { x.F_ModifyUserId, x.F_ModifyUserName }).Select(x => new
  878. {
  879. userId = x.Key.F_ModifyUserId,
  880. userName = x.Key.F_ModifyUserName,
  881. count = x.Select(y => y.F_Id).Count()
  882. });
  883. var legendData = new List<string>();
  884. var seriesData = new List<WfSchemeReportModelOfPie>();
  885. foreach (var item in taskgroup)
  886. {
  887. legendData.Add(item.userName);
  888. seriesData.Add(new WfSchemeReportModelOfPie()
  889. {
  890. value = item.count,
  891. name = item.userName
  892. });
  893. }
  894. var jsonData = new
  895. {
  896. legendData = legendData,
  897. seriesData = seriesData
  898. };
  899. return Success(jsonData);
  900. }
  901. #endregion
  902. }
  903. }