更多nbcio-boot功能请看演示系统
gitee源代码地址
后端代码: https://gitee.com/nbacheng/nbcio-boot
前端代码:https://gitee.com/nbacheng/nbcio-vue.git
在线演示(包括H5) : http://122.227.135.243:9888
今天我们实现nbcio-boot的flowable的流程跳转功能。
一、前端实现
界面实现,就是点击跳转出来的窗口
<!--跳转流程-->
<a-modal :z-index="100" :title="jumpTitle" @cancel="jumpOpen = false" :visible.sync="jumpOpen" :width="'40%'" append-to-body>
<el-form ref="jumpForm" :model="jumpForm" label-width="160px">
<el-form-item label="跳转节点" prop="jumpType" :rules="[{ required: true, message: '请选择跳转节点', trigger: 'blur' }]">
<a-table
size="middle"
:columns="jumpNodeColumns"
:loading="jumpNodeLoading"
:pagination="false"
:dataSource="jumpNodeData"
:rowKey="(record) => record.id"
:rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange ,type:'radio' }"
/>
</el-form-item>
<el-form-item label="处理意见" prop="comment" :rules="[{ required: true, message: '请输入处理意见', trigger: 'blur' }]">
<el-input type="textarea" v-model="jumpForm.comment" placeholder="请输入处理意见" />
</el-form-item>
<el-form-item label="附件" prop="commentFileDto.fileurl">
<j-upload v-model="jumpForm.commentFileDto.fileurl" ></j-upload>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="jumpOpen = false">取 消</el-button>
<el-button type="primary" @click="jumpComplete(true)">确 定</el-button>
</span>
</a-modal>
相关处理函数如下:
/** 跳转 */
handleJump() {
this.jumpOpen = true;
this.jumpTitle = "跳转流程";
this.jumpNodeLoading = true
userTaskList({ taskId: this.taskForm.taskId }).then((res) => {
this.jumpNodeLoading = false
this.jumpNodeData = res.result
})
},
jumpComplete() {
if (this.selectedRows.length < 1) {
this.$message.warning('请选择跳转节点')
return
}
// 流程信息
this.jumpForm.deployId = this.$route.query && this.$route.query.deployId;
this.jumpForm.taskId = this.$route.query && this.$route.query.taskId;
this.jumpForm.procInsId = this.$route.query && this.$route.query.procInsId;
this.jumpForm.instanceId = this.$route.query && this.$route.query.procInsId;
// 初始化表单
this.jumpForm.procDefId = this.$route.query && this.$route.query.procDefId;
this.jumpForm.businessKey = this.$route.query && this.$route.query.businessKey;
this.jumpForm.category = this.$route.query && this.$route.query.category;
this.jumpForm.dataId = this.$route.query && this.$route.query.businessKey;
//节点类型
this.jumpForm.nodeType = this.$route.query && this.$route.query.nodeType;
//online表单id和数据id
this.jumpForm.onlineId = this.$route.query && this.$route.query.onlineId;
if (this.jumpForm.category === 'online') {
this.jumpForm.onlineDataId = this.$route.query && this.$route.query.businessKey;
}
//对formdesigner后续加签审批的时候需要用到
this.jumpForm.values = this.taskForm.values;
//目标选择的节点信息
this.jumpForm.targetActId = this.selectedRows[0].id;
this.jumpForm.targetActName = this.selectedRows[0].name;
console.log("this.jumpForm=",this.jumpForm);
jumpTask(this.jumpForm).then(res => {
if (res.success) {
this.$message.success('跳转成功')
this.jumpOpen = false;
this.goBack();
} else {
this.$message.error('跳转失败:' + res.message)
}
});
},
/**
* 跳转节点列表选择
*/
onSelectChange (selectedRowKeys, selectedRows) {
this.selectedRowKeys = selectedRowKeys
this.selectedRows = selectedRows
},
二、后端代码实现
@Override
@Transactional(rollbackFor = Exception.class)
public void jumpTask(FlowTaskVo flowTaskVo) {
//校验任务是否存在
Task task = taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult();
//当前节点id
String currentActId = task.getTaskDefinitionKey();
//获取流程实例id
String processInstanceId = task.getProcessInstanceId();
//当前活动节点名称(任务名称)
String currentActName = task.getName();
//获取当前操作人姓名
SysUser loginuser = iFlowThirdService.getLoginUser();
String name = loginuser.getRealname();
String type = FlowComment.JUMP.getType();
//添加跳转意见 name + "将任务跳转到【" + targetActName + "】,跳转原因:" + comment + ";";
taskService.addComment(task.getId(), processInstanceId, type,"当前任务["+currentActName +"]由" + name + "跳转到[" + flowTaskVo.getTargetActName() + "],跳转原因:" + flowTaskVo.getComment());
//执行跳转操作
runtimeService.createChangeActivityStateBuilder()
.processInstanceId(processInstanceId)
.moveActivityIdTo(currentActId, flowTaskVo.getTargetActId()).changeState();
}
@Override
public Result userTaskList(FlowTaskVo flowTaskVo) {
List<UserTaskVo> resultList = new ArrayList<UserTaskVo>();
// 当前任务 task
Task task = taskService.createTaskQuery().taskId(flowTaskVo.getTaskId()).singleResult();
// 获取流程定义信息
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(task.getProcessDefinitionId()).singleResult();
//根据流程定义获取deployment
String deploymentId = processDefinition.getDeploymentId();
Deployment deployment = repositoryService.createDeploymentQuery().deploymentId(deploymentId).singleResult();
if (ObjectUtil.isEmpty(deployment)) {
throw new FlowableException("流程还没布置");
}
//获取bpmnModel并转为modelNode
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId());
//获取主流程
Process mainProcess = bpmnModel.getMainProcess();
//获取用户任务节点类型,深入子流程
mainProcess.findFlowElementsOfType(UserTask.class, true).forEach(userTask -> {
UserTaskVo userTaskResult = new UserTaskVo();
userTaskResult.setId(userTask.getId());
userTaskResult.setProcessDefinitionId(processDefinition.getId());
userTaskResult.setName(userTask.getName());
resultList.add(userTaskResult);
});
return Result.OK(resultList);
}
三、效果图
文章来源地址https://www.toymoban.com/news/detail-681814.html文章来源:https://www.toymoban.com/news/detail-681814.html
到了这里,关于基于jeecg-boot的flowable流程跳转功能实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!