当前位置:   article > 正文

EKP其它/超级审批_kmreviewparamterform

kmreviewparamterform

1、说明

某天接到领导的一个需求,让某个用户拥有超级审批权限,当该用户执行超级审批时,同一节点的其它审批人将默认通过。例如某会签节点中,张三、李四、王五均是审批人,若此时李四和王五尚未审批通过,且张三有超级审批的权限,则可以直接让李四和王五默认通过,从而达到快速通过审批节省时间的目的。

2、编写service

总体思路:①获取所需审批节点的所有有权限审批的人员id列表  ②调用ekp自带的审批接口逐一对节点进行审批

  1. package com.landray.kmss.xp.lbpm.workflow.service;
  2. import java.util.List;
  3. /**
  4. * @author liquid
  5. */
  6. public interface IXpLbpmService {
  7. /**
  8. * 当前节点审批通过(针对当前登录人)
  9. * @author liquid
  10. * @date 2022年6月28日
  11. * @param fdModelId 流程实例id(km_review_main.fd_id)
  12. * @param factNodeId 流程id(N2\N3\N4...)
  13. */
  14. void passProcess(String fdModelId, String factNodeId);
  15. /**
  16. * 获取节点实际处理人(有权限处理)id列表
  17. * @param fdModelId 流程实例id(km_review_main.fd_id)
  18. * @param factNodeId 流程id(N2\N3\N4...)
  19. */
  20. List<String> getActualHandlesByFactNodeId(String fdModelId, String factNodeId) throws Exception;
  21. /**
  22. * 超级审批
  23. * @author liquid
  24. * @date 2022年6月28日
  25. * @param fdModelId 流程实例id(km_review_main.fd_id)
  26. * @param factNodeId 流程id(N2\N3\N4...)
  27. * @return 审批结果(fail、success)
  28. */
  29. String superPassProcess(String fdModelId, String factNodeId, String handleId, String approveContent, String nextFactNodeId) throws Exception;
  30. }
  1. package com.landray.kmss.xp.lbpm.workflow.service.spring;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.landray.kmss.km.review.model.KmReviewMain;
  4. import com.landray.kmss.km.review.webservice.IKmReviewWebserviceService;
  5. import com.landray.kmss.km.review.webservice.KmReviewParamterForm;
  6. import com.landray.kmss.sys.lbpm.engine.api.NodeInstanceHolder;
  7. import com.landray.kmss.sys.lbpm.engine.api.ProcessHolder;
  8. import com.landray.kmss.sys.lbpm.engine.api.WorkitemHolder;
  9. import com.landray.kmss.sys.lbpm.engine.integrate.expecterlog.ILbpmExpecterLogService;
  10. import com.landray.kmss.sys.lbpm.engine.persistence.model.LbpmProcess;
  11. import com.landray.kmss.sys.lbpmservice.api.ApproveParameter;
  12. import com.landray.kmss.sys.lbpmservice.api.LbpmService;
  13. import com.landray.kmss.sys.lbpmservice.operation.handler.HandlerPassData;
  14. import com.landray.kmss.sys.lbpmservice.support.service.ILbpmProcessService;
  15. import com.landray.kmss.sys.lbpmservice.support.service.spring.LbpmAPIService;
  16. import com.landray.kmss.sys.lbpmservice.support.service.spring.LbpmProcessServiceImp;
  17. import com.landray.kmss.sys.organization.model.SysOrgElement;
  18. import com.landray.kmss.util.SpringBeanUtil;
  19. import com.landray.kmss.util.UserUtil;
  20. import com.landray.kmss.xp.app.km.review.util.XpReviewUtil;
  21. import com.landray.kmss.xp.lbpm.workflow.service.IXpLbpmService;
  22. import com.landray.kmss.xp.org.organizational.constant.XpSysOrgElementConstant;
  23. import com.landray.kmss.xp.org.organizational.util.XpOrgUtil;
  24. import java.util.List;
  25. import java.util.Map;
  26. /**
  27. * @author liquid
  28. */
  29. public class XpLbpmServiceImp implements IXpLbpmService {
  30. private ILbpmProcessService lbpmProcessService;
  31. private ILbpmExpecterLogService lbpmExpecterLogService;
  32. private LbpmService lbpmApiService;
  33. private IKmReviewWebserviceService kmReviewWebserviceService;
  34. public ILbpmProcessService getLbpmProcessService() {
  35. if (lbpmProcessService == null) {
  36. lbpmProcessService = (LbpmProcessServiceImp)SpringBeanUtil.getBean("lbpmProcessServiceTarget");
  37. }
  38. return lbpmProcessService;
  39. }
  40. public ILbpmExpecterLogService getLbpmExpecterLogService() {
  41. if (lbpmExpecterLogService == null) {
  42. lbpmExpecterLogService = (ILbpmExpecterLogService)SpringBeanUtil.getBean("lbpmExpecterLogService");
  43. }
  44. return lbpmExpecterLogService;
  45. }
  46. public LbpmService getLbpmApiService() {
  47. if (lbpmApiService == null) {
  48. lbpmApiService = (LbpmAPIService)SpringBeanUtil.getBean("lbpmServiceTarget");
  49. }
  50. return lbpmApiService;
  51. }
  52. public IKmReviewWebserviceService getKmReviewWebserviceService() {
  53. if (kmReviewWebserviceService == null) {
  54. kmReviewWebserviceService = (IKmReviewWebserviceService)SpringBeanUtil.getBean("kmReviewWebserviceServiceTarget");
  55. }
  56. return kmReviewWebserviceService;
  57. }
  58. /**
  59. * 当前节点审批通过(针对当前登录人)
  60. * @author liquid
  61. * @date 2022年6月28日
  62. * @param fdModelId 流程实例id(km_review_main.fd_id)
  63. * @param factNodeId 流程id(N2\N3\N4...)
  64. */
  65. @Override
  66. public void passProcess(String fdModelId, String factNodeId) {
  67. // 获取【主文档实例】
  68. KmReviewMain mainModel = (KmReviewMain) XpReviewUtil.getReviewMainModelById(fdModelId);
  69. // 获取【主文档实例对应的流程信息】
  70. LbpmService lbpmApiService = getLbpmApiService();
  71. ProcessHolder processHolder = lbpmApiService.load(mainModel);
  72. // 流程当前节点信息列表
  73. List<? extends NodeInstanceHolder> nodeInstHolders = processHolder.getCurrentNodeInfos();
  74. for (NodeInstanceHolder nodeInstHolder : nodeInstHolders) {
  75. // 非目标节点 → 跳过
  76. String thisFactNodeId = nodeInstHolder.getNodeInstance().getFdFactNodeId();
  77. if (!thisFactNodeId.equalsIgnoreCase(factNodeId)) {
  78. continue;
  79. }
  80. // 当前登录人此节点的全部事项
  81. List<? extends WorkitemHolder> workitemHolders = nodeInstHolder.getHandlerWrokitemInfos();
  82. for (WorkitemHolder workitemHolder : workitemHolders) {
  83. // 创建[通过]操作数据,此处就需要去参考[通过]操作的扩展描述
  84. HandlerPassData data = new HandlerPassData();
  85. // 驱动流程的操作参数,此处第二个参数参考[通过]操作的扩展描述
  86. ApproveParameter parameter = new ApproveParameter(workitemHolder, "handler_pass");
  87. parameter.setData(data);
  88. // 设置后续处理人的通知方式
  89. parameter.setNotifyType("todo;email");
  90. // 设置流程结束时通知当前处理人
  91. parameter.setNotifyOnFinish(true);
  92. // 设置审批意见
  93. parameter.setAuditNote(UserUtil.getUser().getFdName() + ": 执行超级审批");
  94. // 驱动流程...
  95. lbpmApiService.approveProcess(mainModel, parameter);
  96. }
  97. }
  98. }
  99. /**
  100. * 获取节点实际处理人(有权限处理)id列表
  101. * @param fdModelId 流程实例id(km_review_main.fd_id)
  102. * @param factNodeId 流程id(N2\N3\N4...)
  103. * @throws Exception 异常
  104. */
  105. @Override
  106. public List<String> getActualHandlesByFactNodeId(String fdModelId, String factNodeId) throws Exception {
  107. /* 获取实际处理人列表 */
  108. ILbpmExpecterLogService lbpmExpecterLogService = getLbpmExpecterLogService();
  109. Map<String, List<String>> nodeHandlersMap = lbpmExpecterLogService.findCurrentNodeIdHandlerIds(fdModelId);
  110. return nodeHandlersMap.get(factNodeId);
  111. }
  112. /**
  113. * 超级审批
  114. * @author liquid
  115. * @date 2022年6月28日
  116. * @param fdModelId 流程实例id(km_review_main.fd_id)
  117. * @param factNodeId 流程id(N2\N3\N4...)
  118. * @return 审批结果(fail、success)
  119. * @throws Exception 异常
  120. */
  121. @Override
  122. public String superPassProcess(String fdModelId, String factNodeId, String handleId, String approveContent, String nextFactNodeId) throws Exception {
  123. ILbpmProcessService lbpmProcessService = getLbpmProcessService();
  124. IKmReviewWebserviceService kmReviewWebserviceService = getKmReviewWebserviceService();
  125. /* 获取主文档实例 */
  126. KmReviewMain mainModel = (KmReviewMain) XpReviewUtil.getReviewMainModelById(fdModelId);
  127. /* 获取流程实例 */
  128. LbpmProcess process = (LbpmProcess) lbpmProcessService.findByPrimaryKey(fdModelId);
  129. /* 设置审批参数 */
  130. KmReviewParamterForm kmParamForm = new KmReviewParamterForm();
  131. // 流程模板id
  132. kmParamForm.setFdTemplateId(mainModel.getFdTemplate().getFdId());
  133. // 流程起草人
  134. JSONObject docCreator = new JSONObject();
  135. docCreator.put("Id", process.getFdCreator().getFdId());
  136. kmParamForm.setDocCreator(docCreator.toJSONString());
  137. // 流程实例id
  138. kmParamForm.setFdId(fdModelId);
  139. // 流程主题
  140. kmParamForm.setDocSubject(mainModel.getDocSubject());
  141. // 富文本(如果流程存在富文本内容,则不允许为空)
  142. kmParamForm.setDocContent("");
  143. JSONObject flowParam = new JSONObject();
  144. // 设置处理人
  145. SysOrgElement actualHandler = XpOrgUtil.getSysOrgElementById(handleId, SysOrgElement.class);
  146. // 如处理人是非人员类型(如岗位), 需获取岗位人员(多个取第一个)
  147. if (!actualHandler.getFdOrgType().equals(XpSysOrgElementConstant.ORG_TYPE_PERSON)) {
  148. handleId = ((SysOrgElement)actualHandler.getFdPersons().get(0)).getFdId();
  149. }
  150. JSONObject handler = new JSONObject();
  151. handler.put("Id", handleId);
  152. flowParam.put("handler", handler.toJSONString());
  153. // 操作类型(审批)
  154. flowParam.put("operationType", "handler_pass");
  155. // 审批意见
  156. flowParam.put("auditNote", approveContent);
  157. // 流向下一节点的ID,需要人工决策时设置此参数
  158. flowParam.put("futureNodeId", nextFactNodeId);
  159. kmParamForm.setFlowParam(flowParam.toJSONString());
  160. /* 执行超级审批 */
  161. try {
  162. // 多个处理人操作同一份文档时采用锁机制,必须等上一个处理人操作完成后才能操作下一个
  163. System.out.println("超级审批(参数): " + JSONObject.toJSONString(kmParamForm));
  164. kmReviewWebserviceService.approveProcess(kmParamForm);
  165. } catch (Exception e) {
  166. e.printStackTrace();
  167. return "fail";
  168. }
  169. return "success";
  170. }
  171. }

相关xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans
  3. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"
  4. xmlns="http://www.springframework.org/schema/beans"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  6. <bean
  7. id="xpLbpmTarget"
  8. class="com.landray.kmss.xp.lbpm.workflow.service.spring.XpLbpmServiceImp">
  9. </bean>
  10. </beans>

3、编写action

  1. package com.landray.kmss.xp.app.km.review.actions;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.landray.kmss.common.actions.ExtendAction;
  4. import com.landray.kmss.common.service.IBaseService;
  5. import com.landray.kmss.sys.formula.provider.function.OrgFunction;
  6. import com.landray.kmss.util.SpringBeanUtil;
  7. import com.landray.kmss.util.StringUtil;
  8. import com.landray.kmss.util.UserUtil;
  9. import com.landray.kmss.web.action.ActionForm;
  10. import com.landray.kmss.web.action.ActionForward;
  11. import com.landray.kmss.web.action.ActionMapping;
  12. import com.landray.kmss.xp.lbpm.workflow.service.IXpLbpmService;
  13. import com.landray.kmss.xp.util.XpRequestUtil;
  14. import javax.servlet.http.HttpServletRequest;
  15. import javax.servlet.http.HttpServletResponse;
  16. import java.util.ArrayList;
  17. import java.util.List;
  18. import static com.landray.kmss.tic.core.common.actions.TicCoreInvokeFuncAction.ReadAsChars;
  19. /**
  20. * @author liquid
  21. */
  22. public class XpReviewMainAction extends ExtendAction {
  23. private IXpLbpmService xpLbpmService;
  24. @Override
  25. protected IBaseService getServiceImp(HttpServletRequest request) {
  26. return null;
  27. }
  28. public IXpLbpmService getXpLbpmService() {
  29. if (xpLbpmService == null) {
  30. xpLbpmService = (IXpLbpmService)SpringBeanUtil.getBean("xpLbpmTarget");
  31. }
  32. return xpLbpmService;
  33. }
  34. /**
  35. * @apiNote 当前节点实际审批人(有审批权限)列表
  36. * @author liquid
  37. * @date 2022年6月28日
  38. * 传入参数-
  39. * modelId 流程模板实例id(km_review_main.fd_id,前端lbpm.modelId)
  40. * factNodeId 流程节点id(N1\N2\N3...)
  41. * 返回参数-
  42. * handles 审批人id列表
  43. */
  44. public ActionForward getActualHandlesByFactNodeId(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
  45. JSONObject result = new JSONObject();
  46. response.setHeader("Content-Type", "application/json;charset=utf-8");
  47. String bodyStr = ReadAsChars(request);
  48. JSONObject o = JSONObject.parseObject(bodyStr);
  49. /* 获取body参数 */
  50. String fdModelId = o.getString("modelId");
  51. String factNodeId = o.getString("factNodeId");
  52. // 参数校验
  53. if (StringUtil.isNull(fdModelId) || StringUtil.isNull(factNodeId)) {
  54. XpRequestUtil.setFailure(response, "调用失败:请检查参数[名]和[值]");
  55. return null;
  56. }
  57. /* 业务逻辑 */
  58. IXpLbpmService xpLbpmService = getXpLbpmService();
  59. List<String> handles = xpLbpmService.getActualHandlesByFactNodeId(fdModelId, factNodeId);
  60. /* 响应数据 */
  61. result.put("status", XpRequestUtil.STATUS_SUCCESS);
  62. result.put("code", XpRequestUtil.CODE_SUCCESS);
  63. result.put("msg", "调用成功");
  64. result.put("handles", handles == null ? new ArrayList<>() : handles);
  65. XpRequestUtil.setResponseResult(response, result);
  66. return null;
  67. }
  68. /**
  69. * @apiNote 当前节点审批通过(针对当前登录人)
  70. * @author liquid
  71. * @date 2022年6月28日
  72. * 传入参数-
  73. * modelId 流程模板实例id(km_review_main.fd_id,前端lbpm.modelId)
  74. * factNodeId 流程节点id(N1\N2\N3...)
  75. * 返回参数-
  76. * approveInfo 审批通过信息
  77. */
  78. public ActionForward approveProcessByFactNodeId(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
  79. JSONObject result = new JSONObject();
  80. response.setHeader("Content-Type", "application/json;charset=utf-8");
  81. String bodyStr = ReadAsChars(request);
  82. JSONObject o = JSONObject.parseObject(bodyStr);
  83. /* 获取body参数 */
  84. String fdModelId = o.getString("modelId");
  85. String factNodeId = o.getString("factNodeId");
  86. /* 业务逻辑 */
  87. IXpLbpmService xpLbpmService = getXpLbpmService();
  88. xpLbpmService.passProcess(fdModelId, factNodeId);
  89. /* 响应数据 */
  90. result.put("status", XpRequestUtil.STATUS_SUCCESS);
  91. result.put("code", XpRequestUtil.CODE_SUCCESS);
  92. result.put("msg", "调用成功");
  93. result.put("approveInfo", "审批成功");
  94. XpRequestUtil.setResponseResult(response, result);
  95. return null;
  96. }
  97. /**
  98. * @apiNote 超级审批(一次仅审批一个处理人)
  99. * @author liquid
  100. * @date 2022年6月29日
  101. * 传入参数-
  102. * modelId 流程模板实例id(km_review_main.fd_id,前端lbpm.modelId)
  103. * factNodeId 流程节点id(N1\N2\N3...)
  104. * handleId 处理人id
  105. * approveContent (可选)审批意见,默认值为:(特权人)特权人姓名 : 超级审批
  106. * nextFactNodeId (可选)当下流为人工决策时,需传入(N1\N2\N3...)
  107. * 返回参数-
  108. * approveInfo 审批通过信息
  109. * approveStatus 审批结果(fail、success、noPermission:无权限)
  110. */
  111. public ActionForward superApproveProcessByFactNodeId(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
  112. JSONObject result = new JSONObject();
  113. response.setHeader("Content-Type", "application/json;charset=utf-8");
  114. String bodyStr = ReadAsChars(request);
  115. JSONObject o = JSONObject.parseObject(bodyStr);
  116. /* 获取body参数 */
  117. String fdModelId = o.getString("modelId");
  118. String factNodeId = o.getString("factNodeId");
  119. String handleId = o.getString("handleId");
  120. String approveContent = o.getString("approveContent");
  121. String nextFactNodeId = o.getString("nextFactNodeId");
  122. // 参数校验
  123. if (StringUtil.isNull(fdModelId) || StringUtil.isNull(factNodeId) || StringUtil.isNull(handleId)) {
  124. result.put("status", XpRequestUtil.STATUS_ERROR);
  125. result.put("code", XpRequestUtil.CODE_ERROR);
  126. result.put("msg", "调用失败:请检查参数[名]和[值]");
  127. result.put("approveInfo", "审批失败");
  128. XpRequestUtil.setResponseResult(response, result);
  129. return null;
  130. }
  131. // 设置可选参数默认值
  132. approveContent = StringUtil.isNull(approveContent) ? "超级审批" : approveContent;
  133. approveContent = "(特权人)"+ UserUtil.getUser().getFdName() + " : " + approveContent;
  134. nextFactNodeId = StringUtil.isNull(approveContent) ? "" : nextFactNodeId;
  135. /* 业务逻辑 */
  136. // 1、校验调用者权限
  137. boolean isPrivileged = OrgFunction.chechPersonInGroup(UserUtil.getUser(), "超级审批");
  138. if (!isPrivileged) {
  139. /* 响应数据 - 成功 - 无审批权限 */
  140. result.put("status", XpRequestUtil.STATUS_SUCCESS);
  141. result.put("code", XpRequestUtil.CODE_SUCCESS);
  142. result.put("msg", "调用失败:当前登录人没有超级审批权限");
  143. result.put("approveInfo", "审批失败");
  144. result.put("approveStatus", "noPermission");
  145. XpRequestUtil.setResponseResult(response, result);
  146. return null;
  147. }
  148. // 2、执行超级审批
  149. IXpLbpmService xpLbpmService = getXpLbpmService();
  150. String approveStatus;
  151. try{
  152. approveStatus = xpLbpmService.superPassProcess(fdModelId, factNodeId, handleId, approveContent, nextFactNodeId);
  153. } catch (Exception e) {
  154. e.printStackTrace();
  155. /* 响应数据 - 失败 */
  156. result.put("status", XpRequestUtil.STATUS_ERROR);
  157. result.put("code", XpRequestUtil.CODE_ERROR);
  158. result.put("msg", "调用失败:请检查参数[名]和[值]");
  159. result.put("approveInfo", "审批失败");
  160. result.put("approveStatus", "fail");
  161. XpRequestUtil.setResponseResult(response, result);
  162. return null;
  163. }
  164. /* 响应数据 - 成功 */
  165. result.put("status", XpRequestUtil.STATUS_SUCCESS);
  166. result.put("code", XpRequestUtil.CODE_SUCCESS);
  167. result.put("msg", "调用成功");
  168. result.put("approveInfo", "success".equals(approveStatus) ? "审批成功" : "审批失败");
  169. result.put("approveStatus", approveStatus);
  170. XpRequestUtil.setResponseResult(response, result);
  171. return null;
  172. }
  173. }

相关xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans
  3. xmlns="http://www.springframework.org/schema/beans"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  6. <bean
  7. class="com.landray.kmss.xp.app.km.review.actions.XpReviewMainAction"
  8. name="/xp/app/km/review/actions/XpReviewMainAction.do"
  9. lazy-init="true"
  10. parent="KmssBaseAction">
  11. </bean>
  12. </beans>

4、前端调用

  1. /**
  2. * 超级审批
  3. * 注意:仅适用于[非编辑状态]的审批节点
  4. * 审批权限:群组 → 系统类 → 超级审批
  5. * 2022年7月2日22:21:04 测试通过
  6. * 2022年7月3日17:37:43 测试通过
  7. * @author liquid
  8. * @date 2022年7月2日
  9. * @param {string}[factNodeId=当前节点] 节点id(N1\N2\N3...)
  10. * @param {string}[approveContent] 审批意见
  11. * @param {string}[nextFactNodeId] 当下流为人工决策时,需传入(N1\N2\N3...)
  12. */
  13. let superApprovalCountLimit = 15;// 审批失败尝试次数上限(避免未知错误导致不断循环执行审批调用)
  14. let superApprovalCount = 0;
  15. function superApprove(factNodeId, approveContent, nextFactNodeId) {
  16. factNodeId = factNodeId || lbpm.nowNodeId;
  17. lui_loading(true, "<div style='text-align:center;width:100%;color:#6584ed'>正在执行超级审批...</div>");
  18. // 延迟执行超级审批,避免同步执行导致阻塞loading的显示
  19. setTimeout(()=>{
  20. __superApprove();
  21. }, 200);
  22. function __superApprove() {
  23. superApprovalCount ++;
  24. // (同步)获取节点实际审批人id
  25. let handlers;
  26. const _path_1 = "xp/app/km/review/actions/XpReviewMainAction.do?method=getActualHandlesByFactNodeId";
  27. const _data_1 = {
  28. modelId: lbpm.modelId,
  29. factNodeId: factNodeId,
  30. }
  31. ajaxAction(_path_1, _data_1, false, {
  32. success:(res)=>{
  33. if (res.status !== "success") { errorHandler(res); return; }
  34. handlers = res.handles;
  35. }
  36. })
  37. // 可能在点击超级审批的前一刻,最后一个审批人刚好审批完
  38. if (handlers.length === 0) {
  39. lui_loading(false);
  40. lui_fail("当前节点无审批人!");
  41. setTimeout(()=>{
  42. location.reload();
  43. }, 200)
  44. return;
  45. }
  46. // (同步)执行超级审批
  47. let isReturn = false;
  48. for (const handlerId of handlers) {
  49. if (isReturn) return;
  50. const _path_2 = "xp/app/km/review/actions/XpReviewMainAction.do?method=superApproveProcessByFactNodeId";
  51. const _data_2 = {
  52. modelId: lbpm.modelId,
  53. factNodeId: factNodeId,
  54. handleId: handlerId,
  55. approveContent: approveContent,
  56. nextFactNodeId: nextFactNodeId
  57. }
  58. ajaxAction(_path_2, _data_2, false, {
  59. success:(res)=>{
  60. if (res.status !== "success") {
  61. errorHandler(res, false);
  62. lui_loading(false);
  63. return;
  64. }
  65. // 成功回调
  66. console.log("超级审批返回:", res);
  67. // 无权限
  68. if (res.approveStatus === 'noPermission'){
  69. lui_loading(false);
  70. lui_fail("抱歉,您尚无超级审批权限!");
  71. isReturn = true;
  72. }
  73. // 有权限,审批失败(同时操作同一个文档导致)
  74. else if (res.approveStatus === "fail" && superApprovalCount <= superApprovalCountLimit) {
  75. console.log("审批失败,重新调用superApproval(),已调用次数:" + superApprovalCount);
  76. // 失败递归调用
  77. __superApprove(factNodeId);
  78. isReturn = true;
  79. }
  80. else if (superApprovalCount > superApprovalCountLimit) {
  81. console.log("审批失败,重新调用superApproval(),已达调用次数上限:" + superApprovalCount);
  82. lui_loading(false);
  83. lui_fail("超级审批:未知错误,请联系管理员");
  84. isReturn = true;
  85. }
  86. }
  87. })
  88. }
  89. lui_loading(false);
  90. lui_success("超级审批:执行完毕!");
  91. // 延迟刷新页面(以保证获取到最的流程状态信息)
  92. setTimeout(()=>{
  93. location.reload();
  94. }, 500)
  95. }
  96. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/268592
推荐阅读
相关标签
  

闽ICP备14008679号