流程任务工作状态表

表结构

CREATE TABLE `act_t_business` (
  `id` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL,
  `task_id` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
  `proc_def_id` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
  `proc_inst_id` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
  `proc_def_key` varchar(255) COLLATE utf8mb3_bin DEFAULT NULL,
  `proc_def_name` varchar(255) COLLATE utf8mb3_bin DEFAULT NULL COMMENT '流程名称',
  `project_id` varchar(64) COLLATE utf8mb3_bin DEFAULT NULL,
  `project_name` varchar(255) COLLATE utf8mb3_bin DEFAULT NULL,
  `apply_user` varchar(64) COLLATE utf8mb3_bin DEFAULT NULL COMMENT '申请人',
  `apply_user_name` varchar(50) COLLATE utf8mb3_bin DEFAULT NULL COMMENT '申请人姓名',
  `instance_title` varchar(255) COLLATE utf8mb3_bin DEFAULT NULL COMMENT '任务名称',
  `business_key` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '业务数据id',
  `approval_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL COMMENT '审批节点名称',
  `assingee` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin DEFAULT NULL,
  `is_cost` tinyint DEFAULT NULL COMMENT '是否是金额类:0是,1不是',
  `apply_cost` varchar(50) COLLATE utf8mb3_bin DEFAULT NULL COMMENT '金额',
  `create_by` varchar(64) COLLATE utf8mb3_bin DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  `update_by` varchar(64) COLLATE utf8mb3_bin DEFAULT NULL,
  `update_time` datetime DEFAULT NULL,
  `approval_status` tinyint DEFAULT NULL COMMENT '审批状态 0:审批中、1:审批完成、2:审批驳回、3:审批撤回',
  `remark` varchar(255) COLLATE utf8mb3_bin DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin COMMENT='流程任务工作状态表';

新增

发起流程实例时新增流程任务工作状态

/**
     * 发起流程实例
     * @param processDefinitionKey 流程定义KEY
     * @param businessKey 该流程数据的ID
     * @param variables 其他参数
     * @return
     */
    public ProcessInstance startProcessInstance(String processDefinitionKey, String businessKey, Map<String, Object> variables) {
        // 判断金额标识是否为空,用于判断金额和非金额审批
        if(variables.get(IS_COST) == null){
            throw new RuntimeException("请设置审批金额标识:'is_cost'参数!金额审批:0,非金额审批:1");
        }
        Authentication.setAuthenticatedUserId(String.valueOf(SecurityUtils.getUserId())); // 设置流程发起人
        variables.put("apply", String.valueOf(SecurityUtils.getUserId())); //设置下一个办理人
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey, variables);
        // 保存流程任务工作状态
        saveActTBusiness(processInstance, businessKey, variables);
        return processInstance;
    }

    /**
     * Description 保存流程任务工作状态
     * date 2024/5/7
     * @author guoxingzhan
     **/
    public void saveActTBusiness(ProcessInstance processInstance, String businessKey, Map<String, Object> variables){
        ActTBusiness business = new ActTBusiness();
        business.setProcInstId(processInstance.getProcessInstanceId());
        business.setProcDefId(processInstance.getProcessDefinitionId());
        business.setProcDefKey(processInstance.getProcessDefinitionKey());
        business.setProcDefName(processInstance.getProcessDefinitionName());
        business.setProjectId(variables.get(WorkFlowService.PROJECT_ID) != null ? variables.get(WorkFlowService.PROJECT_ID).toString() : null);
        business.setProjectName(variables.get(WorkFlowService.PROJECT_NAME) != null ? variables.get(WorkFlowService.PROJECT_NAME).toString() : null);
        business.setInstanceTitle(variables.get(WorkFlowService.INSTANCE_TITLE) != null ? variables.get(WorkFlowService.INSTANCE_TITLE).toString() : null);
        business.setApplyUser(String.valueOf(SecurityUtils.getUserId()));
        business.setApplyUserName(SecurityUtils.getLoginUser().getUser().getNickName());
        Object apply_cost = variables.get(WorkFlowService.APPLY_COST);//审批金额
        if(apply_cost != null){
            business.setIsCost(0);
            business.setApplyCost(String.valueOf(apply_cost));
        }else{
            business.setIsCost(1);
        }
        business.setCreateBy(String.valueOf(SecurityUtils.getUserId()));
        business.setCreateTime(new Date());
        Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult();
        if(task != null){
            if(task.getAssignee() != null){
                business.setAssingee(task.getAssignee());
            } else {
                List<IdentityLink> ils = taskService.getIdentityLinksForTask(task.getId());
                StringBuffer sb = new StringBuffer();
                ils.stream().forEach(item -> {
                    sb.append(item.getUserId()!=null?item.getUserId() : item.getGroupId()).append(",");
                });
                sb.deleteCharAt(sb.length() - 1);
                business.setAssingee(sb.toString());
            }
            business.setTaskId(task.getId());
            business.setApprovalName(task.getName());
        }
        business.setBusinessKey(businessKey);
        // 审批状态
        business.setApprovalStatus(WorkflowStatus.UNDER_APPROVAL.getCode());
        businessService.save(business);
    }

修改~

审批时修改流程任务工作状态

public Map<String, Object> complete(String taskId, String processInstanceId, String userId, Map<String, Object> variables) {
        Map<String, Object> data = new HashMap<String, Object>();
        if(StringUtils.isBlank(taskId)){
            Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).taskCandidateOrAssigned(userId).singleResult();
            if (Objects.isNull(task)) {
                task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();
            }
            taskId = task.getId();
        }
        taskService.setAssignee(taskId, userId);
        // 设置任务所有人
        taskService.setOwner(taskId, userId);
        if (variables != null && variables.get("comment") != null) {
            taskService.addComment(taskId, processInstanceId, variables.get("comment").toString());
        }
        taskService.complete(taskId, variables);
        List<Task> tasks = taskService.createTaskQuery().processInstanceId(processInstanceId).orderByTaskCreateTime().desc().listPage(0,1);
        if(tasks != null && tasks.size() > 0){
            Task task = tasks.get(0);
            // 修改流程任务工作状态
            businessService.update(new UpdateWrapper<ActTBusiness>()
                    .eq("proc_inst_id", processInstanceId)
                    .set("approval_status", WorkflowStatus.UNDER_APPROVAL.getCode())
                    .set("task_id", task.getId())
                    .set("approval_name", task.getName())
                    .set("assingee", userId)
            );
        }
        return data;
    }

审批完成时修改流程任务工作状态

@Override
    public void success(DelegateTask delegateTask) {
        if(delegateTask.getProcessInstanceId() != null){
            // 根据instanceId获取对象
            SysWorkLog model = mapper.selectSysWorkLogByInstanceId(delegateTask.getProcessInstanceId());
            // 传入要修改的审批状态,只修改状态
            updateStatus(model, WorkflowStatus.SUCCESS_APPROVAL.getCode(), true);
            // 修改流程任务工作状态
            businessService.update(new UpdateWrapper<ActTBusiness>()
                    .eq("proc_inst_id", delegateTask.getProcessInstanceId())
                    .set("approval_status", WorkflowStatus.SUCCESS_APPROVAL.getCode())
            );
        }
    }

驳回时修改流程任务工作状态

public void back(String processInstanceId, String userId, Map<String,Object> variables, String reason) throws Exception {
        // 根据流程id获取任务
        Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).taskCandidateOrAssigned(userId).singleResult();// 设置任务审批人
        // 任务审批人id
        taskService.setAssignee(task.getId(), userId);
        // 设置任务所有人
        taskService.setOwner(task.getId(), userId);
        // 审批意见
        if (variables != null && variables.get("comment") != null) {
            taskService.addComment(task.getId(), processInstanceId, variables.get("comment").toString());
        }

        //  完成当前任务(将会沿着新给定的方向流转到指定的节点)
//        taskService.complete(task.getId());
        // 判断原因是否为空
        if(StringUtils.isBlank(reason)){
            reason = "驳回到发起人,流程结束";
        }
        // 结束流程实例
        runtimeService.deleteProcessInstance(processInstanceId, reason);
        // 修改流程任务工作状态
        businessService.update(new UpdateWrapper<ActTBusiness>()
                .eq("proc_inst_id", processInstanceId)
                .set("approval_status", WorkflowStatus.BACK_APPROVAL.getCode())
                .set("task_id", task.getId())
                .set("approval_name", task.getName())
                .set("assingee", userId)
        );
    }

撤回时修改流程任务工作状态

public Map<String,Object> cancelApply(String functionKey, String instanceId){
        Map<String,Object> variables = new HashMap<>();
        String nickName = SecurityUtils.getLoginUser().getUser().getNickName();
        TaskQuery taskQuery = taskService.createTaskQuery();
        Task task = taskQuery.processInstanceId(instanceId).taskVariableValueEquals("apply_name", nickName).singleResult();
        if(ObjectUtil.isEmpty(task)){
            throw new ServiceException(500,"审批撤回操作只能由发起人进行");
        }
        runtimeService.deleteProcessInstance(instanceId, "发起人撤回");
        // 修改流程任务工作状态
        businessService.update(new UpdateWrapper<ActTBusiness>()
                .eq("proc_inst_id", instanceId)
                .set("approval_status", WorkflowStatus.CANCEL_APPROVAL.getCode())
                .set("task_id", task.getId())
                .set("approval_name", task.getName())
        );
        // 修改业务数据状态
        completeTaskListener.cancelApply(functionKey, instanceId);
        return variables;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值