Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

535 linhas
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. /// <summary>
  190. /// 无表单提交,针对app H5
  191. /// </summary>
  192. /// <param name="_"></param>
  193. /// <returns></returns>
  194. private Response CreateNoForm(dynamic _)
  195. {
  196. flowParam parameter = this.GetReqData<flowParam>();
  197. nWFProcessIBLL.CreateFlow(parameter.code, parameter.processId, parameter.title, parameter.level, parameter.auditors, userInfo);
  198. return this.Success("创建成功");
  199. }
  200. /// <summary>
  201. /// 重新创建流程
  202. /// </summary>
  203. /// <param name="_"></param>
  204. /// <returns></returns>
  205. public Response AgainCreateFlow(dynamic _)
  206. {
  207. flowParam parameter = this.GetReqData<flowParam>();
  208. // 保存自定义表单
  209. List<FormParam> req = parameter.formreq.ToObject<List<FormParam>>();// 获取模板请求数据
  210. foreach (var item in req)
  211. {
  212. formSchemeIBLL.SaveInstanceForm(item.schemeInfoId, item.processIdName, item.keyValue, item.formData);
  213. }
  214. nWFProcessIBLL.AgainCreateFlow(parameter.processId, userInfo);
  215. return Success("重新创建成功");
  216. }
  217. /// <summary>
  218. /// 创建流程(子流程)
  219. /// </summary>
  220. public Response CreateChildFlow(dynamic _)
  221. {
  222. flowParam parameter = this.GetReqData<flowParam>();
  223. // 保存自定义表单
  224. List<FormParam> req = parameter.formreq.ToObject<List<FormParam>>();// 获取模板请求数据
  225. foreach (var item in req)
  226. {
  227. formSchemeIBLL.SaveInstanceForm(item.schemeInfoId, item.processIdName, item.keyValue, item.formData);
  228. }
  229. nWFProcessIBLL.CreateChildFlow(parameter.code, parameter.processId, parameter.parentProcessId, parameter.parentTaskId, userInfo);
  230. return Success("子流程创建成功");
  231. }
  232. /// <summary>
  233. /// 保存草稿(流程)
  234. /// </summary>
  235. /// <param name="_"></param>
  236. /// <returns></returns>
  237. public Response SaveDraft(dynamic _)
  238. {
  239. flowParam parameter = this.GetReqData<flowParam>();
  240. // 保存自定义表单
  241. List<FormParam> req = parameter.formreq.ToObject<List<FormParam>>();// 获取模板请求数据
  242. foreach (var item in req)
  243. {
  244. formSchemeIBLL.SaveInstanceForm(item.schemeInfoId, item.processIdName, item.keyValue, item.formData);
  245. }
  246. if (!string.IsNullOrEmpty(parameter.processId))
  247. {
  248. nWFProcessIBLL.SaveDraft(parameter.processId, parameter.code, userInfo);
  249. }
  250. return Success("保存成功");
  251. }
  252. /// <summary>
  253. /// 删除草稿
  254. /// </summary>
  255. /// <param name="_"></param>
  256. /// <returns></returns>
  257. public Response DeleteDraft(dynamic _)
  258. {
  259. string processId = this.GetReqData();
  260. nWFProcessIBLL.DeleteDraft(processId, userInfo);
  261. return Success("草稿删除成功");
  262. }
  263. /// <summary>
  264. /// 审批流程
  265. /// </summary>
  266. /// <param name="_"></param>
  267. /// <returns></returns>
  268. public Response AuditFlow(dynamic _)
  269. {
  270. flowParam parameter = this.GetReqData<flowParam>();
  271. // 保存自定义表单
  272. List<FormParam> req = parameter.formreq.ToObject<List<FormParam>>();// 获取模板请求数据
  273. foreach (var item in req)
  274. {
  275. formSchemeIBLL.SaveInstanceForm(item.schemeInfoId, item.processIdName, item.keyValue, item.formData);
  276. }
  277. //移动端传参signUrl,stamp,
  278. nWFProcessIBLL.AuditFlow(parameter.operationCode, parameter.operationName, parameter.processId, parameter.taskId, parameter.des, parameter.auditors, parameter.stamp, parameter.signUrl, userInfo);
  279. return Success("审批成功");
  280. }
  281. /// <summary>
  282. /// 流程加签
  283. /// </summary>
  284. /// <param name="_"></param>
  285. /// <returns></returns>
  286. public Response SignFlow(dynamic _)
  287. {
  288. flowParam parameter = this.GetReqData<flowParam>();
  289. // 保存自定义表单
  290. List<FormParam> req = parameter.formreq.ToObject<List<FormParam>>();// 获取模板请求数据
  291. foreach (var item in req)
  292. {
  293. formSchemeIBLL.SaveInstanceForm(item.schemeInfoId, item.processIdName, item.keyValue, item.formData);
  294. }
  295. nWFProcessIBLL.SignFlow(parameter.processId, parameter.taskId, parameter.userId, parameter.des, userInfo);
  296. return Success("加签成功");
  297. }
  298. /// <summary>
  299. /// 流程加签审核
  300. /// </summary>
  301. /// <param name="_"></param>
  302. /// <returns></returns>
  303. public Response SignAuditFlow(dynamic _)
  304. {
  305. flowParam parameter = this.GetReqData<flowParam>();
  306. // 保存自定义表单
  307. List<FormParam> req = parameter.formreq.ToObject<List<FormParam>>();// 获取模板请求数据
  308. foreach (var item in req)
  309. {
  310. formSchemeIBLL.SaveInstanceForm(item.schemeInfoId, item.processIdName, item.keyValue, item.formData);
  311. }
  312. nWFProcessIBLL.SignAuditFlow(parameter.operationCode, parameter.processId, parameter.taskId, parameter.des, userInfo);
  313. return Success("加签审批成功");
  314. }
  315. /// <summary>
  316. /// 催办流程
  317. /// </summary>
  318. /// <param name="_"></param>
  319. /// <returns></returns>
  320. public Response UrgeFlow(dynamic _)
  321. {
  322. string processId = this.GetReqData();
  323. nWFProcessIBLL.UrgeFlow(processId, userInfo);
  324. return Success("催办成功");
  325. }
  326. /// <summary>
  327. /// 撤销流程(只有在该流程未被处理的情况下)
  328. /// </summary>
  329. /// <param name="_"></param>
  330. /// <returns></returns>
  331. public Response RevokeFlow(dynamic _)
  332. {
  333. string processId = this.GetReqData();
  334. nWFProcessIBLL.RevokeFlow(processId, userInfo);
  335. return Success("撤销成功");
  336. }
  337. /// <summary>
  338. /// 确认阅读
  339. /// </summary>
  340. /// <param name="_"></param>
  341. /// <returns></returns>
  342. public Response ReferFlow(dynamic _)
  343. {
  344. flowParam parameter = this.GetReqData<flowParam>();
  345. nWFProcessIBLL.ReferFlow(parameter.processId, parameter.taskId, userInfo);
  346. return Success("确认成功");
  347. }
  348. /// <summary>
  349. /// app保存实例
  350. /// </summary>
  351. /// <param name="_"></param>
  352. /// <returns></returns>
  353. public Response SaveInstanceForms(dynamic _)
  354. {
  355. List<FormParam> param = this.GetReqData<List<FormParam>>();
  356. foreach (var item in param)
  357. {
  358. formSchemeIBLL.SaveInstanceForm(item.schemeInfoId, item.processIdName, item.keyValue, item.formData);
  359. }
  360. return Success("保存成功!");
  361. }
  362. /// <summary>
  363. /// app保存审核人
  364. /// </summary>
  365. /// <param name="_"></param>
  366. /// <returns></returns>
  367. public Response SaveAuditors(dynamic _)
  368. {
  369. var param = this.GetReqData<flowParam>();
  370. UserInfo userInfo = LoginUserInfo.Get();
  371. try
  372. {
  373. nWFProcessIBLL.AuditFlow(param.operationCode, param.operationName, param.processId, param.taskId, param.des, param.auditors, param.stamp, param.signUrl, userInfo);
  374. return Success("流程审批成功");
  375. }
  376. catch (System.Exception ex)
  377. {
  378. return Fail(ex.Message);
  379. }
  380. }
  381. private class flowParam
  382. {
  383. /// <summary>
  384. /// 流程模板编码
  385. /// </summary>
  386. public string code { get; set; }
  387. /// <summary>
  388. /// 流程进程主键
  389. /// </summary>
  390. public string processId { get; set; }
  391. /// <summary>
  392. /// 流程任务主键
  393. /// </summary>
  394. public string taskId { get; set; }
  395. /// <summary>
  396. /// 流程节点Id
  397. /// </summary>
  398. public string nodeId { get; set; }
  399. /// <summary>
  400. /// 审核操作码
  401. /// </summary>
  402. public string operationCode { get; set; }
  403. /// <summary>
  404. /// 审核操作名称
  405. /// </summary>
  406. public string operationName { get; set; }
  407. /// <summary>
  408. /// 流程自定义标题
  409. /// </summary>
  410. public string title { get; set; }
  411. /// <summary>
  412. /// 流程等级
  413. /// </summary>
  414. public int level { get; set; }
  415. /// <summary>
  416. /// 流程审核用户
  417. /// </summary>
  418. public string auditors { get; set; }
  419. /// <summary>
  420. /// 表单信息
  421. /// </summary>
  422. public string formreq { get; set; }
  423. /// <summary>
  424. /// 描述
  425. /// </summary>
  426. public string des { get; set; }
  427. /// <summary>
  428. /// 加签人员主键
  429. /// </summary>
  430. public string userId { get; set; }
  431. /// <summary>
  432. /// 父流程进程主键
  433. /// </summary>
  434. public string parentProcessId { get; set; }
  435. /// <summary>
  436. /// 父流程任务主键
  437. /// </summary>
  438. public string parentTaskId { get; set; }
  439. /// <summary>
  440. /// 签字图片信息
  441. /// </summary>
  442. public string signUrl { get; set; }
  443. /// <summary>
  444. /// 签章信息
  445. /// </summary>
  446. public string stamp { get; set; }
  447. }
  448. /// <summary>
  449. /// 查询条件对象
  450. /// </summary>
  451. private class QueryModel
  452. {
  453. public Pagination pagination { get; set; }
  454. public string queryJson { get; set; }
  455. }
  456. /// <summary>
  457. /// 自定义表单提交参数
  458. /// </summary>
  459. private class FormParam
  460. {
  461. /// <summary>
  462. /// 流程模板id
  463. /// </summary>
  464. public string schemeInfoId { get; set; }
  465. /// <summary>
  466. /// 关联字段名称
  467. /// </summary>
  468. public string processIdName { get; set; }
  469. /// <summary>
  470. /// 数据主键值
  471. /// </summary>
  472. public string keyValue { get; set; }
  473. /// <summary>
  474. /// 表单数据
  475. /// </summary>
  476. public string formData { get; set; }
  477. }
  478. }
  479. }