14.flowable 已办任务列表查询

本文演示了如何使用SQL查询Flowable工作流引擎中的历史任务实例,包括任务ID、名称、审批者、表单名称等详细信息,并提供了具体SQL语句及代码实现。

项目地址:https://gitee.com/lwj/flowable.git 分支flowable-base
视频讲解地址
https://space.bilibili.com/485524575/channel/detail?cid=94579

1、演示

在这里插入图片描述

2、代码

这里也是通过sql来查询的

SELECT DISTINCT
            t1.ID_ AS taskId,
            t1.NAME_ AS taskName,
            t2.FIRST_ AS approver,
            t2.ID_ AS approverId,
            t3.NAME_ AS formName,
            t3.BUSINESS_KEY_ AS businessKey,
            t3.PROC_INST_ID_ AS processInstanceId,
            t3.TENANT_ID_ as systemSn,
            t1.START_TIME_ AS startTime,
            t1.END_TIME_ as endTime
        FROM
            act_hi_taskinst t1
        LEFT JOIN act_id_user t2 ON t1.ASSIGNEE_ = t2.ID_
        LEFT JOIN act_hi_procinst t3 ON t1.PROC_INST_ID_ = t3.PROC_INST_ID_
        WHERE
            t1.END_TIME_ is not null
        AND t1.ASSIGNEE_ = #{userCode}
public Result todoListNew(Integer pageNo, Integer pageSize, FlowTaskDto flowTaskDto) { Page<FlowTaskDto> page = new Page<>(); String username = iFlowThirdService.getLoginUser().getUsername(); TaskQuery taskQuery = taskService.createTaskQuery() .active() .includeProcessVariables() //.taskAssignee(username) .taskCandidateOrAssigned(username) // .taskCandidateGroupIn(flowTaskDto.getCandidate()) //以后需要改进变成list类型nbacheng .orderByTaskCreateTime().desc(); /*=====查询参数=====*/ if (StrUtil.isNotBlank(flowTaskDto.getProcDefName())){ taskQuery = taskQuery.processDefinitionNameLike("%"+flowTaskDto.getProcDefName()+"%"); } if (Objects.nonNull(flowTaskDto.getCreateTime())){ taskQuery = taskQuery.taskCreatedAfter(flowTaskDto.getCreateTime()); } page.setTotal(taskQuery.count()); List<Task> taskList = taskQuery.listPage((pageNo - 1)*pageSize, pageSize); List<FlowTaskDto> flowList = new ArrayList<>(); for (Task task : taskList) { FlowTaskDto flowTask = new FlowTaskDto(); // 当前流程信息 flowTask.setTaskId(task.getId()); flowTask.setTaskDefKey(task.getTaskDefinitionKey()); flowTask.setCreateTime(task.getCreateTime()); flowTask.setProcDefId(task.getProcessDefinitionId()); flowTask.setTaskName(task.getName()); // 流程定义信息 ProcessDefinition pd = repositoryService.createProcessDefinitionQuery() .processDefinitionId(task.getProcessDefinitionId()) .singleResult(); flowTask.setDeployId(pd.getDeploymentId()); flowTask.setProcDefName(pd.getName()); flowTask.setCategory(pd.getCategory()); flowTask.setProcDefVersion(pd.getVersion()); flowTask.setProcInsId(task.getProcessInstanceId()); //当前任务节点信息 flowTask.setNodeType(""); if (CollUtil.isNotEmpty(taskList)) { BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());//获取bpm(模型)对象 //传节点定义key获取当前节点 FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(taskList.get(0).getTaskDefinitionKey()); if(flowNode instanceof UserTask ){ UserTask userTask = (UserTask) flowNode; MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics(); if (Objects.nonNull(multiInstance)) {//目前只对多实例会签做特殊处理 flowTask.setNodeType(ProcessConstants.PROCESS_MULTI_INSTANCE); } } } // 流程发起人信息 HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() .processInstanceId(task.getProcessInstanceId()) .singleResult(); flowTask.setBusinessKey(historicProcessInstance.getBusinessKey()); SysUser startUser = iFlowThirdService.getUserByUsername(historicProcessInstance.getStartUserId()); List<String> departNamesByUsername = iFlowThirdService.getDepartNamesByUsername(historicProcessInstance.getStartUserId()); flowTask.setStartUserId(startUser.getUsername()); flowTask.setStartUserName(startUser.getRealname()); flowTask.setStartDeptName(CollUtil.join(departNamesByUsername,",")); flowList.add(flowTask); } page.setRecords(flowList); return Result.OK(page); } 这是代码,这是报错 ### Error querying database. Cause: org.flowable.common.engine.api.FlowableException: Couldn't deserialize object in variable 'formData' ### Cause: org.flowable.common.engine.api.FlowableException: Couldn't deserialize object in variable 'formData' org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.flowable.common.engine.api.FlowableException: Couldn't deserialize object in variable 'formData' ### Cause: org.flowable.common.engine.api.FlowableException: Couldn't deserialize object in variable 'formData' at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:153) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140) at org.flowable.common.engine.impl.db.DbSqlSession.selectListWithRawParameter(DbSqlSession.java:271) at org.flowable.common.engine.impl.db.DbSqlSession.queryWithRawParameter(DbSqlSession.java:250) at org.flowable.common.engine.impl.db.DbSqlSession.selectList(DbSqlSession.java:165) at org.flowable.task.service.impl.persistence.entity.data.impl.MybatisTaskDataManager.findTasksWithRelatedEntitiesByQueryCriteria(MybatisTaskDataManager.java:117) at org.flowable.task.service.impl.persistence.entity.TaskEntityManagerImpl.findTasksWithRelatedEntitiesByQueryCriteria(TaskEntityManagerImpl.java:171) at org.flowable.task.service.impl.TaskQueryImpl.executeList(TaskQueryImpl.java:1879) at org.flowable.common.engine.impl.query.AbstractQuery.execute(AbstractQuery.java:166) at org.flowable.engine.impl.interceptor.CommandInvoker$1.run(CommandInvoker.java:67) at org.flowable.engine.impl.interceptor.CommandInvoker.executeOperation(CommandInvoker.java:140) at org.flowable.engine.impl.interceptor.CommandInvoker.executeOperations(CommandInvoker.java:114) at org.flowable.engine.impl.interceptor.CommandInvoker.execute(CommandInvoker.java:72) at org.flowable.engine.impl.interceptor.BpmnOverrideContextInterceptor.execute(BpmnOverrideContextInterceptor.java:26) at org.flowable.common.engine.impl.interceptor.TransactionContextInterceptor.execute(TransactionContextInterceptor.java:53) at org.flowable.common.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:105) at org.flowable.common.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:52) at org.flowable.common.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:30) at org.flowable.common.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:56) at org.flowable.common.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:51) at org.flowable.common.engine.impl.query.AbstractQuery.listPage(AbstractQuery.java:140) at org.flowable.task.service.impl.TaskQueryImpl.listPage(TaskQueryImpl.java:2353) at org.jeecg.modules.flowable.service.impl.FlowTaskServiceImpl.todoListNew(FlowTaskServiceImpl.java:3059) at org.jeecg.modules.flowable.service.impl.FlowTaskServiceImpl$$FastClassBySpringCGLIB$$4cf12a42.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:367) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691) at org.jeecg.modules.flowable.service.impl.FlowTaskServiceImpl$$EnhancerBySpringCGLIB$$31f5a66.todoListNew(<generated>) at org.jeecg.modules.flowable.controller.FlowTaskController.todoListNew(FlowTaskController.java:94)
最新发布
09-05
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小学生05101

flowable

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值