Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 
 
 

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