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.
 
 
 
 
 
 

1156 lines
40 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 Learun.Application.Form;
  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. private DepartmentIBLL departmentIbll = new DepartmentBLL();
  26. private FormSchemeIBLL formSchemeIBLL = new FormSchemeBLL();
  27. #region 视图功能
  28. /// <summary>
  29. /// 视图功能
  30. /// </summary>
  31. /// <returns></returns>
  32. [HttpGet]
  33. public ActionResult Index()
  34. {
  35. return View();
  36. }
  37. /// <summary>
  38. /// 发起流程
  39. /// </summary>
  40. /// <returns></returns>
  41. [HttpGet]
  42. public ActionResult ReleaseForm()
  43. {
  44. return View();
  45. }
  46. /// <summary>
  47. /// 流程容器
  48. /// </summary>
  49. /// <returns></returns>
  50. [HttpGet]
  51. public ActionResult NWFContainerForm()
  52. {
  53. return View();
  54. }
  55. /// <summary>
  56. /// 查看节点审核信息
  57. /// </summary>
  58. /// <returns></returns>
  59. [HttpGet]
  60. public ActionResult LookNodeForm()
  61. {
  62. return View();
  63. }
  64. /// <summary>
  65. /// 创建流程
  66. /// </summary>
  67. /// <returns></returns>
  68. [HttpGet]
  69. public ActionResult CreateForm()
  70. {
  71. return View();
  72. }
  73. /// <summary>
  74. /// 审核流程
  75. /// </summary>
  76. /// <returns></returns>
  77. [HttpGet]
  78. public ActionResult AuditFlowForm()
  79. {
  80. return View();
  81. }
  82. /// <summary>
  83. /// 加签审核流程
  84. /// </summary>
  85. /// <returns></returns>
  86. [HttpGet]
  87. public ActionResult SignAuditFlowForm()
  88. {
  89. return View();
  90. }
  91. /// <summary>
  92. /// 加签审核
  93. /// </summary>
  94. /// <returns></returns>
  95. [HttpGet]
  96. public ActionResult SignFlowForm()
  97. {
  98. return View();
  99. }
  100. /// <summary>
  101. /// 合同打印
  102. /// </summary>
  103. /// <returns></returns>
  104. [HttpGet]
  105. public ActionResult htPrint(string keyValue)
  106. {
  107. //获取校长的签名盖章
  108. var listTaskLog = nWFTaskIBLL.GetLogList(keyValue);
  109. var nwfTaskLogEntity = listTaskLog.FirstOrDefault(a => a.F_TaskUserName == "关亮");
  110. if (nwfTaskLogEntity != null)
  111. {
  112. ViewBag.StampImg = nwfTaskLogEntity.F_StampImg;
  113. ViewBag.SignImg = nwfTaskLogEntity.F_SignImg;
  114. }
  115. var data = nWFProcessIBLL.GetHTInfo(keyValue);
  116. var userInfo = new UserEntity();
  117. if (data != null)
  118. {
  119. userInfo = userIbll.GetEntityByUserId(data.F_CreateUserName);
  120. }
  121. var beginTime = data?.LC_htkssj.ToDate();
  122. var endTime = data?.LC_htjssj.ToDate();
  123. var operationTime = data?.OperationTime.ToDate();
  124. ViewBag.UserName = userInfo?.F_RealName;
  125. ViewBag.IDCard = userInfo?.F_IdentityCardNo;
  126. ViewBag.BeginYear = beginTime?.Year;
  127. ViewBag.BeginMonth = beginTime?.Month;
  128. ViewBag.BeginDay = beginTime?.Day;
  129. ViewBag.EndYear = endTime?.Year;
  130. ViewBag.EndMonth = endTime?.Month;
  131. ViewBag.EndDay = endTime?.Day;
  132. ViewBag.OperationYear = operationTime?.Year;
  133. ViewBag.OperationMonth = operationTime?.Month;
  134. ViewBag.OperationDay = operationTime?.Day;
  135. return View();
  136. }
  137. /// <summary>
  138. /// 流程进度查看(父子流程)
  139. /// </summary>
  140. /// <returns></returns>
  141. [HttpGet]
  142. public ActionResult LookFlowForm()
  143. {
  144. return View();
  145. }
  146. /// <summary>
  147. /// 监控页面
  148. /// </summary>
  149. /// <returns></returns>
  150. [HttpGet]
  151. public ActionResult MonitorIndex()
  152. {
  153. return View();
  154. }
  155. /// <summary>
  156. /// 流程监控统计
  157. /// </summary>
  158. /// <returns></returns>
  159. [HttpGet]
  160. public ActionResult MonitorIndexStatistics()
  161. {
  162. return View();
  163. }
  164. /// <summary>
  165. /// 合同归档
  166. /// </summary>
  167. /// <returns></returns>
  168. [HttpGet]
  169. public ActionResult ContractFiling()
  170. {
  171. return View();
  172. }
  173. /// <summary>
  174. /// 人事归档
  175. /// </summary>
  176. /// <returns></returns>
  177. [HttpGet]
  178. public ActionResult PersonalFiling()
  179. {
  180. return View();
  181. }
  182. /// <summary>
  183. /// 监控详情页面
  184. /// </summary>
  185. /// <returns></returns>
  186. [HttpGet]
  187. public ActionResult MonitorDetailsIndex()
  188. {
  189. return View();
  190. }
  191. /// <summary>
  192. /// 查看各个节点表单
  193. /// </summary>
  194. /// <returns></returns>
  195. [HttpGet]
  196. public ActionResult MonitorForm()
  197. {
  198. return View();
  199. }
  200. /// <summary>
  201. /// 指定审核人
  202. /// </summary>
  203. /// <returns></returns>
  204. [HttpGet]
  205. public ActionResult AppointForm()
  206. {
  207. return View();
  208. }
  209. /// <summary>
  210. /// 添加审核节点
  211. /// </summary>
  212. /// <returns></returns>
  213. [HttpGet]
  214. public ActionResult AddTaskForm()
  215. {
  216. return View();
  217. }
  218. /// <summary>
  219. /// 批量审核页面
  220. /// </summary>
  221. /// <returns></returns>
  222. [HttpGet]
  223. public ActionResult BatchAuditIndex()
  224. {
  225. return View();
  226. }
  227. /// <summary>
  228. /// 选择下一节点审核人员
  229. /// </summary>
  230. /// <returns></returns>
  231. [HttpGet]
  232. public ActionResult SelectUserForm()
  233. {
  234. return View();
  235. }
  236. /// <summary>
  237. /// 签名弹层
  238. /// </summary>
  239. /// <returns></returns>
  240. public ActionResult SignForm()
  241. {
  242. ViewBag.IsHaveStampRight = false;
  243. var loginUserInfo = LoginUserInfo.Get();
  244. if (loginUserInfo.Description.Contains("管理员") || loginUserInfo.roleIds.Split(',').Contains(Config.GetValue("StampRightRoleId")))
  245. {
  246. ViewBag.IsHaveStampRight = true;
  247. }
  248. return View();
  249. }
  250. #endregion
  251. #region 统计页面
  252. [HttpGet]
  253. public ActionResult UseCar()
  254. {
  255. return View();
  256. }
  257. [HttpGet]
  258. public ActionResult LeaveStatistics()
  259. {
  260. return View();
  261. }
  262. [HttpGet]
  263. public ActionResult Transceiver()
  264. {
  265. return View();
  266. }
  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. /// <summary>
  288. /// 用印申请统计
  289. /// </summary>
  290. /// <returns></returns>
  291. [HttpGet]
  292. public ActionResult MonitorIndexOfyyspd()
  293. {
  294. return View();
  295. }
  296. /// <summary>
  297. /// 会议室申请统计
  298. /// </summary>
  299. /// <returns></returns>
  300. [HttpGet]
  301. public ActionResult MonitorIndexOfmeeting()
  302. {
  303. return View();
  304. }
  305. /// <summary>
  306. /// 党委会党委专题会申请统计
  307. /// </summary>
  308. /// <returns></returns>
  309. [HttpGet]
  310. public ActionResult MonitorIndexOfdwhsq()
  311. {
  312. return View();
  313. }
  314. /// <summary>
  315. /// 收文统计 定制化开发
  316. /// </summary>
  317. /// <returns></returns>
  318. [HttpGet]
  319. public ActionResult MissiveStats()
  320. {
  321. return View();
  322. }
  323. #endregion
  324. #region 获取数据
  325. /// <summary>
  326. /// 获取我的流程信息列表
  327. /// </summary>
  328. /// <param name="pagination">分页参数</param>
  329. /// <param name="queryJson">查询条件</param>
  330. /// <returns></returns>
  331. [HttpGet]
  332. [AjaxOnly]
  333. public ActionResult GetPorcessList(string pagination, string queryJson)
  334. {
  335. Pagination paginationobj = pagination.ToObject<Pagination>();
  336. var list = nWFProcessIBLL.GetPageList(paginationobj, queryJson);
  337. var jsonData = new
  338. {
  339. rows = list,
  340. total = paginationobj.total,
  341. page = paginationobj.page,
  342. records = paginationobj.records,
  343. };
  344. return Success(jsonData);
  345. }
  346. [HttpGet]
  347. [AjaxOnly]
  348. public ActionResult GetUseCar(string pagination, string queryJson)
  349. {
  350. Pagination paginationobj = pagination.ToObject<Pagination>();
  351. var list = nWFProcessIBLL.GetUseCar(paginationobj, queryJson);
  352. var jsonData = new
  353. {
  354. rows = list,
  355. total = paginationobj.total,
  356. page = paginationobj.page,
  357. records = paginationobj.records,
  358. };
  359. return Success(jsonData);
  360. }
  361. [HttpGet]
  362. [AjaxOnly]
  363. public ActionResult GetLeaveStatistics(string pagination, string queryJson)
  364. {
  365. Pagination paginationobj = pagination.ToObject<Pagination>();
  366. var list = nWFProcessIBLL.GetLeaveStatistics(paginationobj, queryJson);
  367. var jsonData = new
  368. {
  369. rows = list,
  370. total = paginationobj.total,
  371. page = paginationobj.page,
  372. records = paginationobj.records,
  373. };
  374. return Success(jsonData);
  375. }
  376. [HttpGet]
  377. [AjaxOnly]
  378. public ActionResult GetTransceiver(string pagination, string queryJson)
  379. {
  380. Pagination paginationobj = pagination.ToObject<Pagination>();
  381. var list = nWFProcessIBLL.GetTransceiver(paginationobj, queryJson);
  382. var jsonData = new
  383. {
  384. rows = list,
  385. total = paginationobj.total,
  386. page = paginationobj.page,
  387. records = paginationobj.records,
  388. };
  389. return Success(jsonData);
  390. }
  391. public ActionResult GetFirstTaskByProcessId(string processId)
  392. {
  393. var taskId = nWFProcessIBLL.GetFirstTaskByProcessId(processId);
  394. return Success(new { taskId });
  395. }
  396. /// <summary>
  397. /// 获取我的流程信息列表
  398. /// </summary>
  399. /// <param name="pagination">分页参数</param>
  400. /// <param name="queryJson">查询条件</param>
  401. /// <returns></returns>
  402. [HttpGet]
  403. [AjaxOnly]
  404. public ActionResult GetTaskPageList(string pagination, string queryJson, string categoryId)
  405. {
  406. Pagination paginationobj = pagination.ToObject<Pagination>();
  407. IEnumerable<NWFProcessEntity> list = new List<NWFProcessEntity>();
  408. UserInfo userInfo = LoginUserInfo.Get();
  409. switch (categoryId)
  410. {
  411. case "1":
  412. list = nWFProcessIBLL.GetMyPageList(userInfo.userId, paginationobj, queryJson);
  413. break;
  414. case "2":
  415. list = nWFProcessIBLL.GetMyTaskPageList(userInfo, paginationobj, queryJson);
  416. break;
  417. case "3":
  418. list = nWFProcessIBLL.GetMyFinishTaskPageList(userInfo, paginationobj, queryJson);
  419. break;
  420. }
  421. var jsonData = new
  422. {
  423. rows = list,
  424. total = paginationobj.total,
  425. page = paginationobj.page,
  426. records = paginationobj.records,
  427. };
  428. return Success(jsonData);
  429. }
  430. /// <summary>
  431. /// 获取批量审核任务清单
  432. /// </summary>
  433. /// <param name="pagination">分页参数</param>
  434. /// <param name="queryJson">查询条件</param>
  435. /// <returns></returns>
  436. [HttpGet]
  437. [AjaxOnly]
  438. public ActionResult GetBatchTaskPageList(string pagination, string queryJson)
  439. {
  440. Pagination paginationobj = pagination.ToObject<Pagination>();
  441. UserInfo userInfo = LoginUserInfo.Get();
  442. var data = nWFProcessIBLL.GetMyTaskPageList(userInfo, paginationobj, queryJson, true);
  443. var jsonData = new
  444. {
  445. rows = data,
  446. total = paginationobj.total,
  447. page = paginationobj.page,
  448. records = paginationobj.records,
  449. };
  450. return Success(jsonData);
  451. }
  452. /// <summary>
  453. /// 获取我的流程信息列表
  454. /// </summary>
  455. /// <param name="pagination">分页参数</param>
  456. /// <param name="queryJson">查询条件</param>
  457. /// <returns></returns>
  458. [HttpGet]
  459. [AjaxOnly]
  460. public ActionResult GetTask(string taskId)
  461. {
  462. var data = nWFTaskIBLL.GetEntity(taskId);
  463. return Success(data);
  464. }
  465. [HttpGet]
  466. [AjaxOnly]
  467. public ActionResult GetMissiveStats(string pagination, string queryJson)
  468. {
  469. Pagination paginationobj = pagination.ToObject<Pagination>();
  470. var list = nWFProcessIBLL.MissiveStats(paginationobj, queryJson);
  471. var jsonData = new
  472. {
  473. rows = list,
  474. total = paginationobj.total,
  475. page = paginationobj.page,
  476. records = paginationobj.records,
  477. };
  478. return Success(jsonData);
  479. }
  480. #endregion
  481. #region 保存更新删除
  482. /// <summary>
  483. /// 删除流程进程实体
  484. /// </summary>
  485. /// <param name="processId">流程进程主键</param>
  486. [HttpPost]
  487. [AjaxOnly]
  488. public ActionResult DeleteEntity(string processId)
  489. {
  490. nWFProcessIBLL.DeleteEntity(processId);
  491. return Success("删除成功");
  492. }
  493. #endregion
  494. #region 流程表单数据统计
  495. /// <summary>
  496. /// 用印申请流程表单统计
  497. /// </summary>
  498. /// <param name="pagination">分页参数</param>
  499. /// <param name="queryJson">查询条件</param>
  500. /// <returns></returns>
  501. [HttpGet]
  502. [AjaxOnly]
  503. public ActionResult GetPageListOfyyspd(string pagination, string queryJson)
  504. {
  505. Pagination paginationobj = pagination.ToObject<Pagination>();
  506. var list = nWFProcessIBLL.GetPageListOfyyspd(paginationobj, queryJson);
  507. var jsonData = new
  508. {
  509. rows = list,
  510. total = paginationobj.total,
  511. page = paginationobj.page,
  512. records = paginationobj.records,
  513. };
  514. return Success(jsonData);
  515. }
  516. /// <summary>
  517. /// 会议室申请流程表单统计
  518. /// </summary>
  519. /// <param name="pagination">分页参数</param>
  520. /// <param name="queryJson">查询条件</param>
  521. /// <returns></returns>
  522. [HttpGet]
  523. [AjaxOnly]
  524. public ActionResult GetPageListOfmeeting(string pagination, string queryJson)
  525. {
  526. Pagination paginationobj = pagination.ToObject<Pagination>();
  527. var list = nWFProcessIBLL.GetPageListOfmeeting(paginationobj, queryJson);
  528. var jsonData = new
  529. {
  530. rows = list,
  531. total = paginationobj.total,
  532. page = paginationobj.page,
  533. records = paginationobj.records,
  534. };
  535. return Success(jsonData);
  536. }
  537. /// <summary>
  538. /// 党委会党委专题会申请流程表单统计
  539. /// </summary>
  540. /// <param name="pagination">分页参数</param>
  541. /// <param name="queryJson">查询条件</param>
  542. /// <returns></returns>
  543. [HttpGet]
  544. [AjaxOnly]
  545. public ActionResult GetPageListOfdwhsq(string pagination, string queryJson)
  546. {
  547. Pagination paginationobj = pagination.ToObject<Pagination>();
  548. var list = nWFProcessIBLL.GetPageListOfdwhsq(paginationobj, queryJson);
  549. var jsonData = new
  550. {
  551. rows = list,
  552. total = paginationobj.total,
  553. page = paginationobj.page,
  554. records = paginationobj.records,
  555. };
  556. return Success(jsonData);
  557. }
  558. #endregion
  559. #region 流程API
  560. /// <summary>
  561. /// 获取流程模板
  562. /// </summary>
  563. /// <param name="code">流程编码</param>
  564. /// <returns></returns>
  565. [HttpGet]
  566. [AjaxOnly]
  567. public ActionResult GetSchemeByCode(string code)
  568. {
  569. var schemeInfo = nWFSchemeIBLL.GetInfoEntityByCode(code);
  570. if (schemeInfo != null)
  571. {
  572. var data = nWFSchemeIBLL.GetSchemeEntity(schemeInfo.F_SchemeId);
  573. return Success(data);
  574. }
  575. return Fail("找不到该流程模板");
  576. }
  577. /// <summary>
  578. /// 根据流程进程主键获取流程模板
  579. /// </summary>
  580. /// <param name="processId">流程进程主键</param>
  581. /// <returns></returns>
  582. [HttpGet]
  583. [AjaxOnly]
  584. public ActionResult GetSchemeByProcessId(string processId)
  585. {
  586. var processEntity = nWFProcessIBLL.GetEntity(processId);
  587. if (processEntity != null)
  588. {
  589. if (string.IsNullOrEmpty(processEntity.F_SchemeId))
  590. {
  591. var schemeInfo = nWFSchemeIBLL.GetInfoEntityByCode(processEntity.F_SchemeCode);
  592. if (schemeInfo != null)
  593. {
  594. var data = nWFSchemeIBLL.GetSchemeEntity(schemeInfo.F_SchemeId);
  595. return Success(data);
  596. }
  597. }
  598. else
  599. {
  600. var data = nWFSchemeIBLL.GetSchemeEntity(processEntity.F_SchemeId);
  601. return Success(data);
  602. }
  603. }
  604. return Fail("找不到该流程模板");
  605. }
  606. /// <summary>
  607. /// 获取流程下一节点审核
  608. /// </summary>
  609. /// <param name="code">流程编码</param>
  610. /// <param name="processId">流程进程主键</param>
  611. /// <param name="taskId">任务主键</param>
  612. /// <param name="nodeId">节点ID</param>
  613. /// <param name="operationCode">操作编码</param>
  614. /// <returns></returns>
  615. [HttpGet]
  616. [AjaxOnly]
  617. public ActionResult GetNextAuditors(string code, string processId, string taskId, string nodeId, string operationCode)
  618. {
  619. UserInfo userInfo = LoginUserInfo.Get();
  620. var data = nWFProcessIBLL.GetNextAuditors(code, processId, taskId, nodeId, operationCode, userInfo);
  621. return Success(data);
  622. }
  623. /// <summary>
  624. /// 获取流程进程信息
  625. /// </summary>
  626. /// <param name="processId">进程主键</param>
  627. /// <param name="taskId">任务主键</param>
  628. /// <returns></returns>
  629. [HttpGet]
  630. [AjaxOnly]
  631. public ActionResult GetProcessDetails(string processId, string taskId)
  632. {
  633. UserInfo userInfo = LoginUserInfo.Get();
  634. var data = nWFProcessIBLL.GetProcessDetails(processId, taskId, userInfo);
  635. if (!string.IsNullOrEmpty(data.childProcessId))
  636. {
  637. processId = data.childProcessId;
  638. }
  639. var taskNode = nWFProcessIBLL.GetTaskUserList(processId);
  640. var jsonData = new
  641. {
  642. info = data,
  643. task = taskNode
  644. };
  645. return Success(jsonData);
  646. }
  647. /// <summary>
  648. /// 获取子流程详细信息
  649. /// </summary>
  650. /// <param name="processId">父流程进程主键</param>
  651. /// <param name="taskId">父流程子流程发起主键</param>
  652. /// <param name="schemeCode">子流程流程模板编码</param>
  653. /// <param name="nodeId">父流程发起子流程节点Id</param>
  654. /// <returns></returns>
  655. [HttpGet]
  656. [AjaxOnly]
  657. public ActionResult GetChildProcessDetails(string processId, string taskId, string schemeCode, string nodeId)
  658. {
  659. UserInfo userInfo = LoginUserInfo.Get();
  660. var data = nWFProcessIBLL.GetChildProcessDetails(processId, taskId, schemeCode, nodeId, userInfo);
  661. var taskNode = nWFProcessIBLL.GetTaskUserList(data.childProcessId);
  662. var jsonData = new
  663. {
  664. info = data,
  665. task = taskNode
  666. };
  667. return Success(jsonData);
  668. }
  669. /// <summary>
  670. /// 保存草稿
  671. /// </summary>
  672. /// <param name="processId">流程进程主键</param>
  673. /// <param name="schemeCode">流程模板编码</param>
  674. /// <returns></returns>
  675. [HttpPost]
  676. [AjaxOnly]
  677. public ActionResult SaveDraft(string processId, string schemeCode, string createUserId)
  678. {
  679. UserInfo userInfo = LoginUserInfo.Get();
  680. if (!string.IsNullOrEmpty(createUserId) && userInfo.userId != createUserId)
  681. {
  682. var userEntity = userIbll.GetEntityByUserId(createUserId);
  683. userInfo.userId = userEntity.F_UserId;
  684. userInfo.enCode = userEntity.F_EnCode;
  685. userInfo.realName = userEntity.F_RealName;
  686. userInfo.nickName = userEntity.F_NickName;
  687. userInfo.headIcon = userEntity.F_HeadIcon;
  688. userInfo.gender = userEntity.F_Gender;
  689. userInfo.mobile = userEntity.F_Mobile;
  690. userInfo.telephone = userEntity.F_Telephone;
  691. userInfo.email = userEntity.F_Email;
  692. userInfo.oICQ = userEntity.F_OICQ;
  693. userInfo.weChat = userEntity.F_WeChat;
  694. userInfo.companyId = userEntity.F_CompanyId;
  695. userInfo.departmentId = userEntity.F_DepartmentId;
  696. userInfo.openId = userEntity.F_OpenId;
  697. userInfo.isSystem = userEntity.F_SecurityLevel == 1 ? true : false;
  698. }
  699. nWFProcessIBLL.SaveDraft(processId, schemeCode, userInfo);
  700. return Success("流程草稿保存成功");
  701. }
  702. /// <summary>
  703. /// 删除草稿
  704. /// </summary>
  705. /// <param name="processId">流程进程主键</param>
  706. /// <returns></returns>
  707. [HttpPost]
  708. [AjaxOnly]
  709. public ActionResult DeleteDraft(string processId)
  710. {
  711. UserInfo userInfo = LoginUserInfo.Get();
  712. nWFProcessIBLL.DeleteDraft(processId, userInfo);
  713. return Success("流程草稿删除成功");
  714. }
  715. /// <summary>
  716. /// 创建流程
  717. /// </summary>
  718. /// <param name="schemeCode">流程模板编码</param>
  719. /// <param name="processId">流程进程主键</param>
  720. /// <param name="title">流程进程自定义标题</param>
  721. /// <param name="level">流程进程等级</param>
  722. /// <param name="auditors">下一节点审核人</param>
  723. /// <param name="createUserId">流程创建人</param>
  724. /// <returns></returns>
  725. [HttpPost]
  726. [AjaxOnly]
  727. public ActionResult CreateFlow(string schemeCode, string processId, string title, int level, string auditors, string createUserId)
  728. {
  729. UserInfo userInfo = LoginUserInfo.Get();
  730. if (!string.IsNullOrEmpty(createUserId) && userInfo.userId != createUserId)
  731. {
  732. if (title == null)
  733. {
  734. title = "";
  735. }
  736. title += "【" + userInfo.realName + "代发】";
  737. var userEntity = userIbll.GetEntityByUserId(createUserId);
  738. userInfo.userId = userEntity.F_UserId;
  739. userInfo.enCode = userEntity.F_EnCode;
  740. userInfo.realName = userEntity.F_RealName;
  741. userInfo.nickName = userEntity.F_NickName;
  742. userInfo.headIcon = userEntity.F_HeadIcon;
  743. userInfo.gender = userEntity.F_Gender;
  744. userInfo.mobile = userEntity.F_Mobile;
  745. userInfo.telephone = userEntity.F_Telephone;
  746. userInfo.email = userEntity.F_Email;
  747. userInfo.oICQ = userEntity.F_OICQ;
  748. userInfo.weChat = userEntity.F_WeChat;
  749. userInfo.companyId = userEntity.F_CompanyId;
  750. userInfo.departmentId = userEntity.F_DepartmentId;
  751. userInfo.openId = userEntity.F_OpenId;
  752. userInfo.isSystem = userEntity.F_SecurityLevel == 1 ? true : false;
  753. userInfo.roleIds = userRelationIBLL.GetObjectIds(userEntity.F_UserId, 1);
  754. userInfo.postIds = userRelationIBLL.GetObjectIds(userEntity.F_UserId, 2);
  755. }
  756. try
  757. {
  758. nWFProcessIBLL.CreateFlow(schemeCode, processId, title, level, auditors, userInfo);
  759. return Success("流程创建成功");
  760. }
  761. catch (System.Exception ex)
  762. {
  763. nWFProcessIBLL.SaveDraft(processId, schemeCode, userInfo);
  764. return Fail(ex.Message);
  765. }
  766. }
  767. /// <summary>
  768. /// 创建流程(子流程)
  769. /// </summary>
  770. /// <param name="schemeCode">流程模板编码</param>
  771. /// <param name="processId">流程进程主键</param>
  772. /// <param name="parentProcessId">父流程进程主键</param>
  773. /// <param name="parentTaskId">父流程任务主键</param>
  774. /// <returns></returns>
  775. [HttpPost]
  776. [AjaxOnly]
  777. public ActionResult CreateChildFlow(string schemeCode, string processId, string parentProcessId, string parentTaskId)
  778. {
  779. UserInfo userInfo = LoginUserInfo.Get();
  780. nWFProcessIBLL.CreateChildFlow(schemeCode, processId, parentProcessId, parentTaskId, 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 AgainCreateFlow(string processId)
  791. {
  792. try
  793. {
  794. UserInfo userInfo = LoginUserInfo.Get();
  795. nWFProcessIBLL.AgainCreateFlow(processId, userInfo);
  796. return Success("流程重新创建成功");
  797. }
  798. catch (System.Exception ex)
  799. {
  800. return Fail(ex.Message);
  801. }
  802. }
  803. /// <summary>
  804. /// 审批流程
  805. /// </summary>
  806. /// <param name="operationCode">流程审批操作码agree 同意 disagree 不同意 lrtimeout 超时</param>
  807. /// <param name="operationName">流程审批操名称</param>
  808. /// <param name="processId">流程进程主键</param>
  809. /// <param name="taskId">流程任务主键</param>
  810. /// <param name="des">审批意见</param>
  811. /// <param name="auditors">下一节点指定审核人</param>
  812. /// <returns></returns>
  813. [HttpPost]
  814. [AjaxOnly]
  815. public ActionResult AuditFlow(string operationCode, string operationName, string processId, string taskId, string des, string auditors, string stamp, string signUrl)
  816. {
  817. UserInfo userInfo = LoginUserInfo.Get();
  818. try
  819. {
  820. nWFProcessIBLL.AuditFlow(operationCode, operationName, processId, taskId, des, auditors, stamp, signUrl, userInfo);
  821. return Success("流程审批成功");
  822. }
  823. catch (System.Exception ex)
  824. {
  825. return Fail(ex.Message);
  826. }
  827. }
  828. /// <summary>
  829. /// 审批流程
  830. /// </summary>
  831. /// <param name="operationCode">流程审批操作码agree 同意 disagree 不同意</param>
  832. /// <param name="taskIds">任务串</param>
  833. /// <returns></returns>
  834. [HttpPost]
  835. [AjaxOnly]
  836. public ActionResult AuditFlows(string operationCode, string taskIds)
  837. {
  838. UserInfo userInfo = LoginUserInfo.Get();
  839. nWFProcessIBLL.AuditFlows(operationCode, taskIds, userInfo);
  840. return Success("流程批量审批成功");
  841. }
  842. /// <summary>
  843. /// 流程加签
  844. /// </summary>
  845. /// <param name="processId">流程进程主键</param>
  846. /// <param name="taskId">流程任务主键</param>
  847. /// <param name="userId">加签人员</param>
  848. /// <param name="des">加签说明</param>
  849. /// <returns></returns>
  850. [HttpPost]
  851. [AjaxOnly]
  852. public ActionResult SignFlow(string processId, string taskId, string userId, string des)
  853. {
  854. UserInfo userInfo = LoginUserInfo.Get();
  855. nWFProcessIBLL.SignFlow(processId, taskId, userId, des, userInfo);
  856. return Success("流程加签成功");
  857. }
  858. /// <summary>
  859. /// 流程加签
  860. /// </summary>
  861. /// <param name="processId">流程进程主键</param>
  862. /// <param name="taskId">流程任务主键</param>
  863. /// <param name="userId">加签人员(可多人)</param>
  864. /// <param name="des">加签说明</param>
  865. /// <returns></returns>
  866. [HttpPost]
  867. [AjaxOnly]
  868. public ActionResult SignFlowTwo(string processId, string taskId, string userId, string des)
  869. {
  870. UserInfo userInfo = LoginUserInfo.Get();
  871. nWFProcessIBLL.SignFlowTwo(processId, taskId, userId, des, userInfo);
  872. return Success("流程加签成功");
  873. }
  874. /// <summary>
  875. /// 流程加签审核
  876. /// </summary>
  877. /// <param name="operationCode">审核操作码</param>
  878. /// <param name="processId">流程进程主键</param>
  879. /// <param name="taskId">流程任务主键</param>
  880. /// <param name="des">加签说明</param>
  881. /// <returns></returns>
  882. [HttpPost]
  883. [AjaxOnly]
  884. public ActionResult SignAuditFlow(string operationCode, string processId, string taskId, string des)
  885. {
  886. UserInfo userInfo = LoginUserInfo.Get();
  887. nWFProcessIBLL.SignAuditFlow(operationCode, processId, taskId, des, userInfo);
  888. return Success("加签审批成功");
  889. }
  890. /// <summary>
  891. /// 确认阅读
  892. /// </summary>
  893. /// <param name="processId">流程进程主键</param>
  894. /// <param name="taskId">流程任务主键</param>
  895. /// <returns></returns>
  896. [HttpPost]
  897. [AjaxOnly]
  898. public ActionResult ReferFlow(string processId, string taskId)
  899. {
  900. UserInfo userInfo = LoginUserInfo.Get();
  901. nWFProcessIBLL.ReferFlow(processId, taskId, userInfo);
  902. return Success("保存成功");
  903. }
  904. /// <summary>
  905. /// 催办流程
  906. /// </summary>
  907. /// <param name="processId">流程进程主键</param>
  908. /// <param name="userInfo">当前操作人信息</param>
  909. /// <returns></returns>
  910. [HttpPost]
  911. [AjaxOnly]
  912. public ActionResult UrgeFlow(string processId)
  913. {
  914. UserInfo userInfo = LoginUserInfo.Get();
  915. nWFProcessIBLL.UrgeFlow(processId, userInfo);
  916. return Success("催办成功");
  917. }
  918. /// <summary>
  919. /// 撤销流程(只有在该流程未被处理的情况下)
  920. /// </summary>
  921. /// <param name="processId">流程进程主键</param>
  922. /// <returns></returns>
  923. [HttpPost]
  924. [AjaxOnly]
  925. public ActionResult RevokeFlow(string processId)
  926. {
  927. UserInfo userInfo = LoginUserInfo.Get();
  928. nWFProcessIBLL.RevokeFlow(processId, userInfo);
  929. return Success("撤销成功");
  930. }
  931. /// <summary>
  932. /// 获取流程当前任务需要处理的人
  933. /// </summary>
  934. /// <param name="processId">流程进程主键</param>
  935. /// <returns></returns>
  936. [HttpGet]
  937. [AjaxOnly]
  938. public ActionResult GetTaskUserList(string processId)
  939. {
  940. var data = nWFProcessIBLL.GetTaskUserList(processId);
  941. return Success(data);
  942. }
  943. /// <summary>
  944. /// 指派流程审核人
  945. /// </summary>
  946. /// <param name="strList">任务列表</param>
  947. [HttpPost]
  948. [ValidateAntiForgeryToken]
  949. [AjaxOnly]
  950. public ActionResult AppointUser(string strList)
  951. {
  952. IEnumerable<NWFTaskEntity> list = strList.ToObject<IEnumerable<NWFTaskEntity>>();
  953. UserInfo userInfo = LoginUserInfo.Get();
  954. nWFProcessIBLL.AppointUser(list, userInfo);
  955. return Success("指派成功");
  956. }
  957. /// <summary>
  958. /// 作废流程
  959. /// </summary>
  960. /// <param name="processId">流程进程主键</param>
  961. /// <returns></returns>
  962. [HttpPost]
  963. [AjaxOnly]
  964. public ActionResult DeleteFlow(string processId)
  965. {
  966. UserInfo userInfo = LoginUserInfo.Get();
  967. nWFProcessIBLL.DeleteFlow(processId, userInfo);
  968. return Success("作废成功");
  969. }
  970. /// <summary>
  971. /// 撤销审核
  972. /// </summary>
  973. /// <param name="processId">流程进程主键</param>
  974. /// <param name="taskId">任务主键</param>
  975. /// <returns></returns>
  976. [HttpPost]
  977. [AjaxOnly]
  978. public ActionResult RevokeAudit(string processId, string taskId)
  979. {
  980. UserInfo userInfo = LoginUserInfo.Get();
  981. var res = nWFProcessIBLL.RevokeAudit(processId, taskId, userInfo);
  982. if (res)
  983. {
  984. return Success("撤销成功");
  985. }
  986. else
  987. {
  988. return Fail("撤销失败,当前不允许撤销!");
  989. }
  990. }
  991. /// <summary>
  992. /// 添加任务
  993. /// </summary>
  994. /// <param name="processId"></param>
  995. /// <param name="bNodeId"></param>
  996. /// <param name="eNodeId"></param>
  997. /// <returns></returns>
  998. [HttpPost]
  999. [AjaxOnly]
  1000. public ActionResult AddTask(string processId, string bNodeId, string eNodeId)
  1001. {
  1002. UserInfo userInfo = LoginUserInfo.Get();
  1003. nWFProcessIBLL.AddTask(processId, bNodeId, eNodeId, userInfo);
  1004. return Success("添加成功");
  1005. }
  1006. #endregion
  1007. [HttpGet]
  1008. public ActionResult GetNextUser(string F_TaskId)
  1009. {
  1010. List<string> usernamelist = new List<string>();
  1011. List<string> nextlist = nWFTaskIBLL.GetTaskUserList(F_TaskId).Select(m => m.F_UserId).ToList();
  1012. foreach (var uid in nextlist)
  1013. {
  1014. var userentity = userIbll.GetEntityByUserId(uid);
  1015. string deptname = departmentIbll.GetEntity(userentity?.F_DepartmentId)?.F_FullName;
  1016. usernamelist.Add("[" + deptname + "]" + userentity?.F_RealName);
  1017. }
  1018. return SuccessString(string.Join(",", usernamelist));
  1019. }
  1020. [HttpGet]
  1021. public ActionResult GetNextUserMonitor(string F_ProcessId)
  1022. {
  1023. var tasklist = nWFTaskIBLL.GetUnFinishTaskList(F_ProcessId).FirstOrDefault();
  1024. if (tasklist != null && !string.IsNullOrEmpty(tasklist.F_Id))
  1025. {
  1026. List<string> usernamelist = new List<string>();
  1027. List<string> nextlist = nWFTaskIBLL.GetTaskUserList(tasklist.F_Id).Select(m => m.F_UserId).ToList();
  1028. foreach (var uid in nextlist)
  1029. {
  1030. var userentity = userIbll.GetEntityByUserId(uid);
  1031. string deptname = departmentIbll.GetEntity(userentity?.F_DepartmentId)?.F_FullName;
  1032. usernamelist.Add("[" + deptname + "]" + userentity?.F_RealName);
  1033. }
  1034. return SuccessString(string.Join(",", usernamelist));
  1035. }
  1036. else
  1037. {
  1038. return SuccessString("");
  1039. }
  1040. }
  1041. /// <summary>
  1042. /// 获取文件标题
  1043. /// </summary>
  1044. /// <param name="F_ProcessId"></param>
  1045. /// <returns></returns>
  1046. [HttpGet]
  1047. public ActionResult GetWenJianBiaoTi(string F_ProcessId)
  1048. {
  1049. //判断流程是自定义流程还是系统流程:自定义流程则查找自定义表,系统流程则为空;
  1050. var nWFProcessEntity = nWFProcessIBLL.GetEntity(F_ProcessId);
  1051. if (nWFProcessEntity != null)
  1052. {
  1053. var nWFSchemeEntity = nWFSchemeIBLL.GetSchemeEntity(nWFProcessEntity.F_SchemeId);
  1054. if (nWFSchemeEntity != null)
  1055. {
  1056. var nWFSchemeInfoEntity = nWFSchemeIBLL.GetInfoEntity(nWFSchemeEntity.F_SchemeInfoId);
  1057. if (nWFSchemeInfoEntity != null && nWFSchemeInfoEntity.F_Kind == 1)
  1058. {
  1059. F_ContentModel f_content = nWFSchemeEntity.F_Content.ToObject<F_ContentModel>();
  1060. var startround = f_content.nodes.FirstOrDefault(x => x.type == "startround");
  1061. if (startround != null)
  1062. {
  1063. var formId = startround.wfForms.FirstOrDefault(x => x.type == "1")?.formId;
  1064. if (!string.IsNullOrEmpty(formId))
  1065. {
  1066. var formSchemeInfoEntity = formSchemeIBLL.GetSchemeInfoEntity(formId);
  1067. if (formSchemeInfoEntity != null)
  1068. {
  1069. var formSchemeEntity = formSchemeIBLL.GetSchemeEntity(formSchemeInfoEntity.F_SchemeId);
  1070. if (formSchemeEntity != null)
  1071. {
  1072. F_SchemeModel f_Scheme = formSchemeEntity.F_Scheme.ToObject<F_SchemeModel>();
  1073. var dbtableData = f_Scheme.dbTable.FirstOrDefault();
  1074. if (dbtableData != null)
  1075. {
  1076. var data = nWFProcessIBLL.GetWenJianBiaoTiData(F_ProcessId, dbtableData.name, dbtableData.field);
  1077. return SuccessString(data?.WenJianBiaoTi);
  1078. }
  1079. }
  1080. }
  1081. }
  1082. }
  1083. }
  1084. }
  1085. }
  1086. return SuccessString("");
  1087. }
  1088. /// <summary>
  1089. /// 流程监控统计
  1090. /// </summary>
  1091. /// <returns></returns>
  1092. [HttpPost]
  1093. public ActionResult StatisticsData()
  1094. {
  1095. nWFProcessIBLL.StatisticsData();
  1096. return Success("操作成功");
  1097. }
  1098. }
  1099. }