当前位置: 首页 > news >正文

网站统计代码添加有那些做任务的网站

网站统计代码添加,有那些做任务的网站,红色网站主题,收录优美图片有些粉丝#xff0c;希望对自定义业务中#xff0c;驳回到发起人进行处理#xff0c;比如可以重新进行发起流程#xff0c;下面就给出一种方式#xff0c;当然不一定是最好的方式#xff0c;只是提供一种参考而已#xff0c;以后可以考虑动态根据流程状态或节点信息进行…       有些粉丝希望对自定义业务中驳回到发起人进行处理比如可以重新进行发起流程下面就给出一种方式当然不一定是最好的方式只是提供一种参考而已以后可以考虑动态根据流程状态或节点信息进行更加好的处理。 这种方式目前前端不做修改只做后端的一种处理。 主要是增加两个逻辑: 1、增加一个判断是发起人节点isFirstInitiator  以后可以考虑增加驳回与退回的处理 2、对于驳回里对于驳回到发起人后进行流程删除与关联删除以便进行重新发起流程 /*** 驳回任务 for自定义业务** param flowTaskVo*/Overridepublic void taskRejectForDataId(FlowTaskVo flowTaskVo) {if (taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult().isSuspended()) {throw new CustomException(任务处于挂起状态);}// 当前任务 taskTask task taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult();// 获取流程定义信息ProcessDefinition processDefinition repositoryService.createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult();// 获取所有节点信息Process process repositoryService.getBpmnModel(processDefinition.getId()).getProcesses().get(0);// 获取全部节点列表包含子节点CollectionFlowElement allElements FlowableUtils.getAllElements(process.getFlowElements(), null);// 获取当前任务节点元素FlowElement source null;if (allElements ! null) {for (FlowElement flowElement : allElements) {// 类型为用户节点if (flowElement.getId().equals(task.getTaskDefinitionKey())) {// 获取节点信息source flowElement;}}}// 目的获取所有跳转到的节点 targetIds// 获取当前节点的所有父级用户任务节点// 深度优先算法思想延边迭代深入ListUserTask parentUserTaskList FlowableUtils.iteratorFindParentUserTasks(source, null, null);if (parentUserTaskList null || parentUserTaskList.size() 0) {throw new CustomException(当前节点为初始任务节点不能驳回);}// 获取活动 ID 即节点 KeyListString parentUserTaskKeyList new ArrayList();parentUserTaskList.forEach(item - parentUserTaskKeyList.add(item.getId()));// 获取全部历史节点活动实例即已经走过的节点历史数据采用开始时间升序ListHistoricTaskInstance historicTaskInstanceList historyService.createHistoricTaskInstanceQuery().processInstanceId(task.getProcessInstanceId()).orderByHistoricTaskInstanceStartTime().asc().list();// 数据清洗将回滚导致的脏数据清洗掉ListString lastHistoricTaskInstanceList FlowableUtils.historicTaskInstanceClean(allElements, historicTaskInstanceList);// 此时历史任务实例为倒序获取最后走的节点ListString targetIds new ArrayList();// 循环结束标识遇到当前目标节点的次数int number 0;StringBuilder parentHistoricTaskKey new StringBuilder();for (String historicTaskInstanceKey : lastHistoricTaskInstanceList) {// 当会签时候会出现特殊的连续都是同一个节点历史数据的情况这种时候跳过if (parentHistoricTaskKey.toString().equals(historicTaskInstanceKey)) {continue;}parentHistoricTaskKey new StringBuilder(historicTaskInstanceKey);if (historicTaskInstanceKey.equals(task.getTaskDefinitionKey())) {number;}// 在数据清洗后历史节点就是唯一一条从起始到当前节点的历史记录理论上每个点只会出现一次// 在流程中如果出现循环那么每次循环中间的点也只会出现一次再出现就是下次循环// number 1第一次遇到当前节点// number 2第二次遇到代表最后一次的循环范围if (number 2) {break;}// 如果当前历史节点属于父级的节点说明最后一次经过了这个点需要退回这个点if (parentUserTaskKeyList.contains(historicTaskInstanceKey)) {targetIds.add(historicTaskInstanceKey);}}// 目的获取所有需要被跳转的节点 currentIds// 取其中一个父级任务因为后续要么存在公共网关要么就是串行公共线路UserTask oneUserTask parentUserTaskList.get(0);// 获取所有正常进行的任务节点 Key这些任务不能直接使用需要找出其中需要撤回的任务ListTask runTaskList taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).list();ListString runTaskKeyList new ArrayList();runTaskList.forEach(item - runTaskKeyList.add(item.getTaskDefinitionKey()));// 需驳回任务列表ListString currentIds new ArrayList();// 通过父级网关的出口连线结合 runTaskList 比对获取需要撤回的任务ListUserTask currentUserTaskList FlowableUtils.iteratorFindChildUserTasks(oneUserTask, runTaskKeyList, null, null);currentUserTaskList.forEach(item - currentIds.add(item.getId()));// 规定并行网关之前节点必须需存在唯一用户任务节点如果出现多个任务节点则并行网关节点默认为结束节点原因为不考虑多对多情况if (targetIds.size() 1 currentIds.size() 1) {throw new CustomException(任务出现多对多情况无法撤回);}// 循环获取那些需要被撤回的节点的ID用来设置驳回原因ListString currentTaskIds new ArrayList();currentIds.forEach(currentId - runTaskList.forEach(runTask - {if (currentId.equals(runTask.getTaskDefinitionKey())) {currentTaskIds.add(runTask.getId());}}));// 设置驳回意见currentTaskIds.forEach(item - taskService.addComment(item, task.getProcessInstanceId(), FlowComment.REJECT.getType(), flowTaskVo.getComment()));SysUser loginUser iFlowThirdService.getLoginUser();try {// 设置处理人taskService.setAssignee(task.getId(), loginUser.getUsername());// 如果父级任务多于 1 个说明当前节点不是并行节点原因为不考虑多对多情况if (targetIds.size() 1) {// 1 对 多任务跳转currentIds 当前节点(1)targetIds 跳转到的节点(多)runtimeService.createChangeActivityStateBuilder().processInstanceId(task.getProcessInstanceId()).moveSingleActivityIdToActivityIds(currentIds.get(0), targetIds).changeState();}// 如果父级任务只有一个因此当前任务可能为网关中的任务if (targetIds.size() 1) {// 1 对 1 或 多 对 1 情况currentIds 当前要跳转的节点列表(1或多)targetIds.get(0) 跳转到的节点(1)runtimeService.createChangeActivityStateBuilder().processInstanceId(task.getProcessInstanceId()).moveActivityIdsToSingleActivityId(currentIds, targetIds.get(0)).changeState();}/*驳回 回调以及关键数据保存*///业务数据idString dataId flowTaskVo.getDataId();if (dataIdnull) return;//如果保存数据前未调用必调的FlowCommonService.initActBusiness方法就会有问题FlowMyBusiness business flowMyBusinessService.getByDataId(dataId);// 驳回到了上一个节点等待处理Task targetTask taskService.createTaskQuery().processInstanceId(business.getProcessInstanceId()).active().singleResult();//spring容器类名String serviceImplName business.getServiceImplName();FlowCallBackServiceI flowCallBackService (FlowCallBackServiceI) SpringContextUtils.getBean(serviceImplName);MapString, Object values flowTaskVo.getValues();if (values null){values MapUtil.newHashMap();values.put(dataId,dataId);} else {values.put(dataId,dataId);}ListString beforeParamsCandidateUsernames flowCallBackService.flowCandidateUsernamesOfTask(targetTask.getTaskDefinitionKey(), values);//设置数据String doneUsers business.getDoneUsers();// 处理过流程的人JSONArray doneUserList new JSONArray();if (StrUtil.isNotBlank(doneUsers)){doneUserList JSON.parseArray(doneUsers);}if (!doneUserList.contains(loginUser.getUsername())){doneUserList.add(loginUser.getUsername());}business.setActStatus(ActStatus.reject).setTaskId(targetTask.getId()).setTaskNameId(targetTask.getTaskDefinitionKey()).setTaskName(targetTask.getName()).setDoneUsers(doneUserList.toJSONString());FlowElement targetElement null;if (allElements ! null) {for (FlowElement flowElement : allElements) {// 类型为用户节点if (flowElement.getId().equals(targetTask.getTaskDefinitionKey())) {// 获取节点信息targetElement flowElement;}}}ProcessInstance processInstance runtimeService.createProcessInstanceQuery().processInstanceId(targetTask.getProcessInstanceId()).singleResult();String startUserId processInstance.getStartUserId();if (targetElement!null){UserTask targetUserTask (UserTask) targetElement;business.setPriority(targetUserTask.getPriority());if (StrUtil.equals(targetUserTask.getIncomingFlows().get(0).getSourceRef(),startNode1)) {//是否为发起人节点// 开始节点。设置处理人为申请人business.setTodoUsers(JSON.toJSONString(Lists.newArrayList(business.getProposer())));taskService.setAssignee(business.getTaskId(),business.getProposer());} else {ListSysUser sysUserFromTask getSysUserFromTask(targetUserTask,startUserId);ListString collect_username sysUserFromTask.stream().map(SysUser::getUsername).collect(Collectors.toList());//collect_username转换成realnameListString newusername new ArrayListString();for (String oldUser : collect_username) {if(StringUtils.equalsAnyIgnoreCase(oldUser, ${INITIATOR})) {//对发起人做特殊处理SysUser sysUser iFlowThirdService.getUserByUsername(startUserId);newusername.add(sysUser.getRealname());}else {SysUser sysUser iFlowThirdService.getUserByUsername(oldUser);newusername.add(sysUser.getRealname());}}business.setTodoUsers(JSON.toJSONString(newusername));// 删除后重写for (String oldUser : collect_username) {taskService.deleteCandidateUser(targetTask.getId(),oldUser);}if (CollUtil.isNotEmpty(beforeParamsCandidateUsernames)){// 业务层有指定候选人覆盖for (String newUser : beforeParamsCandidateUsernames) {taskService.addCandidateUser(targetTask.getId(),newUser);}business.setTodoUsers(JSON.toJSONString(beforeParamsCandidateUsernames));} else {for (String oldUser : collect_username) {taskService.addCandidateUser(targetTask.getId(),oldUser);}}if(collect_username.size() 1) {targetTask.setAssignee(newusername.get(0).toString());taskService.addUserIdentityLink(targetTask.getId(), collect_username.get(0).toString(), IdentityLinkType.ASSIGNEE);}else if(collect_username.size() 1){ListHistoricActivityInstance list historyService.createHistoricActivityInstanceQuery().activityId(targetTask.getTaskDefinitionKey()).orderByHistoricActivityInstanceStartTime().desc().list();for (HistoricActivityInstance historicActivityInstance : list) {if (StrUtil.isNotBlank(historicActivityInstance.getAssignee())) {targetTask.setAssignee(historicActivityInstance.getAssignee());taskService.addUserIdentityLink(targetTask.getId(), historicActivityInstance.getAssignee(), IdentityLinkType.ASSIGNEE);break;}}}}}// 重新查询当前任务Task currentTask taskService.createTaskQuery().processInstanceId(targetTask.getProcessInstanceId()).singleResult();//判断是否是发起人节点,恢复自定义业务表单重新提交if(isFirstInitiator(currentTask)) {//删除自定义业务任务关联表与流程历史表以便可以重新发起流程。//(要是需要重新进行提交的话那就要保留第一个发起人历史信息,自定义业务表单最好增加一个再次发起按钮来处理这种情况if (business ! null) {flowMyBusinessService.removeById(business);// 对自定义业务删除运行和历史的节点信息 this.deleteActivity(targetTask.getTaskDefinitionKey(), targetTask.getProcessInstanceId(), dataId);}}else {flowMyBusinessService.updateById(business);// 流程处理完后进行回调业务层business.setValues(values);if (flowCallBackService!null) flowCallBackService.afterFlowHandle(business);}} catch (FlowableObjectNotFoundException e) {throw new CustomException(未找到流程实例流程可能已发生变化);} catch (FlowableException e) {throw new CustomException(无法取消或开始活动);}}/*** 判断当前节点是否是第一个发起人节点** param flowTaskVo 请求实体参数*/boolean isFirstInitiator(Task task) {BpmnModel bpmnModel repositoryService.getBpmnModel(task.getProcessDefinitionId());// 获取当前活动节点FlowNode currentFlowNode (FlowNode) bpmnModel.getMainProcess().getFlowElement(task.getTaskDefinitionKey());// 输入连线ListSequenceFlow inFlows currentFlowNode.getIncomingFlows();for (SequenceFlow sequenceFlow : inFlows) {FlowElement sourceFlowElement sequenceFlow.getSourceFlowElement();// 如果上个节点为开始节点if (sourceFlowElement instanceof StartEvent) {log.info(当前节点为发起人节点,上个节点为开始节点id sourceFlowElement.getId() ,name sourceFlowElement.getName());return true;}}return false; }
文章转载自:
http://www.morning.xltwg.cn.gov.cn.xltwg.cn
http://www.morning.fhtmp.cn.gov.cn.fhtmp.cn
http://www.morning.addai.cn.gov.cn.addai.cn
http://www.morning.ngcth.cn.gov.cn.ngcth.cn
http://www.morning.xirfr.cn.gov.cn.xirfr.cn
http://www.morning.qlpq.cn.gov.cn.qlpq.cn
http://www.morning.gbcnz.cn.gov.cn.gbcnz.cn
http://www.morning.mfsxd.cn.gov.cn.mfsxd.cn
http://www.morning.ysjjr.cn.gov.cn.ysjjr.cn
http://www.morning.qcsbs.cn.gov.cn.qcsbs.cn
http://www.morning.rymb.cn.gov.cn.rymb.cn
http://www.morning.rgmls.cn.gov.cn.rgmls.cn
http://www.morning.hrtwt.cn.gov.cn.hrtwt.cn
http://www.morning.xwgbr.cn.gov.cn.xwgbr.cn
http://www.morning.mflhr.cn.gov.cn.mflhr.cn
http://www.morning.dsmwy.cn.gov.cn.dsmwy.cn
http://www.morning.fqqcd.cn.gov.cn.fqqcd.cn
http://www.morning.etsaf.com.gov.cn.etsaf.com
http://www.morning.tsdqr.cn.gov.cn.tsdqr.cn
http://www.morning.kyflr.cn.gov.cn.kyflr.cn
http://www.morning.hmxrs.cn.gov.cn.hmxrs.cn
http://www.morning.jxrpn.cn.gov.cn.jxrpn.cn
http://www.morning.dwhnb.cn.gov.cn.dwhnb.cn
http://www.morning.krlsz.cn.gov.cn.krlsz.cn
http://www.morning.dwgcx.cn.gov.cn.dwgcx.cn
http://www.morning.lhrxq.cn.gov.cn.lhrxq.cn
http://www.morning.drcnn.cn.gov.cn.drcnn.cn
http://www.morning.lsgsn.cn.gov.cn.lsgsn.cn
http://www.morning.kpzbf.cn.gov.cn.kpzbf.cn
http://www.morning.qnrpj.cn.gov.cn.qnrpj.cn
http://www.morning.xhxsr.cn.gov.cn.xhxsr.cn
http://www.morning.dmsxd.cn.gov.cn.dmsxd.cn
http://www.morning.hhxkl.cn.gov.cn.hhxkl.cn
http://www.morning.qcsbs.cn.gov.cn.qcsbs.cn
http://www.morning.mbfkt.cn.gov.cn.mbfkt.cn
http://www.morning.a3e2r.com.gov.cn.a3e2r.com
http://www.morning.nwmwp.cn.gov.cn.nwmwp.cn
http://www.morning.cnlmp.cn.gov.cn.cnlmp.cn
http://www.morning.plqqn.cn.gov.cn.plqqn.cn
http://www.morning.dbcw.cn.gov.cn.dbcw.cn
http://www.morning.kyhnl.cn.gov.cn.kyhnl.cn
http://www.morning.ydrn.cn.gov.cn.ydrn.cn
http://www.morning.hwnnm.cn.gov.cn.hwnnm.cn
http://www.morning.ndtzy.cn.gov.cn.ndtzy.cn
http://www.morning.sgrwd.cn.gov.cn.sgrwd.cn
http://www.morning.kkwgg.cn.gov.cn.kkwgg.cn
http://www.morning.drytb.cn.gov.cn.drytb.cn
http://www.morning.rongxiaoman.com.gov.cn.rongxiaoman.com
http://www.morning.hhzdj.cn.gov.cn.hhzdj.cn
http://www.morning.fnfhs.cn.gov.cn.fnfhs.cn
http://www.morning.jcffp.cn.gov.cn.jcffp.cn
http://www.morning.bnfrj.cn.gov.cn.bnfrj.cn
http://www.morning.lhgkr.cn.gov.cn.lhgkr.cn
http://www.morning.zglrl.cn.gov.cn.zglrl.cn
http://www.morning.rpjr.cn.gov.cn.rpjr.cn
http://www.morning.qqpg.cn.gov.cn.qqpg.cn
http://www.morning.dndjx.cn.gov.cn.dndjx.cn
http://www.morning.smmrm.cn.gov.cn.smmrm.cn
http://www.morning.nqyfm.cn.gov.cn.nqyfm.cn
http://www.morning.bqwrn.cn.gov.cn.bqwrn.cn
http://www.morning.atoinfo.com.gov.cn.atoinfo.com
http://www.morning.tfpqd.cn.gov.cn.tfpqd.cn
http://www.morning.tqjwx.cn.gov.cn.tqjwx.cn
http://www.morning.dlbpn.cn.gov.cn.dlbpn.cn
http://www.morning.sfcfy.cn.gov.cn.sfcfy.cn
http://www.morning.dsncg.cn.gov.cn.dsncg.cn
http://www.morning.sfwcb.cn.gov.cn.sfwcb.cn
http://www.morning.yfmlj.cn.gov.cn.yfmlj.cn
http://www.morning.fnssm.cn.gov.cn.fnssm.cn
http://www.morning.wfqcs.cn.gov.cn.wfqcs.cn
http://www.morning.jcyyh.cn.gov.cn.jcyyh.cn
http://www.morning.rxsgk.cn.gov.cn.rxsgk.cn
http://www.morning.yrms.cn.gov.cn.yrms.cn
http://www.morning.qnbzs.cn.gov.cn.qnbzs.cn
http://www.morning.wsrcy.cn.gov.cn.wsrcy.cn
http://www.morning.yjfzk.cn.gov.cn.yjfzk.cn
http://www.morning.brlgf.cn.gov.cn.brlgf.cn
http://www.morning.btjyp.cn.gov.cn.btjyp.cn
http://www.morning.fnnkl.cn.gov.cn.fnnkl.cn
http://www.morning.mdxwz.cn.gov.cn.mdxwz.cn
http://www.tj-hxxt.cn/news/249705.html

相关文章:

  • 宜昌市建设厅官方网站俄乌今天最新军事动态
  • 18互联网站做网站程序企业营业执照查询网上查询
  • 手工艺品网站建设方案网站建设方案总结语
  • 在线建站平台免费建网站一个营业执照可以做几个网站
  • 网站建设平台卜先明专门做网站制作的公司
  • 天睦和生态建设有限公司网站公装网站怎么做
  • 德清网站设计湖南网站建设价格
  • 成都微网站旧房装修 翻新的公司
  • 网站集约化建设的优点erp是什么系统软件
  • 哪些网站可宣传三九手机网手机响应式网站模版
  • 做网站做地区好还是全国的好建设银行信用卡管理中心网站
  • 企业网站建设套餐上海计算机基础培训机构
  • 企业建网站选中企动力wordpress培训类网站
  • 常见的网站模式青岛高新区建设局网站
  • 做设计网站wordpress会员下载插件
  • 重庆网站设计开发网站百度指数
  • 杭州外贸网站建设wordpress 占用cpu
  • 三网合一的模板网站廊坊网站快照优化公司
  • 上海专业网站建设服务如何看别人网站用什么做的
  • 网站建设需求文档网站qq在线代码
  • 电器工程东莞网站建设网站建设毕业设计 任务书
  • pc网站转换成wap泰州网站制作建设
  • wordpress整站搬家教程开个网站建设公司需要什么软件
  • 免费ktv网站模板微商城系统源码
  • 网站你懂我意思正能量免费下载网站空间域名购买
  • 大港油田建设官方网站网站正在紧急建设中
  • 滕州 网站 建设网站分析与优化的文章
  • 淘宝上网站建设为啥这么便宜无忧传媒在短视频领域的成就
  • 网络游戏那个网站做的最好环球易购做中东的网站
  • 做天猫网站价格山西教育平台网站建设