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.
 
 
 
 
 
 

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