SpringBoot集成Flowable_Jsite待办任务菜单报500

JSite 快速开发框架,内置Flowable工作流引擎 · 五大基础模块 · 前后端基础代码自动生成 · 权限精确控制。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

说明:此版本我已经调通,最新版本正在更新,页面未处理好,因此采用历史版本。

文章目录

  • 一、克隆/打开项目
    • 1.1. 搜索项目
    • 1.2. 复制ssh地址
    • 1.3. 将项目克隆到本地
    • 1.4. idea打开项目`JSite`
  • 二、配置项目
    • 2.1. 解决依赖
      • 2.1.1. 配置maven本地仓库
      • 2.1.2. 配置阿里云镜像地址镜像
    • 2.2. 切换到历史节点
    • 2.3. 修改数据库连接信息
    • 2.4. 初始化数据库脚本
    • 2.5. 配置Redis
    • 2.6. 启动Redis
    • 2.7. 关闭演示模式
      • 2.7.1. 关闭演示模式开关
      • 2.7.2. 切换正常模式
  • 三、启动项目
    • 3.1. 启动类报错
    • 3.2. 重新编译打包
  • 四、请假实战
    • 4.1. 部署流程
    • 4.2. 发起流程
    • 4.3. 已发任务查看
    • 4.4. 部门经理流转
      • 4.4.1. 登录dept账号
      • 4.4.2. 在待办任务中,签收任务
      • 4.4.3. 在待办任务中,办理任务

一、克隆/打开项目

1.1. 搜索项目

  • 在码云搜索框中搜索JSite
  • 或者直接点击码云项目链接:
    https://gitee.com/baseweb/JSite
    在这里插入图片描述在这里插入图片描述

1.2. 复制ssh地址

在这里插入图片描述

1.3. 将项目克隆到本地

git clone git@gitee.com:baseweb/JSite.git

在这里插入图片描述

1.4. idea打开项目JSite

在这里插入图片描述

二、配置项目

2.1. 解决依赖

2.1.1. 配置maven本地仓库

在这里插入图片描述

2.1.2. 配置阿里云镜像地址镜像

在这里插入图片描述

2.2. 切换到历史节点

在这里插入图片描述

 git checkout 47c0d6c8

在这里插入图片描述

2.3. 修改数据库连接信息

  • 前提:在mysql中创建jsite数据库
    在这里插入图片描述

2.4. 初始化数据库脚本

模块数据库脚本
文件模块jsite_file_mysql.sql
代码生成模块jsite_gen_mysql.sql
oa工作流模块jsite_oa_mysql.sql
系统模块jsite_sys_mysql.sql
定时器模块jsite_sys_qrtz_mysql.sql
测试模块jsite_test_mysql.sql
初始化数据jsite-init.sql

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
项目启动后截图:
在这里插入图片描述

2.5. 配置Redis

在这里插入图片描述

2.6. 启动Redis

在这里插入图片描述
双击运行即可
在这里插入图片描述

2.7. 关闭演示模式

2.7.1. 关闭演示模式开关

在这里插入图片描述

2.7.2. 切换正常模式

static/modler/scripts/controllers/processes.js
  • 在119行
    在这里插入图片描述在这里插入图片描述

三、启动项目

3.1. 启动类报错

  • 问题现象
    在这里插入图片描述
  • 问题定位
  • 再启动类中,PropertiesUtils这个工具类是com.jsite.common.io.PropertiesUtils中的类,初步判断是,jsite-common模块没有安装板本地仓库,导致jsite-web项目以来失败。
    在这里插入图片描述
  • 深一步追根溯源
  • 在jsite-web的pom.xml中,依赖了jsite-framework模块
    在这里插入图片描述
  • 进入jsite-framework模块的pom中

在这里插入图片描述
从上面可以看出,我们的初步判断是正确的,那就好解决了,没有安装到本地仓库,那就让我们借助maven打包编译插件帮我们安装jsite-common到本地仓库就好了。

3.2. 重新编译打包

  • 执行命令
mvn clean install -DTests=true

或者
idea插件操作
在这里插入图片描述

  • 再次验证,没有报错
    在这里插入图片描述
  • 浏览器访问:http://localhost:8081/jsite
演示系统账号密码
jsiteadmin
dept123456
jsitehr123456
jsiteuser123456
  • 部署流程,只能由系统管理员
  • 发起流程:都可以,前提是由系统管理员部署流程成功后,在发起流程的类表中才会显示,然后每个人选择对应的流程,进行节点流转。

说明:上面3个账号角色分别为系统管理员、部门经理、HR,普通员工。
请假流程发起后,流程下一步自动流转到“部门经理”角色账号下,部门经理审批后自动流转到“hr角色账号下”。测试时,需要登录不同角色账号,在代办任务中查看流程代办任务。
在这里插入图片描述

  • 刷新页面即可登陆成功
    在这里插入图片描述

四、请假实战

4.1. 部署流程

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

4.2. 发起流程

在这里插入图片描述在这里插入图片描述在这里插入图片描述

4.3. 已发任务查看

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.4. 部门经理流转

4.4.1. 登录dept账号

在这里插入图片描述

4.4.2. 在待办任务中,签收任务

在这里插入图片描述
在这里插入图片描述

4.4.3. 在待办任务中,办理任务

在这里插入图片描述
响应码500
在这里插入图片描述

  • 请求的url
    在这里插入图片描述
  • 页面传递的参数
    在这里插入图片描述
  • 控制台报错信息提取
    在这里插入图片描述
    在获取代办列表FlowTaskService的104行
    在这里插入图片描述
    在获取代办列表FlowTaskService的105行
e.setProcDefId(pd.getId());

这里需要tProcDefId对吧,程序中写的是从pd中获取,但是里面,没有
在这里插入图片描述
其实这个tProcDefId在task中,因此需要修改代码。
在这里插入图片描述

  • 点击办理,procDefId=undefined
    在这里插入图片描述
    第一步进FlowTaskController的form方法,调用getFormKey的service进行业务处理

在这里插入图片描述
在这里插入图片描述
从上图可以看出很明显,没有获取到procDefId

,清除缓存,再次测试,点击待办任务菜单,debbug看程序,

procDefId=leave:1:b74aaad7-15d6-11ea-9f45-4a5ab6e330e5

在这里插入图片描述
在这里插入图片描述

  • 点击办理
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    很明显获取到值了!!!
    f8跳过,页面又抛出403,权限的错了,真是一波未平一波又起啊。
    在这里插入图片描述
    从页面很明显是没有办理权限,导致403错误,情有可原,对吧,那就给dept用户配置权限呗,
    登录jsite系统管理员账号,给dept用户配置权限
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    角色授权既然是空的,我想静静。看看控制台报错信息再定位问题吧?
    在这里插入图片描述
    从控制台中可以看出,由2条信息比较醒目:
java.lang.ClassNotFoundException: com.jsite.modules.sys.utils.AreaOfficeUtils
at com.jsite.modules.sys.web.RoleController.form(RoleController.java:74)

异常信息很明晰那说AreaOfficeUtils类,RoleController.java:74,既然有文件位置,那咱们就去看看吧,
从以下图中可以看出,通过反射区找 com.jsite.modules.sys.utils.AreaOfficeUtils类,那就在程序中找找有这个类吗?
在这里插入图片描述
程序我是看明白了,他想调用AreaOfficeUtils类的getOfficeList(获取当前用户有权限访问的部门方法),再utils包下就3个工具类,经过查找,UserUtils类中,有getOfficeList(获取当前用户有权限访问的部门方法),那就好办了,类名修改一下即可,再次测试。
在这里插入图片描述
校色授权,就显示了。
在这里插入图片描述
但是,我就不明白了,想获取一个工具类的方法,直接调用不就行了,如果是静态的方法,直接用类名.调用不更方便。代码还写了折磨多行,浪费。
代用的方法和我们预期的一样静态的,那就轻松+快乐了。
在这里插入图片描述
在这里插入图片描述
一行代码就搞定了。哈哈哈!!!
测试一下,好不好使,对吧
在这里插入图片描述
从上图可以看出,也好使。

dept用户的办理权限,我也配置好了,再去待办任务菜单中,去办理任务应该就好了,光预测也不行,测试一下保险。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

任务办理完了,在已办任务菜单中,查看一下任务办理的详情不为过吧,
这里演示以,下面查看当前节点信息,debug断点调试了。
在这里插入图片描述
在这里插入图片描述
其实,也是那个definitionId=undefined导致的,也是由于获取的对象不对,这里我直接修改程序。
在这里插入图片描述
在这里插入图片描述
解决方案:

//修改后的程序
e.setProcDefId(histTask.getProcessDefinitionId());

在这里插入图片描述
再次测试
在这里插入图片描述

任务办理完了,在已办任务(历史)菜单中,查看一下任务办理的节点信息不为过吧,
在这里插入图片描述
其实,也是那个definitionId=undefined导致的,也是由于获取的对象不对,这里我直接修改程序。
在这里插入图片描述
在这里插入图片描述
解决方案:

//修改后的程序
e.setProcDefId(histTask.getProcessDefinitionId());

在这里插入图片描述
再次测试
在这里插入图片描述
下一个节点是hr,同理hr也需要权限
在这里插入图片描述
jsitehr登录
在这里插入图片描述
在待办任务菜单中,先对待办任务进行签收,签收之后进行办理。

在这里插入图片描述
在已办任务菜单中,查看当前节点信息
在这里插入图片描述

在已办任务菜单中,查看详情在这里插入图片描述
节点流转结束了,jsite发起流程的执行人,查看一下历史任务应该吧。
在这里插入图片描述
先追踪一下流程详情
在这里插入图片描述
在这里插入图片描述

很明显又是这个问题,大家应该知道怎末改了吧,
在这里插入图片描述

在这里插入图片描述

再次测试
在这里插入图片描述
在这里插入图片描述

总上,异常现象有2种:

  1. 在待办任务/已办任务/已发任务都会抛出异常,都是由于definitionId=undefined导致的
  2. 由于没有办理权限导致的403
    到此,一个完整的工作流走完了。

补充,在待办任务菜单中会出现2种业务场景,上明只讲了一种,直接在待办任务列表中签收任务,然后办理,已经签收的任务,另外一种情况就是,我还未签收,但是,我想先不签收,先查看一下节点信息和流程详情,也符合业务需要,这样需要在待办任务中添加这种业务场景。

当前属于未签收的业务场景:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解决方案:

	//源程序// e.setProcDefId(pd.getId());//修改后e.setProcDefId(task.getProcessDefinitionId());

在这里插入图片描述
在这里插入图片描述
源码附上:

/*** 获取待办列表* @param procDefKey 流程定义标识* @return*/public Page<Flow> todoList(Flow act){String userId = UserUtils.getUser().getLoginName();//ObjectUtils.toString(UserUtils.getUser().getId());Page<Flow> result = new Page<Flow>();List<Flow> flowList = new ArrayList<Flow>();// =============== 已经签收的任务  ===============TaskQuery todoTaskQuery = taskService.createTaskQuery().taskAssignee(userId).active().includeProcessVariables().orderByTaskCreateTime().desc();// 设置查询条件if (StringUtils.isNotBlank(act.getProcDefKey())){todoTaskQuery.processDefinitionKey(act.getProcDefKey());}if (act.getBeginDate() != null){todoTaskQuery.taskCreatedAfter(act.getBeginDate());}if (act.getEndDate() != null){todoTaskQuery.taskCreatedBefore(act.getEndDate());}result.setCount(todoTaskQuery.count());// 查询列表List<Task> todoList = todoTaskQuery.list();for (Task task : todoList) {Flow e = new Flow();e.setTaskId(task.getId());e.setTaskDefKey(task.getTaskDefinitionKey());e.setTaskName(task.getName());e.setAssignee(task.getAssignee());e.setCreateTime(task.getCreateTime());e.setExecutionId(task.getExecutionId());e.setVars(task.getProcessVariables());ProcessDefinition pd = ProcessDefCache.get(task.getProcessDefinitionId());//源程序// e.setProcDefId(pd.getId());//修改后e.setProcDefId(task.getProcessDefinitionId());e.setProcDefname(pd.getName());e.setProcDefKey(pd.getKey());e.setProcDefversion(pd.getVersion());e.setProcInsId(task.getProcessInstanceId());e.setStatus("todo");flowList.add(e);}// =============== 等待签收的任务  ===============TaskQuery toClaimQuery = taskService.createTaskQuery().taskCandidateUser(userId).includeProcessVariables().active().orderByTaskCreateTime().desc();// 设置查询条件if (StringUtils.isNotBlank(act.getProcDefKey())){toClaimQuery.processDefinitionKey(act.getProcDefKey());}if (act.getBeginDate() != null){toClaimQuery.taskCreatedAfter(act.getBeginDate());}if (act.getEndDate() != null){toClaimQuery.taskCreatedBefore(act.getEndDate());}// 查询列表List<Task> toClaimList = toClaimQuery.list();for (Task task : toClaimList) {Flow e = new Flow();e.setTaskId(task.getId());e.setTaskDefKey(task.getTaskDefinitionKey());e.setTaskName(task.getName());e.setAssignee(task.getAssignee());e.setCreateTime(task.getCreateTime());e.setExecutionId(task.getExecutionId());e.setVars(task.getProcessVariables());ProcessDefinition pd = ProcessDefCache.get(task.getProcessDefinitionId());//源程序// e.setProcDefId(pd.getId());//修改后e.setProcDefId(task.getProcessDefinitionId());e.setProcDefname(pd.getName());e.setProcDefKey(pd.getKey());e.setProcDefversion(pd.getVersion());e.setProcInsId(task.getProcessInstanceId());e.setStatus("claim");flowList.add(e);}logger.info("==FLOWABLE LIST=="+JsonMapper.toJsonString(flowList));result.setList(flowList);return result;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522688.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云SDK再升级,宣布支持C++语言

摘要&#xff1a; 日前&#xff0c;阿里云官方SDK发布支持新语言——C 语言SDK&#xff0c;意味着90%以上产品可以随时生成并发布C SDK&#xff0c;给C 语言的开发者使用。 此次阿里云发布支持C SDK的新功能&#xff0c;可以让C 语言开发者更加便捷地使用SDK调用产品API来操作产…

网络存储 linux 访问,Linux基础教程学习笔记28——使用Samba访问网络存储

Linux基础教程学习笔记28——使用Samba访问网络存储SMB用于Windows和类Linux系统直接的文件共享安装samba client包&#xff1a;[rootlinuxidc~]# yum install samba-client\* -y使用smbclinet命令查看和访问windows共享的文件夹资源&#xff1a;12345678910111213 [rootlinuxi…

IDC Q1中国云服务报告:公有云IaaS市场增速持续高于全球

2019年8月2日&#xff0c;市场研究机构IDC发布了《2019Q1中国公有云服务市场跟踪报告》。报告显示&#xff0c;中国公有云市场发展强劲&#xff0c;2019年Q1公有云IaaS市场同比增长74%&#xff0c;头部效应明显&#xff0c;市场集中度较去年持续提升。头部厂商中&#xff0c;阿…

SpringBoot集成Flowable_Jsite已办任务菜单报500

JSite 快速开发框架&#xff0c;内置Flowable工作流引擎 五大基础模块 前后端基础代码自动生成 权限精确控制。 说明&#xff1a;此版本我已经调通&#xff0c;最新版本正在更新&#xff0c;页面未处理好&#xff0c;因此采用历史版本。 文章目录一、克隆/打开项目1.1. 搜索…

《阿里巴巴Java开发手册》发布一周年!你不知道的背后故事!

摘要&#xff1a; 今天是2月9日&#xff0c;也是《阿里巴巴Java开发手册》&#xff08;下称《手册》&#xff09;对外正式发布一周年的日子。在过去的300多个日子里&#xff0c;这本小小的手册在业界产生了巨大的影响力。值此一周年之际&#xff0c;我们不妨一道围炉煮酒&#…

谁不喜欢《长安十二时辰》? | Alfred数据室

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | AlfredWu来源 | Alfred数据室最近&#xff0c;悄悄上线的《长安十二时辰》在朋友圈被吹爆了&#xff1a;年度最佳古装剧、服道化精致、电影质感、良心剧等赞美的声音不绝于耳。该剧首播时在豆瓣拿到了8.8的高分&#xff0c;但…

SpringBoot集成Flowable_Jsite已发任务菜单报500

JSite 快速开发框架&#xff0c;内置Flowable工作流引擎 五大基础模块 前后端基础代码自动生成 权限精确控制。 说明&#xff1a;此版本我已经调通&#xff0c;最新版本正在更新&#xff0c;页面未处理好&#xff0c;因此采用历史版本。 文章目录一、部门经理流转1. 登录dep…

linux按日期备份mysql,在Linux、Windows上如何按日期逻辑备份数据库

在逻辑备份数据库时&#xff0c;用户可能会希望在dmp文件中加入日期变量&#xff0c;以区分不同日期的备份文件&#xff0c;并且可以防止意外的覆盖。参考了eagle在逻辑备份数据库时&#xff0c;用户可能会希望在dmp文件中加入日期变量&#xff0c;以区分不同日期的备份文件&am…

一张图看懂阿里企业级分布式应用服务EDAS

摘要&#xff1a; 近日&#xff0c;阿里中间件&#xff08;Aliware&#xff09;的企业级分布式应用服务EDAS宣布再次升级&#xff0c;全面支持Spring Cloud应用。今后&#xff0c;使用Spring Cloud开源框架的应用可以实现0代码修改&#xff0c;即能在EDAS上平滑运行。目的是帮助…

SpringBoot集成Flowable_Jsite办理任务菜单报403

JSite 快速开发框架&#xff0c;内置Flowable工作流引擎 五大基础模块 前后端基础代码自动生成 权限精确控制。 说明&#xff1a;此版本我已经调通&#xff0c;最新版本正在更新&#xff0c;页面未处理好&#xff0c;因此采用历史版本。 文章目录一、克隆/打开项目1.1. 搜索…

漫画:有趣的“帽子问题”

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 小灰来源 | 程序员小灰————— 第二天 —————主持人让三名参与者各自戴上眼罩&#xff08;看不见外界&#xff09;&#xff0c;然后随机给每个参与者戴上一顶帽子。比如下面这样&#xff1a;然后&#xff0c;主持人…

【程序员归家计划】放假回家之前拜服务器?不存在的,这才是保证程序员过好年的正确打开方式

摘要&#xff1a; 在即将到来的214情人节和举国同庆的农历春节期间&#xff0c;运维同学们应该如何才能不被公司召回&#xff0c;如何才能保证系统的正常运转&#xff1f;本文就为大家整理了自动化运维、架构升级以及安全保障的相关干货合集&#xff0c;希望能够帮助各位运维同…

秘籍分享:如何将负载均衡按量付费实例转换为包年包月实例

摘要&#xff1a; hi&#xff0c;大家好&#xff0c;今天我来教大家如何将负载均衡从按量计费实例转换成预付费&#xff08;即包年包月&#xff09;实例。 点此查看原文&#xff1a;http://click.aliyun.com/m/42583/ hi&#xff0c;大家好&#xff0c;今天我来教大家如何将负…

Flowable快速工作流脚手架_Jsite角色授权不显示

JSite 快速开发框架&#xff0c;内置Flowable工作流引擎 五大基础模块 前后端基础代码自动生成 权限精确控制。 说明&#xff1a;此版本我已经调通&#xff0c;最新版本正在更新&#xff0c;页面未处理好&#xff0c;因此采用历史版本。 文章目录一、克隆/打开项目1.1. 搜索…

中国撸串指北:13万家烧烤店的吃货最爱

戳蓝字“CSDN云计算”关注我们哦&#xff01;数据分析&#xff1a;还是更爱火锅的朱小五内容撰写&#xff1a;最爱干豆腐卷的王小九来源|凹凸数读对美食最大的肯定无疑就是那操着不同口音说出的“好吃&#xff01;”二字。——《人生一串》豆瓣短评以美食慰藉夜归人&#xff0c…

新功能:阿里云负载均衡支持访问日志功能(可能是这个星球上最好用的访问日志)...

摘要&#xff1a; 1. Greetings :) 2. 什么是负载均衡访问日志 3. 负载均衡访问日志有什么作用 4. 如何使用负载均衡访问日志功能 4.1. 开通访问日志 4.2. 查询访问日志 点此查看原文&#xff1a;http://click.aliyun.com/m/42584/ 负载均衡访问日志&#xff08;7层&#xff09…

绿联串口线linux驱动下载,绿联usb转db9驱动下载

绿联usb转db9串口线驱动是一款应用十分广泛的usb转串口驱动程序&#xff0c;本站提供的资源适用于ftdi芯片&#xff0c;具有体积小、易操作的特点&#xff0c;安装过程并不复杂&#xff0c;帮助你快速进行串口线的转换工作&#xff01;驱动介绍绿联的usb转串口线有两种&#xf…

阿里给所有卖家发福利:全球首个人工智能中文字库免费用

摘要&#xff1a; 你打开手机淘宝&#xff0c;精美的海报让你目不转睛&#xff0c;你下了单&#xff0c;从快递员手中接过商品&#xff0c;心满意足的那一刻&#xff0c;你不会想到自己在掏钱买下商品的同时也为海报买了单&#xff0c;从模特、摄影到设计师的后期处理&#xff…

第2篇:Flowable快速工作流脚手架Jsite_配置项目

接上一篇&#xff1a;第1篇&#xff1a;Flowable快速工作流脚手架Jsite_克隆项目 https://blog.csdn.net/weixin_40816738/article/details/103387442 说明&#xff1a;此版本我已经调通&#xff0c;最新版本正在更新&#xff0c;页面未处理好&#xff0c;因此采用历史版本。 文…

如何高效地准备技术面试?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | Windson Yan来源 | www.enginego.org刚开始参加工作的时候&#xff0c;我对面试总是很恐惧&#xff0c;既担心简历无法通过初筛&#xff0c;也担心即使简历通过筛选&#xff0c;因为面试经验不多以及基础知识不扎实而导致发挥…