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

网站建设推进计划抖音广告推广

网站建设推进计划,抖音广告推广,自建网站公司,昆明网站开发多少钱流程图配置 会签实现须在 userTask 节点下的 multi instance 中配置 collection 及 completion condition; collection 会签人员列表;element variable 当前会签变量名称,类似循环中的 item;completion condition: 完成条件。 ${taskExecutionServiceIm…

流程图配置

在这里插入图片描述
会签实现须在 userTask 节点下的 multi instance 中配置 collection 及 completion condition;

  • collection 会签人员列表;
  • element variable 当前会签变量名称,类似循环中的 item;
  • completion condition: 完成条件。

${taskExecutionServiceImpl.findProcessUsers(‘applicant’)} : spring 代理下的 activiti 项目可使用
bean 下配置方法。

${countersignComponent.isComplete(taskId)} 会签实现方法,省略监听类。括号中的字符加单引号就是传递字符串,不加引号就是取当前任务中的变量。

在这里插入图片描述
会签配置图中的 user 变量需在此处使用。

实现代码

会签实现代码

@Component
@RequiredArgsConstructor
public class CountersignComponent {private final TaskService taskService;public boolean isComplete(String taskId) {// 1、参数验证if(StringUtils.isAnyEmpty(taskId)){return false;}// 2、获取当前任务节点参数及会签判断后重新设置// 获取流程参数 var,会签人员完成自己的审批任务时会添加流程参数 var,2 为拒绝,1 为同意String variable = BeanUtil.nullOrUndefinedToEmptyStr(taskService.getVariableLocal(taskId, ActivitiCommonConstant.VAR.getValue()));// 当值为 2 证明已有人拒绝,返回 trueif(DefaultConstant.TWO_CODE.getKey().equals(variable)){//会签结束,设置参数 execType 为 4 进行下一步操作。taskService.setVariableLocal(taskId, ActivitiCommonConstant.EXEC_TYPE.getValue(), DefaultConstant.FIVE_CODE.getKey());return true;}// 当值为 1,判断会签是否结束Integer complete = (Integer) taskService.getVariable(taskId, ActivitiCommonConstant.NR_OF_COMPLETED_INSTANCES.getValue());if(complete == 0){// 会签未结束,后续处理}return false;}}

用户动态获取代码

    @Overridepublic List<String> findProcessUsers(String code) {// 1、参数验证if(StringUtils.isEmpty(code)){throw new BusinessException(ActivitiConstant.PROCESS_USER_NULL);}// 2、查询对应流程人员(具体取人逻辑,根据个人业务变更)ProcessParameterQuery processParameterQuery = new ProcessParameterQuery();processParameterQuery.setCode(code);GostopResponseVo<ProcessParameterVo> processParameter = dev.findProcessParameter(processParameterQuery);ProcessParameterVo processParameterVo = processParameter.getResult();if(Objects.isNull(processParameterVo)){throw new BusinessException(ActivitiConstant.PROCESS_USER_NULL);}List<HospitalUserVo> userInfos = processParameterVo.getUserInfos();if(CollectionUtils.isEmpty(userInfos)){throw new BusinessException(ActivitiConstant.PROCESS_USER_NULL);}return userInfos.stream().map(HospitalUserVo::getId).distinct().collect(Collectors.toList());}

开启流程

    @Overridepublic String startProcess(CommonTaskParamVo param) {// 1、参数验证if(Objects.isNull(param) || StringUtils.isAnyEmpty(param.getProcessKey())){throw new BusinessException(ActivitiConstant.EXEC_ERROR_PARAMS_NULL);}// 2、启动流程定义,返回流程实例ProcessInstance pi;try {CustomParamVo customParamVo = param.getCustomParamVo();String paramJson = JSONObject.toJSONString(customParamVo);Map paramMap = JSONObject.parseObject(paramJson, Map.class);pi = runtimeService.startProcessInstanceByKey(param.getProcessKey(), paramMap);} catch (Exception e) {log.error(e.getMessage());throw new BusinessException(ActivitiConstant.PROCESS_NOT_DEPLOYED);}return pi.getId();}

任务执行

    @Overridepublic String complete(CommonTaskParamVo param) {// 1、参数验证if(Objects.isNull(param) || StringUtils.isAnyEmpty(param.getProcessId(), param.getUserId())){throw new BusinessException(ActivitiConstant.EXEC_ERROR_PARAMS_NULL);}// 2、查询当前人任务信息String userId = param.getUserId();//与正在执行的任务管理相关的ServiceTask task = taskService.createTaskQuery()//指定个人任务查询,指定办理人.taskCandidateUser(userId)//使用流程实例ID查询.processInstanceId(param.getProcessId())//排序.orderByTaskCreateTime().asc()//返回列表.singleResult();if (Objects.isNull(task)) {throw new BusinessException(ActivitiConstant.TASK_NULL_ERROR);}task.setDescription(param.getDescription());task.setAssignee(userId);taskService.saveTask(task);// 2.1 设置执行人信息HospitalUserCacheVo userInfo = activitComponent.getUserInfo();CustomParamVo customParamVo = param.getCustomParamVo();customParamVo.setExecUserId(userInfo.getId());customParamVo.setExecUserName(userInfo.getDepartmentName());customParamVo.setExecTime(DateUtil.date2String(LocalDateTime.now()));customParamVo.setTaskId(task.getId());// 2.2 将自定义参数转为 mapString paramJson = JSONObject.toJSONString(customParamVo);Map paramMap = JSONObject.parseObject(paramJson, Map.class);taskService.setVariablesLocal(task.getId(), paramMap);// 3、执行当前节点信息taskService.complete(task.getId());return task.getId();}

参数接收对象

@Data
public class CommonTaskParamVo {/*** 用户 ID*/private String userId;/**** 流程图定义 KEY*/private String processKey;/*** 流程 ID*/private String processId;/*** 描述*/private String description;/*** 自定义参数类*/private CustomParamVo customParamVo;}
@Data
public class CustomParamVo {/*** 操作类型 (1 同意, 2 回退, 3 驳回, 4 提交 5 删除)*/private String execType;/*** 节点类型 (1 申请节点 2 审批节点)*/private String nodeType;/*** 预留参数*/private String var;/*** 执行人 ID*/private String execUserId;/*** 执行人名称*/private String execUserName;/*** 执行时间*/private String execTime;/*** 任务 ID*/private String taskId;}

使用上述参数类及流程配置后,查询任务流水就变得非常简单。

流水查询

@Overridepublic List<FlowDataVo> flowQueryProcess(FlowQuery param) {// 1、参数验证if(Objects.isNull(param) || StringUtils.isAnyEmpty(param.getProcessId())){return new ArrayList<>();}// 2、查询任务执行节点信息HistoricTaskInstanceQuery historicTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery();List<HistoricTaskInstance> taskInfoArr = historicTaskInstanceQuery.processInstanceId(param.getProcessId()).orderByTaskCreateTime().asc().list();if(CollectionUtils.isEmpty(taskInfoArr)){return new ArrayList<>();}// 3、查询任务执行参数信息HistoricVariableInstanceQuery historicVariableInstanceQuery = historyService.createHistoricVariableInstanceQuery();List<HistoricVariableInstance> variableInstanceList = historicVariableInstanceQuery.processInstanceId(param.getProcessId()).list();// 4、构建返回信息对象List<FlowDataVo> resultArr = taskInfoArr.stream().map(taskInfo -> {FlowDataVo flowDataVo = new FlowDataVo();flowDataVo.setNodeName(taskInfo.getName());flowDataVo.setDescription(taskInfo.getDescription());List<HistoricVariableInstance> variableArr = variableInstanceList.stream().filter(e -> taskInfo.getId().equals(e.getTaskId())).collect(Collectors.toList());if (CollectionUtils.isEmpty(variableArr)) {flowDataVo.setStatus(DefaultConstant.ONE_CODE.getKey());return flowDataVo;}JSONObject flowDataJson = (JSONObject) JSONObject.toJSON(flowDataVo);variableArr.stream().forEach(var -> {String variableName = var.getVariableName();String value = BeanUtil.nullOrUndefinedToEmptyStr(var.getValue());flowDataJson.put(variableName, value);});String flowDataJsonString = flowDataJson.toJSONString();FlowDataVo afterFlowData = JSONObject.parseObject(flowDataJsonString, FlowDataVo.class);afterFlowData.setStatus(DefaultConstant.TWO_CODE.getKey());return afterFlowData;}).collect(Collectors.toList());return resultArr;}

流水查询使用 bean 对象

@Data
public class FlowQuery {/*** 流程 ID*/private String processId;/*** 用户 ID*/private String userId;
}
@Data
public class FlowDataVo {/*** 操作类型 (1 同意, 2 回退, 3 驳回, 4 提交 5 删除)*/private String execType;/*** 节点类型 (1 申请节点 2 审批节点)*/private String nodeType;/*** 预留参数*/private String var;/*** 节点名称*/private String nodeName;/*** 执行状态 1 未执行 2 已执行*/private String status;/*** 执行人 ID*/private String execUserId;/*** 执行人名称*/private String execUserName;/*** 执行时间*/private String execTime;/**** 描述*/private String description;}
http://www.qdjiajiao.com/news/12204.html

相关文章:

  • 做网站营销seo搜索引擎官网
  • 项目管理软件应用杭州seo软件
  • .net 微信网站开发百度一下就知道官网
  • 网站服务器速度对seo有什么影响?数据交换平台
  • 建设银行网站怎么登陆购买一个网站域名需要多少钱
  • 如何做网站么新闻稿发布软文平台
  • 揭阳网站建设方案托管友情链接平台网站
  • 做网站需要多少钱卖片可以吗济南专业seo推广公司
  • 合肥建设网络赌博网站长沙seo优化哪家好
  • 一个网站的建设需要什么手续长春网站制作计划
  • 理性仁网站如何做估值分析永久免费crm客户管理系统
  • 深圳建站公司的小技巧外贸接单平台网站
  • 网站建设的特点推广
  • 套模板做网站 链接怎么做windows优化大师兑换码
  • 怎么将自己的视频推广出去魔贝课凡seo课程好吗
  • 网站 备案 中国 名字吗绍兴seo网站管理
  • 工信部网站备案时间网络推广工作好做不
  • 网站智能建设系统源码seo品牌优化
  • 网站建设预期周期百度怎么搜索关键词
  • 龙川网站建设疫情放开最新消息今天
  • 成都发现1例新冠本土病例seo搜索引擎优化
  • 网站建设如何跑单子市场营销一般在哪上班
  • 什么软件做美食视频网站好百度问答平台
  • 网站制作怎样做背景seo有哪些作用
  • 做网站app怎么赚钱搜索引擎调词工具
  • 专注高密做网站的360免费建站
  • 中国企业查询网官网什么是seo营销
  • 厦门网站seo百度推广销售话术
  • 中国嘉兴门户网站互联网营销策划是做什么的
  • 做网站想注册商标是哪一类南宁关键词优化软件