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.
 
 
 
 
 
 

533 lines
18 KiB

  1. using Learun.Application.Form;
  2. using Learun.Application.WorkFlow;
  3. using Learun.Util;
  4. using Nancy;
  5. using System.Collections.Generic;
  6. namespace Learun.Application.WebApi.Modules
  7. {
  8. /// <summary>
  9. /// 版 本 Learun-ADMS V7.0.3 力软敏捷开发框架
  10. /// Copyright (c) 2013-2018 上海力软信息技术有限公司
  11. /// 创建人:力软-框架开发组
  12. /// 日 期:2019.01.10
  13. /// 描 述:新的工作流接口
  14. /// </summary>
  15. public class NewWorkFlowApi : BaseApi
  16. {
  17. /// <summary>
  18. /// 注册接口
  19. /// </summary>
  20. public NewWorkFlowApi()
  21. : base("/learun/adms/newwf")
  22. {
  23. Get["/schemelist"] = GetSchemePageList;
  24. Get["/scheme"] = GetSchemeByCode;
  25. Get["/mylist"] = GetMyProcess;
  26. Get["/mytask"] = GetMyTaskList;
  27. Get["/mytaskmaked"] = GetMyMakeTaskList;
  28. Get["/auditer"] = GetNextAuditors;
  29. Get["/processinfo"] = GetProcessDetails;
  30. Post["/create"] = Create;
  31. Post["/createnoform"] = CreateNoForm;
  32. Post["/againcreate"] = AgainCreateFlow;
  33. Post["/childcreate"] = CreateChildFlow;
  34. Post["/draft"] = SaveDraft;
  35. Post["/deldraft"] = DeleteDraft;
  36. Post["/audit"] = AuditFlow;
  37. Post["/sign"] = SignFlow;
  38. Post["/signaudit"] = SignAuditFlow;
  39. Post["/urge"] = UrgeFlow;
  40. Post["/revoke"] = RevokeFlow;
  41. Post["/refer"] = ReferFlow;
  42. Post["/instance"] = SaveInstanceForms;
  43. Post["/auditors"] = SaveAuditors;
  44. }
  45. private NWFSchemeIBLL nWFSchemeIBLL = new NWFSchemeBLL();
  46. private NWFProcessIBLL nWFProcessIBLL = new NWFProcessBLL();
  47. private FormSchemeIBLL formSchemeIBLL = new FormSchemeBLL();
  48. /// <summary>
  49. /// 获取我的流程实例信息
  50. /// </summary>
  51. /// <param name="_"></param>
  52. /// <returns></returns>
  53. private Response GetMyProcess(dynamic _)
  54. {
  55. QueryModel parameter = this.GetReqData<QueryModel>();
  56. IEnumerable<NWFProcessEntity> list = new List<NWFProcessEntity>();
  57. list = nWFProcessIBLL.GetMyPageList(userInfo.userId, parameter.pagination, parameter.queryJson);
  58. var jsonData = new
  59. {
  60. rows = list,
  61. total = parameter.pagination.total,
  62. page = parameter.pagination.page,
  63. records = parameter.pagination.records,
  64. };
  65. return Success(jsonData);
  66. }
  67. /// <summary>
  68. /// 获取我的任务列表
  69. /// </summary>
  70. /// <param name="_"></param>
  71. /// <returns></returns>
  72. private Response GetMyTaskList(dynamic _)
  73. {
  74. QueryModel parameter = this.GetReqData<QueryModel>();
  75. IEnumerable<NWFProcessEntity> list = new List<NWFProcessEntity>();
  76. list = nWFProcessIBLL.GetMyTaskPageList(userInfo, parameter.pagination, parameter.queryJson);
  77. var jsonData = new
  78. {
  79. rows = list,
  80. total = parameter.pagination.total,
  81. page = parameter.pagination.page,
  82. records = parameter.pagination.records,
  83. };
  84. return Success(jsonData);
  85. }
  86. /// <summary>
  87. /// 获取我已处理的任务列表
  88. /// </summary>
  89. /// <param name="_"></param>
  90. /// <returns></returns>
  91. private Response GetMyMakeTaskList(dynamic _)
  92. {
  93. QueryModel parameter = this.GetReqData<QueryModel>();
  94. IEnumerable<NWFProcessEntity> list = new List<NWFProcessEntity>();
  95. list = nWFProcessIBLL.GetMyFinishTaskPageList(userInfo, parameter.pagination, parameter.queryJson);
  96. var jsonData = new
  97. {
  98. rows = list,
  99. total = parameter.pagination.total,
  100. page = parameter.pagination.page,
  101. records = parameter.pagination.records,
  102. };
  103. return Success(jsonData);
  104. }
  105. /// <summary>
  106. /// 获取流程模板
  107. /// </summary>
  108. /// <param name="_"></param>
  109. /// <returns></returns>
  110. private Response GetSchemePageList(dynamic _)
  111. {
  112. QueryModel parameter = this.GetReqData<QueryModel>();
  113. IEnumerable<NWFSchemeInfoEntity> list = new List<NWFSchemeInfoEntity>();
  114. list = nWFSchemeIBLL.GetAppInfoPageList(parameter.pagination, this.userInfo, parameter.queryJson);
  115. var jsonData = new
  116. {
  117. rows = list,
  118. total = parameter.pagination.total,
  119. page = parameter.pagination.page,
  120. records = parameter.pagination.records,
  121. };
  122. return Success(jsonData);
  123. }
  124. /// <summary>
  125. /// 获取流程模板
  126. /// </summary>
  127. /// <param name="code">流程编码</param>
  128. /// <returns></returns>
  129. public Response GetSchemeByCode(dynamic _)
  130. {
  131. string code = this.GetReqData();
  132. var schemeInfo = nWFSchemeIBLL.GetInfoEntityByCode(code);
  133. if (schemeInfo != null)
  134. {
  135. var data = nWFSchemeIBLL.GetSchemeEntity(schemeInfo.F_SchemeId);
  136. return Success(data);
  137. }
  138. return Fail("找不到该流程模板");
  139. }
  140. /// <summary>
  141. /// 获取流程下一节点审核
  142. /// </summary>
  143. /// <returns></returns>
  144. public Response GetNextAuditors(dynamic _)
  145. {
  146. flowParam parameter = this.GetReqData<flowParam>();
  147. UserInfo userInfo = LoginUserInfo.Get();
  148. var data = nWFProcessIBLL.GetNextAuditors(parameter.code, parameter.processId, parameter.taskId, parameter.nodeId, parameter.operationCode, userInfo);
  149. return Success(data);
  150. }
  151. /// <summary>
  152. /// 获取流程进程信息
  153. /// </summary>
  154. /// <param name="_"></param>
  155. /// <returns></returns>
  156. public Response GetProcessDetails(dynamic _)
  157. {
  158. UserInfo userInfo = LoginUserInfo.Get();
  159. flowParam parameter = this.GetReqData<flowParam>();
  160. var data = nWFProcessIBLL.GetProcessDetails(parameter.processId, parameter.taskId, userInfo);
  161. if (!string.IsNullOrEmpty(data.childProcessId))
  162. {
  163. parameter.processId = data.childProcessId;
  164. }
  165. var taskNode = nWFProcessIBLL.GetTaskUserList(parameter.processId);
  166. var jsonData = new
  167. {
  168. info = data,
  169. task = taskNode
  170. };
  171. return Success(jsonData);
  172. }
  173. /// <summary>
  174. /// 创建流程实例
  175. /// </summary>
  176. /// <param name="_"></param>
  177. /// <returns></returns>
  178. private Response Create(dynamic _)
  179. {
  180. flowParam parameter = this.GetReqData<flowParam>();
  181. List<FormParam> req = parameter.formreq.ToObject<List<FormParam>>();// 获取模板请求数据
  182. foreach (var item in req)
  183. {
  184. formSchemeIBLL.SaveInstanceForm(item.schemeInfoId, item.processIdName, item.keyValue, item.formData);
  185. }
  186. nWFProcessIBLL.CreateFlow(parameter.code, parameter.processId, parameter.title, parameter.level, parameter.auditors, userInfo);
  187. return this.Success("创建成功");
  188. }
  189. private Response CreateNoForm(dynamic _)
  190. {
  191. flowParam parameter = this.GetReqData<flowParam>();
  192. nWFProcessIBLL.CreateFlow(parameter.code, parameter.processId, parameter.title, parameter.level, parameter.auditors, userInfo);
  193. return this.Success("创建成功");
  194. }
  195. /// <summary>
  196. /// 重新创建流程
  197. /// </summary>
  198. /// <param name="_"></param>
  199. /// <returns></returns>
  200. public Response AgainCreateFlow(dynamic _)
  201. {
  202. flowParam parameter = this.GetReqData<flowParam>();
  203. // 保存自定义表单
  204. List<FormParam> req = parameter.formreq.ToObject<List<FormParam>>();// 获取模板请求数据
  205. foreach (var item in req)
  206. {
  207. formSchemeIBLL.SaveInstanceForm(item.schemeInfoId, item.processIdName, item.keyValue, item.formData);
  208. }
  209. nWFProcessIBLL.AgainCreateFlow(parameter.processId, userInfo);
  210. return Success("重新创建成功");
  211. }
  212. /// <summary>
  213. /// 创建流程(子流程)
  214. /// </summary>
  215. public Response CreateChildFlow(dynamic _)
  216. {
  217. flowParam parameter = this.GetReqData<flowParam>();
  218. // 保存自定义表单
  219. List<FormParam> req = parameter.formreq.ToObject<List<FormParam>>();// 获取模板请求数据
  220. foreach (var item in req)
  221. {
  222. formSchemeIBLL.SaveInstanceForm(item.schemeInfoId, item.processIdName, item.keyValue, item.formData);
  223. }
  224. nWFProcessIBLL.CreateChildFlow(parameter.code, parameter.processId, parameter.parentProcessId, parameter.parentTaskId, userInfo);
  225. return Success("子流程创建成功");
  226. }
  227. /// <summary>
  228. /// 保存草稿(流程)
  229. /// </summary>
  230. /// <param name="_"></param>
  231. /// <returns></returns>
  232. public Response SaveDraft(dynamic _)
  233. {
  234. flowParam parameter = this.GetReqData<flowParam>();
  235. // 保存自定义表单
  236. List<FormParam> req = parameter.formreq.ToObject<List<FormParam>>();// 获取模板请求数据
  237. foreach (var item in req)
  238. {
  239. formSchemeIBLL.SaveInstanceForm(item.schemeInfoId, item.processIdName, item.keyValue, item.formData);
  240. }
  241. if (!string.IsNullOrEmpty(parameter.processId))
  242. {
  243. nWFProcessIBLL.SaveDraft(parameter.processId, parameter.code, userInfo);
  244. }
  245. return Success("保存成功");
  246. }
  247. /// <summary>
  248. /// 删除草稿
  249. /// </summary>
  250. /// <param name="_"></param>
  251. /// <returns></returns>
  252. public Response DeleteDraft(dynamic _)
  253. {
  254. string processId = this.GetReqData();
  255. nWFProcessIBLL.DeleteDraft(processId, userInfo);
  256. return Success("草稿删除成功");
  257. }
  258. /// <summary>
  259. /// 审批流程
  260. /// </summary>
  261. /// <param name="_"></param>
  262. /// <returns></returns>
  263. public Response AuditFlow(dynamic _)
  264. {
  265. flowParam parameter = this.GetReqData<flowParam>();
  266. // 保存自定义表单
  267. List<FormParam> req = parameter.formreq.ToObject<List<FormParam>>();// 获取模板请求数据
  268. foreach (var item in req)
  269. {
  270. formSchemeIBLL.SaveInstanceForm(item.schemeInfoId, item.processIdName, item.keyValue, item.formData);
  271. }
  272. //移动端传参signUrl,stamp,
  273. nWFProcessIBLL.AuditFlow(parameter.operationCode, parameter.operationName, parameter.processId, parameter.taskId, parameter.des, parameter.auditors, parameter.stamp, parameter.signUrl, userInfo);
  274. return Success("审批成功");
  275. }
  276. /// <summary>
  277. /// 流程加签
  278. /// </summary>
  279. /// <param name="_"></param>
  280. /// <returns></returns>
  281. public Response SignFlow(dynamic _)
  282. {
  283. flowParam parameter = this.GetReqData<flowParam>();
  284. // 保存自定义表单
  285. List<FormParam> req = parameter.formreq.ToObject<List<FormParam>>();// 获取模板请求数据
  286. foreach (var item in req)
  287. {
  288. formSchemeIBLL.SaveInstanceForm(item.schemeInfoId, item.processIdName, item.keyValue, item.formData);
  289. }
  290. nWFProcessIBLL.SignFlow(parameter.processId, parameter.taskId, parameter.userId, parameter.des, userInfo);
  291. return Success("加签成功");
  292. }
  293. /// <summary>
  294. /// 流程加签审核
  295. /// </summary>
  296. /// <param name="_"></param>
  297. /// <returns></returns>
  298. public Response SignAuditFlow(dynamic _)
  299. {
  300. flowParam parameter = this.GetReqData<flowParam>();
  301. // 保存自定义表单
  302. List<FormParam> req = parameter.formreq.ToObject<List<FormParam>>();// 获取模板请求数据
  303. foreach (var item in req)
  304. {
  305. formSchemeIBLL.SaveInstanceForm(item.schemeInfoId, item.processIdName, item.keyValue, item.formData);
  306. }
  307. nWFProcessIBLL.SignAuditFlow(parameter.operationCode, parameter.processId, parameter.taskId, parameter.des, userInfo);
  308. return Success("加签审批成功");
  309. }
  310. /// <summary>
  311. /// 催办流程
  312. /// </summary>
  313. /// <param name="_"></param>
  314. /// <returns></returns>
  315. public Response UrgeFlow(dynamic _)
  316. {
  317. string processId = this.GetReqData();
  318. nWFProcessIBLL.UrgeFlow(processId, userInfo);
  319. return Success("催办成功");
  320. }
  321. /// <summary>
  322. /// 撤销流程(只有在该流程未被处理的情况下)
  323. /// </summary>
  324. /// <param name="_"></param>
  325. /// <returns></returns>
  326. public Response RevokeFlow(dynamic _)
  327. {
  328. string processId = this.GetReqData();
  329. nWFProcessIBLL.RevokeFlow(processId, userInfo);
  330. return Success("撤销成功");
  331. }
  332. /// <summary>
  333. /// 确认阅读
  334. /// </summary>
  335. /// <param name="_"></param>
  336. /// <returns></returns>
  337. public Response ReferFlow(dynamic _)
  338. {
  339. flowParam parameter = this.GetReqData<flowParam>();
  340. nWFProcessIBLL.ReferFlow(parameter.processId, parameter.taskId, userInfo);
  341. return Success("确认成功");
  342. }
  343. /// <summary>
  344. /// app保存实例
  345. /// </summary>
  346. /// <param name="_"></param>
  347. /// <returns></returns>
  348. public Response SaveInstanceForms(dynamic _)
  349. {
  350. List<FormParam> param = this.GetReqData<List<FormParam>>();
  351. foreach (var item in param)
  352. {
  353. formSchemeIBLL.SaveInstanceForm(item.schemeInfoId, item.processIdName, item.keyValue, item.formData);
  354. }
  355. return Success("保存成功!");
  356. }
  357. /// <summary>
  358. /// app保存审核人
  359. /// </summary>
  360. /// <param name="_"></param>
  361. /// <returns></returns>
  362. public Response SaveAuditors(dynamic _)
  363. {
  364. var param = this.GetReqData<flowParam>();
  365. UserInfo userInfo = LoginUserInfo.Get();
  366. try
  367. {
  368. nWFProcessIBLL.AuditFlow(param.operationCode, param.operationName, param.processId, param.taskId, param.des, param.auditors, param.stamp, param.signUrl, userInfo);
  369. return Success("流程审批成功");
  370. }
  371. catch (System.Exception ex)
  372. {
  373. return Fail(ex.Message);
  374. }
  375. }
  376. private class flowParam
  377. {
  378. /// <summary>
  379. /// 流程模板编码
  380. /// </summary>
  381. public string code { get; set; }
  382. /// <summary>
  383. /// 流程进程主键
  384. /// </summary>
  385. public string processId { get; set; }
  386. /// <summary>
  387. /// 流程任务主键
  388. /// </summary>
  389. public string taskId { get; set; }
  390. /// <summary>
  391. /// 流程节点Id
  392. /// </summary>
  393. public string nodeId { get; set; }
  394. /// <summary>
  395. /// 审核操作码
  396. /// </summary>
  397. public string operationCode { get; set; }
  398. /// <summary>
  399. /// 审核操作名称
  400. /// </summary>
  401. public string operationName { get; set; }
  402. /// <summary>
  403. /// 流程自定义标题
  404. /// </summary>
  405. public string title { get; set; }
  406. /// <summary>
  407. /// 流程等级
  408. /// </summary>
  409. public int level { get; set; }
  410. /// <summary>
  411. /// 流程审核用户
  412. /// </summary>
  413. public string auditors { get; set; }
  414. /// <summary>
  415. /// 表单信息
  416. /// </summary>
  417. public string formreq { get; set; }
  418. /// <summary>
  419. /// 描述
  420. /// </summary>
  421. public string des { get; set; }
  422. /// <summary>
  423. /// 加签人员主键
  424. /// </summary>
  425. public string userId { get; set; }
  426. /// <summary>
  427. /// 父流程进程主键
  428. /// </summary>
  429. public string parentProcessId { get; set; }
  430. /// <summary>
  431. /// 父流程任务主键
  432. /// </summary>
  433. public string parentTaskId { get; set; }
  434. /// <summary>
  435. /// 签字图片信息
  436. /// </summary>
  437. public string signUrl { get; set; }
  438. /// <summary>
  439. /// 签章信息
  440. /// </summary>
  441. public string stamp { get; set; }
  442. }
  443. /// <summary>
  444. /// 查询条件对象
  445. /// </summary>
  446. private class QueryModel
  447. {
  448. public Pagination pagination { get; set; }
  449. public string queryJson { get; set; }
  450. }
  451. /// <summary>
  452. /// 自定义表单提交参数
  453. /// </summary>
  454. private class FormParam
  455. {
  456. /// <summary>
  457. /// 流程模板id
  458. /// </summary>
  459. public string schemeInfoId { get; set; }
  460. /// <summary>
  461. /// 关联字段名称
  462. /// </summary>
  463. public string processIdName { get; set; }
  464. /// <summary>
  465. /// 数据主键值
  466. /// </summary>
  467. public string keyValue { get; set; }
  468. /// <summary>
  469. /// 表单数据
  470. /// </summary>
  471. public string formData { get; set; }
  472. }
  473. }
  474. }